widget_list 1.0.11 → 1.1.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.
@@ -146,7 +146,7 @@ $G_TEMPLATE.deep_merge!({'widget' =>
146
146
  {'default' =>
147
147
  '
148
148
  <!--FRM_SUBMIT-->
149
- <a class="<!--BUTTON_CLASS-->" style="<!--BUTTON_STYLE-->" onclick="<!--BUTTON_ONCLICK-->" name="<!--NAME-->" id="<!--ID-->">
149
+ <a class="<!--BUTTON_CLASS-->" style="<!--BUTTON_STYLE-->" onclick="<!--BUTTON_ONCLICK-->" onmouseover="<!--MOUSEOVER-->" onmouseout="<!--MOUSEOUT-->" name="<!--NAME-->" id="<!--ID-->">
150
150
  <!--BUTTON_LABEL-->
151
151
  </a>'
152
152
  }
@@ -1,3 +1,3 @@
1
1
  module WidgetList
2
- VERSION = "1.0.11"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -629,6 +629,8 @@ module WidgetList
629
629
  'passive' => false,
630
630
  'function' => 'ButtonLinkPost',
631
631
  'onclick' => '',
632
+ 'onmouseover'=> '',
633
+ 'onmouseout' => '',
632
634
  'template' => ''
633
635
  }
634
636
 
@@ -691,6 +693,8 @@ module WidgetList
691
693
  '<!--ID-->' => items['id'],
692
694
  '<!--BUTTON_STYLE-->' => items['style'],
693
695
  '<!--BUTTON_CLASS_INNER-->' => items['innerClass'],
696
+ '<!--MOUSEOVER-->' => items['onmouseover'],
697
+ '<!--MOUSEOUT-->' => items['onmouseout'],
694
698
  '<!--FRM_SUBMIT-->' => items['frmSubmit'],
695
699
  },
696
700
  items['template']
data/lib/widget_list.rb CHANGED
@@ -46,6 +46,7 @@ module WidgetList
46
46
  @fieldList = []
47
47
  @templateFill = {}
48
48
  @results = {}
49
+ @headerPieces = {}
49
50
 
50
51
  #the main template and outer shell
51
52
  @items.deep_merge!({'template' =>
@@ -54,13 +55,13 @@ module WidgetList
54
55
  <!--HEADER-->
55
56
  <!--CUSTOM_CONTENT_TOP-->
56
57
  <div class="<!--CLASS-->" id="<!--NAME-->">
57
- <table class="widget_list <!--TABLE_CLASS-->" style="<!--INLINE_STYLE-->" border="0" width="100%" cellpadding="0" cellspacing="0">
58
+ <table class="widget_list <!--TABLE_CLASS-->" style="<!--INLINE_STYLE-->;border:<!--TABLE_BORDER-->;" width="100%" cellpadding="0" cellspacing="0">
58
59
  <!--LIST_TITLE-->
59
- <tr class="widget_list_header"><!--HEADERS--></tr>
60
+ <tr class="widget_list_header" style="background-color:<!--HEADER_COLOR-->;color:<!--HEADER_TXT_COLOR-->;"><!--HEADERS--></tr>
60
61
  <!--DATA-->
61
62
  <tr>
62
63
  <td colspan="<!--COLSPAN_FULL-->" align="left" style="padding:0px;margin:0px;text-align:left">
63
- <div style="background-color:#ECECEC;height:50px;"><div style="padding:10px"><!--CUSTOM_CONTENT_BOTTOM--></div>
64
+ <div style="background-color:<!--FOOTER_COLOR-->;hieght:50px;color:<!--FOOTER_TXT_COLOR-->;"><div style="padding:10px"><!--CUSTOM_CONTENT_BOTTOM--></div>
64
65
  </td>
65
66
  </tr>
66
67
  </table>
@@ -182,6 +183,13 @@ module WidgetList
182
183
  '
183
184
  })
184
185
 
186
+
187
+ #inject site wide configs before list specific configs if a helper exists
188
+
189
+ if defined?(WidgetListHelper) == 'constant' && WidgetListHelper::SiteDefaults.class == Class && WidgetListHelper::SiteDefaults.respond_to?('get_site_widget_list_defaults')
190
+ @items = WidgetList::Widgets::populate_items(WidgetListHelper::SiteDefaults::get_site_widget_list_defaults() ,@items)
191
+ end
192
+
185
193
  @items = WidgetList::Widgets::populate_items(list,@items)
