old_sql 1.26.0 → 1.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,56 +4,30 @@ var port = "<%=@port%>";
4
4
  var default_report_view = "<%=@report_view%>";
5
5
  </script>
6
6
 
7
- <div class="os-block">
8
- <div class="ui-widget-header clearfix" id="title">
9
- <%=OldSql.report_select_page_title%>
10
- </div>
11
-
12
- <form id="report-form" name="report-form" action="/oldsql/reports/query" method="POST">
13
- <div class="report-form-row">
14
- <div class="report-form-label">SELECT A REPORT:</div>
15
- <div class="report-form-input">
16
- <select name="report" id="report"
17
- onchange="report_selected()">
18
- <option></option>
19
- <% @reports.each do |report, data| %>
20
- <option value="<%= data['name'] %>" report_sql="<%= data['report_sql'] %>"
21
- desc="<%= data['description'] %>" name="<%=report%>"
22
- report_view="<%=data['report_view']%>"><%= data['description'] %></option>
23
- <% end %>
24
- </select>
25
- </div>
26
- </div>
27
-
28
- <div class="report-form-row">
29
- <div class="report-form-label">START DATE:</div>
30
- <div class="report-form-input">
31
- <input type="text" id="datepicker-start" name="start_date" value="">
32
- </div>
33
- </div>
34
-
35
- <div class="report-form-row">
36
- <div class="report-form-label">END DATE:</div>
37
- <div class="report-form-input">
38
- <input type="text" id="datepicker-end" name="end_date" value="">
39
- </div>
40
- </div>
41
-
42
- <div class="report-form-row">
43
- <div class="report-form-label"></div>
44
- <input type="button" value="Run" onclick="load_report();"/>
45
- </div>
46
- </form>
7
+ <div id="tabs">
8
+ <ul>
9
+ <li><a href="#tabs-1">Reports</a></li>
10
+ <li><a href="#tabs-2">Query</a></li>
11
+ <li><a href="#tabs-3">Schema</a></li>
12
+ </ul>
47
13
 
48
- <div id="links">
49
- <div><%= link_to_function("Print Report", "javascript:print_report()") %></div>
50
- <div><%= link_to_function("Export To Excel", "javascript:export_report_to_excel()") %></div>
14
+ <div id="tabs-1">
15
+ <%= render(:partial => 'reports') %>
51
16
  </div>
52
-
17
+
18
+ <div id="tabs-2">
19
+ <%= render(:partial => 'query') %>
20
+ </div>
21
+
22
+ <div id="tabs-3">
23
+ Coming Soon...
24
+ </div>
25
+
53
26
  <div id="data_grid">
54
27
  <iframe id="data_grid_frame" src="" width="100%" height="530" frameborder="0" scrolling="no">
55
28
  <p>Your browser does not support iframes.</p>
56
29
  </iframe>
57
30
  </div>
58
-
59
- </div>
31
+ </div>
32
+
33
+ <div id="old-sql">built with <a href="https://github.com/egonz/old_sql" target="_blank">Old SQL</a></div>
@@ -1,3 +1,8 @@
1
+ <%col_names = jqgrid_col_names%>
2
+
3
+ <% if col_names.nil? || col_names=='null' %>
4
+ The query returned no data.
5
+ <% else %>
1
6
  <!-- TODO move these to the head -->
2
7
  <%= stylesheet_link_tag "old_sql/jqgrid/ui.jqgrid.css" %>
3
8
  <%= javascript_include_tag "old_sql/jqgrid/jquery.jqGrid.min.js" %>
@@ -6,18 +11,20 @@
6
11
  <script>
7
12
  jQuery(document).ready(function(){
8
13
  jQuery("#rowed1").jqGrid({
9
- url:"http://<%=@host%>:<%=@port%>/sql/reports/query.json/?report=<%=@report_name%>&report_sql=<%=@report_sql%>&start_date=<%=@start_date%>&end_date=<%=@end_date%>",
14
+ url:"http://<%=@host%>:<%=@port%>/sql/reports/query.json/?report=<%=@report_name%>&report_sql=<%=@report_sql%>&start_date=<%=@start_date%>&end_date=<%=@end_date%>&query=<%=@query%>&db=<%=@db%>",
10
15
  datatype: "json",
11
16
  pager: false,
12
- colNames: <%=jqgrid_col_names%>,
17
+ colNames: <%=col_names%>,
13
18
  colModel: <%=jqgrid_col_model%>,
14
19
  rowNum: <%=@row_num%>,
15
20
  rowList: [10,20,30],
16
21
  width: <%=@width%>,
17
22
  height: <%=@height%>,
18
- caption: "<%=@reports[@report_name]['value']%> Report"
23
+ cellEdit: true,
24
+ caption: "<%=@caption%> Report"
19
25
  });
20
26
  });
