| Move to manual navbar, fix font-awesome, styles - warvox - VoIP based wardialin… | |
| Log | |
| Files | |
| Refs | |
| README | |
| --- | |
| commit d4f3b5ba934fb80d39696488e4a98df186d19422 | |
| parent 24fce918407bce8c43734e120a1f4aa4e1343656 | |
| Author: HD Moore <[email protected]> | |
| Date: Sat, 25 Oct 2014 16:42:29 -0500 | |
| Move to manual navbar, fix font-awesome, styles | |
| Diffstat: | |
| M Gemfile | 10 +++------- | |
| M Gemfile.lock | 114 ++++++++++++-----------------… | |
| M app/assets/javascripts/application… | 2 +- | |
| M app/assets/javascripts/bootstrap.j… | 1 + | |
| D app/assets/stylesheets/application… | 8 -------- | |
| M app/assets/stylesheets/application… | 516 +++++++++++++++++++++++++++… | |
| M app/assets/stylesheets/bootstrap_a… | 8 -------- | |
| M app/assets/stylesheets/bootstrap_a… | 100 +++++++++++++++++++++++++++… | |
| M app/controllers/analyze_controller… | 278 +++++++++++++++------------… | |
| M app/views/analyze/index.html.erb | 4 ++-- | |
| M app/views/analyze/view.html.erb | 4 ++-- | |
| M app/views/calls/index.html.erb | 31 ++++++++++++++++-------------… | |
| M app/views/home/about.html.erb | 2 +- | |
| M app/views/home/index.html.erb | 8 ++++---- | |
| M app/views/jobs/index.html.erb | 10 +++++----- | |
| M app/views/jobs/new_analyze.html.erb | 2 +- | |
| M app/views/jobs/new_dialer.html.erb | 2 +- | |
| M app/views/jobs/results.html.erb | 74 ++++++++++++++++-------------… | |
| M app/views/jobs/view_results.html.e… | 6 +++--- | |
| M app/views/layouts/application.html… | 48 ++-------------------------… | |
| M app/views/projects/edit.html.erb | 2 +- | |
| M app/views/projects/index.html.erb | 6 +++--- | |
| M app/views/projects/new.html.erb | 2 +- | |
| M app/views/projects/show.html.erb | 28 ++++++++++++++-------------- | |
| M app/views/providers/edit.html.erb | 2 +- | |
| M app/views/providers/index.html.erb | 8 ++++---- | |
| M app/views/providers/new.html.erb | 2 +- | |
| M app/views/shared/_call_signal.html… | 4 ++-- | |
| M config/routes.rb | 2 +- | |
| 29 files changed, 889 insertions(+), 395 deletions(-) | |
| --- | |
| diff --git a/Gemfile b/Gemfile | |
| @@ -7,10 +7,6 @@ gem 'pg', '>=0.17' | |
| gem 'jquery-rails', '>= 3.1.2' | |
| gem 'jquery-datatables-rails', '>= 2.2.3' | |
| -# Integer array support (until Rails 4.0 is released) | |
| -# Git version required to work around this bug: https://github.com/dockyard/po… | |
| -# gem 'postgres_ext', :git => 'git://github.com/dockyard/postgres_ext.git' | |
| - | |
| gem 'kissfft' | |
| gem 'rex', '~> 2.0.3' | |
| @@ -23,14 +19,14 @@ gem 'autoprefixer-rails' | |
| gem 'authlogic', '>= 3.4.0' | |
| gem 'rails-settings-cached', '>= 0.4.1' | |
| +gem "breadcrumbs_on_rails" | |
| -gem "twitter-bootstrap-rails", :git => 'https://github.com/seyhunak/twitter-bo… | |
| gem 'formtastic', '>= 3.0.0' | |
| gem 'formtastic-bootstrap', '>= 3.0.0' | |
| -gem 'rails_bootstrap_navbar', '>= 2.0.1' | |
| -gem 'less-rails-bootstrap' | |
| gem 'therubyracer' | |
| +gem 'font-awesome-rails' | |
| + | |
| gem 'reportable', :git => 'git://github.com/hmoore-r7/reportable.git', :requir… | |
| gem 'will_paginate', '~> 3.0' | |
| diff --git a/Gemfile.lock b/Gemfile.lock | |
| @@ -6,56 +6,46 @@ GIT | |
| activerecord (>= 3.0) | |
| activesupport (>= 3.0.0) | |
| -GIT | |
| - remote: https://github.com/seyhunak/twitter-bootstrap-rails.git | |
| - revision: 6ae6c669402ec3d85ced21cf8ce4c7c4b8a985c1 | |
| - specs: | |
| - twitter-bootstrap-rails (3.2.0) | |
| - actionpack (>= 3.1) | |
| - execjs | |
| - rails (>= 3.1) | |
| - railties (>= 3.1) | |
| - | |
| GEM | |
| remote: http://rubygems.org/ | |
| specs: | |
| - actionmailer (4.1.5) | |
| - actionpack (= 4.1.5) | |
| - actionview (= 4.1.5) | |
| - mail (~> 2.5.4) | |
| - actionpack (4.1.5) | |
| - actionview (= 4.1.5) | |
| - activesupport (= 4.1.5) | |
| + actionmailer (4.1.6) | |
| + actionpack (= 4.1.6) | |
| + actionview (= 4.1.6) | |
| + mail (~> 2.5, >= 2.5.4) | |
| + actionpack (4.1.6) | |
| + actionview (= 4.1.6) | |
| + activesupport (= 4.1.6) | |
| rack (~> 1.5.2) | |
| rack-test (~> 0.6.2) | |
| - actionview (4.1.5) | |
| - activesupport (= 4.1.5) | |
| + actionview (4.1.6) | |
| + activesupport (= 4.1.6) | |
| builder (~> 3.1) | |
| erubis (~> 2.7.0) | |
| - activemodel (4.1.5) | |
| - activesupport (= 4.1.5) | |
| + activemodel (4.1.6) | |
| + activesupport (= 4.1.6) | |
| builder (~> 3.1) | |
| - activerecord (4.1.5) | |
| - activemodel (= 4.1.5) | |
| - activesupport (= 4.1.5) | |
| + activerecord (4.1.6) | |
| + activemodel (= 4.1.6) | |
| + activesupport (= 4.1.6) | |
| arel (~> 5.0.0) | |
| - activesupport (4.1.5) | |
| + activesupport (4.1.6) | |
| i18n (~> 0.6, >= 0.6.9) | |
| json (~> 1.7, >= 1.7.7) | |
| minitest (~> 5.1) | |
| thread_safe (~> 0.1) | |
| tzinfo (~> 1.1) | |
| arel (5.0.1.20140414130214) | |
| - authlogic (3.4.2) | |
| + authlogic (3.4.3) | |
| activerecord (>= 3.2) | |
| activesupport (>= 3.2) | |
| request_store (~> 1.0) | |
| - autoprefixer-rails (3.0.1.20140826) | |
| + scrypt (~> 1.2) | |
| + autoprefixer-rails (3.1.2.20141016) | |
| execjs | |
| - bootstrap-navbar (2.2.0) | |
| - gem_config (~> 0.3) | |
| bootstrap-sass (3.2.0.2) | |
| sass (~> 3.2) | |
| + breadcrumbs_on_rails (2.3.0) | |
| builder (3.2.2) | |
| coffee-rails (4.0.1) | |
| coffee-script (>= 2.2.0) | |
| @@ -64,19 +54,19 @@ GEM | |
| coffee-script-source | |
| execjs | |
| coffee-script-source (1.8.0) | |
| - commonjs (0.2.7) | |
| dynamic_form (1.1.4) | |
| erubis (2.7.0) | |
| - execjs (2.2.1) | |
| - ffi (1.9.3) | |
| + execjs (2.2.2) | |
| + ffi (1.9.6) | |
| ffi-compiler (0.1.3) | |
| ffi (>= 1.0.0) | |
| rake | |
| + font-awesome-rails (4.2.0.0) | |
| + railties (>= 3.2, < 5.0) | |
| formtastic (3.0.0) | |
| actionpack (>= 3.2.13) | |
| formtastic-bootstrap (3.0.0) | |
| formtastic (>= 2.2) | |
| - gem_config (0.3.1) | |
| hike (1.2.3) | |
| i18n (0.6.11) | |
| jquery-datatables-rails (2.2.3) | |
| @@ -88,53 +78,41 @@ GEM | |
| json (1.8.1) | |
| kgio (2.9.2) | |
| kissfft (0.0.2) | |
| - less (2.5.1) | |
| - commonjs (~> 0.2.7) | |
| - less-rails (2.5.0) | |
| - actionpack (>= 3.1) | |
| - less (~> 2.5.0) | |
| - less-rails-bootstrap (3.2.0) | |
| - less-rails (~> 2.5.0) | |
| - libv8 (3.16.14.3) | |
| - mail (2.5.4) | |
| - mime-types (~> 1.16) | |
| - treetop (~> 1.4.8) | |
| - mime-types (1.25.1) | |
| - minitest (5.4.1) | |
| + libv8 (3.16.14.7) | |
| + mail (2.6.1) | |
| + mime-types (>= 1.16, < 3) | |
| + mime-types (2.4.3) | |
| + minitest (5.4.2) | |
| multi_json (1.10.1) | |
| pg (0.17.1) | |
| - polyglot (0.3.5) | |
| protected_attributes (1.0.8) | |
| activemodel (>= 4.0.1, < 5.0) | |
| psych_shield (0.0.4) | |
| rack (1.5.2) | |
| rack-test (0.6.2) | |
| rack (>= 1.0) | |
| - rails (4.1.5) | |
| - actionmailer (= 4.1.5) | |
| - actionpack (= 4.1.5) | |
| - actionview (= 4.1.5) | |
| - activemodel (= 4.1.5) | |
| - activerecord (= 4.1.5) | |
| - activesupport (= 4.1.5) | |
| + rails (4.1.6) | |
| + actionmailer (= 4.1.6) | |
| + actionpack (= 4.1.6) | |
| + actionview (= 4.1.6) | |
| + activemodel (= 4.1.6) | |
| + activerecord (= 4.1.6) | |
| + activesupport (= 4.1.6) | |
| bundler (>= 1.3.0, < 2.0) | |
| - railties (= 4.1.5) | |
| + railties (= 4.1.6) | |
| sprockets-rails (~> 2.0) | |
| rails-settings-cached (0.4.1) | |
| rails (>= 4.0.0) | |
| - rails_bootstrap_navbar (2.0.1) | |
| - bootstrap-navbar (~> 2.0) | |
| - rails (>= 3.0.0) | |
| - railties (4.1.5) | |
| - actionpack (= 4.1.5) | |
| - activesupport (= 4.1.5) | |
| + railties (4.1.6) | |
| + actionpack (= 4.1.6) | |
| + activesupport (= 4.1.6) | |
| rake (>= 0.8.7) | |
| thor (>= 0.18.1, < 2.0) | |
| raindrops (0.13.0) | |
| rake (10.3.2) | |
| ref (1.0.5) | |
| request_store (1.1.0) | |
| - rex (2.0.3) | |
| + rex (2.0.4) | |
| sass (3.2.19) | |
| sass-rails (4.0.3) | |
| railties (>= 4.0.0, < 5.0) | |
| @@ -149,19 +127,16 @@ GEM | |
| multi_json (~> 1.0) | |
| rack (~> 1.0) | |
| tilt (~> 1.1, != 1.3.0) | |
| - sprockets-rails (2.1.4) | |
| + sprockets-rails (2.2.0) | |
| actionpack (>= 3.0) | |
| activesupport (>= 3.0) | |
| - sprockets (~> 2.8) | |
| + sprockets (>= 2.8, < 4.0) | |
| therubyracer (0.12.1) | |
| libv8 (~> 3.16.14.0) | |
| ref | |
| thor (0.19.1) | |
| thread_safe (0.3.4) | |
| tilt (1.4.1) | |
| - treetop (1.4.15) | |
| - polyglot | |
| - polyglot (>= 0.3.1) | |
| tzinfo (1.2.2) | |
| thread_safe (~> 0.1) | |
| uglifier (2.5.3) | |
| @@ -182,26 +157,25 @@ DEPENDENCIES | |
| authlogic (>= 3.4.0) | |
| autoprefixer-rails | |
| bootstrap-sass (>= 3.2.0) | |
| + breadcrumbs_on_rails | |
| coffee-rails (~> 4.0.1) | |
| dynamic_form (>= 1.1.4) | |
| + font-awesome-rails | |
| formtastic (>= 3.0.0) | |
| formtastic-bootstrap (>= 3.0.0) | |
| jquery-datatables-rails (>= 2.2.3) | |
| jquery-rails (>= 3.1.2) | |
| kissfft | |
| - less-rails-bootstrap | |
| pg (>= 0.17) | |
| protected_attributes (~> 1.0.7) | |
| psych_shield | |
| rails (>= 4.1.5, < 5.0.0) | |
| rails-settings-cached (>= 0.4.1) | |
| - rails_bootstrap_navbar (>= 2.0.1) | |
| reportable! | |
| rex (~> 2.0.3) | |
| sass-rails (~> 4.0.2) | |
| scrypt | |
| therubyracer | |
| - twitter-bootstrap-rails! | |
| uglifier (>= 1.0.3) | |
| unicorn | |
| will_paginate (~> 3.0) | |
| diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/app… | |
| @@ -1,8 +1,8 @@ | |
| // Place your application-specific JavaScript functions and classes here | |
| // This file is automatically included by javascript_include_tag :defaults | |
| //= require jquery | |
| +//= require bootstrap-sprockets | |
| //= require jquery_ujs | |
| -//= require twitter/bootstrap | |
| //= require bootstrap-lightbox | |
| //= require dataTables/jquery.dataTables | |
| //= require dataTables/bootstrap/3/jquery.dataTables.bootstrap | |
| diff --git a/app/assets/javascripts/bootstrap.js.coffee b/app/assets/javascript… | |
| @@ -1,3 +1,4 @@ | |
| jQuery -> | |
| $("a[rel~=popover], .has-popover").popover() | |
| $("a[rel~=tooltip], .has-tooltip").tooltip() | |
| + $('.btn').button() | |
| diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/ap… | |
| @@ -1,8 +0,0 @@ | |
| -/* | |
| - * This is a manifest file that'll automatically include all the stylesheets a… | |
| - * and any sub-directories. You're free to add application-wide styles to this… | |
| - * the top of the compiled file, but it's generally better to create a new fil… | |
| - *= require formtastic-bootstrap | |
| - *= require_self | |
| - *= require_tree . | |
| -*/ | |
| diff --git a/app/assets/stylesheets/application.css.scss.erb b/app/assets/style… | |
| @@ -1,19 +1,17 @@ | |
| /* | |
| - *= require bootstrap_and_overrides | |
| -*/ | |
| - | |
| -/* | |
| *= require_self | |
| *= require formtastic | |
| *= require formtastic-bootstrap | |
| *= require formtastic-overrides | |
| *= require bootstrap-lightbox | |
| *= require jquery.dataTables | |
| + *= require font-awesome | |
| */ | |
| @import "bootstrap-sprockets"; | |
| @import "bootstrap"; | |
| + | |
| table.list { | |
| td.actions { | |
| vertical-align: middle; | |
| @@ -78,3 +76,513 @@ table.list { | |
| margin-left: auto; | |
| margin-right: auto; | |
| } | |
| + | |
| + | |
| +#main { | |
| + margin-top: 50px; | |
| +} | |
| + | |
| +// Overrides | |
| + | |
| +/* navbar */ | |
| + | |
| +.navbar-default { | |
| + background-color: #ea5709; | |
| + border-color: red; | |
| +} | |
| +/* title */ | |
| +.navbar-default .navbar-brand { | |
| + color: #ffffff; | |
| +} | |
| +.navbar-default .navbar-brand:hover, | |
| +.navbar-default .navbar-brand:focus { | |
| + color: yellow; | |
| + background-color: #ea5709; | |
| +} | |
| +/* link */ | |
| +.navbar-default .navbar-nav > li > a { | |
| + color: white; | |
| + background-color: #ea5709; | |
| +} | |
| +.navbar-default .navbar-nav > li > a:hover, | |
| +.navbar-default .navbar-nav > li > a:focus { | |
| + color: yellow; | |
| + background-color: #ea5709; | |
| +} | |
| +.navbar-default .navbar-nav > .active > a, | |
| +.navbar-default .navbar-nav > .active > a:hover, | |
| +.navbar-default .navbar-nav > .active > a:focus { | |
| + color: yellow; | |
| + background-color: #ea5709; | |
| +} | |
| +.navbar-default .navbar-nav > .open > a, | |
| +.navbar-default .navbar-nav > .open > a:hover, | |
| +.navbar-default .navbar-nav > .open > a:focus { | |
| + color: yellow; | |
| + background-color: #ea5709; | |
| +} | |
| +/* caret */ | |
| +.navbar-default .navbar-nav > .dropdown > a .caret { | |
| + border-top-color: white; | |
| + border-bottom-color: white; | |
| +} | |
| +.navbar-default .navbar-nav > .dropdown > a:hover .caret, | |
| +.navbar-default .navbar-nav > .dropdown > a:focus .caret { | |
| + border-top-color: #333; | |
| + border-bottom-color: #333; | |
| +} | |
| +.navbar-default .navbar-nav > .open > a .caret, | |
| +.navbar-default .navbar-nav > .open > a:hover .caret, | |
| +.navbar-default .navbar-nav > .open > a:focus .caret { | |
| + border-top-color: #555; | |
| + border-bottom-color: #555; | |
| +} | |
| +/* mobile version */ | |
| +.navbar-default .navbar-toggle { | |
| + border-color: #DDD; | |
| +} | |
| +.navbar-default .navbar-toggle:hover, | |
| +.navbar-default .navbar-toggle:focus { | |
| + | |
| +} | |
| +.navbar-default .navbar-toggle .icon-bar { | |
| + background-color: #ea5709; | |
| +} | |
| +@media (max-width: 767px) { | |
| + .navbar-default .navbar-nav .open .dropdown-menu > li > a { | |
| + color: white; | |
| + background-color: #ea5709; | |
| + } | |
| + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, | |
| + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { | |
| + color: yellow; | |
| + } | |
| +} | |
| + | |
| +// | |
| + | |
| +a .project-title, a:visited .project-title { | |
| + color: white; | |
| + font-weight: bold; | |
| +} | |
| + | |
| + | |
| +// Datatables | |
| + | |
| +.paginate_disabled_previous { | |
| + display: none; | |
| +} | |
| + | |
| +.paginate_disabled_next { | |
| + display: none; | |
| +} | |
| + | |
| +.paginate_enabled_previous { | |
| + color: red; | |
| + margin-right: 20px; | |
| +} | |
| + | |
| +.paginate_enabled_next { | |
| + color: green; | |
| +} | |
| + | |
| +// End of DataTables | |
| + | |
| + | |
| +.sparkline { | |
| + width: 100%; | |
| + height: 30px; | |
| +} | |
| + | |
| +.sparkline-title { | |
| + text-align: center; | |
| + font-size: 11px; | |
| +} | |
| + | |
| +.call-detail { | |
| + font-size: 10px; | |
| +} | |
| + | |
| +.project-header { | |
| + margin-bottom: 30px; | |
| + border-bottom: 1px solid #eeeeee; | |
| +} | |
| + | |
| +.zoom { | |
| + background-color: yellow; | |
| + height: 40px; | |
| +} | |
| + | |
| + | |
| +.stat-box { | |
| + padding: 10px; | |
| + background-color: white; | |
| + border: 2px solid #29383f; | |
| + font-size: 16px; | |
| + font-weight: bold; | |
| + color: #29383f; | |
| + width: 55px; | |
| + margin: auto auto; | |
| + text-align: center; | |
| + | |
| + border-top-left-radius: 20px; | |
| + border-top-right-radius: 20px; | |
| + border-bottom-right-radius: 20px; | |
| + border-bottom-left-radius: 20px; | |
| +} | |
| + | |
| +.stat-modem { | |
| + background-color: white; | |
| + border: 2px solid red; | |
| + color: red; | |
| +} | |
| + | |
| + | |
| +.stat-nodata { | |
| + background-color: #f4f4f4; | |
| + border: 2px solid #29383f; | |
| + color: #29383f; | |
| + font-size: 24px; | |
| +} | |
| + | |
| +.stat-completed { | |
| + background-color: white; | |
| + border: 2px solid #ea5709; | |
| + color: #29383f; | |
| +} | |
| + | |
| +.stat-voice { | |
| + background-color: white; | |
| + border: 2px solid green; | |
| + color: #29383f; | |
| +} | |
| + | |
| +.stat-voicemail { | |
| + background-color: white; | |
| + border: 2px solid blue; | |
| + color: #29383f; | |
| +} | |
| + | |
| +.stat-fax { | |
| + background-color: white; | |
| + border: 2px solid #29383f; | |
| + color: #29383f; | |
| +} | |
| + | |
| +.stat-modem { | |
| + background-color: white; | |
| + border: 2px solid red; | |
| + color: #29383f; | |
| +} | |
| + | |
| + | |
| +.arrow-down { | |
| + font-size: 18px; | |
| + text-align: center; | |
| + margin: auto auto; | |
| + padding-top: 10px; | |
| + padding-bottom: 10px; | |
| + color: #ea5709; | |
| +} | |
| + | |
| +.arrow-right { | |
| + font-size: 22px; | |
| + text-align: center; | |
| + margin: auto auto; | |
| + padding-top: 10px; | |
| + padding-bottom: 10px; | |
| +} | |
| + | |
| +.stat-subtitle { | |
| + text-align: center; | |
| + font-size: 12px; | |
| + margin-top: 1px; | |
| +} | |
| + | |
| +.fwd_match_span { | |
| + width: 100px; | |
| + padding-left: 20px; | |
| + padding-right: 20px; | |
| + padding-bottom: 5px; | |
| + padding-top: 5px; | |
| + font-weight: bold; | |
| + color: white; | |
| + text-align: center; | |
| +} | |
| + | |
| +.filter-label { | |
| + line-height: 16px; | |
| + font-size: 16px; | |
| + margin-right: 5px; | |
| + padding-top: 5px; | |
| + font-weight: bold; | |
| +} | |
| + | |
| +.filter-select { | |
| + line-height: 14px; | |
| + font-size: 14px; | |
| + width: 120px; | |
| + font-weight: bold; | |
| +} | |
| + | |
| +.popover-title { | |
| + line-height: 12px; | |
| + font-size: 12px; | |
| + text-align: center; | |
| + font-weight: bold; | |
| +} | |
| + | |
| +.popover-content { | |
| + | |
| +} | |
| + | |
| +.xtooltip { | |
| + border-bottom: 1px dotted blue; | |
| + cursor: help; | |
| +} | |
| + | |
| +.xpopover { | |
| + border-bottom: 1px dotted blue; | |
| + cursor: help; | |
| +} | |
| + | |
| +.progress-bar { | |
| + margin-bottom: -2px; | |
| +} | |
| + | |
| +.progress_pct { | |
| + color: #29383f; | |
| + margin-left: 10px; | |
| + font-weight: bold; | |
| +} | |
| + | |
| +.task_args_formatted { | |
| + padding:10px; | |
| +} | |
| + | |
| +.task_args_var { | |
| + font-size: 12px; | |
| + float: left; | |
| + font-weight: bold; | |
| + text-align: right; | |
| +} | |
| +.task_args_val { | |
| + font-size: 14px; | |
| + text-align: left; | |
| + padding-left: 5px; | |
| + float: auto; | |
| +} | |
| +.check-item { | |
| + font-size: 18px; | |
| + margin-bottom: 10px; | |
| +} | |
| +.check-result { | |
| + margin-left: 40px; | |
| + width: 500px; | |
| + font-size: 16px; | |
| +} | |
| + | |
| + | |
| +// Hacks to override active drop-down item background color and hover | |
| +.dropdown-menu .active > a { | |
| + background-color: white; | |
| + background-image: none; | |
| + color: #29383f; | |
| +} | |
| + | |
| +// Do not make active icons white | |
| +.dropdown-menu > .active > a > [class^="icon-"], .dropdown-menu > .active > a … | |
| + color: #29383f; | |
| + background-image: url("/assets/twitter/bootstrap/glyphicons-halflings.png"); | |
| +} | |
| + | |
| +.dropdown-menu .active > a:hover { | |
| + background-color: #ea5709; | |
| + background-image: none; | |
| + color: white; | |
| +} | |
| + | |
| +.fconstrained { | |
| + width: 400px; | |
| +} | |
| + | |
| + | |
| +.project_description { | |
| + height: 100px; | |
| + padding: 5px; | |
| +} | |
| +.project_includes { | |
| + height: 100px; | |
| + padding: 5px; | |
| +} | |
| + | |
| +body#login { | |
| + | |
| +background-color: black; | |
| +padding: 0; | |
| +margin: 0; | |
| + | |
| +} | |
| + | |
| +#login-panel { | |
| + | |
| +margin: 0px; | |
| +width: 100%; | |
| +padding: 0; | |
| +height: 300px; | |
| + | |
| +position: fixed; | |
| +z-index: 1; | |
| + | |
| +/* IE10 Consumer Preview */ | |
| +background-image: -ms-linear-gradient(top, #EA5709 0%, #000000 100%); | |
| + | |
| +/* Mozilla Firefox */ | |
| +background-image: -moz-linear-gradient(top, #EA5709 0%, #000000 100%); | |
| + | |
| +/* Opera */ | |
| +background-image: -o-linear-gradient(top, #EA5709 0%, #000000 100%); | |
| + | |
| +/* Webkit (Safari/Chrome 10) */ | |
| +background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0… | |
| + | |
| +/* Webkit (Chrome 11+) */ | |
| +background-image: -webkit-linear-gradient(top, #EA5709 0%, #000000 100%); | |
| + | |
| +/* W3C Markup, IE10 Release Preview */ | |
| +background-image: linear-gradient(to bottom, #EA5709 0%, #000000 100%); | |
| + | |
| +} | |
| + | |
| +#login-logo { | |
| + margin-left: auto; | |
| + margin-right: auto; | |
| + width: 222px; | |
| + height: 68px; | |
| + margin-top: 60px; | |
| +} | |
| + | |
| +#box { | |
| + margin-left: auto; | |
| + margin-right: auto; | |
| + width: 350px; | |
| + background: white; | |
| + padding: 25px; | |
| + margin-top: 20px; | |
| + border: 1px solid #4A1C04; | |
| + margin-bottom: 30px; | |
| +} | |
| + | |
| +.login-label { | |
| + width: 120px; | |
| + margin-right: 10px; | |
| + margin-bottom: 5px; | |
| + text-align: right; | |
| + font-weight: bold; | |
| + float: left; | |
| +} | |
| + | |
| +.btn-login { | |
| + margin-left: 130px; | |
| +} | |
| + | |
| +.nav { | |
| + a { | |
| + font-size: 15px; | |
| + } | |
| +} | |
| + | |
| +.content { | |
| + margin-top: 80px; | |
| +} | |
| + | |
| +.accordion-toggle:hover { | |
| + text-decoration: none; | |
| +} | |
| + | |
| +h1 { | |
| + font-size: 24px; | |
| + line-height: 30px; | |
| +} | |
| + | |
| +h2 { | |
| + font-size: 20px; | |
| + line-height: 24px; | |
| +} | |
| + | |
| +h3 { | |
| + font-size: 16px; | |
| + line-height: 18px; | |
| +} | |
| + | |
| +.header { | |
| + border-top: solid 4px #ea5709; | |
| + padding-top: 20px; | |
| +} | |
| + | |
| +.header a { | |
| + color: #ccc; | |
| +} | |
| + | |
| +.header a:hover { | |
| + text-decoration: none; | |
| + color: #ea5709; | |
| +} | |
| + | |
| +.footer { | |
| + text-align: center; | |
| + font-size: 12px; | |
| + margin-top: 50px; | |
| + color: #aaa; | |
| +} | |
| + | |
| +.no-space { | |
| + margin-left: 0; | |
| + margin-right: 0; | |
| +} | |
| + | |
| +.right { | |
| + text-align: right; | |
| +} | |
| + | |
| +.tabs-left { | |
| + text-align: left; | |
| +} | |
| + | |
| +.text-large { | |
| + font-size: 18px; | |
| +} | |
| + | |
| +h3.toc { | |
| + border-bottom: 1px solid #ccc; | |
| +} | |
| + | |
| +.carousel .item { | |
| + height: 50px; | |
| + text-align: center; | |
| +} | |
| + | |
| +.carousel .item > img { | |
| + display: inline; | |
| +} | |
| + | |
| +.lead-box h3 { | |
| + text-align: center; | |
| +} | |
| + | |
| +.lead-box p { | |
| + height: 80px; | |
| +} | |
| + | |
| +.table td { | |
| + vertical-align: middle; | |
| +} | |
| +table.dataTable tr td.sorting_1 { | |
| + background-color: #fff !important; | |
| +} | |
| +.tab-content { | |
| + overflow: hidden; | |
| +} | |
| +.carousel-control { | |
| + background: #fff; | |
| +} | |
| diff --git a/app/assets/stylesheets/bootstrap_and_overrides.css b/app/assets/st… | |
| @@ -1,7 +0,0 @@ | |
| -/* | |
| - =require twitter-bootstrap-static/bootstrap | |
| - | |
| - Use Font Awesome icons (default) | |
| - To use Glyphicons sprites instead of Font Awesome, replace with "require twi… | |
| - =require twitter-bootstrap-static/fontawesome | |
| - */ | |
| -\ No newline at end of file | |
| diff --git a/app/assets/stylesheets/bootstrap_and_overrides.css.less b/app/asse… | |
| @@ -1,15 +1,15 @@ | |
| @import "twitter/bootstrap/bootstrap"; | |
| // Set the correct sprite paths | |
| -@iconSpritePath: image-url("twitter/bootstrap/glyphicons-halflings.png"); | |
| -@iconWhiteSpritePath: image-url("twitter/bootstrap/glyphicons-halflings-white.… | |
| +@iconSpritePath: image-url("/assets/glyphicons-halflings.png"); | |
| +@iconWhiteSpritePath: image-url("/assets/glyphicons-halflings-white.png"); | |
| // Set the Font Awesome (Font Awesome is default. You can disable by commentin… | |
| -@fontAwesomeEotPath: font-url("fontawesome-webfont.eot"); | |
| -@fontAwesomeEotPath_iefix: font-url("fontawesome-webfont.eot?#iefix"); | |
| -@fontAwesomeWoffPath: font-url("fontawesome-webfont.woff"); | |
| -@fontAwesomeTtfPath: font-url("fontawesome-webfont.ttf"); | |
| -@fontAwesomeSvgPath: font-url("fontawesome-webfont.svg#fontawesomeregular"); | |
| +@fontAwesomeEotPath: font-url("/assets/fontawesome-webfont.eot"); | |
| +@fontAwesomeEotPath_iefix: font-url("/assets/fontawesome-webfont.eot?#iefix"); | |
| +@fontAwesomeWoffPath: font-url("/assets/fontawesome-webfont.woff"); | |
| +@fontAwesomeTtfPath: font-url("/assets/fontawesome-webfont.ttf"); | |
| +@fontAwesomeSvgPath: font-url("/assets/fontawesome-webfont.svg#fontawesomeregu… | |
| // Font Awesome | |
| @import "fontawesome/font-awesome"; | |
| @@ -19,7 +19,6 @@ | |
| // Your custom LESS stylesheets goes here | |
| - | |
| @sansFontFamily: "Trebuchet MS", Arial, Helvetica, sans-serif; | |
| @green: #90d552; | |
| @orange: #ea5709; | |
| @@ -51,8 +50,88 @@ | |
| @headingsColor: @darkGray; | |
| @navbarBackground: #ea5709; | |
| +@navbarBorderColor: red; | |
| @navbarBackgroundHighlight: #4A1C04; | |
| +// Overrides | |
| + | |
| +/* navbar */ | |
| +.navbar-default { | |
| + background-color: @navbarBackground; | |
| + border-color: @navbarBorderColor; | |
| +} | |
| +/* title */ | |
| +.navbar-default .navbar-brand { | |
| + color: #ffffff; | |
| +} | |
| +.navbar-default .navbar-brand:hover, | |
| +.navbar-default .navbar-brand:focus { | |
| + color: #5E5E5E; | |
| +} | |
| +/* link */ | |
| +.navbar-default .navbar-nav > li > a { | |
| + color: #777; | |
| +} | |
| +.navbar-default .navbar-nav > li > a:hover, | |
| +.navbar-default .navbar-nav > li > a:focus { | |
| + color: #333; | |
| +} | |
| +.navbar-default .navbar-nav > .active > a, | |
| +.navbar-default .navbar-nav > .active > a:hover, | |
| +.navbar-default .navbar-nav > .active > a:focus { | |
| + color: #555; | |
| + background-color: @navbarBackground; | |
| +} | |
| +.navbar-default .navbar-nav > .open > a, | |
| +.navbar-default .navbar-nav > .open > a:hover, | |
| +.navbar-default .navbar-nav > .open > a:focus { | |
| + color: #555; | |
| + background-color: #D5D5D5; | |
| +} | |
| +/* caret */ | |
| +.navbar-default .navbar-nav > .dropdown > a .caret { | |
| + border-top-color: #777; | |
| + border-bottom-color: #777; | |
| +} | |
| +.navbar-default .navbar-nav > .dropdown > a:hover .caret, | |
| +.navbar-default .navbar-nav > .dropdown > a:focus .caret { | |
| + border-top-color: #333; | |
| + border-bottom-color: #333; | |
| +} | |
| +.navbar-default .navbar-nav > .open > a .caret, | |
| +.navbar-default .navbar-nav > .open > a:hover .caret, | |
| +.navbar-default .navbar-nav > .open > a:focus .caret { | |
| + border-top-color: #555; | |
| + border-bottom-color: #555; | |
| +} | |
| +/* mobile version */ | |
| +.navbar-default .navbar-toggle { | |
| + border-color: #DDD; | |
| +} | |
| +.navbar-default .navbar-toggle:hover, | |
| +.navbar-default .navbar-toggle:focus { | |
| + background-color: #DDD; | |
| +} | |
| +.navbar-default .navbar-toggle .icon-bar { | |
| + background-color: @navbarBackground; | |
| +} | |
| +@media (max-width: 767px) { | |
| + .navbar-default .navbar-nav .open .dropdown-menu > li > a { | |
| + color: white; | |
| + } | |
| + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, | |
| + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { | |
| + color: @yellow; | |
| + } | |
| +} | |
| + | |
| +// | |
| + | |
| +a .project-title, a:visited .project-title { | |
| + color: white; | |
| + font-weight: bold; | |
| +} | |
| + | |
| // Datatables | |
| @@ -380,7 +459,7 @@ background-image: linear-gradient(to bottom, #EA5709 0%, #0… | |
| } | |
| .content { | |
| - margin-top: 40px; | |
| + margin-top: 80px; | |
| } | |
| .accordion-toggle:hover { | |
| @@ -472,4 +551,4 @@ table.dataTable tr td.sorting_1 { | |
| } | |
| .carousel-control { | |
| background: #fff; | |
| -} | |
| -\ No newline at end of file | |
| +} | |
| diff --git a/app/controllers/analyze_controller.rb b/app/controllers/analyze_co… | |
| @@ -1,28 +1,28 @@ | |
| class AnalyzeController < ApplicationController | |
| def index | |
| - @jobs = Job.order('id DESC').paginate( | |
| - :page => params[:page], | |
| - :per_page => 30 | |
| - ) | |
| + @jobs = Job.order('id DESC').paginate( | |
| + :page => params[:page], | |
| + :per_page => 30 | |
| + ) | |
| end | |
| def view | |
| - @job_id = params[:id] | |
| - @job = Job.find(@job_id) | |
| - @shown = params[:show] | |
| + @job_id = params[:id] | |
| + @job = Job.find(@job_id) | |
| + @shown = params[:show] | |
| - if request.format.html? | |
| - ltypes = Call.select('DISTINCT line_type').where(:job_id => @j… | |
| - res_types = {} | |
| + if request.format.html? | |
| + ltypes = Call.select('DISTINCT line_type').where(:job_id => @job_id).map… | |
| + res_types = {} | |
| - ltypes.each do |k| | |
| - next if not k | |
| - res_types[k.capitalize.to_sym] = Call.where(:job_id =>… | |
| - end | |
| + ltypes.each do |k| | |
| + next if not k | |
| + res_types[k.capitalize.to_sym] = Call.where(:job_id => @job_id, :line_… | |
| + end | |
| - @lines_by_type = res_types | |
| - end | |
| + @lines_by_type = res_types | |
| + end | |
| sort_by = params[:sort_by] || 'number' | |
| sort_dir = params[:sort_dir] || 'asc' | |
| @@ -41,57 +41,53 @@ class AnalyzeController < ApplicationController | |
| end | |
| @results_offset = (params[:iDisplayStart] || 0).to_i | |
| - calls_search | |
| + calls_search | |
| - @results_total_display_count = Call.where(@search_conditions).count() | |
| + @results_total_display_count = Call.where(@search_conditions).count() | |
| @results = Call.where(@search_conditions).includes(:provider).limit(@resul… | |
| end | |
| - respond_to do |format| | |
| + respond_to do |format| | |
| format.html | |
| format.json { | |
| - render :content_type => 'application/json', :json => render_to_s… | |
| + render :content_type => 'application/json', :json => render_to_string(… | |
| } | |
| end | |
| end | |
| def view_matches | |
| - @result = Call.find(params[:call_id]) | |
| - @match_scopes = [ | |
| - { :scope => 'job', :label => 'This Job' }, | |
| - { :scope => 'project', :label => 'This Project' }, | |
| - { :scope => 'global', :label => 'All Projects' } | |
| - ] | |
| - | |
| - @job_id = params[:job_id] | |
| - | |
| - if @job_id | |
| - @match_scope = params[:match_scope] || "job" | |
| - else | |
| - @match_scope = params[:match_scope] || "project" | |
| - end | |
| - | |
| - @results = @result.paginate_matches(@match_scope, 30.0, params[:page],… | |
| - end | |
| - | |
| + @result = Call.find(params[:call_id]) | |
| + @match_scopes = [ | |
| + { :scope => 'job', :label => 'This Job' }, | |
| + { :scope => 'project', :label => 'This Project' }, | |
| + { :scope => 'global', :label => 'All Projects' } | |
| + ] | |
| + | |
| + @job_id = params[:job_id] | |
| + | |
| + if @job_id | |
| + @match_scope = params[:match_scope] || "job" | |
| + else | |
| + @match_scope = params[:match_scope] || "project" | |
| + end | |
| + @results = @result.paginate_matches(@match_scope, 30.0, params[:page], 30) | |
| + end | |
| def index | |
| - @shown = params[:show] | |
| + @shown = params[:show] | |
| - ltypes = Line.select('DISTINCT line_type', :conditions => ["project_id… | |
| - res_types = {} | |
| + ltypes = Line.select('DISTINCT line_type').where(project_id: @project.id).… | |
| + res_types = {} | |
| - ltypes.each do |k| | |
| - next if not k | |
| - res_types[k.capitalize.to_sym] = Line.count( | |
| - :conditions => ['project_id = ? and line_type = ?', @p… | |
| - ) | |
| - end | |
| + ltypes.each do |k| | |
| + next if not k | |
| + res_types[k.capitalize.to_sym] = Line.where(project_id: @project.id, lin… | |
| + end | |
| - @lines_by_type = res_types | |
| + @lines_by_type = res_types | |
| sort_by = params[:sort_by] || 'number' | |
| sort_dir = params[:sort_dir] || 'asc' | |
| @@ -107,129 +103,127 @@ class AnalyzeController < ApplicationController | |
| end | |
| @results_offset = (params[:iDisplayStart] || 0).to_i | |
| - project_search | |
| + project_search | |
| @results = Call.where(@search_conditions).includes(:provider).limit(@res… | |
| @results_total_display_count = Call.where(@search_conditions).includes(:… | |
| end | |
| - respond_to do |format| | |
| + respond_to do |format| | |
| format.html | |
| format.json { | |
| - render :content_type => 'application/json', :json => render_to_s… | |
| + render :content_type => 'application/json', :json => render_to_string(… | |
| } | |
| end | |
| end | |
| def resource | |
| - ctype = 'text/html' | |
| - cpath = nil | |
| - cdata = "File not found" | |
| - | |
| - res = CallMedium.where(:call_id => params[:result_id].to_i).first | |
| - | |
| - if res | |
| - case params[:type] | |
| - when 'big_sig' | |
| - ctype = 'image/png' | |
| - cdata = res.png_sig_freq | |
| - when 'big_sig_dots' | |
| - ctype = 'image/png' | |
| - cdata = res.png_big_dots | |
| - when 'small_sig' | |
| - ctype = 'image/png' | |
| - cdata = res.png_sig | |
| - when 'big_freq' | |
| - ctype = 'image/png' | |
| - cdata = res.png_big_freq | |
| - when 'small_freq' | |
| - ctype = 'image/png' | |
| - cdata = res.png_sig_freq | |
| - when 'mp3' | |
| - ctype = 'audio/mpeg' | |
| - cdata = res.mp3 | |
| - when 'sig' | |
| - ctype = 'text/plain' | |
| - cdata = res.fprint | |
| - when 'raw' | |
| - ctype = 'octet/binary-stream' | |
| - cdata = res.audio | |
| - end | |
| - end | |
| + ctype = 'text/html' | |
| + cpath = nil | |
| + cdata = "File not found" | |
| + | |
| + res = CallMedium.where(:call_id => params[:result_id].to_i).first | |
| + | |
| + if res | |
| + case params[:rtype] | |
| + when 'big_sig' | |
| + ctype = 'image/png' | |
| + cdata = res.png_sig_freq | |
| + when 'big_sig_dots' | |
| + ctype = 'image/png' | |
| + cdata = res.png_big_dots | |
| + when 'small_sig' | |
| + ctype = 'image/png' | |
| + cdata = res.png_sig | |
| + when 'big_freq' | |
| + ctype = 'image/png' | |
| + cdata = res.png_big_freq | |
| + when 'small_freq' | |
| + ctype = 'image/png' | |
| + cdata = res.png_sig_freq | |
| + when 'mp3' | |
| + ctype = 'audio/mpeg' | |
| + cdata = res.mp3 | |
| + when 'sig' | |
| + ctype = 'text/plain' | |
| + cdata = res.fprint | |
| + when 'raw' | |
| + ctype = 'octet/binary-stream' | |
| + cdata = res.audio | |
| + end | |
| + end | |
| send_data(cdata, :type => ctype, :disposition => 'inline') | |
| end | |
| - | |
| - | |
| + # | |
| # Generate a SQL sort by option based on the incoming DataTables paramater. | |
| # | |
| # Returns the SQL String. | |
| def calls_sort_option | |
| column = case params[:iSortCol_0].to_s | |
| - when '1' | |
| - 'number' | |
| - when '2' | |
| - 'line_type' | |
| - when '3' | |
| - 'peak_freq' | |
| - end | |
| + when '1' | |
| + 'number' | |
| + when '2' | |
| + 'line_type' | |
| + when '3' | |
| + 'peak_freq' | |
| + end | |
| column + ' ' + (params[:sSortDir_0] =~ /^A/i ? 'asc' : 'desc') if column | |
| end | |
| def calls_search | |
| - @search_conditions = [] | |
| - terms = params[:sSearch].to_s | |
| - terms = Shellword.shellwords(terms) rescue terms.split(/\s+/) | |
| - where = "job_id = ? AND analysis_completed_at IS NOT NULL " | |
| - param = [ @job_id ] | |
| - glue = "AND " | |
| - terms.each do |w| | |
| - next if w == "undefined" | |
| - where << glue | |
| - case w | |
| - when /^F(\d+)$/i # F2100 = peak frequency between 20… | |
| - freq = $1.to_i | |
| - where << "( peak_freq > ? AND peak_freq < ? ) " | |
| - param << freq - 5.0 | |
| - param << freq + 5.0 | |
| - else | |
| - where << "( number ILIKE ? OR caller_id ILIKE … | |
| - param << "%#{w}%" | |
| - param << "%#{w}%" | |
| - param << "%#{w}%" | |
| - end | |
| - glue = "AND " if glue.empty? | |
| - end | |
| + @search_conditions = [] | |
| + terms = params[:sSearch].to_s | |
| + terms = Shellword.shellwords(terms) rescue terms.split(/\s+/) | |
| + where = "job_id = ? AND analysis_completed_at IS NOT NULL " | |
| + param = [ @job_id ] | |
| + glue = "AND " | |
| + terms.each do |w| | |
| + next if w == "undefined" | |
| + where << glue | |
| + case w | |
| + when /^F(\d+)$/i # F2100 = peak frequency between 2095hz and 2105hz | |
| + freq = $1.to_i | |
| + where << "( peak_freq > ? AND peak_freq < ? ) " | |
| + param << freq - 5.0 | |
| + param << freq + 5.0 | |
| + else | |
| + where << "( number ILIKE ? OR caller_id ILIKE ? OR line_type ILIKE ?… | |
| + param << "%#{w}%" | |
| + param << "%#{w}%" | |
| + param << "%#{w}%" | |
| + end | |
| + glue = "AND " if glue.empty? | |
| + end | |
| @search_conditions = [ where, *param ] | |
| end | |
| def project_search | |
| - @search_conditions = [] | |
| - terms = params[:sSearch].to_s | |
| - terms = Shellword.shellwords(terms) rescue terms.split(/\s+/) | |
| - where = "project_id = ? AND analysis_completed_at IS NOT NULL " | |
| - param = [ @project.id ] | |
| - glue = "AND " | |
| - terms.each do |w| | |
| - next if w == "undefined" | |
| - where << glue | |
| - case w | |
| - when /^F(\d+)$/i # F2100 = peak frequency between 20… | |
| - freq = $1.to_i | |
| - where << "( peak_freq > ? AND peak_freq < ? ) " | |
| - param << freq - 5.0 | |
| - param << freq + 5.0 | |
| - else | |
| - where << "( number ILIKE ? OR caller_id ILIKE … | |
| - param << "%#{w}%" | |
| - param << "%#{w}%" | |
| - param << "%#{w}%" | |
| - end | |
| - glue = "AND " if glue.empty? | |
| - end | |
| - @search_conditions = [ where, *param ] | |
| + @search_conditions = [] | |
| + terms = params[:sSearch].to_s | |
| + terms = Shellword.shellwords(terms) rescue terms.split(/\s+/) | |
| + where = "project_id = ? AND analysis_completed_at IS NOT NULL " | |
| + param = [ @project.id ] | |
| + glue = "AND " | |
| + terms.each do |w| | |
| + next if w == "undefined" | |
| + where << glue | |
| + case w | |
| + when /^F(\d+)$/i # F2100 = peak frequency between 2095hz and 2105hz | |
| + freq = $1.to_i | |
| + where << "( peak_freq > ? AND peak_freq < ? ) " | |
| + param << freq - 5.0 | |
| + param << freq + 5.0 | |
| + else | |
| + where << "( number ILIKE ? OR caller_id ILIKE ? OR line_type ILIKE ?… | |
| + param << "%#{w}%" | |
| + param << "%#{w}%" | |
| + param << "%#{w}%" | |
| + end | |
| + glue = "AND " if glue.empty? | |
| + end | |
| + @search_conditions = [ where, *param ] | |
| end | |
| - | |
| end | |
| diff --git a/app/views/analyze/index.html.erb b/app/views/analyze/index.html.erb | |
| @@ -17,10 +17,10 @@ | |
| <table width='100%' border=0 cellpadding=6> | |
| <tbody><tr> | |
| <td> | |
| - <%= submit_checkboxes_to(raw('<i class="icon-refresh"></i> ReDial'), n… | |
| + <%= submit_checkboxes_to(raw('<i class="fa fa-refresh"></i> ReDial'), … | |
| </td> | |
| <td> | |
| - <%= submit_checkboxes_to(raw('<i class="icon-trash"></i> Delete'), pur… | |
| + <%= submit_checkboxes_to(raw('<i class="fa fa-trash"></i> Delete'), pu… | |
| </td> | |
| </tr></tbody></table> | |
| diff --git a/app/views/analyze/view.html.erb b/app/views/analyze/view.html.erb | |
| @@ -17,10 +17,10 @@ | |
| <table width='100%' border=0 cellpadding=6> | |
| <tbody><tr> | |
| <td> | |
| - <%= submit_checkboxes_to(raw('<i class="icon-refresh"></i> Scan'), new… | |
| + <%= submit_checkboxes_to(raw('<i class="fa fa-refresh"></i> Scan'), ne… | |
| </td> | |
| <td> | |
| - <%= submit_checkboxes_to(raw('<i class="icon-trash"></i> Delete'), pur… | |
| + <%= submit_checkboxes_to(raw('<i class="fa fa-trash"></i> Delete'), pu… | |
| </td> | |
| </tr></tbody></table> | |
| diff --git a/app/views/calls/index.html.erb b/app/views/calls/index.html.erb | |
| @@ -7,7 +7,7 @@ | |
| <tr> | |
| <th>ID</th> | |
| <th>Range</th> | |
| - <th>CallerID</th> | |
| + <th>CallerID</th> | |
| <th>Connected</th> | |
| <th>Date</th> | |
| <th>Actions</th> | |
| @@ -21,24 +21,25 @@ | |
| <td><%= job.range %></td> | |
| <td><%= job.cid_mask %></td> | |
| <td><%= ( | |
| - job.calls.where("analysis_completed_at IS NOT NULL").count.to_… | |
| - "/" + | |
| - job.calls.count.to_s | |
| - )%></td> | |
| + job.calls.where("analysis_completed_at IS NOT NULL").count.to_s + | |
| + "/" + | |
| + job.calls.count.to_s | |
| + )%></td> | |
| <td><%= job.started_at.localtime.strftime("%Y-%m-%d %H:%M:%S") %></td> | |
| <td> | |
| - <a class="btn" href="<%= view_call_path(@project,job) %>" rel="tooltip… | |
| - <% if job.calls.where("analysis_completed_at IS NOT NULL").cou… | |
| - <a class="btn" href="<%= analyze_call_path(@project,jo… | |
| - <a class="btn" href="<%= reanalyze_call_path(@project,… | |
| - <% else %> | |
| - <a class="btn" href="<%= analyze_call_path(@project,jo… | |
| - <% end %> | |
| + <a role="button" class="btn" href="<%= view_call_path(@project,job) %>… | |
| - <a class="btn" href="<%= call_path(@project,job) %>" data-confirm=… | |
| - </td> | |
| + <% if job.calls.where("analysis_completed_at IS NOT NULL").count > 0 %> | |
| + <a role="button" class="btn" href="<%= analyze_call_path(@project,job) %… | |
| + <a role="button" class="btn" href="<%= reanalyze_call_path(@project,job)… | |
| + <% else %> | |
| + <a role="button" class="btn" href="<%= analyze_call_path(@project,job) %… | |
| + <% end %> | |
| + | |
| + <a role="button" class="btn" href="<%= call_path(@project,job) %>" data-… | |
| + </td> | |
| </tr> | |
| <% end %> | |
| @@ -54,4 +55,4 @@ | |
| <% end %> | |
| -<a class="btn" href="<%= new_dialer_job_path %>"><i class="icon-plus"></i> Sta… | |
| +<a role="button" class="btn" href="<%= new_dialer_job_path %>"><i class="fa fa… | |
| diff --git a/app/views/home/about.html.erb b/app/views/home/about.html.erb | |
| @@ -6,7 +6,7 @@ | |
| <b>WarVOX</b> is a product of <a href="http://www.rapid7.com/">Rapid7</a> and … | |
| free software. WarVOX is intended for legal security assessment, asset invento… | |
| -and research purposes only. The latest version of WarVOX can be found in <i cl… | |
| +and research purposes only. The latest version of WarVOX can be found in <i cl… | |
| <a href="https://github.com/rapid7/warvox/"> https://github.com/rapid7/warvox/… | |
| </div> | |
| diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb | |
| @@ -2,10 +2,10 @@ | |
| <div class="span3"> | |
| <div class="sidebar"> | |
| <ul class="nav nav-list"> | |
| - <li class="active"><a href="#"><i class="icon-play"></i> Getting Started</… | |
| - <li><a href="#"><i class="icon-book"></i> Library</a></li> | |
| - <li><a href="#"><i class="icon-pencil"></i> Applications</a></li> | |
| - <li><a href="#"><i class="icon-cogs"></i> Settings</a></li> | |
| + <li class="active"><a href="#"><i class="fa fa-play"></i> Getting Started<… | |
| + <li><a href="#"><i class="fa fa-book"></i> Library</a></li> | |
| + <li><a href="#"><i class="fa fa-pencil"></i> Applications</a></li> | |
| + <li><a href="#"><i class="fa fa-cogs"></i> Settings</a></li> | |
| </ul> | |
| </div> | |
| </div> | |
| diff --git a/app/views/jobs/index.html.erb b/app/views/jobs/index.html.erb | |
| @@ -20,7 +20,7 @@ | |
| <td><%= time_ago_in_words(job.created_at) %> ago</td> | |
| <td> | |
| - <a class="btn" href="<%= job_path(job) %>" data-confirm="Remov… | |
| + <a class="btn" href="<%= job_path(job) %>" data-confirm="Remov… | |
| </td> | |
| <td><%= link_to( h(truncate(job.project.name, :length => 25)), project_pat… | |
| </tr> | |
| @@ -59,12 +59,12 @@ | |
| <td><%= time_ago_in_words(job.created_at) %> ago</td> | |
| <td> | |
| <% if job.task == "dialer" %> | |
| - <a class="btn" href="<%= view_results_path(job.project,job… | |
| + <a class="btn" href="<%= view_results_path(job.project,job… | |
| <% end %> | |
| <% if job.task == "analysis" and job.details[:scope].to_s != "call… | |
| - <a class="btn" href="<%= view_analyze_path(job.project,job… | |
| + <a class="btn" href="<%= view_analyze_path(job.project,job… | |
| <% end %> | |
| - <a class="btn" href="<%= stop_job_path(job) %>" data-confirm="… | |
| + <a class="btn" href="<%= stop_job_path(job) %>" data-confirm="… | |
| </td> | |
| <td><%= link_to( h(truncate(job.project.name, :length => 25)), project_pat… | |
| </tr> | |
| @@ -78,7 +78,7 @@ | |
| <h1 class='title'>No Active Jobs</h1> | |
| <% end %> | |
| -<a class="btn" href="<%= new_dialer_job_path %>"><i class="icon-phone"></i> <s… | |
| +<a class="btn" href="<%= new_dialer_job_path %>"><i class="fa fa-phone"></i> <… | |
| <% if(@inactive_jobs.length > 0) %> | |
| <br/><br/> | |
| diff --git a/app/views/jobs/new_analyze.html.erb b/app/views/jobs/new_analyze.h… | |
| @@ -11,7 +11,7 @@ | |
| <%= f.input :force, :as => :boolean, :label => 'Process previously an… | |
| <%= f.action :submit, :label => 'Analyze', :button_html => { :class =>… | |
| - <a class="btn btn-link" href="<%= project_path(@project) %>" rel="tool… | |
| + <a class="btn btn-link" href="<%= project_path(@project) %>" rel="tool… | |
| <% end %> | |
| <%= set_focus('job_submit') %> | |
| diff --git a/app/views/jobs/new_dialer.html.erb b/app/views/jobs/new_dialer.htm… | |
| @@ -20,7 +20,7 @@ | |
| <%= f.action :submit, :label => 'Dial', :button_html => { :class => 'b… | |
| - <a class="btn btn-link" href="<%= jobs_path %>" rel="tooltip" title="R… | |
| + <a class="btn btn-link" href="<%= jobs_path %>" rel="tooltip" title="R… | |
| <% end %> | |
| <%= set_focus('job_range') %> | |
| diff --git a/app/views/jobs/results.html.erb b/app/views/jobs/results.html.erb | |
| @@ -19,56 +19,56 @@ | |
| <% @jobs.each do |job| | |
| - cnt_dialed = job.calls.count.to_i | |
| - cnt_answered = job.calls.where("answered = ? and busy = ?", true, fals… | |
| - cnt_analyzed = job.calls.where("analysis_completed_at IS NOT NULL").co… | |
| - pct_answered = 0 | |
| - pct_analyzed = 0 | |
| - unless cnt_dialed == 0 | |
| - pct_answered = ((cnt_answered.to_f / cnt_dialed.to_f) * 100).t… | |
| - end | |
| - unless cnt_answered == 0 | |
| - pct_analyzed = ((cnt_analyzed.to_f / cnt_answered.to_f) * 100)… | |
| - end | |
| + cnt_dialed = job.calls.count.to_i | |
| + cnt_answered = job.calls.where("answered = ? and busy = ?", true, false).cou… | |
| + cnt_analyzed = job.calls.where("analysis_completed_at IS NOT NULL").count.to… | |
| + pct_answered = 0 | |
| + pct_analyzed = 0 | |
| + unless cnt_dialed == 0 | |
| + pct_answered = ((cnt_answered.to_f / cnt_dialed.to_f) * 100).to_i | |
| + end | |
| + unless cnt_answered == 0 | |
| + pct_analyzed = ((cnt_analyzed.to_f / cnt_answered.to_f) * 100).to_i | |
| + end | |
| %> | |
| <tr> | |
| <td><%= job.id %></td> | |
| <td><%= format_job_details(job) %></td> | |
| <td> | |
| - <% if job.task == "dialer" %> | |
| - <%= truncate(job.details[:range].to_s, :length => 15) … | |
| - <%= job.details[:cid_mask].to_s %> | |
| - <% end %> | |
| - <span rel="tooltip" class="xtooltip" title="<%= job.detail… | |
| - <%= truncate(job.details[:directory].to_s, :length => … | |
| - <% if job.task == "importer" %> | |
| + <% if job.task == "dialer" %> | |
| + <%= truncate(job.details[:range].to_s, :length => 15) %> / | |
| + <%= job.details[:cid_mask].to_s %> | |
| + <% end %> | |
| + <span rel="tooltip" class="xtooltip" title="<%= job.details[:directory… | |
| + <%= truncate(job.details[:directory].to_s, :length => 15) %> | |
| + <% if job.task == "importer" %> | |
| - <% end %> | |
| + <% end %> | |
| </td> | |
| <td><span rel="tooltip" class="xtooltip" title="<%= pct_answered %>% answe… | |
| <td><span rel="tooltip" class="xtooltip" title="<%= pct_analyzed %>% analy… | |
| - <td><%= time_ago_in_words(job.created_at) %> ago</td> | |
| - <td><%= job.created_by %></td> | |
| + <td><%= time_ago_in_words(job.created_at) %> ago</td> | |
| + <td><%= job.created_by %></td> | |
| <td> | |
| - <a class="btn" href="<%= view_results_path(@project,job) %>" rel="tool… | |
| + <a role="button" class="btn" href="<%= view_results_path(@project,job)… | |
| - <% if cnt_analyzed > 0 %> | |
| - <a class="btn" href="<%= view_analyze_path(@project,jo… | |
| - <% if pct_analyzed == 100 %> | |
| - <a class="btn" href="<%= reanalyze_job_path(@p… | |
| - <% else %> | |
| - <a class="btn" href="<%= analyze_job_path(@pro… | |
| - <% end %> | |
| - <% else %> | |
| - <% if cnt_answered > 0 %> | |
| - <a class="btn" href="<%= analyze_job_path(@project,job… | |
| - <% end %> | |
| - <% end %> | |
| + <% if cnt_analyzed > 0 %> | |
| + <a role="button" class="btn" href="<%= view_analyze_path(@project,job) %… | |
| + <% if pct_analyzed == 100 %> | |
| + <a role="button" class="btn" href="<%= reanalyze_job_path(@project,job… | |
| + <% else %> | |
| + <a role="button" class="btn" href="<%= analyze_job_path(@project,job) … | |
| + <% end %> | |
| + <% else %> | |
| + <% if cnt_answered > 0 %> | |
| + <a role="button" class="btn" href="<%= analyze_job_path(@project,job) %>… | |
| + <% end %> | |
| + <% end %> | |
| - <a class="btn" href="<%= job_path(job) %>" data-confirm="Delete al… | |
| - </td> | |
| + <a role="button" class="btn" href="<%= job_path(job) %>" data-confirm="D… | |
| + </td> | |
| </tr> | |
| <% end %> | |
| @@ -84,4 +84,4 @@ | |
| <% end %> | |
| -<a class="btn" href="<%= new_dialer_project_job_path(@project) %>"><i class="i… | |
| +<a role="button" class="btn" href="<%= new_dialer_project_job_path(@project) %… | |
| diff --git a/app/views/jobs/view_results.html.erb b/app/views/jobs/view_results… | |
| @@ -16,11 +16,11 @@ | |
| <table width='100%' border=0 cellpadding=6> | |
| <tbody><tr> | |
| <td> | |
| - <%= submit_checkboxes_to(raw('<i class="icon-refresh"></i> Scan'), new… | |
| + <%= submit_checkboxes_to(raw('<i class="fa fa-refresh"></i> Scan'), ne… | |
| </td><td> | |
| - <%= submit_checkboxes_to(raw('<i class="icon-cog"></i> Analyze'), anal… | |
| + <%= submit_checkboxes_to(raw('<i class="fa fa-cog"></i> Analyze'), ana… | |
| </td><td> | |
| - <%= submit_checkboxes_to(raw('<i class="icon-trash"></i> Delete'), pur… | |
| + <%= submit_checkboxes_to(raw('<i class="fa fa-trash"></i> Delete'), pu… | |
| </td> | |
| </tr></tbody></table> | |
| diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/applica… | |
| @@ -32,50 +32,8 @@ | |
| <% end %> | |
| </head> | |
| <body> | |
| - <div class="container"> | |
| - <%= nav_bar :fixed => :top, :brand => raw('<img src="/assets/l… | |
| - | |
| - <%= menu_group :pull => :right do %> | |
| - <% if @project and @project.id %> | |
| - <li> | |
| - <%= link_to( | |
| - raw( | |
| - '<i class="icon-chevro… | |
| - h(truncate(@project.na… | |
| - ' <i class="icon-chevr… | |
| - </li> | |
| - <%= menu_item "Scans", results_path(@project) … | |
| - <%= menu_item "Analysis", analyze_path(@projec… | |
| - <% end %> | |
| - | |
| - <%= menu_item "Jobs", jobs_path %> | |
| - <%= drop_down "Projects" do %> | |
| - <% if Project.count > 0 %> | |
| - <%= menu_item raw('<i class="i… | |
| - <% end %> | |
| - <%= menu_item raw('<i class="icon-plus… | |
| - <% if Project.count > 0 %> | |
| - <%= drop_down_divider %> | |
| - <%= drop_down_header "Recent P… | |
| - <% Project.order('ID DESC').li… | |
| - <%= menu_item raw('<i … | |
| - <% end %> | |
| - <% end %> | |
| - <% end %> | |
| - | |
| - <%= drop_down "Admin" do %> | |
| - <%= menu_item raw('<i class="icon-user… | |
| - <%= menu_item raw('<i class="icon-glob… | |
| - <%= menu_item raw('<i class="icon-wren… | |
| - <%= menu_item raw('<i class="icon-info… | |
| - <% end %> | |
| - | |
| - <%= menu_item raw('<div class="help-icon"><i c… | |
| - | |
| - <%= menu_item raw('<div class="help-icon"><i c… | |
| - <% end %> | |
| - <% end %> | |
| - | |
| + <%= render 'nav' %> | |
| + <div class="container" id="main"> | |
| <div class="row"> | |
| <div class="span12"> | |
| <div class="content"> | |
| @@ -85,7 +43,7 @@ | |
| </div> | |
| <footer class="footer"> | |
| - <p>WarVOX v<%=WarVOX::VERSION %> © 2009-<%= Time.now.ye… | |
| + <p>WarVOX v<%=WarVOX::VERSION %> © 2009-<%= Time.now.ye… | |
| </footer> | |
| </div> | |
| diff --git a/app/views/projects/edit.html.erb b/app/views/projects/edit.html.erb | |
| @@ -4,7 +4,7 @@ | |
| <%= f.input :name, :as => :string, :label => 'Name' %> | |
| <%= f.input :description, :as => :text, :input_html => { :class => 'pr… | |
| <%= f.action :submit, :label => 'Update', :button_html => { :class => … | |
| - <a class="btn btn-link" href="<%= projects_path %>"rel="tooltip" title… | |
| + <a class="btn btn-link" href="<%= projects_path %>"rel="tooltip" title… | |
| <% end %> | |
| <%= set_focus('project_name') %> | |
| diff --git a/app/views/projects/index.html.erb b/app/views/projects/index.html.… | |
| @@ -25,8 +25,8 @@ | |
| <td><%= number_with_delimiter(project.calls.where('analysis_completed_at I… | |
| <td><%= time_ago_in_words(project.created_at) %> ago</td> | |
| <td> | |
| - <a class="btn" href="<%= edit_project_path(project) %>"rel="tool… | |
| - <a class="btn" href="<%= project_path(project) %>" data-confirm="D… | |
| + <a class="btn" href="<%= edit_project_path(project) %>"rel="tool… | |
| + <a class="btn" href="<%= project_path(project) %>" data-confirm="D… | |
| </td> | |
| </tr> | |
| @@ -43,4 +43,4 @@ | |
| <% end %> | |
| -<a class="btn" href="<%= new_project_path %>"><i class="icon-plus"></i> Create… | |
| +<a class="btn" href="<%= new_project_path %>"><i class="fa fa-plus"></i> Creat… | |
| diff --git a/app/views/projects/new.html.erb b/app/views/projects/new.html.erb | |
| @@ -4,7 +4,7 @@ | |
| <%= f.input :name, :as => :string, :label => 'Name', :input_html => { … | |
| <%= f.input :description, :as => :text, :input_html => { :class => 'pr… | |
| <%= f.action :submit, :label => 'Create', :button_html => { :class => … | |
| - <a class="btn btn-link" href="<%= projects_path %>"rel="tooltip" title… | |
| + <a class="btn btn-link" href="<%= projects_path %>"rel="tooltip" title… | |
| <% end %> | |
| <%= set_focus('project_name') %> | |
| diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb | |
| @@ -1,6 +1,6 @@ | |
| <div class="row-fluid"> | |
| <div class="span12"> | |
| - <a class="btn btn-small pull-right" href="<%= edit_project_pat… | |
| + <a class="btn btn-small pull-right" href="<%= edit_project_pat… | |
| <h1 class='title'>Project <%= @project.name %></h1> | |
| <p class='project-header'><%=h @project.description %></p> | |
| </div> | |
| @@ -16,15 +16,15 @@ | |
| <div class="span9"> | |
| <div class="row-fluid"> | |
| <div class="span2"> </div> | |
| - <div class="span2"><a href="<%= new_dialer_project_job… | |
| + <div class="span2"><a href="<%= new_dialer_project_job… | |
| <% if @boxes[:answered][:cnt] > 0 %> | |
| - <div class="span2"><a href="<%= new_analyze_project_jo… | |
| - <div class="span2"><a href="#" class="btn" rel="toolti… | |
| - <div class="span2"><a href="#" class="btn" rel="toolti… | |
| + <div class="span2"><a href="<%= new_analyze_project_jo… | |
| + <div class="span2"><a href="#" class="btn" rel="toolti… | |
| + <div class="span2"><a href="#" class="btn" rel="toolti… | |
| <% else %> | |
| - <div class="span2"><a href="#" class="btn disabled" re… | |
| - <div class="span2"><a href="#" class="btn" rel="toolti… | |
| - <div class="span2"><a href="#" class="btn disabled" re… | |
| + <div class="span2"><a href="#" class="btn disabled" re… | |
| + <div class="span2"><a href="#" class="btn" rel="toolti… | |
| + <div class="span2"><a href="#" class="btn disabled" re… | |
| <% end %> | |
| <div class="span2"> </div> | |
| </div> | |
| @@ -32,7 +32,7 @@ | |
| </div> | |
| <div class="row-fluid"> | |
| - <div class="span3 arrow-down"><i class="icon-arrow-down"></i></div> | |
| + <div class="span3 arrow-down"><i class="fa fa-arrow-down"></i></div> | |
| <div class="span9"> </div> | |
| </div> | |
| @@ -47,7 +47,7 @@ | |
| </div> | |
| <div class="row-fluid"> | |
| - <div class="span3 arrow-down"><i class="icon-arrow-down"></i></div> | |
| + <div class="span3 arrow-down"><i class="fa fa-arrow-down"></i></div> | |
| <div class="span9"> </div> | |
| </div> | |
| @@ -62,7 +62,7 @@ | |
| </div> | |
| <div class="row-fluid"> | |
| - <div class="span3 arrow-down"><i class="icon-arrow-down"></i></div> | |
| + <div class="span3 arrow-down"><i class="fa fa-arrow-down"></i></div> | |
| <div class="span9"> </div> | |
| </div> | |
| @@ -169,12 +169,12 @@ | |
| <td><%= time_ago_in_words(job.created_at) %> ago</td> | |
| <td> | |
| <% if job.task == "dialer" %> | |
| - <a class="btn" href="<%= view_results_path(job.pro… | |
| + <a class="btn" href="<%= view_results_path(job.pro… | |
| <% end %> | |
| <% if job.task == "analysis" and job.details[:scope].to_s … | |
| - <a class="btn" href="<%= view_analyze_path(job.pro… | |
| + <a class="btn" href="<%= view_analyze_path(job.pro… | |
| <% end %> | |
| - <a class="btn" href="<%= stop_job_path(job) %>" data-c… | |
| + <a class="btn" href="<%= stop_job_path(job) %>" data-c… | |
| </td> | |
| </tr> | |
| <% end %> | |
| diff --git a/app/views/providers/edit.html.erb b/app/views/providers/edit.html.… | |
| @@ -10,5 +10,5 @@ | |
| <%= f.input :lines, :as => :number, :label => 'Maximum Lines', :hint =… | |
| <%= f.action :submit, :label => 'Update', :button_html => { :class => … | |
| - <a class="btn btn-link" href="<%= providers_path %>" rel="tooltip" tit… | |
| + <a class="btn btn-link" href="<%= providers_path %>" rel="tooltip" tit… | |
| <% end %> | |
| diff --git a/app/views/providers/index.html.erb b/app/views/providers/index.htm… | |
| @@ -17,7 +17,7 @@ | |
| <% @providers.each do |provider| %> | |
| <tr> | |
| <td> | |
| - <i class="icon-<%= provider.enabled ? "ok" : "remove" %>"></i> | |
| + <i class="fa fa-<%= provider.enabled ? "ok" : "remove" %>"></i> | |
| </td> | |
| <td><%= provider.name %></td> | |
| <td><%= provider.host %></td> | |
| @@ -25,8 +25,8 @@ | |
| <td><%= provider.user %></td> | |
| <td><%= provider.lines %></td> | |
| <td> | |
| - <a class="btn" href="<%= edit_provider_path(provider) %>"rel="tool… | |
| - <a class="btn" href="<%= provider_path(provider) %>" data-confirm=… | |
| + <a class="btn" href="<%= edit_provider_path(provider) %>"rel="tool… | |
| + <a class="btn" href="<%= provider_path(provider) %>" data-confirm=… | |
| </td> | |
| </tr> | |
| <% end %> | |
| @@ -37,4 +37,4 @@ | |
| <% end %> | |
| <br/> | |
| -<a class="btn" href="<%= new_provider_path %>"><i class="icon-plus"></i> Add P… | |
| +<a class="btn" href="<%= new_provider_path %>"><i class="fa fa-plus"></i> Add … | |
| diff --git a/app/views/providers/new.html.erb b/app/views/providers/new.html.erb | |
| @@ -9,5 +9,5 @@ | |
| <%= f.input :lines, :as => :number, :label => 'Maximum Lines', :hint =… | |
| <%= f.action :submit, :label => 'Create', :button_html => { :class => … | |
| - <a class="btn btn-link" href="<%= providers_path %>" rel="tooltip" tit… | |
| + <a class="btn btn-link" href="<%= providers_path %>" rel="tooltip" tit… | |
| <% end %> | |
| diff --git a/app/views/shared/_call_signal.html.erb b/app/views/shared/_call_si… | |
| @@ -3,8 +3,8 @@ | |
| <% if call.fprint and call.fprint.length > 0 and call != @result %> | |
| <% if @job_id %> | |
| - <a class="btn" href="<%= view_matches_path(call.project_id, call.job_i… | |
| + <a class="btn" href="<%= view_matches_path(call.project_id, call.job_i… | |
| <% else %> | |
| - <a class="btn" href="<%= view_matches_project_path(call.project_id, ca… | |
| + <a class="btn" href="<%= view_matches_project_path(call.project_id, ca… | |
| <% end%> | |
| <% end %> | |
| diff --git a/config/routes.rb b/config/routes.rb | |
| @@ -34,7 +34,7 @@ Web::Application.routes.draw do | |
| get '/projects/:project_id/analyze' => 'analyze#index', :as => :… | |
| - get '/call/:result_id.:type' => 'analyze#resource', :as =>… | |
| + get '/call/:result_id/:rtype' => 'analyze#resource', :as =… | |
| get '/projects/:project_id/analyze/:id/view' => 'analyze#view', :as => :v… | |
| get '/projects/:project_id/analyze/:job_id/:call_id/matches' => 'analyze#… |