Still a work in progress, closer - warvox - Unnamed repository; edit this file … | |
Log | |
Files | |
Refs | |
README | |
--- | |
commit 384b73e9317c52d227b226504ddc07016da7fa65 | |
parent 11e8b26bad69969870b96fa4f730a2873bff1e43 | |
Author: HD Moore <[email protected]> | |
Date: Wed, 10 Oct 2012 01:29:49 -0500 | |
Still a work in progress, closer | |
Diffstat: | |
M web/Gemfile | 34 ++++++++---------------------… | |
M web/Gemfile.lock | 28 ++++++++++++++++++++++++++++ | |
R web/public/images/balloon.png -> w… | 0 | |
R web/public/images/bluefade.jpg -> … | 0 | |
R web/public/images/close.gif -> web… | 0 | |
R web/public/images/left-round.png -… | 0 | |
R web/public/images/loading.gif -> w… | 0 | |
R web/public/images/logo.png -> web/… | 0 | |
R web/public/images/logo_raw.xcf -> … | 0 | |
R web/public/images/musicplayer.swf … | 0 | |
R web/public/images/rails.png -> web… | 0 | |
R web/public/images/right-round.png … | 0 | |
R web/public/images/round_bot.png ->… | 0 | |
R web/public/images/round_top.png ->… | 0 | |
R web/public/javascripts/FusionChart… | 0 | |
R web/public/javascripts/application… | 0 | |
R web/public/javascripts/controls.js… | 0 | |
R web/public/javascripts/custom.js -… | 0 | |
R web/public/javascripts/dragdrop.js… | 0 | |
R web/public/javascripts/effects.js … | 0 | |
A web/app/assets/javascripts/lightbo… | 426 +++++++++++++++++++++++++++… | |
R web/public/javascripts/prototype.j… | 0 | |
R web/public/javascripts/rails.js ->… | 0 | |
A web/app/assets/stylesheets/global.… | 556 +++++++++++++++++++++++++++… | |
R web/public/stylesheets/ie7.css -> … | 0 | |
R web/public/stylesheets/lightbox.cs… | 0 | |
R web/public/stylesheets/overlay.png… | 0 | |
R web/public/stylesheets/scaffold.cs… | 0 | |
M web/app/views/analyze/view.html.erb | 4 ++-- | |
M web/app/views/analyze/view_matches… | 8 ++++---- | |
M web/app/views/layouts/warvox.html.… | 10 ++++------ | |
M web/app/views/shared/_header.html.… | 2 +- | |
M web/config/application.rb | 38 ++++++++++++++++++++++++-----… | |
M web/config/boot.rb | 13 +++---------- | |
M web/config/database.yml | 11 +++++++++++ | |
M web/config/environments/developmen… | 21 ++++++++++++++++----- | |
M web/config/environments/production… | 49 +++++++++++++++++++++------… | |
M web/config/initializers/inflection… | 5 +++++ | |
M web/config/initializers/secret_tok… | 6 ------ | |
M web/config/initializers/session_st… | 6 +++--- | |
A web/config/initializers/wrap_param… | 14 ++++++++++++++ | |
M web/db/schema.rb | 24 +++++++----------------- | |
D web/public/javascripts/lightbox.js | 426 -----------------------------… | |
D web/public/stylesheets/global.css | 556 ------------------------------ | |
44 files changed, 1152 insertions(+), 1085 deletions(-) | |
--- | |
diff --git a/web/Gemfile b/web/Gemfile | |
@@ -1,33 +1,17 @@ | |
source 'http://rubygems.org' | |
gem 'rails', '3.2.8' | |
- | |
-# Bundle edge Rails instead: | |
-# gem 'rails', :git => 'git://github.com/rails/rails.git' | |
- | |
gem 'pg', '0.11' | |
-# Use unicorn as the web server | |
-# gem 'unicorn' | |
- | |
-# Deploy with Capistrano | |
-# gem 'capistrano' | |
- | |
-# To use debugger | |
-# gem 'ruby-debug' | |
- | |
-# Bundle the extra gems: | |
-# gem 'bj' | |
-# gem 'nokogiri' | |
-# gem 'sqlite3-ruby', :require => 'sqlite3' | |
-# gem 'aws-s3', :require => 'aws/s3' | |
- | |
-# Bundle gems for the local environment. Make sure to | |
-# put test-only gems in this group so their generators | |
-# and rake tasks are available in development mode: | |
-# group :development, :test do | |
-# gem 'webrat' | |
-# end | |
+# Gems used only for assets and not required | |
+# in production environments by default. | |
+group :assets do | |
+ gem 'sass-rails', '~> 3.2.3' | |
+ gem 'coffee-rails', '~> 3.2.1' | |
+ gem 'therubyracer', :platforms => :ruby | |
+ gem 'uglifier', '>= 1.0.3' | |
+end | |
+gem 'jquery-rails' | |
gem 'will_paginate', '~> 3.0' | |
gem 'dynamic_form' | |
diff --git a/web/Gemfile.lock b/web/Gemfile.lock | |
@@ -30,12 +30,25 @@ GEM | |
multi_json (~> 1.0) | |
arel (3.0.2) | |
builder (3.0.3) | |
+ coffee-rails (3.2.2) | |
+ coffee-script (>= 2.2.0) | |
+ railties (~> 3.2.0) | |
+ coffee-script (2.2.0) | |
+ coffee-script-source | |
+ execjs | |
+ coffee-script-source (1.3.3) | |
dynamic_form (1.1.4) | |
erubis (2.7.0) | |
+ execjs (1.4.0) | |
+ multi_json (~> 1.0) | |
hike (1.2.1) | |
i18n (0.6.1) | |
journey (1.0.4) | |
+ jquery-rails (2.1.3) | |
+ railties (>= 3.1.0, < 5.0) | |
+ thor (~> 0.14) | |
json (1.7.5) | |
+ libv8 (3.3.10.4) | |
mail (2.4.4) | |
i18n (>= 0.4.0) | |
mime-types (~> 1.16) | |
@@ -69,23 +82,38 @@ GEM | |
rake (0.9.2.2) | |
rdoc (3.12) | |
json (~> 1.4) | |
+ sass (3.2.1) | |
+ sass-rails (3.2.5) | |
+ railties (~> 3.2.0) | |
+ sass (>= 3.1.10) | |
+ tilt (~> 1.3) | |
sprockets (2.1.3) | |
hike (~> 1.2) | |
rack (~> 1.0) | |
tilt (~> 1.1, != 1.3.0) | |
+ therubyracer (0.10.1) | |
+ libv8 (~> 3.3.10) | |
thor (0.16.0) | |
tilt (1.3.3) | |
treetop (1.4.11) | |
polyglot | |
polyglot (>= 0.3.1) | |
tzinfo (0.3.33) | |
+ uglifier (1.3.0) | |
+ execjs (>= 0.3.0) | |
+ multi_json (~> 1.0, >= 1.0.2) | |
will_paginate (3.0.3) | |
PLATFORMS | |
ruby | |
DEPENDENCIES | |
+ coffee-rails (~> 3.2.1) | |
dynamic_form | |
+ jquery-rails | |
pg (= 0.11) | |
rails (= 3.2.8) | |
+ sass-rails (~> 3.2.3) | |
+ therubyracer | |
+ uglifier (>= 1.0.3) | |
will_paginate (~> 3.0) | |
diff --git a/web/public/images/balloon.png b/web/app/assets/images/balloon.png | |
Binary files differ. | |
diff --git a/web/public/images/bluefade.jpg b/web/app/assets/images/bluefade.jpg | |
Binary files differ. | |
diff --git a/web/public/images/close.gif b/web/app/assets/images/close.gif | |
Binary files differ. | |
diff --git a/web/public/images/left-round.png b/web/app/assets/images/left-roun… | |
Binary files differ. | |
diff --git a/web/public/images/loading.gif b/web/app/assets/images/loading.gif | |
Binary files differ. | |
diff --git a/web/public/images/logo.png b/web/app/assets/images/logo.png | |
Binary files differ. | |
diff --git a/web/public/images/logo_raw.xcf b/web/app/assets/images/logo_raw.xcf | |
Binary files differ. | |
diff --git a/web/public/images/musicplayer.swf b/web/app/assets/images/musicpla… | |
Binary files differ. | |
diff --git a/web/public/images/rails.png b/web/app/assets/images/rails.png | |
Binary files differ. | |
diff --git a/web/public/images/right-round.png b/web/app/assets/images/right-ro… | |
Binary files differ. | |
diff --git a/web/public/images/round_bot.png b/web/app/assets/images/round_bot.… | |
Binary files differ. | |
diff --git a/web/public/images/round_top.png b/web/app/assets/images/round_top.… | |
Binary files differ. | |
diff --git a/web/public/javascripts/FusionCharts.js b/web/app/assets/javascript… | |
diff --git a/web/public/javascripts/application.js b/web/app/assets/javascripts… | |
diff --git a/web/public/javascripts/controls.js b/web/app/assets/javascripts/co… | |
diff --git a/web/public/javascripts/custom.js b/web/app/assets/javascripts/cust… | |
diff --git a/web/public/javascripts/dragdrop.js b/web/app/assets/javascripts/dr… | |
diff --git a/web/public/javascripts/effects.js b/web/app/assets/javascripts/eff… | |
diff --git a/web/app/assets/javascripts/lightbox.js b/web/app/assets/javascript… | |
@@ -0,0 +1,426 @@ | |
+/* | |
+ Lightbox JS: Fullsize Image Overlays | |
+ by Lokesh Dhakar - http://www.huddletogether.com | |
+ | |
+ For more information on this script, visit: | |
+ http://huddletogether.com/projects/lightbox/ | |
+ | |
+ Script featured on Dynamic Drive code library Jan 24th, 06': | |
+ http://www.dynamicdrive.com | |
+ | |
+ Licensed under the Creative Commons Attribution 2.5 License - http://c… | |
+ (basically, do anything you want, just leave my name and link) | |
+ | |
+ Table of Contents | |
+ ----------------- | |
+ Configuration | |
+ | |
+ Functions | |
+ - getPageScroll() | |
+ - getPageSize() | |
+ - pause() | |
+ - getKey() | |
+ - listenKey() | |
+ - showLightbox() | |
+ - hideLightbox() | |
+ - initLightbox() | |
+ - addLoadEvent() | |
+ | |
+ Function Calls | |
+ - addLoadEvent(initLightbox) | |
+ | |
+*/ | |
+ | |
+ | |
+ | |
+// | |
+// Configuration | |
+// | |
+ | |
+// If you would like to use a custom loading image or close button reference t… | |
+var loadingImage = '/assets/loading.gif'; | |
+var closeButton = '/assets/close.gif'; | |
+ | |
+ | |
+ | |
+ | |
+ | |
+// | |
+// getPageScroll() | |
+// Returns array with x,y page scroll values. | |
+// Core code from - quirksmode.org | |
+// | |
+function getPageScroll(){ | |
+ | |
+ var yScroll; | |
+ | |
+ if (self.pageYOffset) { | |
+ yScroll = self.pageYOffset; | |
+ } else if (document.documentElement && document.documentElement.scroll… | |
+ yScroll = document.documentElement.scrollTop; | |
+ } else if (document.body) {// all other Explorers | |
+ yScroll = document.body.scrollTop; | |
+ } | |
+ | |
+ arrayPageScroll = new Array('',yScroll) | |
+ return arrayPageScroll; | |
+} | |
+ | |
+ | |
+ | |
+// | |
+// getPageSize() | |
+// Returns array with page width, height and window width, height | |
+// Core code from - quirksmode.org | |
+// Edit for Firefox by pHaez | |
+// | |
+function getPageSize(){ | |
+ | |
+ var xScroll, yScroll; | |
+ | |
+ if (window.innerHeight && window.scrollMaxY) { | |
+ xScroll = document.body.scrollWidth; | |
+ yScroll = window.innerHeight + window.scrollMaxY; | |
+ } else if (document.body.scrollHeight > document.body.offsetHeight){ /… | |
+ xScroll = document.body.scrollWidth; | |
+ yScroll = document.body.scrollHeight; | |
+ } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozil… | |
+ xScroll = document.body.offsetWidth; | |
+ yScroll = document.body.offsetHeight; | |
+ } | |
+ | |
+ var windowWidth, windowHeight; | |
+ if (self.innerHeight) { // all except Explorer | |
+ windowWidth = self.innerWidth; | |
+ windowHeight = self.innerHeight; | |
+ } else if (document.documentElement && document.documentElement.client… | |
+ windowWidth = document.documentElement.clientWidth; | |
+ windowHeight = document.documentElement.clientHeight; | |
+ } else if (document.body) { // other Explorers | |
+ windowWidth = document.body.clientWidth; | |
+ windowHeight = document.body.clientHeight; | |
+ } | |
+ | |
+ // for small pages with total height less then height of the viewport | |
+ if(yScroll < windowHeight){ | |
+ pageHeight = windowHeight; | |
+ } else { | |
+ pageHeight = yScroll; | |
+ } | |
+ | |
+ // for small pages with total width less then width of the viewport | |
+ if(xScroll < windowWidth){ | |
+ pageWidth = windowWidth; | |
+ } else { | |
+ pageWidth = xScroll; | |
+ } | |
+ | |
+ | |
+ arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeigh… | |
+ return arrayPageSize; | |
+} | |
+ | |
+ | |
+// | |
+// pause(numberMillis) | |
+// Pauses code execution for specified time. Uses busy code, not good. | |
+// Code from http://www.faqts.com/knowledge_base/view.phtml/aid/1602 | |
+// | |
+function pause(numberMillis) { | |
+ var now = new Date(); | |
+ var exitTime = now.getTime() + numberMillis; | |
+ while (true) { | |
+ now = new Date(); | |
+ if (now.getTime() > exitTime) | |
+ return; | |
+ } | |
+} | |
+ | |
+// | |
+// getKey(key) | |
+// Gets keycode. If 'x' is pressed then it hides the lightbox. | |
+// | |
+ | |
+function getKey(e){ | |
+ if (e == null) { // ie | |
+ keycode = event.keyCode; | |
+ } else { // mozilla | |
+ keycode = e.which; | |
+ } | |
+ key = String.fromCharCode(keycode).toLowerCase(); | |
+ | |
+ if(key == 'x'){ hideLightbox(); } | |
+} | |
+ | |
+ | |
+// | |
+// listenKey() | |
+// | |
+function listenKey () { document.onkeypress = getKey; } | |
+ | |
+ | |
+// | |
+// showLightbox() | |
+// Preloads images. Pleaces new image in lightbox then centers and displays. | |
+// | |
+function showLightbox(objLink) | |
+{ | |
+ // prep objects | |
+ var objOverlay = document.getElementById('overlay'); | |
+ var objLightbox = document.getElementById('lightbox'); | |
+ var objCaption = document.getElementById('lightboxCaption'); | |
+ var objImage = document.getElementById('lightboxImage'); | |
+ var objLoadingImage = document.getElementById('loadingImage'); | |
+ var objLightboxDetails = document.getElementById('lightboxDetails'); | |
+ | |
+ | |
+ var arrayPageSize = getPageSize(); | |
+ var arrayPageScroll = getPageScroll(); | |
+ | |
+ // center loadingImage if it exists | |
+ if (objLoadingImage) { | |
+ objLoadingImage.style.top = (arrayPageScroll[1] + ((arrayPageS… | |
+ objLoadingImage.style.left = (((arrayPageSize[0] - 20 - objLoa… | |
+ objLoadingImage.style.display = 'block'; | |
+ } | |
+ | |
+ // set height of Overlay to take up whole page and show | |
+ objOverlay.style.height = (arrayPageSize[1] + 'px'); | |
+ objOverlay.style.display = 'block'; | |
+ | |
+ // preload image | |
+ imgPreload = new Image(); | |
+ | |
+ imgPreload.onload=function(){ | |
+ objImage.src = objLink.href; | |
+ | |
+ // center lightbox and make sure that the top and left values … | |
+ // and the image placed outside the viewport | |
+ var lightboxTop = arrayPageScroll[1] + ((arrayPageSize[3] - 35… | |
+ var lightboxLeft = ((arrayPageSize[0] - 20 - imgPreload.width)… | |
+ | |
+ objLightbox.style.top = (lightboxTop < 0) ? "0px" : lightboxTo… | |
+ objLightbox.style.left = (lightboxLeft < 0) ? "0px" : lightbox… | |
+ | |
+ | |
+ objLightboxDetails.style.width = imgPreload.width + 'px'; | |
+ | |
+ if(objLink.getAttribute('title')){ | |
+ objCaption.style.display = 'block'; | |
+ //objCaption.style.width = imgPreload.width + 'px'; | |
+ objCaption.innerHTML = objLink.getAttribute('title'); | |
+ } else { | |
+ objCaption.style.display = 'none'; | |
+ } | |
+ | |
+ // A small pause between the image loading and displaying is r… | |
+ // this prevents the previous image displaying for a short bur… | |
+ if (navigator.appVersion.indexOf("MSIE")!=-1){ | |
+ pause(250); | |
+ } | |
+ | |
+ if (objLoadingImage) { objLoadingImage.style.display = … | |
+ objLightbox.style.display = 'block'; | |
+ | |
+ // After image is loaded, update the overlay height as the new… | |
+ // increased the overall page height. | |
+ arrayPageSize = getPageSize(); | |
+ objOverlay.style.height = (arrayPageSize[1] + 'px'); | |
+ | |
+ // Check for 'x' keypress | |
+ listenKey(); | |
+ | |
+ return false; | |
+ } | |
+ | |
+ imgPreload.src = objLink.href; | |
+ | |
+} | |
+ | |
+ | |
+ | |
+ | |
+ | |
+// | |
+// hideLightbox() | |
+// | |
+function hideLightbox() | |
+{ | |
+ // get objects | |
+ objOverlay = document.getElementById('overlay'); | |
+ objLightbox = document.getElementById('lightbox'); | |
+ | |
+ // hide lightbox and overlay | |
+ objOverlay.style.display = 'none'; | |
+ objLightbox.style.display = 'none'; | |
+ | |
+ // disable keypress listener | |
+ document.onkeypress = ''; | |
+} | |
+ | |
+ | |
+ | |
+ | |
+// | |
+// initLightbox() | |
+// Function runs on window load, going through link tags looking for rel="ligh… | |
+// These links receive onclick events that enable the lightbox display for the… | |
+// The function also inserts html markup at the top of the page which will be … | |
+// container for the overlay pattern and the inline image. | |
+// | |
+function initLightbox() | |
+{ | |
+ | |
+ if (!document.getElementsByTagName){ return; } | |
+ var anchors = document.getElementsByTagName("a"); | |
+ | |
+ // loop through all anchor tags | |
+ for (var i=0; i<anchors.length; i++){ | |
+ var anchor = anchors[i]; | |
+ | |
+ if (anchor.getAttribute("href") && (anchor.getAttribute("rel")… | |
+ anchor.onclick = function () {showLightbox(this); retu… | |
+ } | |
+ } | |
+ | |
+ // the rest of this code inserts html at the top of the page that look… | |
+ // | |
+ // <div id="overlay"> | |
+ // <a href="#" onclick="hideLightbox(); return false;">… | |
+ // </div> | |
+ // <div id="lightbox"> | |
+ // <a href="#" onclick="hideLightbox(); return false;" … | |
+ // <img id="closeButton" /> | |
+ // <img id="lightboxImage" /> | |
+ // </a> | |
+ // <div id="lightboxDetails"> | |
+ // <div id="lightboxCaption"></div> | |
+ // <div id="keyboardMsg"></div> | |
+ // </div> | |
+ // </div> | |
+ | |
+ var objBody = document.getElementsByTagName("body").item(0); | |
+ | |
+ // create overlay div and hardcode some functional styles (aesthetic s… | |
+ var objOverlay = document.createElement("div"); | |
+ objOverlay.setAttribute('id','overlay'); | |
+ objOverlay.onclick = function () {hideLightbox(); return false;} | |
+ objOverlay.style.display = 'none'; | |
+ objOverlay.style.position = 'absolute'; | |
+ objOverlay.style.top = '0'; | |
+ objOverlay.style.left = '0'; | |
+ objOverlay.style.zIndex = '90'; | |
+ objOverlay.style.width = '100%'; | |
+ objBody.insertBefore(objOverlay, objBody.firstChild); | |
+ | |
+ var arrayPageSize = getPageSize(); | |
+ var arrayPageScroll = getPageScroll(); | |
+ | |
+ // preload and create loader image | |
+ var imgPreloader = new Image(); | |
+ | |
+ // if loader image found, create link to hide lightbox and create load… | |
+ imgPreloader.onload=function(){ | |
+ | |
+ var objLoadingImageLink = document.createElement("a"); | |
+ objLoadingImageLink.setAttribute('href','#'); | |
+ objLoadingImageLink.onclick = function () {hideLightbox(); ret… | |
+ objOverlay.appendChild(objLoadingImageLink); | |
+ | |
+ var objLoadingImage = document.createElement("img"); | |
+ objLoadingImage.src = loadingImage; | |
+ objLoadingImage.setAttribute('id','loadingImage'); | |
+ objLoadingImage.style.position = 'absolute'; | |
+ objLoadingImage.style.zIndex = '150'; | |
+ objLoadingImageLink.appendChild(objLoadingImage); | |
+ | |
+ imgPreloader.onload=function(){}; // clear onLoa… | |
+ | |
+ return false; | |
+ } | |
+ | |
+ imgPreloader.src = loadingImage; | |
+ | |
+ // create lightbox div, same note about styles as above | |
+ var objLightbox = document.createElement("div"); | |
+ objLightbox.setAttribute('id','lightbox'); | |
+ objLightbox.style.display = 'none'; | |
+ objLightbox.style.position = 'absolute'; | |
+ objLightbox.style.zIndex = '100'; | |
+ objBody.insertBefore(objLightbox, objOverlay.nextSibling); | |
+ | |
+ // create link | |
+ var objLink = document.createElement("a"); | |
+ objLink.setAttribute('href','#'); | |
+ objLink.setAttribute('title','Click to close'); | |
+ objLink.onclick = function () {hideLightbox(); return false;} | |
+ objLightbox.appendChild(objLink); | |
+ | |
+ // preload and create close button image | |
+ var imgPreloadCloseButton = new Image(); | |
+ | |
+ // if close button image found, | |
+ imgPreloadCloseButton.onload=function(){ | |
+ | |
+ var objCloseButton = document.createElement("img"); | |
+ objCloseButton.src = closeButton; | |
+ objCloseButton.setAttribute('id','closeButton'); | |
+ objCloseButton.style.position = 'absolute'; | |
+ objCloseButton.style.zIndex = '200'; | |
+ objLink.appendChild(objCloseButton); | |
+ | |
+ return false; | |
+ } | |
+ | |
+ imgPreloadCloseButton.src = closeButton; | |
+ | |
+ // create image | |
+ var objImage = document.createElement("img"); | |
+ objImage.setAttribute('id','lightboxImage'); | |
+ objLink.appendChild(objImage); | |
+ | |
+ // create details div, a container for the caption and keyboard message | |
+ var objLightboxDetails = document.createElement("div"); | |
+ objLightboxDetails.setAttribute('id','lightboxDetails'); | |
+ objLightbox.appendChild(objLightboxDetails); | |
+ | |
+ // create caption | |
+ var objCaption = document.createElement("div"); | |
+ objCaption.setAttribute('id','lightboxCaption'); | |
+ objCaption.style.display = 'none'; | |
+ objLightboxDetails.appendChild(objCaption); | |
+ | |
+ // create keyboard message | |
+ var objKeyboardMsg = document.createElement("div"); | |
+ objKeyboardMsg.setAttribute('id','keyboardMsg'); | |
+ objKeyboardMsg.innerHTML = 'press <kbd>x</kbd> to close'; | |
+ objLightboxDetails.appendChild(objKeyboardMsg); | |
+ | |
+ | |
+} | |
+ | |
+ | |
+ | |
+ | |
+// | |
+// addLoadEvent() | |
+// Adds event to window.onload without overwriting currently assigned onload f… | |
+// Function found at Simon Willison's weblog - http://simon.incutio.com/ | |
+// | |
+function addLoadEvent(func) | |
+{ | |
+ var oldonload = window.onload; | |
+ if (typeof window.onload != 'function'){ | |
+ window.onload = func; | |
+ } else { | |
+ window.onload = function(){ | |
+ oldonload(); | |
+ func(); | |
+ } | |
+ } | |
+ | |
+} | |
+ | |
+ | |
+ | |
+addLoadEvent(initLightbox); // run initLightbox onLoad | |
diff --git a/web/public/javascripts/prototype.js b/web/app/assets/javascripts/p… | |
diff --git a/web/public/javascripts/rails.js b/web/app/assets/javascripts/rails… | |
diff --git a/web/app/assets/stylesheets/global.css.erb b/web/app/assets/stylesh… | |
@@ -0,0 +1,556 @@ | |
+/* global element overrides */ | |
+ | |
+body { | |
+ height: 100%; | |
+ background: #fff; | |
+ margin: 0; | |
+ padding: 0; | |
+ font-family: Tahoma, sans-serif; | |
+ font-size: 12px; | |
+ color: #555; | |
+} | |
+ | |
+img { | |
+ border: none; | |
+} | |
+ | |
+table { | |
+ border: none; | |
+ padding: 0; | |
+ margin: 0; | |
+} | |
+ | |
+a:link, a:visited { | |
+ color: #003366; | |
+ text-decoration: none; | |
+} | |
+ | |
+a:hover, a:active { | |
+ color: #cc0033; | |
+ text-decoration: underline; | |
+} | |
+ | |
+h1 { | |
+ color: #333; | |
+ margin-top: 0; | |
+ padding-top: 0; | |
+ font-weight: normal; | |
+ font-size: 36px; | |
+} | |
+ | |
+h2 { | |
+ font-size: 1.4em; | |
+ margin-bottom: 4px; | |
+} | |
+ | |
+h3 { | |
+ font-size: 1.05em; | |
+ font-weight: normal; | |
+ font-style: italic; | |
+} | |
+ | |
+/* unique elements */ | |
+ | |
+#content { | |
+ padding: 0; | |
+ margin: 0 auto; | |
+ width: 800px; | |
+ line-height: 1.5; | |
+} | |
+ | |
+#main { | |
+ border: 0; | |
+ padding: 0; | |
+ background-color: white; | |
+ padding-top: 6px; | |
+ padding-left: 18px; | |
+ padding-right: 20px; | |
+ margin-top: -3px; | |
+ margin-bottom: -3px; | |
+} | |
+ | |
+#main img { | |
+ max-width: 530px; | |
+} | |
+ | |
+#footer { | |
+ | |
+ margin: 0; | |
+ text-align: center; | |
+} | |
+ | |
+#quote { | |
+ font-size: 12px; | |
+ padding: 10px; | |
+ margin: 0 auto; | |
+ width: 70%; | |
+ background: #dddddd; | |
+ margin-bottom: 10px; | |
+} | |
+ | |
+#copyright { | |
+ padding: 10px; | |
+ text-align: center; | |
+ font-size: 10px; | |
+ color: #cccccc; | |
+} | |
+ | |
+#header { | |
+ width: 800px; | |
+ margin: 0 auto 10px; | |
+ color: white; | |
+ | |
+} | |
+ | |
+#logo { | |
+ float: left; | |
+ margin-top: 0px; | |
+} | |
+ | |
+ | |
+ | |
+#warvox_stats { | |
+ margin-top: 5px; | |
+ border: 1px solid black; | |
+ font-size: 12px; | |
+ color: #555; | |
+} | |
+ | |
+#warvox_stats td { | |
+ margin-left: 20px; | |
+ padding: 0 10px 0px 6px; | |
+} | |
+ | |
+ | |
+#warvox_conf { | |
+ margin-top: 5px; | |
+ border: 1px solid black; | |
+ font-size: 12px; | |
+ color: #555; | |
+} | |
+ | |
+#warvox_conf td { | |
+ margin-left: 20px; | |
+ padding: 0 10px 0px 6px; | |
+} | |
+ | |
+#warvox_blacklist { | |
+ margin-top: 5px; | |
+ border: 1px solid black; | |
+ font-size: 12px; | |
+ color: #555; | |
+} | |
+ | |
+#warvox_blacklist td { | |
+ margin-left: 20px; | |
+ padding: 0 10px 0px 6px; | |
+} | |
+ | |
+#home_logo { | |
+ border: 0; | |
+} | |
+ | |
+#home_links { | |
+ | |
+} | |
+ | |
+#home_intro, #home_intro td { | |
+ border: 0; | |
+} | |
+ | |
+#home_table { | |
+ border: 0; | |
+ margin-top: 0px; | |
+} | |
+ | |
+#home_table td { | |
+ border: 0; | |
+} | |
+ | |
+#home_text { | |
+ padding-left: 20px; | |
+} | |
+ | |
+#navwrap { | |
+ margin-top: 10px; | |
+ padding-top: 10px; | |
+ text-align: center; | |
+} | |
+ | |
+#nav { | |
+ margin: 0 0 0 0 auto; | |
+ padding: 10px; | |
+} | |
+ | |
+#sections_container { | |
+ font-size: 14px; | |
+} | |
+ | |
+#sections_ul { | |
+ margin: 0; | |
+ padding: 0; | |
+ white-space: nowrap; | |
+} | |
+ | |
+#sections_ul li { | |
+ display: inline; | |
+ list-style-type: none; | |
+} | |
+ | |
+#sections_container a { | |
+ padding: 5px 10px 5px 10px; | |
+ line-height: 28px; | |
+} | |
+ | |
+#sections_container a:link, #sections_container a:visited { | |
+ color: #fff; | |
+ background: black repeat-x top; | |
+ text-decoration: none; | |
+ font-variant: small-caps; | |
+} | |
+ | |
+#sections_container a:hover { | |
+ color: #fff; | |
+ background: red repeat-x top; | |
+ text-decoration: none; | |
+ font-variant: small-caps; | |
+} | |
+ | |
+#sections_active { | |
+ font-weight: bold; | |
+} | |
+ | |
+#subsections_active { | |
+ font-weight: bold; | |
+} | |
+ | |
+#subsections_container { | |
+ font-size: 12px; | |
+ padding-top: 5px; | |
+} | |
+ | |
+#subsections_ul { | |
+ margin: 0; | |
+ padding: 0; | |
+ white-space: nowrap; | |
+} | |
+ | |
+#subsections_ul li { | |
+ display: inline; | |
+ list-style-type: none; | |
+} | |
+ | |
+#subsections_container a { | |
+ padding: 5px 10px 5px 10px; | |
+ line-height: 20px; | |
+} | |
+ | |
+#subsections_container a:link, #subsections_container a:visited { | |
+ color: #fff; | |
+ background: #333333 repeat-x top; | |
+ text-decoration: none; | |
+ font-variant: small-caps; | |
+} | |
+ | |
+#subsections_container a:hover { | |
+ color: #fff; | |
+ background: #440000 repeat-x top; | |
+ text-decoration: none; | |
+ font-variant: small-caps; | |
+} | |
+ | |
+ | |
+#calls_pie1 { | |
+ text-align: center; | |
+} | |
+#calls_pie2 { | |
+ text-align: center; | |
+} | |
+#calls_pie3 { | |
+ text-align: center; | |
+} | |
+ | |
+/* non-unique elements */ | |
+ | |
+ | |
+.title { | |
+ font-size: 20px; | |
+ font-weight: bold; | |
+ color: black; | |
+ font-variant: small-caps; | |
+} | |
+ | |
+.active_job_row { | |
+ background: yellow; | |
+} | |
+ | |
+.table_scaffold { | |
+ margin-top: 5px; | |
+ border: 1px solid black; | |
+ font-size: 12px; | |
+ color: #555; | |
+} | |
+ | |
+.table_scaffold th { | |
+ font-size: 14px; | |
+ text-decoration: underline; | |
+} | |
+ | |
+.table_scaffold td { | |
+ margin-left: 20px; | |
+ padding: 0 10px 0px 6px; | |
+ border: 1px solid #cccccc; | |
+} | |
+ | |
+.header_item { | |
+ font-weight: bold; | |
+} | |
+ | |
+.date-header { | |
+ background: url('<%= asset_path 'bluefade.jpg' %>') #222222 repeat-x t… | |
+ color: white; | |
+ padding: 2px; | |
+ margin: 2px; | |
+ font-weight: bold; | |
+ padding-left: 8px; | |
+ font-variant: small-caps; | |
+ border: 0; | |
+} | |
+ | |
+.date-header-center { | |
+ background: url('<%= asset_path 'bluefade.jpg' %>') #8c0000 repeat-x t… | |
+ color: white; | |
+ padding: 2px; | |
+ margin: 2px; | |
+ font-weight: bold; | |
+ padding-left: 8px; | |
+ font-variant: small-caps; | |
+ text-align: center; | |
+ border: 0; | |
+} | |
+ | |
+ | |
+.balloon { | |
+ background: url('<%= asset_path 'balloon.jpg' %>') repeat-x top; | |
+ width: 277px; | |
+ height: 98px; | |
+ color: white; | |
+ margin: 40px auto; | |
+} | |
+ | |
+.balloon_links { | |
+ float: left; | |
+ margin-top: 10px; | |
+ margin-left: 6px; | |
+ | |
+} | |
+ | |
+.balloon_links p { | |
+ font-size: 14px; | |
+ font-weight: bold; | |
+ margin: 0; | |
+} | |
+ | |
+.balloon_links a, .balloon_links a:link, .balloon_links a:visited { | |
+ font-size: 12px; | |
+ color: white; | |
+ text-decoration: none; | |
+ margin-left: 12px; | |
+} | |
+ | |
+.balloon_links a:hover, .balloon_links a:active { | |
+ color: yellow; | |
+ text-decoration: underline; | |
+} | |
+ | |
+.balloon_icon { | |
+ float: left; | |
+ padding-top: 25px; | |
+ padding-left: 14px; | |
+} | |
+ | |
+.box_full { | |
+ position: relative; | |
+ clear: both; | |
+ width: 790px; | |
+} | |
+ | |
+#round_top { | |
+ padding: 0; | |
+ border: 0; | |
+ margin: 0; | |
+ height: 9px; | |
+ margin-bottom: -2px; | |
+ visibility: hidden; | |
+} | |
+ | |
+#round_bot { | |
+ padding: 0; | |
+ border: 0; | |
+ margin-top: -2px; | |
+ height: 15px; | |
+ visibility: hidden; | |
+} | |
+ | |
+.box_full p { | |
+ line-height: 1.5em; | |
+} | |
+ | |
+ | |
+.intro { | |
+ font-size: 14px; | |
+} | |
+ | |
+.center { | |
+ text-align: center; | |
+} | |
+ | |
+.code { | |
+ font-family: fixed, courier new; | |
+ color: black; | |
+ background: #dddddd; | |
+ padding: 0.25em 0.25em 0.25em 0.25em; | |
+} | |
+ | |
+.fatp { | |
+ margin: 2.0em 0 0.5em; | |
+} | |
+ | |
+.announce { | |
+ padding: 0px 20px 0px 20px; | |
+ line-height: 1.5; | |
+ font-size: 12px; | |
+ font-weight: bold; | |
+} | |
+ | |
+.vulnTitle { | |
+ font-weight: bold; | |
+ font-size: 10pt; | |
+ padding-bottom: 2em; | |
+} | |
+ | |
+.vulnHeader { | |
+ font-weight: bold; | |
+} | |
+ | |
+.vulnText { | |
+ padding-bottom: 1em; | |
+} | |
+ | |
+.vulnInfoTable { | |
+ background: #dddddd; | |
+ | |
+} | |
+ | |
+.vulnInfoHeader { | |
+ font-weight: bold; | |
+} | |
+ | |
+.vulnInfoData { | |
+ | |
+} | |
+ | |
+.talk_title { | |
+ font-family: verdana, sans-serif, arial, helvetica; | |
+ font-size: 9pt; | |
+ padding: 0.1em 0.5em 0.15em .5em; | |
+ font-weight: bold; | |
+} | |
+ | |
+.materials { | |
+ background: #dddddd; | |
+ padding: 10px 10px 10px 10px; | |
+ border: 1px solid black; | |
+} | |
+ | |
+ | |
+ | |
+.level1 | |
+{ | |
+ list-style: none; | |
+ text-align: left; | |
+ padding: 0em 0em 1em 0em; | |
+ font-size: 16px; | |
+ font-weight: bold; | |
+} | |
+.level1 li | |
+{ | |
+ padding: 1em .25em 0.25em 0.25em; | |
+} | |
+ | |
+.level2 | |
+{ | |
+ list-style: circle; | |
+ text-align: left; | |
+ padding: 0em 0.25em 0.25em 4em; | |
+} | |
+.level2 li | |
+{ | |
+ padding: 0.25em .25em 0.25em 0.25em; | |
+ font-size: 14px; | |
+ font-weight: bold; | |
+} | |
+ | |
+.level3 | |
+{ | |
+ list-style: square; | |
+ text-align: left; | |
+ padding: 0em 0.25em 0.25em 4em; | |
+} | |
+.level3 li | |
+{ | |
+ padding: 0.25em .25em 0.25em 0.25em; | |
+} | |
+ | |
+ | |
+ | |
+.boxTable | |
+{ | |
+ border-left-style: solid; | |
+ border-top-style: solid; | |
+ border-right-style: solid; | |
+ border-bottom-style: solid; | |
+ border-color: #dddddd; | |
+ font-family: verdana, sans-serif; | |
+ font-size: 8pt; | |
+ background-color: #dddddd; | |
+} | |
+.boxInnerTable | |
+{ | |
+ font-family: verdana, sans-serif; | |
+ font-size: 8pt; | |
+} | |
+.boxTdHeader | |
+{ | |
+ border-width: 0 0 0 0; | |
+ border-color: #dddddd; | |
+ border-left-style: solid; | |
+ border-top-style: solid; | |
+ border-right-style: solid; | |
+ border-bottom-style: solid; | |
+ background-color: #dddddd; | |
+ color: black; | |
+ height: 20px; | |
+ font-weight: bold | |
+} | |
+.boxTd | |
+{ | |
+ border-width: 0 0 0 0; | |
+ border-left-style: solid; | |
+ border-top-style: solid; | |
+ border-right-style: solid; | |
+ border-bottom-style: solid; | |
+} | |
+.boxTd1 | |
+{ | |
+ background-color: #eeeeee; | |
+} | |
+.boxTd2 | |
+{ | |
+ background-color: #eeeeee; | |
+} | |
+.boxTh | |
+{ | |
+ background-color: #dddddd; | |
+} | |
+ | |
diff --git a/web/public/stylesheets/ie7.css b/web/app/assets/stylesheets/ie7.css | |
diff --git a/web/public/stylesheets/lightbox.css b/web/app/assets/stylesheets/l… | |
diff --git a/web/public/stylesheets/overlay.png b/web/app/assets/stylesheets/ov… | |
Binary files differ. | |
diff --git a/web/public/stylesheets/scaffold.css b/web/app/assets/stylesheets/s… | |
diff --git a/web/app/views/analyze/view.html.erb b/web/app/views/analyze/view.h… | |
@@ -22,12 +22,12 @@ | |
<object | |
type="application/x-shockwave-flash" | |
- data="/images/musicplayer.swf?song_url=<%=resource_ana… | |
+ data="/assets/musicplayer.swf?song_url=<%=resource_ana… | |
width="20" | |
height="17" | |
style="margin-bottom: -5px;" | |
> | |
- <param name="movie" value="/musicplayer.swf?song_url=<… | |
+ <param name="movie" value="/assets/musicplayer.swf?son… | |
<param name="wmode" value="transparent"></param> | |
</object> | |
<b><%= dial_result.number %></b> | |
diff --git a/web/app/views/analyze/view_matches.html.erb b/web/app/views/analyz… | |
@@ -13,12 +13,12 @@ | |
<object | |
type="application/x-shockwave-flash" | |
- data="/images/musicplayer.swf?song_url=<%=resource_ana… | |
+ data="/assets/musicplayer.swf?song_url=<%=resource_ana… | |
width="20" | |
height="17" | |
style="margin-bottom: -5px;" | |
> | |
- <param name="movie" value="/musicplayer.swf?song_url=<… | |
+ <param name="movie" value="/assets/musicplayer.swf?son… | |
<param name="wmode" value="transparent"></param> | |
</object> | |
@@ -66,12 +66,12 @@ | |
<object | |
type="application/x-shockwave-flash" | |
- data="/images/musicplayer.swf?song_url=<%=resource_ana… | |
+ data="/assets/musicplayer.swf?song_url=<%=resource_ana… | |
width="20" | |
height="17" | |
style="margin-bottom: -5px;" | |
> | |
- <param name="movie" value="/musicplayer.swf?song_url=<… | |
+ <param name="movie" value="/assets/musicplayer.swf?son… | |
<param name="wmode" value="transparent"></param> | |
</object> | |
diff --git a/web/app/views/layouts/warvox.html.erb b/web/app/views/layouts/warv… | |
@@ -2,12 +2,10 @@ | |
<html> | |
<head> | |
<title><%= @title || "WarVOX" %></title> | |
- <%= stylesheet_link_tag :all %> | |
- <%= javascript_include_tag :defaults %> | |
<%= csrf_meta_tag %> | |
- <%= stylesheet_link_tag 'global', 'lightbox' %> | |
+ <%= stylesheet_link_tag 'global' %> | |
<!--[if IE 7]><%= stylesheet_link_tag 'ie7' %><![endif]--> | |
- <%= javascript_include_tag 'custom', 'prototype', 'effects', 'FusionCharts',… | |
+ <%= javascript_include_tag 'jquery' %> | |
</head> | |
<body> | |
@@ -17,7 +15,7 @@ | |
<div id="content"> | |
<div class="box_full"> | |
- <img src="/images/round_top.png" id="round_top" alt=""/> | |
+ <img src="<%= asset_path('round_top.png') %>" id="round_top" alt=""/> | |
<div id="main"> | |
<%= yield %> | |
<br/><br/> | |
@@ -27,7 +25,7 @@ | |
</div> | |
</div> | |
- <img src="/images/round_bot.png" id="round_bot" alt=""/> | |
+ <img src="<%= asset_path('round_bot.png') %>" id="round_bot" alt=""/> | |
</div> | |
</div> | |
diff --git a/web/app/views/shared/_header.html.erb b/web/app/views/shared/_head… | |
@@ -1,7 +1,7 @@ | |
<div id="header"> | |
<span width='50%'> | |
- <a href="/"><img id="logo" src="/images/logo.png" alt="WarVOX … | |
+ <a href="/"><img id="logo" src="/assets/logo.png" alt="WarVOX … | |
</span> | |
<span width='50%'> | |
diff --git a/web/config/application.rb b/web/config/application.rb | |
@@ -1,14 +1,16 @@ | |
require File.expand_path('../boot', __FILE__) | |
+require 'rails/all' | |
# Bootstrap the WarVOX code base | |
$:.unshift(File.join(File.dirname(__FILE__), '..', '..', 'lib')) | |
require 'warvox' | |
-require 'rails/all' | |
- | |
-# If you have a Gemfile, require the gems listed there, including any gems | |
-# you've limited to :test, :development, or :production. | |
-Bundler.require(:default, Rails.env) if defined?(Bundler) | |
+if defined?(Bundler) | |
+ # If you precompile assets before deploying to production, use this line | |
+ Bundler.require(*Rails.groups(:assets => %w(development test))) | |
+ # If you want your assets lazily compiled in production, use this line | |
+ # Bundler.require(:default, :assets, Rails.env) | |
+end | |
module Web | |
class Application < Rails::Application | |
@@ -34,13 +36,33 @@ module Web | |
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml… | |
# config.i18n.default_locale = :de | |
- # JavaScript files you want as :defaults (application.js is always include… | |
- # config.action_view.javascript_expansions[:defaults] = %w(jquery rails) | |
- | |
# Configure the default encoding used in templates for Ruby 1.9. | |
config.encoding = "utf-8" | |
# Configure sensitive parameters which will be filtered from the log file. | |
+ config.filter_parameters += [:password, :pass] | |
+ | |
+ # Enable escaping HTML in JSON. | |
+ config.active_support.escape_html_entities_in_json = true | |
+ | |
+ # Use SQL instead of Active Record's schema dumper when creating the datab… | |
+ # This is necessary if your schema can't be completely dumped by the schem… | |
+ # like if you have constraints or database-specific column types | |
+ # config.active_record.schema_format = :sql | |
+ | |
+ # Enforce whitelist mode for mass assignment. | |
+ # This will create an empty whitelist of attributes available for mass-ass… | |
+ # in your app. As such, your models will need to explicitly whitelist or b… | |
+ # parameters by using an attr_accessible or attr_protected declaration. | |
+ config.active_record.whitelist_attributes = true | |
+ | |
+ # Enable the asset pipeline | |
+ config.assets.enabled = true | |
+ | |
+ # Version of your assets, change this if you want to expire all your assets | |
+ config.assets.version = '1.0' | |
+ | |
+ # Configure sensitive parameters which will be filtered from the log file. | |
config.filter_parameters += [:password, :pass] | |
config.session_store :cookie_store, :key => "_warvox" | |
diff --git a/web/config/boot.rb b/web/config/boot.rb | |
@@ -1,13 +1,6 @@ | |
require 'rubygems' | |
# Set up gems listed in the Gemfile. | |
-gemfile = File.expand_path('../../Gemfile', __FILE__) | |
-begin | |
- ENV['BUNDLE_GEMFILE'] = gemfile | |
- require 'bundler' | |
- Bundler.setup | |
-rescue Bundler::GemNotFound => e | |
- STDERR.puts e.message | |
- STDERR.puts "Try running `bundle install`." | |
- exit! | |
-end if File.exist?(gemfile) | |
+ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) | |
+ | |
+require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE']) | |
diff --git a/web/config/database.yml b/web/config/database.yml | |
@@ -8,3 +8,14 @@ production: | |
pool: 100 | |
timeout: 5 | |
+development: | |
+ adapter: postgresql | |
+ database: warvox | |
+ username: warvox | |
+ password: "<yourpass>" | |
+ host: 127.0.0.1 | |
+ port: 5433 | |
+ pool: 100 | |
+ timeout: 5 | |
+ | |
+ | |
diff --git a/web/config/environments/development.rb b/web/config/environments/d… | |
@@ -1,9 +1,9 @@ | |
Web::Application.configure do | |
- # Settings specified here will take precedence over those in config/environm… | |
+ # Settings specified here will take precedence over those in config/applicat… | |
# In the development environment your application's code is reloaded on | |
- # every request. This slows down response time but is perfect for developme… | |
- # since you don't have to restart the webserver when you make code changes. | |
+ # every request. This slows down response time but is perfect for development | |
+ # since you don't have to restart the web server when you make code changes. | |
config.cache_classes = false | |
# Log error messages when you accidentally call methods on nil. | |
@@ -11,7 +11,6 @@ Web::Application.configure do | |
# Show full error reports and disable caching | |
config.consider_all_requests_local = true | |
- config.action_view.debug_rjs = true | |
config.action_controller.perform_caching = false | |
# Don't care if the mailer can't send | |
@@ -22,5 +21,17 @@ Web::Application.configure do | |
# Only use best-standards-support built into browsers | |
config.action_dispatch.best_standards_support = :builtin | |
-end | |
+ # Raise exception on mass assignment protection for Active Record models | |
+ config.active_record.mass_assignment_sanitizer = :strict | |
+ | |
+ # Log the query plan for queries taking more than this (works | |
+ # with SQLite, MySQL, and PostgreSQL) | |
+ config.active_record.auto_explain_threshold_in_seconds = 0.5 | |
+ | |
+ # Do not compress assets | |
+ config.assets.compress = false | |
+ | |
+ # Expands the lines which load the assets | |
+ config.assets.debug = true | |
+end | |
diff --git a/web/config/environments/production.rb b/web/config/environments/pr… | |
@@ -1,7 +1,6 @@ | |
Web::Application.configure do | |
- # Settings specified here will take precedence over those in config/environm… | |
+ # Settings specified here will take precedence over those in config/applicat… | |
- # The production environment is meant for finished, "live" apps. | |
# Code is not reloaded between requests | |
config.cache_classes = true | |
@@ -9,31 +8,46 @@ Web::Application.configure do | |
config.consider_all_requests_local = false | |
config.action_controller.perform_caching = true | |
- # Specifies the header that your server uses for sending files | |
- config.action_dispatch.x_sendfile_header = "X-Sendfile" | |
+ # Disable Rails's static asset server (Apache or nginx will already do this) | |
+ config.serve_static_assets = true | |
+ | |
+ # Compress JavaScripts and CSS | |
+ config.assets.compress = false | |
+ | |
+ # Don't fallback to assets pipeline if a precompiled asset is missed | |
+ config.assets.compile = true | |
- # For nginx: | |
- # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' | |
+ # Generate digests for assets URLs | |
+ config.assets.digest = true | |
+ | |
+ # Defaults to nil and saved in location specified by config.assets.prefix | |
+ # config.assets.manifest = YOUR_PATH | |
+ | |
+ # Specifies the header that your server uses for sending files | |
+ # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache | |
+ # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx | |
- # If you have no front-end server that supports something like X-Sendfile, | |
- # just comment this out and Rails will serve the files | |
+ # Force all access to the app over SSL, use Strict-Transport-Security, and u… | |
+ # config.force_ssl = true | |
# See everything in the log (default is :info) | |
- config.log_level = :error | |
+ config.log_level = :debug | |
+ | |
+ # Prepend all log lines with the following tags | |
+ # config.log_tags = [ :subdomain, :uuid ] | |
# Use a different logger for distributed setups | |
- # config.logger = SyslogLogger.new | |
+ # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) | |
# Use a different cache store in production | |
# config.cache_store = :mem_cache_store | |
- # Disable Rails's static asset server | |
- # In production, Apache or nginx will already do this | |
- config.serve_static_assets = true | |
- | |
- # Enable serving of images, stylesheets, and javascripts from an asset server | |
+ # Enable serving of images, stylesheets, and JavaScripts from an asset server | |
# config.action_controller.asset_host = "http://assets.example.com" | |
+ # Precompile additional assets (application.js, application.css, and all non… | |
+ config.assets.precompile += %w( jquery.js prototype.js effects.js FusionChar… | |
+ | |
# Disable delivery errors, bad email addresses will be ignored | |
# config.action_mailer.raise_delivery_errors = false | |
@@ -46,5 +60,8 @@ Web::Application.configure do | |
# Send deprecation notices to registered listeners | |
config.active_support.deprecation = :notify | |
-end | |
+ # Log the query plan for queries taking more than this (works | |
+ # with SQLite, MySQL, and PostgreSQL) | |
+ # config.active_record.auto_explain_threshold_in_seconds = 0.5 | |
+end | |
diff --git a/web/config/initializers/inflections.rb b/web/config/initializers/i… | |
@@ -8,3 +8,8 @@ | |
# inflect.irregular 'person', 'people' | |
# inflect.uncountable %w( fish sheep ) | |
# end | |
+# | |
+# These inflection rules are supported but not enabled by default: | |
+# ActiveSupport::Inflector.inflections do |inflect| | |
+# inflect.acronym 'RESTful' | |
+# end | |
diff --git a/web/config/initializers/secret_token.rb b/web/config/initializers/… | |
@@ -1,7 +1 @@ | |
-# Be sure to restart your server when you modify this file. | |
- | |
-# Your secret key for verifying the integrity of signed cookies. | |
-# If you change this key, all old signed cookies will become invalid! | |
-# Make sure the secret is at least 30 characters and all random, | |
-# no regular words or you'll be exposed to dictionary attacks. | |
Web::Application.config.secret_token = WarVOX::Config.load_session_key | |
diff --git a/web/config/initializers/session_store.rb b/web/config/initializers… | |
@@ -1,8 +1,8 @@ | |
# Be sure to restart your server when you modify this file. | |
-Web::Application.config.session_store :cookie_store, :key => '_web_session' | |
+Web::Application.config.session_store :cookie_store, key: '_warvox_session' | |
# Use the database for sessions instead of the cookie-based default, | |
# which shouldn't be used to store highly confidential information | |
-# (create the session table with "rake db:sessions:create") | |
-# Web::Application.config.session_store :active_record_store | |
+# (create the session table with "rails generate session_migration") | |
+# Ttt::Application.config.session_store :active_record_store | |
diff --git a/web/config/initializers/wrap_parameters.rb b/web/config/initialize… | |
@@ -0,0 +1,14 @@ | |
+# Be sure to restart your server when you modify this file. | |
+# | |
+# This file contains settings for ActionController::ParamsWrapper which | |
+# is enabled by default. | |
+ | |
+# Enable parameter wrapping for JSON. You can disable this by setting :format … | |
+ActiveSupport.on_load(:action_controller) do | |
+ wrap_parameters format: [:json] | |
+end | |
+ | |
+# Disable root element in JSON by default. | |
+ActiveSupport.on_load(:active_record) do | |
+ self.include_root_in_json = false | |
+end | |
diff --git a/web/db/schema.rb b/web/db/schema.rb | |
@@ -1,3 +1,4 @@ | |
+# encoding: UTF-8 | |
# This file is auto-generated from the current state of the database. Instead | |
# of editing this file, please use the migrations feature of Active Record to | |
# incrementally modify your database, and then regenerate this schema definiti… | |
@@ -21,8 +22,8 @@ ActiveRecord::Schema.define(:version => 20110801000003) do | |
t.datetime "started_at" | |
t.datetime "completed_at" | |
t.boolean "processed" | |
- t.datetime "created_at" | |
- t.datetime "updated_at" | |
+ t.datetime "created_at", :null => false | |
+ t.datetime "updated_at", :null => false | |
t.text "cid_mask" | |
end | |
@@ -36,8 +37,8 @@ ActiveRecord::Schema.define(:version => 20110801000003) do | |
t.integer "ringtime" | |
t.text "rawfile" | |
t.boolean "processed" | |
- t.datetime "created_at" | |
- t.datetime "updated_at" | |
+ t.datetime "created_at", :null => false | |
+ t.datetime "updated_at", :null => false | |
t.datetime "processed_at" | |
t.text "cid" | |
t.float "peak_freq" | |
@@ -65,20 +66,9 @@ ActiveRecord::Schema.define(:version => 20110801000003) do | |
t.text "user" | |
t.text "pass" | |
t.integer "lines" | |
- t.datetime "created_at" | |
- t.datetime "updated_at" | |
+ t.datetime "created_at", :null => false | |
+ t.datetime "updated_at", :null => false | |
t.boolean "enabled" | |
end | |
- create_table "signatures", :force => true do |t| | |
- t.datetime "created_at" | |
- t.datetime "updated_at" | |
- t.string "name" | |
- t.string "category" | |
- t.text "description" | |
- t.string "mode" | |
- t.string "print", :limit => nil | |
- t.text "rules" | |
- end | |
- | |
end | |
diff --git a/web/public/javascripts/lightbox.js b/web/public/javascripts/lightb… | |
@@ -1,426 +0,0 @@ | |
-/* | |
- Lightbox JS: Fullsize Image Overlays | |
- by Lokesh Dhakar - http://www.huddletogether.com | |
- | |
- For more information on this script, visit: | |
- http://huddletogether.com/projects/lightbox/ | |
- | |
- Script featured on Dynamic Drive code library Jan 24th, 06': | |
- http://www.dynamicdrive.com | |
- | |
- Licensed under the Creative Commons Attribution 2.5 License - http://c… | |
- (basically, do anything you want, just leave my name and link) | |
- | |
- Table of Contents | |
- ----------------- | |
- Configuration | |
- | |
- Functions | |
- - getPageScroll() | |
- - getPageSize() | |
- - pause() | |
- - getKey() | |
- - listenKey() | |
- - showLightbox() | |
- - hideLightbox() | |
- - initLightbox() | |
- - addLoadEvent() | |
- | |
- Function Calls | |
- - addLoadEvent(initLightbox) | |
- | |
-*/ | |
- | |
- | |
- | |
-// | |
-// Configuration | |
-// | |
- | |
-// If you would like to use a custom loading image or close button reference t… | |
-var loadingImage = '/images/loading.gif'; | |
-var closeButton = '/images/close.gif'; | |
- | |
- | |
- | |
- | |
- | |
-// | |
-// getPageScroll() | |
-// Returns array with x,y page scroll values. | |
-// Core code from - quirksmode.org | |
-// | |
-function getPageScroll(){ | |
- | |
- var yScroll; | |
- | |
- if (self.pageYOffset) { | |
- yScroll = self.pageYOffset; | |
- } else if (document.documentElement && document.documentElement.scroll… | |
- yScroll = document.documentElement.scrollTop; | |
- } else if (document.body) {// all other Explorers | |
- yScroll = document.body.scrollTop; | |
- } | |
- | |
- arrayPageScroll = new Array('',yScroll) | |
- return arrayPageScroll; | |
-} | |
- | |
- | |
- | |
-// | |
-// getPageSize() | |
-// Returns array with page width, height and window width, height | |
-// Core code from - quirksmode.org | |
-// Edit for Firefox by pHaez | |
-// | |
-function getPageSize(){ | |
- | |
- var xScroll, yScroll; | |
- | |
- if (window.innerHeight && window.scrollMaxY) { | |
- xScroll = document.body.scrollWidth; | |
- yScroll = window.innerHeight + window.scrollMaxY; | |
- } else if (document.body.scrollHeight > document.body.offsetHeight){ /… | |
- xScroll = document.body.scrollWidth; | |
- yScroll = document.body.scrollHeight; | |
- } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozil… | |
- xScroll = document.body.offsetWidth; | |
- yScroll = document.body.offsetHeight; | |
- } | |
- | |
- var windowWidth, windowHeight; | |
- if (self.innerHeight) { // all except Explorer | |
- windowWidth = self.innerWidth; | |
- windowHeight = self.innerHeight; | |
- } else if (document.documentElement && document.documentElement.client… | |
- windowWidth = document.documentElement.clientWidth; | |
- windowHeight = document.documentElement.clientHeight; | |
- } else if (document.body) { // other Explorers | |
- windowWidth = document.body.clientWidth; | |
- windowHeight = document.body.clientHeight; | |
- } | |
- | |
- // for small pages with total height less then height of the viewport | |
- if(yScroll < windowHeight){ | |
- pageHeight = windowHeight; | |
- } else { | |
- pageHeight = yScroll; | |
- } | |
- | |
- // for small pages with total width less then width of the viewport | |
- if(xScroll < windowWidth){ | |
- pageWidth = windowWidth; | |
- } else { | |
- pageWidth = xScroll; | |
- } | |
- | |
- | |
- arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeigh… | |
- return arrayPageSize; | |
-} | |
- | |
- | |
-// | |
-// pause(numberMillis) | |
-// Pauses code execution for specified time. Uses busy code, not good. | |
-// Code from http://www.faqts.com/knowledge_base/view.phtml/aid/1602 | |
-// | |
-function pause(numberMillis) { | |
- var now = new Date(); | |
- var exitTime = now.getTime() + numberMillis; | |
- while (true) { | |
- now = new Date(); | |
- if (now.getTime() > exitTime) | |
- return; | |
- } | |
-} | |
- | |
-// | |
-// getKey(key) | |
-// Gets keycode. If 'x' is pressed then it hides the lightbox. | |
-// | |
- | |
-function getKey(e){ | |
- if (e == null) { // ie | |
- keycode = event.keyCode; | |
- } else { // mozilla | |
- keycode = e.which; | |
- } | |
- key = String.fromCharCode(keycode).toLowerCase(); | |
- | |
- if(key == 'x'){ hideLightbox(); } | |
-} | |
- | |
- | |
-// | |
-// listenKey() | |
-// | |
-function listenKey () { document.onkeypress = getKey; } | |
- | |
- | |
-// | |
-// showLightbox() | |
-// Preloads images. Pleaces new image in lightbox then centers and displays. | |
-// | |
-function showLightbox(objLink) | |
-{ | |
- // prep objects | |
- var objOverlay = document.getElementById('overlay'); | |
- var objLightbox = document.getElementById('lightbox'); | |
- var objCaption = document.getElementById('lightboxCaption'); | |
- var objImage = document.getElementById('lightboxImage'); | |
- var objLoadingImage = document.getElementById('loadingImage'); | |
- var objLightboxDetails = document.getElementById('lightboxDetails'); | |
- | |
- | |
- var arrayPageSize = getPageSize(); | |
- var arrayPageScroll = getPageScroll(); | |
- | |
- // center loadingImage if it exists | |
- if (objLoadingImage) { | |
- objLoadingImage.style.top = (arrayPageScroll[1] + ((arrayPageS… | |
- objLoadingImage.style.left = (((arrayPageSize[0] - 20 - objLoa… | |
- objLoadingImage.style.display = 'block'; | |
- } | |
- | |
- // set height of Overlay to take up whole page and show | |
- objOverlay.style.height = (arrayPageSize[1] + 'px'); | |
- objOverlay.style.display = 'block'; | |
- | |
- // preload image | |
- imgPreload = new Image(); | |
- | |
- imgPreload.onload=function(){ | |
- objImage.src = objLink.href; | |
- | |
- // center lightbox and make sure that the top and left values … | |
- // and the image placed outside the viewport | |
- var lightboxTop = arrayPageScroll[1] + ((arrayPageSize[3] - 35… | |
- var lightboxLeft = ((arrayPageSize[0] - 20 - imgPreload.width)… | |
- | |
- objLightbox.style.top = (lightboxTop < 0) ? "0px" : lightboxTo… | |
- objLightbox.style.left = (lightboxLeft < 0) ? "0px" : lightbox… | |
- | |
- | |
- objLightboxDetails.style.width = imgPreload.width + 'px'; | |
- | |
- if(objLink.getAttribute('title')){ | |
- objCaption.style.display = 'block'; | |
- //objCaption.style.width = imgPreload.width + 'px'; | |
- objCaption.innerHTML = objLink.getAttribute('title'); | |
- } else { | |
- objCaption.style.display = 'none'; | |
- } | |
- | |
- // A small pause between the image loading and displaying is r… | |
- // this prevents the previous image displaying for a short bur… | |
- if (navigator.appVersion.indexOf("MSIE")!=-1){ | |
- pause(250); | |
- } | |
- | |
- if (objLoadingImage) { objLoadingImage.style.display = … | |
- objLightbox.style.display = 'block'; | |
- | |
- // After image is loaded, update the overlay height as the new… | |
- // increased the overall page height. | |
- arrayPageSize = getPageSize(); | |
- objOverlay.style.height = (arrayPageSize[1] + 'px'); | |
- | |
- // Check for 'x' keypress | |
- listenKey(); | |
- | |
- return false; | |
- } | |
- | |
- imgPreload.src = objLink.href; | |
- | |
-} | |
- | |
- | |
- | |
- | |
- | |
-// | |
-// hideLightbox() | |
-// | |
-function hideLightbox() | |
-{ | |
- // get objects | |
- objOverlay = document.getElementById('overlay'); | |
- objLightbox = document.getElementById('lightbox'); | |
- | |
- // hide lightbox and overlay | |
- objOverlay.style.display = 'none'; | |
- objLightbox.style.display = 'none'; | |
- | |
- // disable keypress listener | |
- document.onkeypress = ''; | |
-} | |
- | |
- | |
- | |
- | |
-// | |
-// initLightbox() | |
-// Function runs on window load, going through link tags looking for rel="ligh… | |
-// These links receive onclick events that enable the lightbox display for the… | |
-// The function also inserts html markup at the top of the page which will be … | |
-// container for the overlay pattern and the inline image. | |
-// | |
-function initLightbox() | |
-{ | |
- | |
- if (!document.getElementsByTagName){ return; } | |
- var anchors = document.getElementsByTagName("a"); | |
- | |
- // loop through all anchor tags | |
- for (var i=0; i<anchors.length; i++){ | |
- var anchor = anchors[i]; | |
- | |
- if (anchor.getAttribute("href") && (anchor.getAttribute("rel")… | |
- anchor.onclick = function () {showLightbox(this); retu… | |
- } | |
- } | |
- | |
- // the rest of this code inserts html at the top of the page that look… | |
- // | |
- // <div id="overlay"> | |
- // <a href="#" onclick="hideLightbox(); return false;">… | |
- // </div> | |
- // <div id="lightbox"> | |
- // <a href="#" onclick="hideLightbox(); return false;" … | |
- // <img id="closeButton" /> | |
- // <img id="lightboxImage" /> | |
- // </a> | |
- // <div id="lightboxDetails"> | |
- // <div id="lightboxCaption"></div> | |
- // <div id="keyboardMsg"></div> | |
- // </div> | |
- // </div> | |
- | |
- var objBody = document.getElementsByTagName("body").item(0); | |
- | |
- // create overlay div and hardcode some functional styles (aesthetic s… | |
- var objOverlay = document.createElement("div"); | |
- objOverlay.setAttribute('id','overlay'); | |
- objOverlay.onclick = function () {hideLightbox(); return false;} | |
- objOverlay.style.display = 'none'; | |
- objOverlay.style.position = 'absolute'; | |
- objOverlay.style.top = '0'; | |
- objOverlay.style.left = '0'; | |
- objOverlay.style.zIndex = '90'; | |
- objOverlay.style.width = '100%'; | |
- objBody.insertBefore(objOverlay, objBody.firstChild); | |
- | |
- var arrayPageSize = getPageSize(); | |
- var arrayPageScroll = getPageScroll(); | |
- | |
- // preload and create loader image | |
- var imgPreloader = new Image(); | |
- | |
- // if loader image found, create link to hide lightbox and create load… | |
- imgPreloader.onload=function(){ | |
- | |
- var objLoadingImageLink = document.createElement("a"); | |
- objLoadingImageLink.setAttribute('href','#'); | |
- objLoadingImageLink.onclick = function () {hideLightbox(); ret… | |
- objOverlay.appendChild(objLoadingImageLink); | |
- | |
- var objLoadingImage = document.createElement("img"); | |
- objLoadingImage.src = loadingImage; | |
- objLoadingImage.setAttribute('id','loadingImage'); | |
- objLoadingImage.style.position = 'absolute'; | |
- objLoadingImage.style.zIndex = '150'; | |
- objLoadingImageLink.appendChild(objLoadingImage); | |
- | |
- imgPreloader.onload=function(){}; // clear onLoa… | |
- | |
- return false; | |
- } | |
- | |
- imgPreloader.src = loadingImage; | |
- | |
- // create lightbox div, same note about styles as above | |
- var objLightbox = document.createElement("div"); | |
- objLightbox.setAttribute('id','lightbox'); | |
- objLightbox.style.display = 'none'; | |
- objLightbox.style.position = 'absolute'; | |
- objLightbox.style.zIndex = '100'; | |
- objBody.insertBefore(objLightbox, objOverlay.nextSibling); | |
- | |
- // create link | |
- var objLink = document.createElement("a"); | |
- objLink.setAttribute('href','#'); | |
- objLink.setAttribute('title','Click to close'); | |
- objLink.onclick = function () {hideLightbox(); return false;} | |
- objLightbox.appendChild(objLink); | |
- | |
- // preload and create close button image | |
- var imgPreloadCloseButton = new Image(); | |
- | |
- // if close button image found, | |
- imgPreloadCloseButton.onload=function(){ | |
- | |
- var objCloseButton = document.createElement("img"); | |
- objCloseButton.src = closeButton; | |
- objCloseButton.setAttribute('id','closeButton'); | |
- objCloseButton.style.position = 'absolute'; | |
- objCloseButton.style.zIndex = '200'; | |
- objLink.appendChild(objCloseButton); | |
- | |
- return false; | |
- } | |
- | |
- imgPreloadCloseButton.src = closeButton; | |
- | |
- // create image | |
- var objImage = document.createElement("img"); | |
- objImage.setAttribute('id','lightboxImage'); | |
- objLink.appendChild(objImage); | |
- | |
- // create details div, a container for the caption and keyboard message | |
- var objLightboxDetails = document.createElement("div"); | |
- objLightboxDetails.setAttribute('id','lightboxDetails'); | |
- objLightbox.appendChild(objLightboxDetails); | |
- | |
- // create caption | |
- var objCaption = document.createElement("div"); | |
- objCaption.setAttribute('id','lightboxCaption'); | |
- objCaption.style.display = 'none'; | |
- objLightboxDetails.appendChild(objCaption); | |
- | |
- // create keyboard message | |
- var objKeyboardMsg = document.createElement("div"); | |
- objKeyboardMsg.setAttribute('id','keyboardMsg'); | |
- objKeyboardMsg.innerHTML = 'press <kbd>x</kbd> to close'; | |
- objLightboxDetails.appendChild(objKeyboardMsg); | |
- | |
- | |
-} | |
- | |
- | |
- | |
- | |
-// | |
-// addLoadEvent() | |
-// Adds event to window.onload without overwriting currently assigned onload f… | |
-// Function found at Simon Willison's weblog - http://simon.incutio.com/ | |
-// | |
-function addLoadEvent(func) | |
-{ | |
- var oldonload = window.onload; | |
- if (typeof window.onload != 'function'){ | |
- window.onload = func; | |
- } else { | |
- window.onload = function(){ | |
- oldonload(); | |
- func(); | |
- } | |
- } | |
- | |
-} | |
- | |
- | |
- | |
-addLoadEvent(initLightbox); // run initLightbox onLoad | |
diff --git a/web/public/stylesheets/global.css b/web/public/stylesheets/global.… | |
@@ -1,556 +0,0 @@ | |
-/* global element overrides */ | |
- | |
-body { | |
- height: 100%; | |
- background: #fff; | |
- margin: 0; | |
- padding: 0; | |
- font-family: Tahoma, sans-serif; | |
- font-size: 12px; | |
- color: #555; | |
-} | |
- | |
-img { | |
- border: none; | |
-} | |
- | |
-table { | |
- border: none; | |
- padding: 0; | |
- margin: 0; | |
-} | |
- | |
-a:link, a:visited { | |
- color: #003366; | |
- text-decoration: none; | |
-} | |
- | |
-a:hover, a:active { | |
- color: #cc0033; | |
- text-decoration: underline; | |
-} | |
- | |
-h1 { | |
- color: #333; | |
- margin-top: 0; | |
- padding-top: 0; | |
- font-weight: normal; | |
- font-size: 36px; | |
-} | |
- | |
-h2 { | |
- font-size: 1.4em; | |
- margin-bottom: 4px; | |
-} | |
- | |
-h3 { | |
- font-size: 1.05em; | |
- font-weight: normal; | |
- font-style: italic; | |
-} | |
- | |
-/* unique elements */ | |
- | |
-#content { | |
- padding: 0; | |
- margin: 0 auto; | |
- width: 800px; | |
- line-height: 1.5; | |
-} | |
- | |
-#main { | |
- border: 0; | |
- padding: 0; | |
- background-color: white; | |
- padding-top: 6px; | |
- padding-left: 18px; | |
- padding-right: 20px; | |
- margin-top: -3px; | |
- margin-bottom: -3px; | |
-} | |
- | |
-#main img { | |
- max-width: 530px; | |
-} | |
- | |
-#footer { | |
- | |
- margin: 0; | |
- text-align: center; | |
-} | |
- | |
-#quote { | |
- font-size: 12px; | |
- padding: 10px; | |
- margin: 0 auto; | |
- width: 70%; | |
- background: #dddddd; | |
- margin-bottom: 10px; | |
-} | |
- | |
-#copyright { | |
- padding: 10px; | |
- text-align: center; | |
- font-size: 10px; | |
- color: #cccccc; | |
-} | |
- | |
-#header { | |
- width: 800px; | |
- margin: 0 auto 10px; | |
- color: white; | |
- | |
-} | |
- | |
-#logo { | |
- float: left; | |
- margin-top: 0px; | |
-} | |
- | |
- | |
- | |
-#warvox_stats { | |
- margin-top: 5px; | |
- border: 1px solid black; | |
- font-size: 12px; | |
- color: #555; | |
-} | |
- | |
-#warvox_stats td { | |
- margin-left: 20px; | |
- padding: 0 10px 0px 6px; | |
-} | |
- | |
- | |
-#warvox_conf { | |
- margin-top: 5px; | |
- border: 1px solid black; | |
- font-size: 12px; | |
- color: #555; | |
-} | |
- | |
-#warvox_conf td { | |
- margin-left: 20px; | |
- padding: 0 10px 0px 6px; | |
-} | |
- | |
-#warvox_blacklist { | |
- margin-top: 5px; | |
- border: 1px solid black; | |
- font-size: 12px; | |
- color: #555; | |
-} | |
- | |
-#warvox_blacklist td { | |
- margin-left: 20px; | |
- padding: 0 10px 0px 6px; | |
-} | |
- | |
-#home_logo { | |
- border: 0; | |
-} | |
- | |
-#home_links { | |
- | |
-} | |
- | |
-#home_intro, #home_intro td { | |
- border: 0; | |
-} | |
- | |
-#home_table { | |
- border: 0; | |
- margin-top: 0px; | |
-} | |
- | |
-#home_table td { | |
- border: 0; | |
-} | |
- | |
-#home_text { | |
- padding-left: 20px; | |
-} | |
- | |
-#navwrap { | |
- margin-top: 10px; | |
- padding-top: 10px; | |
- text-align: center; | |
-} | |
- | |
-#nav { | |
- margin: 0 0 0 0 auto; | |
- padding: 10px; | |
-} | |
- | |
-#sections_container { | |
- font-size: 14px; | |
-} | |
- | |
-#sections_ul { | |
- margin: 0; | |
- padding: 0; | |
- white-space: nowrap; | |
-} | |
- | |
-#sections_ul li { | |
- display: inline; | |
- list-style-type: none; | |
-} | |
- | |
-#sections_container a { | |
- padding: 5px 10px 5px 10px; | |
- line-height: 28px; | |
-} | |
- | |
-#sections_container a:link, #sections_container a:visited { | |
- color: #fff; | |
- background: black repeat-x top; | |
- text-decoration: none; | |
- font-variant: small-caps; | |
-} | |
- | |
-#sections_container a:hover { | |
- color: #fff; | |
- background: red repeat-x top; | |
- text-decoration: none; | |
- font-variant: small-caps; | |
-} | |
- | |
-#sections_active { | |
- font-weight: bold; | |
-} | |
- | |
-#subsections_active { | |
- font-weight: bold; | |
-} | |
- | |
-#subsections_container { | |
- font-size: 12px; | |
- padding-top: 5px; | |
-} | |
- | |
-#subsections_ul { | |
- margin: 0; | |
- padding: 0; | |
- white-space: nowrap; | |
-} | |
- | |
-#subsections_ul li { | |
- display: inline; | |
- list-style-type: none; | |
-} | |
- | |
-#subsections_container a { | |
- padding: 5px 10px 5px 10px; | |
- line-height: 20px; | |
-} | |
- | |
-#subsections_container a:link, #subsections_container a:visited { | |
- color: #fff; | |
- background: #333333 repeat-x top; | |
- text-decoration: none; | |
- font-variant: small-caps; | |
-} | |
- | |
-#subsections_container a:hover { | |
- color: #fff; | |
- background: #440000 repeat-x top; | |
- text-decoration: none; | |
- font-variant: small-caps; | |
-} | |
- | |
- | |
-#calls_pie1 { | |
- text-align: center; | |
-} | |
-#calls_pie2 { | |
- text-align: center; | |
-} | |
-#calls_pie3 { | |
- text-align: center; | |
-} | |
- | |
-/* non-unique elements */ | |
- | |
- | |
-.title { | |
- font-size: 20px; | |
- font-weight: bold; | |
- color: black; | |
- font-variant: small-caps; | |
-} | |
- | |
-.active_job_row { | |
- background: yellow; | |
-} | |
- | |
-.table_scaffold { | |
- margin-top: 5px; | |
- border: 1px solid black; | |
- font-size: 12px; | |
- color: #555; | |
-} | |
- | |
-.table_scaffold th { | |
- font-size: 14px; | |
- text-decoration: underline; | |
-} | |
- | |
-.table_scaffold td { | |
- margin-left: 20px; | |
- padding: 0 10px 0px 6px; | |
- border: 1px solid #cccccc; | |
-} | |
- | |
-.header_item { | |
- font-weight: bold; | |
-} | |
- | |
-.date-header { | |
- background: url('/images/bluefade.jpg') #222222 repeat-x top; | |
- color: white; | |
- padding: 2px; | |
- margin: 2px; | |
- font-weight: bold; | |
- padding-left: 8px; | |
- font-variant: small-caps; | |
- border: 0; | |
-} | |
- | |
-.date-header-center { | |
- background: url('/images/bluefade.jpg') #8c0000 repeat-x top; | |
- color: white; | |
- padding: 2px; | |
- margin: 2px; | |
- font-weight: bold; | |
- padding-left: 8px; | |
- font-variant: small-caps; | |
- text-align: center; | |
- border: 0; | |
-} | |
- | |
- | |
-.balloon { | |
- background: url('/images/balloon.png') repeat-x top; | |
- width: 277px; | |
- height: 98px; | |
- color: white; | |
- margin: 40px auto; | |
-} | |
- | |
-.balloon_links { | |
- float: left; | |
- margin-top: 10px; | |
- margin-left: 6px; | |
- | |
-} | |
- | |
-.balloon_links p { | |
- font-size: 14px; | |
- font-weight: bold; | |
- margin: 0; | |
-} | |
- | |
-.balloon_links a, .balloon_links a:link, .balloon_links a:visited { | |
- font-size: 12px; | |
- color: white; | |
- text-decoration: none; | |
- margin-left: 12px; | |
-} | |
- | |
-.balloon_links a:hover, .balloon_links a:active { | |
- color: yellow; | |
- text-decoration: underline; | |
-} | |
- | |
-.balloon_icon { | |
- float: left; | |
- padding-top: 25px; | |
- padding-left: 14px; | |
-} | |
- | |
-.box_full { | |
- position: relative; | |
- clear: both; | |
- width: 790px; | |
-} | |
- | |
-#round_top { | |
- padding: 0; | |
- border: 0; | |
- margin: 0; | |
- height: 9px; | |
- margin-bottom: -2px; | |
- visibility: hidden; | |
-} | |
- | |
-#round_bot { | |
- padding: 0; | |
- border: 0; | |
- margin-top: -2px; | |
- height: 15px; | |
- visibility: hidden; | |
-} | |
- | |
-.box_full p { | |
- line-height: 1.5em; | |
-} | |
- | |
- | |
-.intro { | |
- font-size: 14px; | |
-} | |
- | |
-.center { | |
- text-align: center; | |
-} | |
- | |
-.code { | |
- font-family: fixed, courier new; | |
- color: black; | |
- background: #dddddd; | |
- padding: 0.25em 0.25em 0.25em 0.25em; | |
-} | |
- | |
-.fatp { | |
- margin: 2.0em 0 0.5em; | |
-} | |
- | |
-.announce { | |
- padding: 0px 20px 0px 20px; | |
- line-height: 1.5; | |
- font-size: 12px; | |
- font-weight: bold; | |
-} | |
- | |
-.vulnTitle { | |
- font-weight: bold; | |
- font-size: 10pt; | |
- padding-bottom: 2em; | |
-} | |
- | |
-.vulnHeader { | |
- font-weight: bold; | |
-} | |
- | |
-.vulnText { | |
- padding-bottom: 1em; | |
-} | |
- | |
-.vulnInfoTable { | |
- background: #dddddd; | |
- | |
-} | |
- | |
-.vulnInfoHeader { | |
- font-weight: bold; | |
-} | |
- | |
-.vulnInfoData { | |
- | |
-} | |
- | |
-.talk_title { | |
- font-family: verdana, sans-serif, arial, helvetica; | |
- font-size: 9pt; | |
- padding: 0.1em 0.5em 0.15em .5em; | |
- font-weight: bold; | |
-} | |
- | |
-.materials { | |
- background: #dddddd; | |
- padding: 10px 10px 10px 10px; | |
- border: 1px solid black; | |
-} | |
- | |
- | |
- | |
-.level1 | |
-{ | |
- list-style: none; | |
- text-align: left; | |
- padding: 0em 0em 1em 0em; | |
- font-size: 16px; | |
- font-weight: bold; | |
-} | |
-.level1 li | |
-{ | |
- padding: 1em .25em 0.25em 0.25em; | |
-} | |
- | |
-.level2 | |
-{ | |
- list-style: circle; | |
- text-align: left; | |
- padding: 0em 0.25em 0.25em 4em; | |
-} | |
-.level2 li | |
-{ | |
- padding: 0.25em .25em 0.25em 0.25em; | |
- font-size: 14px; | |
- font-weight: bold; | |
-} | |
- | |
-.level3 | |
-{ | |
- list-style: square; | |
- text-align: left; | |
- padding: 0em 0.25em 0.25em 4em; | |
-} | |
-.level3 li | |
-{ | |
- padding: 0.25em .25em 0.25em 0.25em; | |
-} | |
- | |
- | |
- | |
-.boxTable | |
-{ | |
- border-left-style: solid; | |
- border-top-style: solid; | |
- border-right-style: solid; | |
- border-bottom-style: solid; | |
- border-color: #dddddd; | |
- font-family: verdana, sans-serif; | |
- font-size: 8pt; | |
- background-color: #dddddd; | |
-} | |
-.boxInnerTable | |
-{ | |
- font-family: verdana, sans-serif; | |
- font-size: 8pt; | |
-} | |
-.boxTdHeader | |
-{ | |
- border-width: 0 0 0 0; | |
- border-color: #dddddd; | |
- border-left-style: solid; | |
- border-top-style: solid; | |
- border-right-style: solid; | |
- border-bottom-style: solid; | |
- background-color: #dddddd; | |
- color: black; | |
- height: 20px; | |
- font-weight: bold | |
-} | |
-.boxTd | |
-{ | |
- border-width: 0 0 0 0; | |
- border-left-style: solid; | |
- border-top-style: solid; | |
- border-right-style: solid; | |
- border-bottom-style: solid; | |
-} | |
-.boxTd1 | |
-{ | |
- background-color: #eeeeee; | |
-} | |
-.boxTd2 | |
-{ | |
- background-color: #eeeeee; | |
-} | |
-.boxTh | |
-{ | |
- background-color: #dddddd; | |
-} | |
- |