21
27
  </script>
22
28
 
23
- <table id="rowed1"></table>
29
+ <table id="rowed1"></table>
30
+ <% end %>
data/config/routes.rb CHANGED
@@ -3,8 +3,8 @@ Rails.application.routes.draw do
3
3
  scope "reports", :as => "reports" do
4
4
  controller "report" do
5
5
  match "/", :to => :index, :as => "report_list"
6
- match "/query", :to => :query, :as => "query"
7
6
  match "/jqgrid", :to => :jqgrid, :as => "jqgrid"
7
+ match "/query", :to => :query, :as => "query"
8
8
  match "/table", :to => :table, :as => "table"
9
9
  match "/chart", :to => :chart, :as => "chart"
10
10
  match "/print", :to => :print, :as => "print"
@@ -14,15 +14,11 @@ module OldSql
14
14
 
15
15
  ROUND_PRECISION = OldSql.rounding_precision
16
16
 
17
- def execute_query(report_config, start_date, end_date, query_vars = nil)
18
- sql = load_sql(report_config['report_sql'], start_date, end_date, query_vars)
19
- query(sql, report_config)
20
-
21
- return nil if @resultset.nil?
22
-
23
- init
17
+ def execute_query(report_config, start_date, end_date, query_vars = nil, sql_query = nil, db_class = nil)
18
+ execute(report_config, start_date, end_date, query_vars, sql_query, db_class)
24
19
 
25
20
  return nil if @rec.nil?
21
+ return parse(@resultset) if report_config.nil?
26
22
 
27
23
  @report_type = report_config['report_view']
28
24
  report_design = report_config['report_design']
@@ -43,6 +39,15 @@ module OldSql
43
39
  @data
44
40
  end
45
41
 
42
+ def fields(report_config, start_date, end_date, query_vars = nil, sql_query = nil, db_class = nil)
43
+ return report_config['fields'] unless report_config.nil?
44
+
45
+ execute(report_config, start_date, end_date, query_vars, sql_query, db_class)
46
+ return humanize_fields(@rec.keys) unless @rec.nil?
47
+
48
+ nil
49
+ end
50
+
46
51
  protected
47
52
 
48
53
  def add_row(cell_data = [], id = @id+1)
@@ -60,6 +65,30 @@ module OldSql
60
65
 
61
66
  private
62
67
 
68
+ def execute(report_config, start_date, end_date, query_vars = nil, sql_query = nil, db_class = nil)
69
+ if !sql_query.nil? && sql_query.length > 0
70
+ sql = sql_query.gsub("\n"," ")
71
+ else
72
+ sql = load_sql(report_config['report_sql'], start_date, end_date, query_vars)
73
+ end
74
+
75
+ query(sql, report_config, db_class)
76
+
77
+ return nil if @resultset.nil?
78
+
79
+ init
80
+ end
81
+
82
+ def humanize_fields(fields)
83
+ humanized_fields = []
84
+ fields.each do |field|
85
+ humanized_field = ""
86
+ field.split("_").each {|f| humanized_field << "#{f.capitalize} "}
87
+ humanized_fields << humanized_field.rstrip
88
+ end
89
+ humanized_fields
90
+ end
91
+
63
92
  def load_sql(report_sql, start_date, end_date, query_vars)
64
93
  vars = {:start_date => start_date, :end_date => end_date}
65
94
 
@@ -71,15 +100,13 @@ module OldSql
71
100
  sql = Erubis::Eruby.new(template).result(vars)
72
101
  end
73
102
 
74
- def query sql, report_config
103
+ def query sql, report_config, db_class
75
104
  begin
76
105
  #todo change to a reporting db
77
- db = db_connection(report_config['report_db'])
78
-
79
- raise Exception("Unable to Establish a Database Connection") unless db.active?
106
+ db = db_connection(report_config, db_class)
80
107
 
81
108
  @resultset = []