186
194
 
187
195
  # current_db is a flag of the last known primary or secondary YML used or defaulted when running a list
@@ -300,7 +308,7 @@ module WidgetList
300
308
  fieldsToSearch[columnPivot[0]] = strip_aliases(columnPivot[0])
301
309
  }
302
310
  end
303
-
311
+ fieldsToSearch.delete('cnt') if fieldsToSearch.key?('cnt')
304
312
  searchCriteria = searchFilter.strip_or_self()
305
313
  searchSQL = []
306
314
  numericSearch = false
@@ -495,6 +503,56 @@ module WidgetList
495
503
  end
496
504
  end
497
505
 
506
+ def get_grouping_functions()
507
+ #http://docs.oracle.com/cd/E11882_01/server.112/e10592/functions003.htm
508
+ [
509
+ 'AVG(',
510
+ 'COLLECT(',
511
+ 'CORR(',
512
+ 'COUNT(',
513
+ 'COVAR_POP(',
514
+ 'COVAR_SAMP(',
515
+ 'CUME_DIST(',
516
+ 'DENSE_RANK(',
517
+ 'FIRST(',
518
+ 'GROUP_ID(',
519
+ 'GROUPING_ID(',
520
+ 'LAST(',
521
+ 'LISTAGG(',
522
+ 'MAX(',
523
+ 'MEDIAN(',
524
+ 'MIN(',
525
+ 'PERCENT_RANK(',
526
+ 'PERCENTILE_CONT(',
527
+ 'PERCENTILE_DISC(',
528
+ 'RANK(',
529
+ 'REGR_SLOPE(',
530
+ 'REGR_INTERCEPT(',
531
+ 'REGR_COUNT(',
532
+ 'REGR_R2(',
533
+ 'REGR_AVGX(',
534
+ 'REGR_AVGY(',
535
+ 'REGR_SXX(',
536
+ 'REGR_SYY(',
537
+ 'REGR_SXY(',
538
+ 'STATS_MINOMIAL_TEST(',
539
+ 'STATS_CROSSTAB(',
540
+ 'STATS_F_TEST(',
541
+ 'STATS_KS_TEST(',
542
+ 'STATS_MODE(',
543
+ 'STATS_MW_TEST(',
544
+ 'STDDEV(',
545
+ 'STDDEV_POP(',
546
+ 'STDDEV_SAMP(',
547
+ 'SUM(',
548
+ 'SYS_XMLAGG(',
549
+ 'VAR_POP(',
550
+ 'VAR_SAMP(',
551
+ 'VARIANCE(',
552
+ 'XMLAGG(',
553
+ ]
554
+ end
555
+
498
556
  def self.get_defaults()
