Introduction
Introduction Statistics Contact Development Disclaimer Help
Major UI cleanup, still much more to go - warvox - VoIP based wardialing tool, …
Log
Files
Refs
README
---
commit e1547bc2058230f93ae14da36e96917886d42647
parent c076798b456974f4d6a4992f2ff8256183424a45
Author: HD Moore <[email protected]>
Date: Sat, 29 Dec 2012 14:26:58 -0600
Major UI cleanup, still much more to go
Diffstat:
M Gemfile | 9 ++++++---
M Gemfile.lock | 5 ++++-
M app/assets/images/logo.png | 0
A app/assets/images/logo_light.png | 0
M app/assets/javascripts/application… | 2 ++
M app/assets/javascripts/highcharts.… | 2 +-
A app/assets/javascripts/html5.js | 4 ++++
D app/assets/stylesheets/application… | 7 -------
M app/assets/stylesheets/application… | 3 +++
M app/assets/stylesheets/bootstrap_a… | 160 +++++++++++++++++++++++++++…
D app/assets/stylesheets/global.css | 555 -----------------------------…
D app/assets/stylesheets/ie7.css | 3 ---
M app/controllers/dial_jobs_controll… | 22 +---------------------
M app/controllers/dial_results_contr… | 14 ++------------
M app/tabs/tabulous.rb | 30 +++++++++++++++---------------
M app/views/analyze/index.html.erb | 32 +++++++++++++++++++++++------…
M app/views/analyze/view.html.erb | 7 +++++--
M app/views/analyze/view_matches.htm… | 10 +++++++---
M app/views/dial_jobs/index.html.erb | 64 +++++++++--------------------…
M app/views/dial_results/index.html.… | 52 ++++++++++++++++++++-------…
M app/views/dial_results/view.html.e… | 16 +++++++++++++++-
M app/views/home/about.html.erb | 76 ++++++++++++++++-------------…
M app/views/home/index.html.erb | 22 +++++++++++++++++++---
M app/views/layouts/application.html… | 51 ++++++++++++---------------…
M app/views/providers/index.html.erb | 63 ++++++++++-------------------…
M app/views/shared/graphs/_call_resu… | 57 ++++++++++++++++-----------…
M app/views/shared/graphs/_lines_by_… | 56 +++++++++++++++------------…
M config/environments/development.rb | 2 ++
A lib/templates/erb/scaffold/_form.h… | 11 +++++++++++
M public/robots.txt | 7 ++-----
30 files changed, 449 insertions(+), 893 deletions(-)
---
diff --git a/Gemfile b/Gemfile
@@ -5,6 +5,9 @@ gem 'thin'
gem 'rails', '3.2.8'
gem 'pg', '0.11'
+gem 'jquery-rails'
+gem 'jquery-datatables-rails'
+
# 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'
@@ -20,11 +23,11 @@ group :assets do
gem 'uglifier', '>= 1.0.3'
end
-gem "less-rails"
-gem "twitter-bootstrap-rails"
+gem 'twitter-bootstrap-rails'
gem 'formtastic-bootstrap'
gem 'tabulous'
-gem 'jquery-rails'
+gem "therubyracer", :group => :assets, :platform => :ruby
+
gem 'will_paginate', '~> 3.0'
gem 'dynamic_form'
diff --git a/Gemfile.lock b/Gemfile.lock
@@ -61,6 +61,8 @@ GEM
hike (1.2.1)
i18n (0.6.1)
journey (1.0.4)
+ jquery-datatables-rails (1.11.1)
+ jquery-rails
jquery-rails (2.1.4)
railties (>= 3.0, < 5.0)
thor (>= 0.14, < 2.0)
@@ -148,15 +150,16 @@ DEPENDENCIES
coffee-rails (~> 3.2.1)
dynamic_form
formtastic-bootstrap
+ jquery-datatables-rails
jquery-rails
kissfft
- less-rails
librex
pg (= 0.11)
postgres_ext!
rails (= 3.2.8)
sass-rails (~> 3.2.3)
tabulous
+ therubyracer
thin
twitter-bootstrap-rails
uglifier (>= 1.0.3)
diff --git a/app/assets/images/logo.png b/app/assets/images/logo.png
Binary files differ.
diff --git a/app/assets/images/logo_light.png b/app/assets/images/logo_light.png
Binary files differ.
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/app…
@@ -4,4 +4,6 @@
//= require jquery_ujs
//= require twitter/bootstrap
//= require jquery.lightbox-0.5
+//= require dataTables/jquery.dataTables
+//= require dataTables/jquery.dataTables.bootstrap
//= require highcharts
diff --git a/app/assets/javascripts/highcharts.js b/app/assets/javascripts/high…
@@ -30,7 +30,7 @@ canvasToolsURL:"http://code.highcharts.com/2.3.3/modules/canv…
position:{align:"right",x:-10,y:10}}},title:{text:"Chart title",align:"center"…
verticalAlign:"bottom",y:0}),cropThreshold:300,pointRange:0,showInLegend:!0,st…
itemHiddenStyle:{color:"#CCC"},itemCheckboxStyle:{position:"absolute",width:"1…
-hour:"%A, %b %e, %H:%M",day:"%A, %b %e, %Y",week:"Week from %A, %b %e, %Y",mon…
+hour:"%A, %b %e, %H:%M",day:"%A, %b %e, %Y",week:"Week from %A, %b %e, %Y",mon…
style:{cursor:"pointer",color:"#909090",fontSize:"10px"}}};var W=M.plotOptions…
b[3]:"rgba("+b.join(",")+")":a},brighten:function(a){if(Aa(a)&&a!==0){var c;fo…
i=this.renderer,j,k=this.attrSetters,l=this.shadows,m,p,u=this;la(a)&&t(b)&&(c…
diff --git a/app/assets/javascripts/html5.js b/app/assets/javascripts/html5.js
@@ -0,0 +1,3 @@
+/*! HTML5 Shiv vpre3.6 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+ Uncompressed source: https://github.com/aFarkas/html5shiv */
+(function(a,b){function h(a,b){var c=a.createElement("p"),d=a.getElementsByTag…
+\ No newline at end of file
diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/ap…
@@ -1,7 +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_self
- *= require_tree .
-*/
diff --git a/app/assets/stylesheets/application.css.scss b/app/assets/styleshee…
@@ -4,4 +4,7 @@
/*
*= require_self
+ *= require formtastic
+ *= require formtastic-bootstrap
+ *= require dataTables/jquery.dataTables.bootstrap
*/
diff --git a/app/assets/stylesheets/bootstrap_and_overrides.css.less b/app/asse…
@@ -1,30 +1,148 @@
@import "twitter/bootstrap/bootstrap";
+
+body {
+ padding-top: 5px;
+}
+
@import "twitter/bootstrap/responsive";
// Set the correct sprite paths
-@iconSpritePath: asset-path("twitter/bootstrap/glyphicons-halflings.png");
-@iconWhiteSpritePath: asset-path("twitter/bootstrap/glyphicons-halflings-white…
+@iconSpritePath: asset-path('twitter/bootstrap/glyphicons-halflings.png');
+@iconWhiteSpritePath: asset-path('twitter/bootstrap/glyphicons-halflings-white…
// Set the Font Awesome (Font Awesome is default. You can disable by commentin…
// Note: If you use asset_path() here, your compiled boostrap_and_overrides.cs…
-// have the proper paths. So for now we use the absolute path.
-@fontAwesomeEotPath: asset-path("fontawesome-webfont.eot");
-@fontAwesomeWoffPath: asset-path("fontawesome-webfont.woff");
-@fontAwesomeTtfPath: asset-path("fontawesome-webfont.ttf");
-@fontAwesomeSvgPath: asset-path("fontawesome-webfont.svg");
+// have the proper paths. So for now we use the absolute path.
+@fontAwesomeEotPath: '/assets/fontawesome-webfont.eot';
+@fontAwesomeWoffPath: '/assets/fontawesome-webfont.woff';
+@fontAwesomeTtfPath: '/assets/fontawesome-webfont.ttf';
+@fontAwesomeSvgPath: '/assets/fontawesome-webfont.svg';
// Font Awesome
-@import "fontawesome";
-
-// Your custom LESS stylesheets goes here
-//
-// Since bootstrap was imported above you have access to its mixins which
-// you may use and inherit here
-//
-// If you'd like to override bootstrap's own variables, you can do so here as …
-// See http://twitter.github.com/bootstrap/customize.html#variables for their …
-//
-// Example:
-// @linkColor: #ff0000;
-
-body { padding-top: 80px; }
+@import "fontawesome.less";
+
+@sansFontFamily: "Trebuchet MS", Arial, Helvetica, sans-serif;
+@green: #90d552;
+@orange: #ea5709;
+@darkGray: #29383f;
+@lightGray: #666666;
+@blue: #0197b8;
+
+@linkColor: @blue;
+@linkColorHover: @darkGray;
+
+@btnPrimaryBackground: @blue;
+@btnPrimaryBackgroundHighlight: @btnPrimaryBackground;
+
+@navbarLinkColor: @white;
+@navbarLinkColorActive: @white;
+@navbarLinkColorHover: @yellow;
+
+@dropdownLinkColorHover: @yellow;
+@dropdownLinkBackgroundHover: @dropdownBackground;
+
+@headingsColor: @darkGray;
+
+@navbarBackground: #ea5709;
+@navbarBackgroundHighlight: #4A1C04;
+
+.nav {
+ a {
+ font-size: 15px;
+ }
+}
+
+.content {
+ margin-top: 40px;
+}
+
+.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 @orange;
+ padding-top: 20px;
+}
+
+.header a {
+ color: @darkGray;
+}
+
+.header a:hover {
+ text-decoration: none;
+ color: @orange;
+}
+
+.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/global.css b/app/assets/stylesheets/global.…
@@ -1,555 +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('/assets/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('/assets/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('/assets/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/app/assets/stylesheets/ie7.css b/app/assets/stylesheets/ie7.css
@@ -1,3 +0,0 @@
-#logo {
- margin-top: 7px;
-}
diff --git a/app/controllers/dial_jobs_controller.rb b/app/controllers/dial_job…
@@ -22,14 +22,6 @@ class DialJobsController < ApplicationController
end
end
-=begin
- # GET /dial_jobs/1/edit
- def edit
- @dial_job = DialJob.find(params[:id])
- end
-=end
-
-
# GET /dial_jobs/1/run
def run
@dial_job = DialJob.find(params[:id])
@@ -86,7 +78,7 @@ class DialJobsController < ApplicationController
# Launch it
WarVOX::JobManager.schedule(::WarVOX::Jobs::Dialer, @dial_job.id)
- format.html { redirect_to(@dial_job) }
+ format.html { redirect_to :action => 'index' }
format.xml { render :xml => @dial_job, :status => :created, :location…
else
format.html { render :action => "new" }
@@ -107,16 +99,4 @@ class DialJobsController < ApplicationController
end
end
- # GET /dial_jobs/1
- # GET /dial_jobs/1.xml
- def show
- @dial_job = DialJob.find(params[:id])
-
- respond_to do |format|
- format.html # show.html.erb
- format.xml { render :xml => @dial_job }
- end
- end
-
-
end
diff --git a/app/controllers/dial_results_controller.rb b/app/controllers/dial_…
@@ -3,7 +3,7 @@ class DialResultsController < ApplicationController
# GET /dial_results
# GET /dial_results.xml
def index
- @completed_jobs = DialJob.where(:status => 'completed').paginate(
+ @jobs = DialJob.where(:status => 'completed').paginate(
:page => params[:page],
:order => 'id DESC',
:per_page => 30
@@ -162,7 +162,7 @@ class DialResultsController < ApplicationController
# DELETE /dial_results/1
# DELETE /dial_results/1.xml
- def purge
+ def destroy
@job = DialJob.find(params[:id])
@job.destroy
@@ -173,14 +173,4 @@ class DialResultsController < ApplicationController
end
end
- # DELETE /dial_results/1
- # DELETE /dial_results/1.xml
- def delete
- @res = DialResult.find(params[:id])
- @res.destroy
- respond_to do |format|
- format.html { redirect_to :action => 'index' }
- format.xml { head :ok }
- end
- end
end
diff --git a/app/tabs/tabulous.rb b/app/tabs/tabulous.rb
@@ -57,11 +57,10 @@ Tabulous.setup do |config|
#-----------------------------------------------------------------------…
# TAB NAME | DISPLAY TEXT | PATH …
#-----------------------------------------------------------------------…
- [ :home_tab , 'Home' , root_path …
+ [ :start_tab , 'Start' , new_dial_job_path …
[ :dial_jobs_tab , 'Jobs' , dial_jobs_path …
[ :dial_results_tab , 'Results' , dial_results_path …
[ :providers_tab , 'Providers' , providers_path …
- [ :analyze_tab , 'Analysis' , analyze_path …
[ :about_tab , 'About' , about_path …
#-----------------------------------------------------------------------…
# TAB NAME | DISPLAY TEXT | PATH …
@@ -88,11 +87,11 @@ Tabulous.setup do |config|
#--------------------------------------------------------------------#
# CONTROLLER | ACTION | TAB #
#--------------------------------------------------------------------#
- [ :dial_jobs , :all_actions , :dial_jobs_tab ],
+ [ :dial_jobs , :new , :start_tab ],
+ [ :dial_jobs , :index , :dial_jobs_tab ],
[ :dial_results , :all_actions , :dial_results_tab ],
+ [ :analyze , :all_actions , :dial_results_tab ],
[ :providers , :all_actions , :providers_tab ],
- [ :analyze , :all_actions , :analyze_tab ],
- [ :home , :index , :home_tab ],
[ :home , :about , :about_tab ],
#--------------------------------------------------------------------#
# CONTROLLER | ACTION | TAB #
@@ -113,9 +112,10 @@ Tabulous.setup do |config|
# Tabulous expects every controller action to be associated with a tab.
# When an action does not have an associated tab (or subtab), you can
# instruct tabulous how to behave:
- config.when_action_has_no_tab = :raise_error # the default behavior
- # config.when_action_has_no_tab = :do_not_render # no tab navigation HTML w…
- # config.when_action_has_no_tab = :render # the tab navigation HTML …
+ #config.when_action_has_no_tab = :raise_error # the default behavior
+ #config.when_action_has_no_tab = :do_not_render # no tab navigation HTML wi…
+
+ config.when_action_has_no_tab = :render # the tab navigation HTML wi…
# but no tab or subtab wil…
#--------------------
@@ -129,7 +129,7 @@ Tabulous.setup do |config|
# This gives you control over what class the <ul> element that wraps the tabs
# will have. Good for interfacing with third-party code like Twitter
# Bootstrap.
- config.tabs_ul_class = "nav nav-pills"
+ config.tabs_ul_class = "nav"
# This gives you control over what class the <ul> element that wraps the sub…
# will have. Good for interfacing with third-party code.
@@ -138,7 +138,7 @@ Tabulous.setup do |config|
# Set this to true to have subtabs rendered in markup that Twitter Bootstrap
# understands. If this is set to true, you don't need to call subtabs in
# your layout, just tabs.
- # config.bootstrap_style_subtabs = true
+ config.bootstrap_style_subtabs = true
#-------------------
@@ -165,11 +165,11 @@ Tabulous.setup do |config|
# You can tweak the colors of the generated CSS.
- config.css.background_color = '#ccc'
+ config.css.background_color = '#000'
config.css.text_color = '#444'
- config.css.active_tab_color = 'white'
- config.css.hover_tab_color = '#ddd'
- config.css.inactive_tab_color = '#aaa'
- config.css.inactive_text_color = '#888'
+ config.css.active_tab_color = '#000'
+ config.css.hover_tab_color = '#000'
+ config.css.inactive_tab_color = '#000'
+ config.css.inactive_text_color = '#000'
end
diff --git a/app/views/analyze/index.html.erb b/app/views/analyze/index.html.erb
@@ -2,31 +2,47 @@
<h1 class='title'>Analyzed Jobs</h1>
<%= raw(will_paginate @jobs) %>
-<table class='table_scaffold' width='100%'>
+<table class='table table-striped table-bordered' width='90%'>
+ <thead>
<tr>
<th>ID</th>
<th>Range</th>
<th>CallerID</th>
<th>Connected</th>
<th>Date</th>
+ <th>Actions</th>
</tr>
+ </thead>
+ <tbody>
<% @jobs.sort{|a,b| b.id <=> a.id}.each do |dial_job| %>
<tr>
<td><%=h dial_job.id %></td>
<td><%=h dial_job.range %></td>
- <td><%=h dial_job.cid_mask %></td>
+ <td><%=h dial_job.cid_mask %></td>
<td><%=h (
- DialResult.count(:conditions => ['dial_job_id = ? and processe…
- "/" +
- DialResult.count(:conditions => ['dial_job_id = ?', dial_job.i…
+ DialResult.count(:conditions => ['dial_job_id = ? and processe…
+ "/" +
+ DialResult.count(:conditions => ['dial_job_id = ?', dial_job.i…
)%></td>
<td><%=h dial_job.started_at.localtime.strftime("%Y-%m-%d %H:%M:%S") %></t…
- <!-- <td><%= link_to 'Overview', show_analyze_path(dial_job) %></td> -->
- <td><%= link_to 'Browse', view_analyze_path(dial_job) %></td>
- <td><%= link_to 'ReAnalyze', reanalyze_dial_result_path(dial_job), :co…
+
+ <td>
+ <a class="btn btn-mini" href="<%= view_dial_result_path(dial_job) %>">…
+
+ <% if(dial_job.processed) %>
+ <a class="btn btn-mini" href="<%= analyze_dial_result_…
+ <a class="btn btn-mini" href="<%= reanalyze_dial_resul…
+ <% else %>
+ <a class="btn btn-mini" href="<%= analyze_dial_result_…
+ <% end %>
+
+ <a class="btn btn-mini" href="<%= dial_result_path(dial_job) %>" d…
+ </td>
</tr>
+
<% end %>
+</tbody>
</table>
<%= raw(will_paginate @jobs) %>
diff --git a/app/views/analyze/view.html.erb b/app/views/analyze/view.html.erb
@@ -12,11 +12,14 @@
<%= raw(will_paginate @results) %>
-<table class='table_scaffold' width='100%'>
+<table class='table table-striped table-bordered' width='90%'>
+ <thead>
<tr>
<th>Number</th>
<th>Signal</th>
</tr>
+ </thead>
+ <tbody>
<% @results.each do |dial_result| %>
<tr>
@@ -56,13 +59,13 @@
</td>
</tr>
<% end %>
+</tbody>
</table>
<%= raw(will_paginate @results) %>
<script type="text/javascript">
$(function() {
- // Use this example, or...
$('a.lightbox').lightBox();
});
</script>
diff --git a/app/views/analyze/view_matches.html.erb b/app/views/analyze/view_m…
@@ -1,13 +1,12 @@
<% dial_result = @result %>
<h1 class='title'><%= @result.number %> (<a href="<%=view_analyze_path(dial_re…
-<table class='table_scaffold' width='100%'>
+<table class='table table-striped table-bordered' width='90%'>
<tr>
<th>Number</th>
<th>Signal</th>
</tr>
-
<tr>
<td align='center'>
@@ -42,15 +41,19 @@
<% end %>
</td>
</tr>
+
</table><br/><br/>
<h1 class='title'>Matches for <%= @result.number %></h1>
-<table class='table_scaffold' width='100%'>
+<table class='table table-striped table-bordered' width='90%'>
+ <thead>
<tr>
<th>Number</th>
<th>Signal</th>
</tr>
+ </thead>
+ <tbody>
<% @results.each do |dial_result| %>
<tr>
@@ -93,6 +96,7 @@
</td>
</tr>
<% end %>
+</tbody>
</table>
<script type="text/javascript">
diff --git a/app/views/dial_jobs/index.html.erb b/app/views/dial_jobs/index.htm…
@@ -2,27 +2,30 @@
<h1 class='title'>Submitted Jobs</h1>
-<table class='table_scaffold' width='100%'>
+<table class='table table-striped table-bordered' width='90%'>
<tr>
- <th>ID</th>
+ <th>ID</th>
<th>Range</th>
- <th>CallerID</th>
+ <th>CallerID</th>
<th>Seconds</th>
<th>Lines</th>
- <th>Submitted Time</th>
+ <th>Submitted Time</th>
+ <th>Actions</th>
</tr>
<% @submitted_jobs.each do |dial_job| %>
<tr>
<td><%=h dial_job.id %></td>
<td><%=h dial_job.range %></td>
- <td><%=h dial_job.cid_mask %></td>
+ <td><%=h dial_job.cid_mask %></td>
<td><%=h dial_job.seconds %></td>
<td><%=h dial_job.lines %></td>
<td><%=h dial_job.created_at.localtime.strftime("%Y-%m-%d %H:%M:%S %Z") %>…
- <td><%= link_to 'Execute', run_dial_job_path(dial_job), :confirm => 'Launc…
- <td><%= link_to 'Modify', edit_dial_job_path(dial_job)%></td>
- <td><%= link_to 'Delete', dial_job, :confirm => 'Are you sure?', :method =…
+
+ <td>
+ <a class="btn btn-mini" href="<%= run_dial_job_path(dial_job) %>" …
+ <a class="btn btn-mini" href="<%= dial_job %>" data-confirm="R…
+ </td>
</tr>
<% end %>
</table>
@@ -33,7 +36,7 @@
<h1 class='title'>Active Jobs</h1>
-<table class='table_scaffold' width='100%'>
+<table class='table table-striped table-bordered' width='90%'>
<tr>
<th>ID</th>
<th>Range</th>
@@ -43,8 +46,9 @@
<th>Status</th>
<th>Progress</th>
<th>Start Time</th>
+ <th>Actions</th>
</tr>
-
+
<% @active_jobs.each do |dial_job| %>
<tr class='active_job_row'>
<td><%=h dial_job.id %></td>
@@ -55,7 +59,9 @@
<td><%=h dial_job.status %></td>
<td><%=h dial_job.progress %>%</td>
<td><%=h dial_job.started_at.localtime.strftime("%Y-%m-%d %H:%M:%S %Z") %>…
- <td colspan='3'><%= link_to 'Stop', dial_job, :confirm => 'Are you sure?',…
+ <td>
+ <a class="btn btn-mini" href="<%= stop_dial_job(dial_job) %>" …
+ </td>
</tr>
<% end %>
</table>
@@ -68,40 +74,8 @@
<% end %>
<% if (@active_jobs.length + @submitted_jobs.length == 0) %>
-<h1 class='title'>No Active or Submitted Jobs</h1>
+<h1 class='title'>No Active Jobs</h1>
<br/>
+<a class="btn" href="<%= new_dial_job_path %>"><i class="icon-plus"></i> Start…
<% end %>
-<h1 class='title'>Submit a New Job</h1>
-
-<%= form_for(@new_job, :html => { :multipart => true }) do |f| %>
- <%= f.error_messages %>
- <p>
- <%= f.label :range, 'Specify target telephone range(s) (1-123-456-7890 or …
- <%= f.text_area :range, :size => "35x5" %>
- </p>
-
- <p>
- <%= f.label :range_file, 'Or upload a file containing the target ranges' %…
- <%= f.file_field :range_file %>
- </p>
-
- <p>
- <%= f.label :seconds, 'Seconds of audio to capture' %><br />
- <%= f.text_field :seconds, :value => 53 %>
- </p>
-
- <p>
- <%= f.label :lines, 'Maximum number of outgoing lines' %><br />
- <%= f.text_field :lines, :value => 10 %>
- </p>
-
- <p>
- <%= f.label :lines, 'The source Caller ID range (1-555-555-5555 or 1-555-5…
- <%= f.text_field :cid_mask, :value => '1-123-456-XXXX' %>
- </p>
-
- <p>
- <%= f.submit "Create" %>
- </p>
-<% end %>
diff --git a/app/views/dial_results/index.html.erb b/app/views/dial_results/ind…
@@ -1,41 +1,57 @@
-<% if @completed_jobs.length > 0 %>
+<% if @jobs.length > 0 %>
<h1 class='title'>Completed Jobs</h1>
-<table class='table_scaffold' width='100%'>
+<%= raw(will_paginate @jobs) %>
+<table class='table table-striped table-bordered' width='90%'>
+ <thead>
<tr>
<th>ID</th>
<th>Range</th>
- <th>CID</th>
- <th>Answered</th>
- <th>Time</th>
+ <th>CallerID</th>
+ <th>Connected</th>
+ <th>Date</th>
+ <th>Actions</th>
</tr>
+ </thead>
+ <tbody>
-<% @completed_jobs.sort{|a,b| b.id <=> a.id}.each do |dial_job| %>
+<% @jobs.sort{|a,b| b.id <=> a.id}.each do |dial_job| %>
<tr>
<td><%=h dial_job.id %></td>
<td><%=h dial_job.range %></td>
- <td><%=h dial_job.cid_mask %></td>
+ <td><%=h dial_job.cid_mask %></td>
<td><%=h (
- DialResult.count(:conditions => ['dial_job_id = ? and complete…
- "/" +
- DialResult.count(:conditions => ['dial_job_id = ?', dial_job.i…
+ DialResult.count(:conditions => ['dial_job_id = ? and processe…
+ "/" +
+ DialResult.count(:conditions => ['dial_job_id = ?', dial_job.i…
)%></td>
<td><%=h dial_job.started_at.localtime.strftime("%Y-%m-%d %H:%M:%S") %></t…
- <td><%= link_to 'View', view_dial_result_path(dial_job) %></td>
- <% if(dial_job.processed) %>
- <td><%= link_to 'View Analysis', analyze_dial_result_path(dial…
- <% else %>
- <td><%= link_to 'Analyze Calls', analyze_dial_result_path(dial…
- <% end %>
- <td><%= link_to 'Purge', purge_dial_result_path(dial_job), :confirm =>…
+
+ <td>
+ <a class="btn btn-mini" href="<%= view_dial_result_path(dial_job) %>" …
+
+ <% if(dial_job.processed) %>
+ <a class="btn btn-mini" href="<%= analyze_dial_result_…
+ <a class="btn btn-mini" href="<%= reanalyze_dial_resul…
+ <% else %>
+ <a class="btn btn-mini" href="<%= analyze_dial_result_…
+ <% end %>
+
+ <a class="btn btn-mini" href="<%= dial_result_path(dial_job) %>" d…
+ </td>
</tr>
+
<% end %>
+</tbody>
</table>
-<%= raw(will_paginate @completed_jobs) %>
+<%= raw(will_paginate @jobs) %>
<% else %>
<h1 class='title'>No Completed Jobs</h1>
+<br/>
<% end %>
+
+<a class="btn" href="<%= new_dial_job_path %>"><i class="icon-plus"></i> Start…
diff --git a/app/views/dial_results/view.html.erb b/app/views/dial_results/view…
@@ -12,7 +12,10 @@
</tr>
</table>
-<table class='table_scaffold' width='100%'>
+<br/>
+
+<table class='table table-striped table-bordered' width='90%' id='results'>
+ <thead>
<tr>
<th>Number</th>
<th>CallerID</th>
@@ -22,6 +25,8 @@
<th>Seconds</th>
<th>Ring Time</th>
</tr>
+ </thead>
+ <tbody>
<% for dial_result in @dial_results.sort{|a,b| a.number <=> b.number } %>
<tr>
<td><%= dial_result.number %></td>
@@ -33,6 +38,7 @@
<td><%= dial_result.ringtime.to_i %></td>
</tr>
<% end %>
+ </tbody>
</table>
<%= raw(will_paginate @dial_results) %>
@@ -42,3 +48,11 @@
<% end %>
<br />
+
+<%= javascript_tag do %>
+// For fixed width containers
+$('#results').dataTable({
+ "sDom": "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>",
+ "sPaginationType": "bootstrap"
+});
+<% end %>
diff --git a/app/views/home/about.html.erb b/app/views/home/about.html.erb
@@ -1,111 +1,116 @@
-<table width='100%' align='center' border='0' cellpadding='9' cellspacing='0'>
-<tr><td valign='top'>
+<div class="row">
+
+<div class="span9">
<h1 class='title'>About WarVOX</h1>
<b>WarVOX</b> is a product of <a href="http://www.rapid7.com/">Rapid7 Inc</a> …
free software. WarVOX is intended for legal security assessment, asset invento…
-and research purposes only. The latest version of WarVOX can be found at
-<a href="https://github.com/rapid7/warvox/">https://github.com/rapid7/warvox/<…
-
-</td><td valign='top' align='center'>
+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>
+<div class="span3">
<h1 class='title'>Statistics</h1>
-<table id="warvox_stats" cellspacing="0" width=200>
+<table class='table table-condensed'>
<tr>
- <td valign="top" align="right" class="header_item">
- Version:
+ <td>
+ Version
</td>
<td><%= WarVOX::VERSION %></td>
</tr>
<tr>
- <td valign="top" align="right" class="header_item">
- Providers:
+ <td>
+ Providers
</td>
<td><%= Provider.count %></td>
</tr>
<tr>
- <td valign="top" align="right" class="header_item">
- Active Jobs:
+ <td>
+ Active Jobs
</td>
<td><%= DialJob.count(:conditions => ['status = ?', 'active']) %></td>
</tr>
<tr>
- <td valign="top" align="right" class="header_item">
- Total Jobs:
+ <td>
+ Total Jobs
</td>
<td><%= DialJob.count %></td>
</tr>
<tr>
- <td valign="top" align="right" class="header_item">
- Results:
+ <td>
+ Results
</td>
<td><%= DialResult.count %></td>
</tr>
</table>
+</div>
+</div>
+<!-- // row -->
-</td></tr>
-<tr><td valign='top' colspan='2'>
+<div class="row">
+<div class="span12">
+
<h1 class='title'>Configuration</h1>
-<table id="warvox_conf" cellspacing="0" width='100%'>
+<table width='100%' class='table table-bordered'>
<tr>
- <td valign="top" align="right" class="header_item" width='200'>
- Base Directory:
+ <td>
+ Base Directory
</td>
<td><%= WarVOX::Base %></td>
</tr>
<tr>
- <td valign="top" align="right" class="header_item" width='200'>
- Configuration File:
+ <td>
+ Configuration File
</td>
<td><%= WarVOX::Conf %></td>
</tr>
<tr>
- <td valign="top" align="right" class="header_item" width='200'>
- Admin User:
+ <td>
+ Admin User
</td>
<td><%= WarVOX::Config.authentication_creds[0] %></td>
</tr>
<tr>
- <td valign="top" align="right" class="header_item" width='200'>
+ <td>
GNUPlot
</td>
<td><%= WarVOX::Config.tool_path('gnuplot') || "MISSING" %></td>
</tr>
<tr>
- <td valign="top" align="right" class="header_item" width='200'>
+ <td>
LAME
</td>
<td><%= WarVOX::Config.tool_path('lame') || "MISSING" %></td>
</tr>
<tr>
- <td valign="top" align="right" class="header_item" width='200'>
+ <td>
IAXRECORD
</td>
<td><%= WarVOX::Config.tool_path('iaxrecord') || "MISSING" %></td>
</tr>
<tr>
- <td valign="top" align="right" class="header_item" width='200'>
+ <td>
KissFFT
</td>
<td><%= @has_kissfft %></td>
@@ -115,12 +120,7 @@ and research purposes only. The latest version of WarVOX c…
<br/><br/>
<h1 class='title'>Dial Exclusions (Blacklist)</h1>
-<table id="warvox_blacklist" cellspacing="0" width='100%'>
-<tr>
- <td valign="top" align="left" class="header_item" width='200'>
- <pre><%=h File.read(WarVOX::Config.blacklist_path) %></pre>
- </td>
-</tr>
-</table>
+<pre><%=h File.read(WarVOX::Config.blacklist_path) %></pre>
-</td></tr></table>
+</div>
+</div>
diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb
@@ -1,10 +1,23 @@
+<div class="row">
+<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>
+ </ul>
+</div>
+</div>
+<div class="span9">
+
<h1 class='title'>Introduction</h1>
<p>
-WarVOX is a suite of tools for exploring, classifying, and auditing telephone …
-WarVOX works with the actual audio from each call and does not use a modem dir…
+WarVOX is a suite of tools for exploring, classifying, and auditing telephone …
+WarVOX works with the actual audio from each call and does not use a modem dir…
and classify a wide range of interesting lines, including modems, faxes, voice…
-and forwarders. WarVOX provides the unique ability to classify all telephone l…
+and forwarders. WarVOX provides the unique ability to classify all telephone l…
connected to modems, allowing for a comprehensive audit of a telephone system.
</p>
@@ -43,3 +56,6 @@ After the job completes, access the <a href="/dial_results/">…
<p>
If for some reason WarVOX is not working correctly, or if you have any questio…
</p>
+
+</div>
+</div>
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/applica…
@@ -7,64 +7,53 @@
<title><%= content_for?(:title) ? yield(:title) : "WarVOX v#{WarVOX::VERSI…
<%= csrf_meta_tags %>
- <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
<!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="t…
+ <%= javascript_include_tag "html5" %>
<![endif]-->
+ <%= javascript_include_tag "application" %>
<%= stylesheet_link_tag "application", :media => "all" %>
- <!-- For third-generation iPad with high-resolution Retina display: -->
- <!-- Size should be 144 x 144 pixels -->
<%= favicon_link_tag 'images/apple-touch-icon-144x144-precomposed.png', :r…
-
- <!-- For iPhone with high-resolution Retina display: -->
- <!-- Size should be 114 x 114 pixels -->
<%= favicon_link_tag 'images/apple-touch-icon-114x114-precomposed.png', :r…
-
- <!-- For first- and second-generation iPad: -->
- <!-- Size should be 72 x 72 pixels -->
<%= favicon_link_tag 'images/apple-touch-icon-72x72-precomposed.png', :rel…
-
- <!-- For non-Retina iPhone, iPod Touch, and Android 2.1+ devices: -->
- <!-- Size should be 57 x 57 pixels -->
<%= favicon_link_tag 'images/apple-touch-icon-precomposed.png', :rel => 'a…
-
- <!-- For all other devices -->
- <!-- Size should be 32 x 32 pixels -->
<%= favicon_link_tag 'images/favicon.ico', :rel => 'shortcut icon' %>
+
+ <%= javascript_tag do %>
+ $(document).ready(function() {
+ $("a").tooltip();
+ }
+ <% end %>
</head>
<body>
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
- <a class="btn btn-navbar" data-target=".nav-collapse" data-toggle="c…
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </a>
- <a class="brand" href="/">WarVOX</a>
+ <a class="brand" href="/"><img src="/assets/logo_light.png" border=0…
<%= tabs %>
</div>
</div>
</div>
+
<div class="container">
- <div class="row">
- <div class="span12">
- <%= yield %>
+ <div class="row">
+ <div class="span12 content">
+
+ <div class="content">
+ <%= yield %>
</div>
- </div><!--/row-->
- <footer>
- <p>&copy; Rapid7, Inc. 2009-2013</p>
- </footer>
+ <footer class="footer">
+ <p>&copy; Rapid7, Inc. 2009-2013</p>
+ </footer>
+ </div>
+ </div>
</div> <!-- /container -->
- <%= javascript_include_tag "application" %>
</body>
</html>
diff --git a/app/views/providers/index.html.erb b/app/views/providers/index.htm…
@@ -1,71 +1,46 @@
<% if @providers.length > 0 %>
-<h1 class='title'>Providers</h1>
-<table class='table_scaffold' width='100%'>
+<h1 class='title'>VoIP Providers (IAX)</h1>
+<table class='table table-striped table-bordered' width='90%'>
<tr>
- <th>Enabled</th>
- <th>Name</th>
- <th>Host</th>
- <th>Port</th>
- <th>User</th>
- <th>Pass</th>
+ <th>Active</th>
+ <th>Provider Name</th>
+ <th>IAX Server</th>
+ <th>IAX Port</th>
+ <th>Username</th>
<th>Lines</th>
+ <th>Actions</th>
+
</tr>
<% for provider in @providers %>
<tr>
- <td><%=h provider.enabled %></td>
+ <td>
+ <i class="icon-<%= provider.enabled ? "ok" : "remove" %>"></i>
+ </td>
<td><%=h provider.name %></td>
<td><%=h provider.host %></td>
<td><%=h provider.port %></td>
<td><%=h provider.user %></td>
- <td>********</td>
<td><%=h provider.lines %></td>
- <td><%= link_to 'Modify', edit_provider_path(provider) %></td>
- <td><%= link_to 'Delete', provider, :confirm => 'Are you sure?', :method =…
+ <td>
+ <a class="btn btn-mini" href="<%= edit_provider_path(provider) %>"…
+ <a class="btn btn-mini" href="<%= provider_path(provider) %>" data…
+ </td>
</tr>
<% end %>
</table>
<br />
-<%= link_to 'New Provider', new_provider_path %>
+
+<a class="btn" href="<%= new_provider_path %>"><i class="icon-plus"></i> Add P…
<% else %>
<h1 class='title'>No Configured Providers</h1>
<br/>
-<h1 class='title'>Configure a New Provider</h1>
+<a class="btn" href="<%= new_provider_path %>"><i class="icon-plus"></i> Add P…
-<%= form_for(@new_provider) do |f| %>
- <%= f.error_messages %>
- <p>
- <%= f.label :name, 'The nickname for this provider' %><br />
- <%= f.text_field :name %>
- </p>
- <p>
- <%= f.label :host, 'The IAX2 server name' %><br />
- <%= f.text_field :host %>
- </p>
- <p>
- <%= f.label :port, 'The IAX2 port (normally 4569)' %><br />
- <%= f.text_field :port, :value => 4569 %>
- </p>
- <p>
- <%= f.label :user, 'The username to access the provider' %><br />
- <%= f.text_field :user %>
- </p>
- <p>
- <%= f.label :pass, 'The password to access the provider' %><br />
- <%= f.text_field :pass %>
- </p>
- <p>
- <%= f.label :lines, 'The number of available outbound lines' %><br />
- <%= f.text_field :lines, :value => 1 %>
- </p>
- <p>
- <%= f.submit "Create" %>
- </p>
-<% end %>
<% end %>
diff --git a/app/views/shared/graphs/_call_results.html.erb b/app/views/shared/…
@@ -1,7 +1,11 @@
<%
graph_id = "g" + rand(0x1000000).to_s
-pie_data = raw("[ 'Timeout', #{@call_results[:Timeout].to_i.to_s} ], ['Busy', …
+line_data = raw("")
+
+line_data << raw("{ name: 'Timeout', data: [ #{@call_results[:Timeout].to_i.to…
+line_data << raw("{ name: 'Busy', data: [ #{@call_results[:Busy].to_i.to_s } ]…
+line_data << raw("{ name: 'Answered', data: [ #{@call_results[:Answered].to_i.…
%>
@@ -12,44 +16,43 @@ pie_data = raw("[ 'Timeout', #{@call_results[:Timeout].to_i…
$(function () {
var chart;
$(document).ready(function() {
- chart = new Highcharts.Chart({
+ chart = new Highcharts.Chart({
chart: {
renderTo: '<%= graph_id %>',
- plotBackgroundColor: null,
- plotBorderWidth: null,
- plotShadow: false,
- shadow: true,
- width: 600,
- height: 400
+ type: 'bar',
+ height: 150
},
title: {
- text: 'Dial Results'
+ text: 'Call Results'
+ },
+ xAxis: {
+ categories: ['Calls']
+ },
+ yAxis: {
+ min: 0,
+ title: {
+ text: 'Calls by Result'
+ }
+ },
+ legend: {
+ backgroundColor: '#FFFFFF',
+ reversed: true
},
tooltip: {
- pointFormat: '{series.name}: <b>{point.percentage}%</b>',
- percentageDecimals: 1
+ formatter: function() {
+ return ''+
+ this.series.name +': '+ this.y +'';
+ }
},
plotOptions: {
- pie: {
- allowPointSelect: true,
- cursor: 'pointer',
- dataLabels: {
- enabled: true,
- color: '#000000',
- connectorColor: '#000000',
- formatter: function() {
- return '<b>'+ this.point.name +'</b>: '+ Math.roun…
- }
- }
+ series: {
+ stacking: 'normal'
}
},
- series: [{
- type: 'pie',
- name: 'Result',
- data: [<%= pie_data %>]
- }]
+ series: [ <%= line_data %> ]
});
});
+
});
diff --git a/app/views/shared/graphs/_lines_by_type.html.erb b/app/views/shared…
@@ -1,11 +1,10 @@
<%
graph_id = "g" + rand(0x1000000).to_s
-pie_data = raw("")
-
+line_data = raw("")
@lines_by_type.keys.sort{|a,b| @lines_by_type[b] <=> @lines_by_type[a]}.each d…
- pie_data << raw("[ '#{k.to_s.capitalize}', #{@lines_by_type[k].to_i.to…
+ line_data << raw("{ name: '#{k.to_s.capitalize}', data: [ #{ @lines_by…
end
%>
@@ -17,44 +16,43 @@ end
$(function () {
var chart;
$(document).ready(function() {
- chart = new Highcharts.Chart({
+ chart = new Highcharts.Chart({
chart: {
renderTo: '<%= graph_id %>',
- plotBackgroundColor: null,
- plotBorderWidth: null,
- plotShadow: false,
- shadow: true,
- width: 600,
- height: 400
+ type: 'bar',
+ height: 150
},
title: {
- text: 'Line Classification'
+ text: 'Line Types'
+ },
+ xAxis: {
+ categories: ['Lines']
+ },
+ yAxis: {
+ min: 0,
+ title: {
+ text: 'Lines by Type'
+ }
+ },
+ legend: {
+ backgroundColor: '#FFFFFF',
+ reversed: true
},
tooltip: {
- pointFormat: '{series.name}: <b>{point.percentage}%</b>',
- percentageDecimals: 1
+ formatter: function() {
+ return ''+
+ this.series.name +': '+ this.y +'';
+ }
},
plotOptions: {
- pie: {
- allowPointSelect: true,
- cursor: 'pointer',
- dataLabels: {
- enabled: true,
- color: '#000000',
- connectorColor: '#000000',
- formatter: function() {
- return '<b>'+ this.point.name +'</b>: '+ Math.roun…
- }
- }
+ series: {
+ stacking: 'normal'
}
},
- series: [{
- type: 'pie',
- name: 'Result',
- data: [<%= pie_data %>]
- }]
+ series: [ <%= line_data %> ]
});
});
+
});
diff --git a/config/environments/development.rb b/config/environments/developme…
@@ -34,4 +34,6 @@ Web::Application.configure do
# Expands the lines which load the assets
config.assets.debug = true
+
+ config.serve_static_assets = true
end
diff --git a/lib/templates/erb/scaffold/_form.html.erb b/lib/templates/erb/scaf…
@@ -0,0 +1,11 @@
+<%%= semantic_form_for @<%= singular_name %> do |f| %>
+ <%%= f.inputs do %>
+ <%- attributes.each do |attribute| -%>
+ <%%= f.input :<%= attribute.name %> %>
+ <%- end -%>
+ <%% end %>
+
+ <%%= f.actions do %>
+ <%%= f.action :submit, :as => :input %>
+ <%% end %>
+<%% end %>
diff --git a/public/robots.txt b/public/robots.txt
@@ -1,5 +1,2 @@
-# See http://www.robotstxt.org/wc/norobots.html for documentation on how to us…
-#
-# To ban all spiders from the entire site uncomment the next two lines:
-# User-Agent: *
-# Disallow: /
+ User-Agent: *
+ Disallow: /
You are viewing proxied material from jay.scot. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.