82
- rec = db.select_all(sql)
109
+ rec = db.connection.select_all(sql)
83
110
  rec.each do |row|
84
111
  @resultset << row
85
112
  end
@@ -90,28 +117,33 @@ module OldSql
90
117
  @resultset
91
118
  end
92
119
 
93
- def db_connection report_db
94
- db = nil
95
- if report_db.nil?
96
- db = ActiveRecord::Base.connection();
120
+ def db_connection report_config, db_class
121
+ if !report_config.nil? && report_db = report_config['report_db']
122
+ db = load_db_connection(report_db)
123
+ elsif !db_class.nil? && db_class.length > 0
124
+ db = load_db_connection(db_class)
97
125
  else
98
- require report_db
99
-
100
- db_class_name = ""
101
- first = true
102
-
103
- report_db.split("/").each do |path|
104
- db_class_name << "::" unless first
105
- path.split("_").each {|c| db_class_name << c.capitalize }
106
- first = false
107
- end
108
-
109
- db=eval(db_class_name).connection
126
+ db = ActiveRecord::Base;
110
127
  end
111
128
 
112
129
  db
113
130
  end
114
131
 
132
+ def load_db_connection db_class_path
133
+ require db_class_path
134
+
135
+ db_class_name = ""
136
+ first = true
137
+
138
+ db_class_path.split("/").each do |path|
139
+ db_class_name << "::" unless first
140
+ path.split("_").each {|c| db_class_name << c.capitalize }
141
+ first = false
142
+ end
143
+
144
+ db=eval(db_class_name)
145
+ end
146
+
115
147
  def load_sub_processor sub_processor
116
148
  return if sub_processor.nil?
117
149
 
@@ -27,6 +27,7 @@ function drawChart() {
27
27
  width: width,
28
28
  height: height,
29
29
  title: chart_title,
30
+ backgroundColor:'#F0F0F0',
30
31
  colors: chart_colors,
31
32
  is3D: true
32
33
  });