499
557
  {
500
558
  'errors' => [],
@@ -528,7 +586,7 @@ module WidgetList
528
586
  #
529
587
  # carryOverRequests will allow you to post custom things from request to all sort/paging URLS for each ajax
530
588
  #
531
- 'carryOverRequsts' => ['switch_grouping'],
589
+ 'carryOverRequsts' => ['switch_grouping','group_row_id'],
532
590
 
533
591
  #
534
592
  # Head/Foot
@@ -547,8 +605,7 @@ module WidgetList
547
605
  # Search
548
606
  #
549
607
  'showSearch' => true,
550
- 'searchOnkeyup' => '',
551
- 'searchOnclick' => '',
608
+ 'searchOnkeyup' => "SearchWidgetList('<!--URL-->', '<!--TARGET-->', this);",
552
609
  'searchIdCol' => 'id',
553
610
  'searchTitle' => 'Search by Id or a list of Ids and more',
554
611
  'searchFieldsIn' => {},
@@ -592,13 +649,22 @@ module WidgetList
592
649
  'borderedColumns' => false,
593
650
  'borderColumnStyle' => '1px solid #CCCCCC',
594
651
 
652
+ #
653
+ # Table Colors
654
+ #
655
+ 'footerBGColor' => '#ECECEC',
656
+ 'headerBGColor' => '#ECECEC',
657
+ 'footerFontColor' => '#494949',
658
+ 'headerFontColor' => '#494949',
659
+ 'tableBorder' => '1',
660
+
595
661
  #
596
662
  # Row specifics
597
663
  #
598
664
  'rowClass' => '',
599
665
  'rowColorByStatus' => {},
600
666
  'rowStylesByStatus' => {},
601
- 'rowOffsets' => ['FFFFFF','FFFFFF'],
667
+ 'rowOffsets' => ['#FFFFFF','#FFFFFF'],
602
668
 
603
669
  'class' => 'listContainerPassive',
604
670
  'tableclass' => 'tableBlowOutPreventer',
@@ -934,6 +1000,11 @@ module WidgetList
934
1000
  end
935
1001
 
936
1002
  @templateFill['<!--HEADER-->'] = @items['templateHeader']
1003
+ @templateFill['<!--TABLE_BORDER-->'] = @items['tableBorder']
1004
+ @templateFill['<!--HEADER_COLOR-->'] = @items['headerBGColor']
1005
+ @templateFill['<!--FOOTER_COLOR-->'] = @items['footerBGColor']
1006
+ @templateFill['<!--HEADER_TXT_COLOR-->'] = @items['headerFontColor']
1007
+ @templateFill['<!--FOOTER_TXT_COLOR-->'] = @items['footerFontColor']
937
1008
  @templateFill['<!--TITLE-->'] = @items['title']
938
1009
  @templateFill['<!--NAME-->'] = @items['name']
939
1010
  @templateFill['<!--JUMP_URL-->'] = WidgetList::Utils::build_url(@items['pageId'],listJumpUrl,(!$_REQUEST.key?('BUTTON_VALUE')))
@@ -1010,11 +1081,11 @@ module WidgetList
1010
1081
  'skip_queue' => false,
1011
1082
  'target' => @items['name'],
1012
1083
  'search_form' => @items['listSearchForm'],
1013
- 'onclick' => (! @items['searchOnclick'].empty? && ! @items['listSearchForm'].empty?) ? @items['searchOnclick'] : '',
1014
- 'onkeyup' => (! @items['searchOnkeyup'].empty?) ? @items['searchOnkeyup'] : ''
1084
+ 'onkeyup' => (! @items['searchOnkeyup'].empty?) ? WidgetList::Utils::fill({'<!--URL-->'=>searchUrl, '<!--TARGET-->' => @items['name'], '<!--FUNCTION_ALL-->' => @items['ajaxFunctionAll']}, @items['searchOnkeyup'] + '<!--FUNCTION_ALL-->') : ''
1015
1085
  }
1016
1086
 
1017
- @templateFill['<!--FILTER_HEADER-->'] = WidgetList::Widgets::widget_input(list_search)
1087
+ @headerPieces['searchBar'] = WidgetList::Widgets::widget_input(list_search)
1088
+ @templateFill['<!--FILTER_HEADER-->'] = @headerPieces['searchBar']
1018
1089
 
1019
1090
  end
1020
1091
 
@@ -1027,6 +1098,11 @@ module WidgetList
1027
1098
  list_group['readonly'] = true
1028
1099
  if @items['groupBySelected']
1029
1100
  list_group['value'] = @items['groupBySelected']
1101
+ elsif $_REQUEST.key?('group_row_id')
1102
+ tmp = $_REQUEST['group_row_id'].gsub(@items['name'] + '_row_','')
1103
+ if Float(tmp.to_i) != nil
1104
+ list_group['value'] = @items['groupByItems'][tmp.to_i - 1]
1105
+ end
1030
1106
  else
1031
1107
  list_group['value'] = @items['groupByItems'][0]
1032
1108
  end
@@ -1061,18 +1137,19 @@ module WidgetList
1061
1137
  'search_form'=> '
1062
1138
  <div id="advanced-search-container" style="height:100% !important;">
1063
1139
  ' + groupRows.join("\n") + '
1064
- </div>',
1065
- 'onclick' => @items['searchOnclick']
1140
+ </div>'
1066
1141
  }
1067
1142
  if !@templateFill.key?('<!--FILTER_HEADER-->')
1068
1143
  @templateFill['<!--FILTER_HEADER-->'] = ''
1069
1144
  end
1070
- @templateFill['<!--FILTER_HEADER-->'] += '<div class="fake-select"><div class="label">' + @items['groupByLabel'] + ':</div> ' + WidgetList::Widgets::widget_input(list_group) + '</div>'
1145
+ @headerPieces['groupByItems'] = '<div class="fake-select ' + @items['name'] + '-group-by"><div class="label">' + @items['groupByLabel'] + ':</div> ' + WidgetList::Widgets::widget_input(list_group) + '</div>'
1146
+ @templateFill['<!--FILTER_HEADER-->'] += @headerPieces['groupByItems']
1071
1147
 
1072
1148
  end
1073
1149
 
1074
1150
  if @items['showExport']
1075
- @templateFill['<!--FILTER_HEADER-->'] += WidgetList::Widgets::widget_button(@items['exportButtonTitle'], {'onclick' => 'ListExport(\'' + @items['name'] + '\');'}, true)
1151
+ @headerPieces['exportButton'] = '<span class="' + @items['name'] + '-export">' + WidgetList::Widgets::widget_button(@items['exportButtonTitle'], {'onclick' => 'ListExport(\'' + @items['name'] + '\');'}, true) + '</span>'
1152
+ @templateFill['<!--FILTER_HEADER-->'] += @headerPieces['exportButton']
1076
1153
  end
1077
1154
 
1078
1155
  end
@@ -1098,6 +1175,10 @@ module WidgetList
1098
1175
  end
1099
1176
  end
1100
1177
 
1178
+ def get_header_pieces()
1179
+ @headerPieces
1180
+ end
1181
+
1101
1182
  def build_pagination()
1102
1183
  pageRange = 3
1103
1184
  pageNext = 1
@@ -1302,6 +1383,27 @@ module WidgetList
1302
1383
 
1303
1384
  end
1304
1385
 
1386
+ def self.build_search_button_click(list_parms)
1387
+
1388
+ extra_get_vars = ''
1389
+ extra_func = ''
1390
+ filterParameters = {}
1391
+ if list_parms.key?('ajaxFunctionAll')
1392
+ extra_func = list_parms['ajaxFunctionAll']
1393
+ end
1394
+
1395
+ if list_parms.key?('carryOverRequsts')
1396
+ list_parms['carryOverRequsts'].each { |value|
1397
+ if $_REQUEST.key?(value)
1398
+ filterParameters[value] = $_REQUEST[value]
1399
+ end
1400
+ }
1401
+ extra_get_vars = WidgetList::Utils::build_query_string(filterParameters)
1402
+ end
1403
+
1404
+ "ListJumpMin(jQuery('##{list_parms['name']}_jump_url').val() + '&advanced_search=1&' + jQuery('#list_search_id_#{list_parms['name']}_results *').serialize() + '&#{extra_get_vars}', '#{list_parms['name']}');HideAdvancedSearch(this);" + extra_func
1405
+ end
1406
+
1305
1407
  def build_headers()
1306
1408
  headers = []