@@ -269,6 +269,36 @@ f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(thi
269
269
  this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",
270
270
  a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
271
271
  _uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.13"})})(jQuery);
272
+ ;/*
273
+ * jQuery UI Accordion 1.8.13
274
+ *
275
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
276
+ * Dual licensed under the MIT or GPL Version 2 licenses.
277
+ * http://jquery.org/license
278
+ *
279
+ * http://docs.jquery.com/UI/Accordion
280
+ *
281
+ * Depends:
282
+ * jquery.ui.core.js
283
+ * jquery.ui.widget.js
284
+ */
285
+ (function(c){c.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");
286
+ a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
287
+ if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion",
288
+ function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a=
289
+ this.options;if(a.icons){c("<span></span>").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex");
290
+ this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons();
291
+ b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target);
292
+ a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+
293
+ c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options;
294
+ if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);
295
+ if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(),
296
+ e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight||
297
+ e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false",
298
+ "aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.13",
299
+ animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/);
300
+ f[i]={value:j[1],unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",
301
+ paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery);
272
302
  ;/*
273
303
  * jQuery UI Autocomplete 1.8.13
274
304
  *
@@ -399,6 +429,41 @@ return a=this._trimAlignValue(a)}else{a=this.options.values.slice();for(c=0;c<a.
399
429
  _refreshValue:function(){var b=this.options.range,a=this.options,c=this,f=!this._animateOff?a.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},a.animate);
400
430
  if(h===1)c.range[f?"animate":"css"]({width:e-g+"%"},{queue:false,duration:a.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},a.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:a.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1,
401
431
  1)[f?"animate":"css"]({width:e+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.13"})})(jQuery);
432
+ ;/*
433
+ * jQuery UI Tabs 1.8.13
434
+ *
435
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
436
+ * Dual licensed under the MIT or GPL Version 2 licenses.
437
+ * http://jquery.org/license
438
+ *
439
+ * http://docs.jquery.com/UI/Tabs
440
+ *
441
+ * Depends:
442
+ * jquery.ui.core.js
443
+ * jquery.ui.widget.js
444
+ */
445
+ (function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&&
446
+ e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=
447
+ d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
448
+ (q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
449
+ this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
450
+ this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
451
+ if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
452
+ this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+
453
+ g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",
454
+ function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};
455
+ this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=
456
+ -1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
457
+ d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=
458
+ d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b,
459
+ e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);
460
+ j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();
461
+ if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null,
462
+ this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
463
+ load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,
464
+ "cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
465
+ url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.13"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&
466
+ a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
402
467
  ;/*
403
468
  * jQuery UI Datepicker 1.8.13
404
469
  *
@@ -1,67 +1,137 @@
1
1
  function load_report()
2
2
  {
3
- report_name = jQuery("#report option:selected").attr('name');
4
- report_sql = jQuery("#report option:selected").attr('report_sql');
5
- report_view = get_report_view();
3
+ report_name = jQuery("#report option:selected").attr('name');
4
+ report_sql = jQuery("#report option:selected").attr('report_sql');
5
+ report_view = get_report_view();
6
+
7
+ if (!reported_selected(report_name)) return;
6
8
 
7
- if (!reported_selected(report_name)) return;
8
-
9
9
  var src = "http://"+host+":"+port+"/sql/reports/"+report_view+"/?report="+report_name+
10
10
  "&start_date="+jQuery("#datepicker-start").val()+"&end_date="+jQuery("#datepicker-end").val()+"&report_sql="+
11
- report_sql;
11
+ report_sql+"&caption="+report_name;
12
+
13
+ jQuery('iframe').attr('src', src);
14
+
15
+ _report_loaded = true;
16
+ }
17
+
18
+ function query()
19
+ {
20
+ sql = jQuery("#query-text").val();
21
+ db = jQuery("#query-db option:selected").attr('class_name');
12
22
 
23
+ if (!sql) {
24
+ alert('Invalid Query.');
25
+ }
26
+
27
+ var src = "http://"+host+":"+port+"/sql/reports/jqgrid/?&query="+sql+"&db="+db+"&caption=Ad Hoc Query&w="+$(document).width();
28
+
13
29
  jQuery('iframe').attr('src', src);
14
30
 
15
- _report_loaded = true;
31
+ save_query(sql);
32
+ load_saved_queries();
33
+ }
34
+
35
+ function save_query(sql)
36
+ {
37
+ if (typeof(localStorage) == 'undefined' ) {
38
+ alert('Your browser does not support HTML5 localStorage. Try upgrading.');
39
+ } else {
40
+ try {
41
+ localStorage.setItem(sql, sql); //saves to the database, “key”, “value”
42
+ } catch (e) {
43
+ if (e == QUOTA_EXCEEDED_ERR) {
44
+ alert('Quota exceeded!'); //data wasn’t successfully saved due to quota exceed so throw an error
45
+ }
46
+ }
47
+ }
48
+ }
49
+
50
+ function load_saved_queries()
51
+ {
52
+ if (typeof(localStorage) == 'undefined' ) {
53
+ alert('Your browser does not support HTML5 localStorage. Try upgrading.');
54
+ } else {
55
+ clear_saved_queries();
56
+
57
+ for (var i = 0; i < localStorage.length; i++) {
58
+ $('#saved-queries-list').
59
+ append($("<option></option>").
60
+ text(localStorage.getItem(localStorage.key(i))));
61
+ }
62
+ }
63
+ }
64
+
65
+ function clear_saved_queries()
66
+ {
67
+ $('#saved-queries-list')
68
+ .find('option')
69
+ .remove()
70
+ .end();
71
+ }
72
+
73
+ function deleted_saved_queries()
74
+ {
75
+ if (typeof(localStorage) == 'undefined' ) {
76
+ alert('Your browser does not support HTML5 localStorage. Try upgrading.');
77
+ } else {
78
+ localStorage.clear();
79
+ clear_saved_queries();
80
+ }
81
+ }
82
+
83
+ function reset_report()
84
+ {
85
+ jQuery('iframe').attr('src', "");
16
86
  }
17
87
 
18
88
  function print_report()
19
89
  {
20
90
  report_name = jQuery("#report option:selected").attr('name');
21
- report_sql = jQuery("#report option:selected").attr('report_sql');
91
+ report_sql = jQuery("#report option:selected").attr('report_sql');
22
92
  report_view = get_report_view();
23
-
93
+
24
94
  if (!reported_selected(report_name)) return;
25
-
95
+
26
96
  var src = "http://"+host+":"+port+"/sql/reports/print/?report="+report_name+
27
- "&start_date="+jQuery("#datepicker-start").val()+"&end_date="+jQuery("#datepicker-end").val()+
28
- "&report_sql="+report_sql+"&desc="+jQuery("#report option:selected").attr('desc');
97
+ "&start_date="+jQuery("#datepicker-start").val()+"&end_date="+jQuery("#datepicker-end").val()+
98
+ "&report_sql="+report_sql+"&desc="+jQuery("#report option:selected").attr('desc');
29
99
  window.open(src,'Old SQL Report')
30
100
  }
31
101
 
32
102
  function export_report_to_excel()
33
103
  {
34
104
  report_name = jQuery("#report option:selected").attr('name');
35
- report_sql = jQuery("#report option:selected").attr('report_sql');
36
- report_view = get_report_view();
37
-
105
+ report_sql = jQuery("#report option:selected").attr('report_sql');
106
+ report_view = get_report_view();
107
+
38
108
  if (!reported_selected(report_name)) return;
39
-
109
+
40
110
  var src = "http://"+host+":"+port+"/sql/reports/query.csv/?report="+report_name+
41
- "&start_date="+jQuery("#datepicker-start").val()+"&end_date="+jQuery("#datepicker-end").val()+
42
- "&report_sql="+ report_sql+"&desc="+jQuery("#report option:selected").attr('desc');
111
+ "&start_date="+jQuery("#datepicker-start").val()+"&end_date="+jQuery("#datepicker-end").val()+
112
+ "&report_sql="+ report_sql+"&desc="+jQuery("#report option:selected").attr('desc');
43
113
  window.open(src,'DB Report')
44
114
  }
45
115
 
46
116
  function reported_selected(report_name)
47
117
  {
48
- if (!report_name) {
49
- alert("You must select a report, and run it before continuing.");
50
- return false;
51
- } else {
52
- return true;
53
- }
118
+ if (!report_name) {
119
+ alert("You must select a report, and run it before continuing.");
120
+ return false;
121
+ } else {
122
+ return true;
123
+ }
54
124
  }
55
125
 
56
126
  function get_report_view()
57
127
  {
58
- report_view = jQuery("#report option:selected").attr('report_view');
59
-
60
- if (report_view) {
61
- return report_view;
62
- } else {
63
- return default_report_view;
64
- }
128
+ report_view = jQuery("#report option:selected").attr('report_view');
129
+
130
+ if (report_view) {
131
+ return report_view;
132
+ } else {
133
+ return default_report_view;
134
+ }
65
135
  }
66
136
 
67
137
  jQuery(document).ready(function($){
@@ -69,7 +139,7 @@ jQuery(document).ready(function($){
69
139
  jQuery("#datepicker-start").datetimepicker( "option", "dateFormat", "yy/mm/dd" );
70
140
  jQuery("#datepicker-end").datetimepicker();
71
141
  jQuery("#datepicker-end").datetimepicker( "option", "dateFormat", "yy/mm/dd" );
72
-
142
+
73
143
  var now = new Date();
74
144
  var tomorrow = new Date();
75
145
  var two_weeks_ago = new Date();
@@ -77,4 +147,32 @@ jQuery(document).ready(function($){
77
147
  tomorrow.setDate(now.getDate() + 1);
78
148
  jQuery("#datepicker-start").attr('value', two_weeks_ago.format("yyyy/mm/dd HH:MM:ss"));
79
149
  jQuery("#datepicker-end").attr('value', tomorrow.format("yyyy/mm/dd HH:MM:ss"));
150
+
151
+ //Setup key listeners for the ad hoc query textarea
152
+ $('#query-text').keydown(function (e) {
153
+ if (e.ctrlKey && e.keyCode == 13) {
154
+ e.preventDefault();
155
+ query();
156
+ } else if (e.keyCode == 13) {
157
+ e.preventDefault();
158
+ $('#query-text').val($('#query-text').val()+' \n');
159
+ }
160
+ });
161
+
162
+ $('#tabs').bind('tabsselect', function(event, ui) {
163
+ // Objects available in the function context:
164
+ //ui.tab // anchor element of the selected (clicked) tab
165
+ //ui.panel // element, that contains the selected/clicked tab contents
166
+ //ui.index // zero-based index of the selected (clicked) tab
167
+
168
+ reset_report();
169
+
170
+ if (ui.index == 1) {
171
+ load_saved_queries();
172
+ }
173
+ });
174
+ });
175
+
176
+ $(function() {
177
+ $( "#tabs" ).tabs();
80
178
  });