1307
1409
  @items['fields'].each { |field, fieldTitle|
@@ -1636,9 +1738,12 @@ module WidgetList
1636
1738
  ret = {}
1637
1739
 
1638
1740
  if $_REQUEST['list_action'] != 'ajax_widgetlist_checks'
1639
- ret['list'] = list.render()
1640
- ret['list_id'] = list_parms['name']
1641
- ret['callback'] = 'ListSearchAheadResponse'
1741
+ ret['list'] = list.render()
1742
+ ret['search_bar'] = list.get_header_pieces['searchBar']
1743
+ ret['group_by_items'] = list.get_header_pieces['groupByItems']
1744
+ ret['export_button'] = list.get_header_pieces['exportButton']
1745
+ ret['list_id'] = list_parms['name']
1746
+ ret['callback'] = 'ListSearchAheadResponse'
1642
1747
  end
1643
1748
 
1644
1749
  return ['json',WidgetList::Utils::json_encode(ret)]
@@ -1821,29 +1926,37 @@ module WidgetList
1821
1926
  nameId = ''
1822
1927
 
1823
1928
  buttons.each { |buttonId,buttonAttribs|
1824
- #url = array('PAGE_ID')
1825
1929
  function = @items['linkFunction']
1826
1930
  parameters = ''
1827
1931
  renderButton = true
1828
1932
 
1933
+ page = buttonAttribs['page'].dup
1829
1934
  if buttonAttribs.key?('tags')
1830
1935
  buttonAttribs['tags'].each { | tagName , tag |
1831
- #only uppercase will be replaced
1832
- #
1833
-
1834
1936
  if @results.key?(tag.upcase) && @results[tag.upcase][j]
1937
+ #
1938
+ # Data exists, lets check to see if page has any lowercase tags for restful URLs
1939
+ #
1835
1940
 
1836
- buttonAttribs.deep_merge!({'args' =>
1837
- {
1838
- tagName => @results[tag.upcase][j]
1839
- }
1840
- })
1941
+ if buttonAttribs.key?('page') && buttonAttribs['page'].include?(tag.downcase)
1942
+ page.gsub!(tag.downcase,@results[tag.upcase][j])
1943
+ else
1944
+ #
1945
+ # Will build ?tagname=XXXX based on your hash passed to your page
1946
+ #
1947
+ buttonAttribs.deep_merge!({ 'args' => { tagName => @results[tag.upcase][j] } })
1948
+ end
1841
1949
  else
1842
- buttonAttribs.deep_merge!({'args' =>
1843
- {
1844
- tagName => tag
1845
- }
1846
- })
1950
+
1951
+ #
1952
+ # User is passing hard coded tags such as 'tags' => {'my_static_var' => '1234'}
1953
+ # Just fill in normally wherever anything is matched
1954
+ #
1955
+ if buttonAttribs.key?('page') && buttonAttribs['page'].include?(tag.downcase)
1956
+ page.gsub!(tagName,tag)
1957
+ else
1958
+ buttonAttribs.deep_merge!({ 'args' => { tagName => tag } })
1959
+ end
1847
1960
  end
1848
1961
  }
1849
1962
  end
@@ -1852,19 +1965,19 @@ module WidgetList
1852
1965
  buttonAttribs['name'] = nameId
1853
1966
  buttonAttribs['id'] = nameId
1854
1967
 
1855
- #if buttonAttribs.key?('condition')
1856
- #never show button if you pass a condition unless explicitly matching the value of the features
1857
- #
1858
- #renderButton = false
1859
- #allConditions = columnValue.split(':')
1860
- #if (in_array(ltrim($buttonAttribs['condition'], ':'), $allConditions))
1861
- # renderButton = true
1862
- #end
1863
- #end
1968
+ if buttonAttribs.key?('hide_if') && input['hide_if'].class.name == 'Proc'
1969
+ row_tmp = {}
1970
+ @results.map { |column| column }.each { |col|
1971
+ row_tmp[ col[0] ] = col[1][row]
1972
+ }
1973
+ if buttonAttribs['hide_if'].call(row_tmp)
1974
+ renderButton = false
1975
+ end
1976
+ end
1864
1977
 
1865
1978
  if (renderButton)
1866
1979
  strCnt += (buttonAttribs['text'].length * 15)
1867
- btnOut << WidgetList::Widgets::widget_button(buttonAttribs['text'], buttonAttribs, true)
1980
+ btnOut << WidgetList::Widgets::widget_button(buttonAttribs['text'], buttonAttribs.deep_merge!({'page' => page}) , true)
1868
1981
  end
1869
1982
  }
1870
1983
 
@@ -230,6 +230,22 @@ function ListJumpResponse(response)
230
230
  {
231
231
  eval(response['callback'] + '()');
232
232
  }
233
+
234
+ if(typeof response['search_bar'] === 'string')
235
+ {
236
+ jQuery('.' + response['list_id'] + '-search').replaceWith(response['search_bar']);
237
+ InitInfoFields(jQuery('#list_search_id_' + response['list_id']));
238
+ }
239
+
240
+ if(typeof response['export_button'] === 'string')
241
+ {
242
+ jQuery('.' + response['list_id'] + '-export').replaceWith(response['export_button']);
243
+ }
244
+
245
+ if(typeof response['group_by_items'] === 'string')
246
+ {
247
+ jQuery('.' + response['list_id'] + '-group-by').replaceWith(response['group_by_items']);
248
+ }
233
249
  }
234
250
 
235
251
  /**
@@ -627,7 +627,7 @@ div.inputOuter .inputInner input.search-ahead {width:97%}
627
627
  * Advanced Search Down Arrow
628
628
  */
629
629
  .widget-search-arrow {background: url('../assets/images/gobblecons/mid-gray/arrow-16.png') no-repeat scroll 0px 0px transparent;float:right;margin:8px;position: relative;right:-23px;top:-30px;cursor:pointer;border:0px solid red;height:20px;width:20px;display:none}
630
- .widget-search-arrow:hover {background: url('../assets/images/gobblecons/teal/arrow-16.png') no-repeat scroll 0px 0px transparent;}
630
+ .widget-search-arrow:hover {background: url('../assets/images/gobblecons/mid-gray/arrow-16.png') no-repeat scroll 0px 0px transparent;}
631
631
 
632
632
  /**
633
633
  * Search Ahead Magifier Glass
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: widget_list
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.11
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-27 00:00:00.000000000 Z
12
+ date: 2013-02-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sequel