Data Tables Generator by Supsystic - Version 1.9.6

Version Description

/ 20.12.2018 = * Added option on-off legend labels along with parts of the chart * Small Fix Zing Charts * Fix of exporting of tables with collapsible cells * Fix of formula COUNTIF * Fix of applying of format to cell value * Styles fix for Add New Table popup * Encode cell data before saving in db * Removed slashes from cell after import from Spreadheets

Download this release

Release Info

Developer supsystic.com
Plugin Icon 128x128 Data Tables Generator by Supsystic
Version 1.9.6
Comparing to
See all releases

Code changes from version 1.9.3 to 1.9.6

Files changed (46) hide show
  1. app/SupsysticTables.php +15 -14
  2. app/assets/css/jquery-ui.min.css +1 -1
  3. app/assets/css/jquery-ui.structure.min.css +1 -1
  4. app/assets/css/jquery-ui.theme.min.css +8 -8
  5. app/assets/css/supsystic-ui.css +14 -1
  6. app/assets/js/i18n/{grid.locale-cat.js → grid.locale-ca.js} +0 -0
  7. app/assets/js/i18n/{grid.locale-mne.js → grid.locale-me.js} +0 -0
  8. app/assets/js/i18n/grid.locale-sq.js +203 -0
  9. app/assets/js/i18n/{grid.locale-ua.js → grid.locale-uk.js} +0 -0
  10. app/assets/js/notify.js +59 -0
  11. app/assets/js/supsystic.ui.js +7 -1
  12. app/templates/layout.twig +24 -31
  13. index.php +9 -7
  14. readme.txt +83 -13
  15. screenshot-4.png +0 -0
  16. src/SupsysticTables/Core/ModelsFactory.php +9 -1
  17. src/SupsysticTables/Core/Module.php +10 -5
  18. src/SupsysticTables/Core/assets/js/core.js +130 -85
  19. src/SupsysticTables/Core/assets/js/create-table.js +3 -3
  20. src/SupsysticTables/Core/assets/js/lib/jquery.dataTables.min.js +1 -1
  21. src/SupsysticTables/Core/updates/rev-61.sql +0 -0
  22. src/SupsysticTables/Settings/assets/css/settings.css +4 -0
  23. src/SupsysticTables/Settings/views/index.twig +30 -12
  24. src/SupsysticTables/Tables/Controller.php +29 -12
  25. src/SupsysticTables/Tables/Model/Tables.php +43 -20
  26. src/SupsysticTables/Tables/Module.php +67 -32
  27. src/SupsysticTables/Tables/assets/css/loaders.css +2 -1
  28. src/SupsysticTables/Tables/assets/css/tables.shortcode.css +9 -1
  29. src/SupsysticTables/Tables/assets/css/tables.view.css +3 -0
  30. src/SupsysticTables/Tables/assets/js/editor/tables.editor.toolbar.js +81 -41
  31. src/SupsysticTables/Tables/assets/js/tables.model.js +23 -6
  32. src/SupsysticTables/Tables/assets/js/tables.view.js +22 -5
  33. src/SupsysticTables/Tables/assets/libraries/numeral.min.js +1 -681
  34. src/SupsysticTables/Tables/assets/libraries/ruleJS/ruleJS.lib.full.js +52 -49
  35. src/SupsysticTables/Tables/views/notice/review.twig +3 -3
  36. src/SupsysticTables/Tables/views/notice/wooAds.twig +11 -0
  37. src/SupsysticTables/Tables/views/shortcode.twig +10 -2
  38. src/SupsysticTables/Tables/views/view.twig +43 -8
  39. src/SupsysticTables/Woocommerce/Module.php +63 -0
  40. src/SupsysticTables/Woocommerce/assets/img/wooadsfool.gif +0 -0
  41. src/SupsysticTables/Woocommerce/assets/img/woocommerce.jpg +0 -0
  42. src/SupsysticTables/Woocommerce/views/partials/tab.twig +6 -0
  43. src/SupsysticTables/Woocommerce/views/partials/tabContent.twig +16 -0
  44. vendor/Rsc/Environment.php +5 -0
  45. vendor/Rsc/Mvc/Module.php +16 -8
  46. vendor/Rsc/Resolver.php +16 -11
app/SupsysticTables.php CHANGED
@@ -18,7 +18,7 @@ class SupsysticTables
18
 
19
  $menuSlug = 'supsystic-tables';
20
  $pluginPath = dirname(dirname(__FILE__));
21
- $environment = new Rsc_Environment('st', '1.9.3', $pluginPath);
22
 
23
  /* Configure */
24
  $environment->configure(
@@ -39,19 +39,20 @@ class SupsysticTables
39
  'icon_url' => 'dashicons-editor-table',
40
  'position' => '102.2',
41
  ),
42
- 'shortcode_name' => defined('SUPSYSTIC_TABLES_SHORTCODE_NAME') ? SUPSYSTIC_TABLES_SHORTCODE_NAME : $menuSlug,
43
- 'shortcode_value_name' => defined('SUPSYSTIC_TABLES_VALUE_SHORTCODE_NAME') ? SUPSYSTIC_TABLES_VALUE_SHORTCODE_NAME : $menuSlug . '-cell',
44
- 'shortcode_cell_name' => defined('SUPSYSTIC_TABLES_CELL_SHORTCODE_NAME') ? SUPSYSTIC_TABLES_CELL_SHORTCODE_NAME : $menuSlug . '-cell-full',
45
- 'shortcode_part_name' => defined('SUPSYSTIC_TABLES_PART_SHORTCODE_NAME') ? SUPSYSTIC_TABLES_PART_SHORTCODE_NAME : $menuSlug . '-part',
46
- 'db_prefix' => 'supsystic_tbl_',
47
- 'hooks_prefix' => 'supsystic_tbl_',
48
- 'ajax_url' => admin_url('admin-ajax.php'),
49
- 'admin_url' => admin_url(),
50
- 'plugin_db_update' => true,
51
- 'revision_key' => '_supsystic_tables_rev',
52
- 'revision' => 60,
53
- 'welcome_page_was_showed' => get_option('supsystic_tbl_welcome_page_was_showed'),
54
- 'promo_controller' => 'SupsysticTables_Promo_Controller'
 
55
  )
56
  );
57
 
18
 
19
  $menuSlug = 'supsystic-tables';
20
  $pluginPath = dirname(dirname(__FILE__));
21
+ $environment = new Rsc_Environment('st', '1.9.6', $pluginPath);
22
 
23
  /* Configure */
24
  $environment->configure(
39
  'icon_url' => 'dashicons-editor-table',
40
  'position' => '102.2',
41
  ),
42
+ 'shortcode_prefix' => $menuSlug,
43
+ 'shortcode_name' => defined('SUPSYSTIC_TABLES_SHORTCODE_NAME') ? SUPSYSTIC_TABLES_SHORTCODE_NAME : $menuSlug,
44
+ 'shortcode_part_name' => defined('SUPSYSTIC_TABLES_PART_SHORTCODE_NAME') ? SUPSYSTIC_TABLES_PART_SHORTCODE_NAME : $menuSlug . '-part',
45
+ 'shortcode_cell_name' => defined('SUPSYSTIC_TABLES_CELL_SHORTCODE_NAME') ? SUPSYSTIC_TABLES_CELL_SHORTCODE_NAME : $menuSlug . '-cell-full',
46
+ 'shortcode_value_name' => defined('SUPSYSTIC_TABLES_VALUE_SHORTCODE_NAME') ? SUPSYSTIC_TABLES_VALUE_SHORTCODE_NAME : $menuSlug . '-cell',
47
+ 'db_prefix' => 'supsystic_tbl_',
48
+ 'hooks_prefix' => 'supsystic_tbl_',
49
+ 'ajax_url' => admin_url('admin-ajax.php'),
50
+ 'admin_url' => admin_url(),
51
+ 'plugin_db_update' => true,
52
+ 'revision_key' => '_supsystic_tables_rev',
53
+ 'revision' => 61,
54
+ 'welcome_page_was_showed' => get_option('supsystic_tbl_welcome_page_was_showed'),
55
+ 'promo_controller' => 'SupsysticTables_Promo_Controller'
56
  )
57
  );
58
 
app/assets/css/jquery-ui.min.css CHANGED
@@ -4,7 +4,7 @@
4
  * To view and modify this theme, visit http://jqueryui.com/themeroller/?tr%26ffDefault=Helvetica%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=888888&bgTextureHeader=highlight_hard&bgImgOpacityHeader=15&borderColorHeader=404040&fcHeader=ffffff&iconColorHeader=cccccc&bgColorContent=121212&bgTextureContent=gloss_wave&bgImgOpacityContent=16&borderColorContent=404040&fcContent=eeeeee&iconColorContent=bbbbbb&bgColorDefault=adadad&bgTextureDefault=highlight_soft&bgImgOpacityDefault=35&borderColorDefault=cccccc&fcDefault=333333&iconColorDefault=666666&bgColorHover=dddddd&bgTextureHover=highlight_soft&bgImgOpacityHover=60&borderColorHover=dddddd&fcHover=000000&iconColorHover=c98000&bgColorActive=121212&bgTextureActive=inset_soft&bgImgOpacityActive=15&borderColorActive=000000&fcActive=ffffff&iconColorActive=f29a00&bgColorHighlight=555555&bgTextureHighlight=highlight_hard&bgImgOpacityHighlight=55&borderColorHighlight=404040&fcHighlight=cccccc&iconColorHighlight=aaaaaa&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a
5
  * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
6
 
7
- .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content a{color:#eee}.ui-widget-header a{color:#fff}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#333;text-decoration:none}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#000;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #000;background:#121212 url("images/ui-bg_inset-soft_15_121212_1x100.png") 50% 50% repeat-x;font-weight:normal;color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #404040;background:#555 url("images/ui-bg_highlight-hard_55_555555_1x100.png") 50% top repeat-x;color:#ccc}
8
  /*.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#ccc}*/
9
  .ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-state-active .ui-icon{background-image:url("images/ui-icons_f29a00_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_aaaaaa_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}
10
  /*.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:5px}
4
  * To view and modify this theme, visit http://jqueryui.com/themeroller/?tr%26ffDefault=Helvetica%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=888888&bgTextureHeader=highlight_hard&bgImgOpacityHeader=15&borderColorHeader=404040&fcHeader=ffffff&iconColorHeader=cccccc&bgColorContent=121212&bgTextureContent=gloss_wave&bgImgOpacityContent=16&borderColorContent=404040&fcContent=eeeeee&iconColorContent=bbbbbb&bgColorDefault=adadad&bgTextureDefault=highlight_soft&bgImgOpacityDefault=35&borderColorDefault=cccccc&fcDefault=333333&iconColorDefault=666666&bgColorHover=dddddd&bgTextureHover=highlight_soft&bgImgOpacityHover=60&borderColorHover=dddddd&fcHover=000000&iconColorHover=c98000&bgColorActive=121212&bgTextureActive=inset_soft&bgImgOpacityActive=15&borderColorActive=000000&fcActive=ffffff&iconColorActive=f29a00&bgColorHighlight=555555&bgTextureHighlight=highlight_hard&bgImgOpacityHighlight=55&borderColorHighlight=404040&fcHighlight=cccccc&iconColorHighlight=aaaaaa&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a
5
  * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
6
 
7
+ .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:font-family:Verdana,Arial,Helvetica,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content a{color:#eee}.ui-widget-header a{color:#fff}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#333;text-decoration:none}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#000;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #000;background:#121212 url("images/ui-bg_inset-soft_15_121212_1x100.png") 50% 50% repeat-x;font-weight:normal;color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #404040;background:#555 url("images/ui-bg_highlight-hard_55_555555_1x100.png") 50% top repeat-x;color:#ccc}
8
  /*.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#ccc}*/
9
  .ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-state-active .ui-icon{background-image:url("images/ui-icons_f29a00_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_aaaaaa_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}
10
  /*.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:5px}
app/assets/css/jquery-ui.structure.min.css CHANGED
@@ -2,4 +2,4 @@
2
  * http://jqueryui.com
3
  * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4
 
5
- .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis;color: white;}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}
2
  * http://jqueryui.com
3
  * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4
 
5
+ .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}/*.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis;color: white;}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}*/.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}
app/assets/css/jquery-ui.theme.min.css CHANGED
@@ -2,7 +2,7 @@
2
  * http://jqueryui.com
3
  * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4
 
5
- .ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content a{color:#000}.ui-widget-header a{color:#fff}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#333;text-decoration:none}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#000;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #000;background:#121212 url("images/ui-bg_inset-soft_15_121212_1x100.png") 50% 50% repeat-x;font-weight:normal;color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}
6
  .ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{
7
  border:1px solid #404040;
8
  background:#555 url("images/ui-bg_highlight-hard_55_555555_1x100.png") 50% top repeat-x;
@@ -72,10 +72,6 @@
72
  .trash-btn:hover {
73
  opacity: 0.8;
74
  }
75
- .ui-widget-header {
76
- background: #e8eded !important;
77
- padding: 6px !important;
78
- }
79
  .ui-jqgrid-title {
80
  font-size: 18px;
81
  color: white;
@@ -205,9 +201,13 @@ thead .ui-jqgrid-labels th[id$='_cb'] .s-ico {
205
  padding-right: 2%;
206
  }
207
  /*popup dialog*/
208
- .ui-dialog .ui-dialog-title {
209
- color: black !important;
210
- }
 
 
 
 
211
  /*jquery slider*/
212
  .ui-slider.ui-widget-content:not(.iris-slider-offset) {
213
  background: transparent;
2
  * http://jqueryui.com
3
  * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
4
 
5
+ .ui-widget{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content a{color:#000}.ui-widget-header a{color:#fff}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#333;text-decoration:none}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#000;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #000;background:#121212 url("images/ui-bg_inset-soft_15_121212_1x100.png") 50% 50% repeat-x;font-weight:normal;color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}
6
  .ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{
7
  border:1px solid #404040;
8
  background:#555 url("images/ui-bg_highlight-hard_55_555555_1x100.png") 50% top repeat-x;
72
  .trash-btn:hover {
73
  opacity: 0.8;
74
  }
 
 
 
 
75
  .ui-jqgrid-title {
76
  font-size: 18px;
77
  color: white;
201
  padding-right: 2%;
202
  }
203
  /*popup dialog*/
204
+ /*.ui-dialog .ui-dialog-title {*/
205
+ /*color: black !important;*/
206
+ /*}*/
207
+ /*.ui-widget-header {*/
208
+ /*background: #e8eded !important;*/
209
+ /*padding: 6px !important;*/
210
+ /*}*/
211
  /*jquery slider*/
212
  .ui-slider.ui-widget-content:not(.iris-slider-offset) {
213
  background: transparent;
app/assets/css/supsystic-ui.css CHANGED
@@ -196,6 +196,10 @@ ul.supsystic-bar-controls > li.separator {
196
  overflow: hidden;
197
  }
198
 
 
 
 
 
199
 
200
  /* Helpers */
201
 
@@ -234,7 +238,11 @@ ul.supsystic-bar-controls > li.separator {
234
  }
235
 
236
  .ui-dialog .ui-dialog-content {
237
- overflow: visible !important;
 
 
 
 
238
  }
239
 
240
  .ui-dialog .ui-dialog-buttonpane button {
@@ -251,6 +259,11 @@ ul.supsystic-bar-controls > li.separator {
251
  font-size: 17px;
252
  }
253
 
 
 
 
 
 
254
  .ui-widget-overlay {
255
  background: #000 !important;
256
  opacity: .3;
196
  overflow: hidden;
197
  }
198
 
199
+ .stbCopyTextCode {
200
+ text-align: center;
201
+ }
202
+
203
 
204
  /* Helpers */
205
 
238
  }
239
 
240
  .ui-dialog .ui-dialog-content {
241
+ position: relative;
242
+ border: 0;
243
+ padding: .5em 1em;
244
+ background: none;
245
+ overflow: visible !important;
246
  }
247
 
248
  .ui-dialog .ui-dialog-buttonpane button {
259
  font-size: 17px;
260
  }
261
 
262
+ .ui-widget {
263
+ font-family: Verdana,Arial,Helvetica,sans-serif;
264
+ font-size: 1.1em;
265
+ }
266
+
267
  .ui-widget-overlay {
268
  background: #000 !important;
269
  opacity: .3;
app/assets/js/i18n/{grid.locale-cat.js → grid.locale-ca.js} RENAMED
File without changes
app/assets/js/i18n/{grid.locale-mne.js → grid.locale-me.js} RENAMED
File without changes
app/assets/js/i18n/grid.locale-sq.js ADDED
@@ -0,0 +1,203 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ;(function($){
2
+ /**
3
+ * jqGrid Albanian Translation
4
+ **/
5
+ $.jgrid = $.jgrid || {};
6
+ $.extend($.jgrid,{
7
+ defaults : {
8
+ recordtext: "Shfaq {0} - {1}/{2}",
9
+ emptyrecords: "Nuk ka rreshta për të shfaqur",
10
+ loadtext: "Duke u ngarkuar...",
11
+ savetext: "Duke ruajtur...",
12
+ pgtext : "Faqja {0}/{1}",
13
+ pgfirst : "Faqja e parë",
14
+ pglast : "Faqja e fundit",
15
+ pgnext : "Faqja tjetër",
16
+ pgprev : "Faqja mëparshme",
17
+ pgrecs : "Rreshta për faqe",
18
+ showhide: "Shpalos ose mbyll tabelën",
19
+ // mobile
20
+ pagerCaption : "Tabela::Kruskoti i faqes",
21
+ pageText : "Faqja:",
22
+ recordPage : "Rreshta për faqe",
23
+ nomorerecs : "Nuk ka rreshta të tjerë...",
24
+ scrollPullup: "Tërhiq për lart për të tjerë...",
25
+ scrollPulldown : "Tërqiq për poshtë për rifreskim...",
26
+ scrollRefresh : "Lësho për rifreskim..."
27
+ },
28
+ search : {
29
+ caption: "Kërko...",
30
+ Find: "Gjej",
31
+ Reset: "Pastro",
32
+ odata: [{ oper:'eq', text:'baraz'},{ oper:'ne', text:'jo baraz'},{ oper:'lt', text:'me e vogel'},{ oper:'le', text:'me e vogel ose baraz'},{ oper:'gt', text:'me e madhe'},{ oper:'ge', text:'me e madhe ose baraz'},{ oper:'bw', text:'fillon me'},{ oper:'bn', text:'nuk fillon me'},{ oper:'in', text:'brenda'},{ oper:'ni', text:'jo brenda'},{ oper:'ew', text:'mbaron me'},{ oper:'en', text:'nuk mbaron me'},{ oper:'cn', text:'permban'},{ oper:'nc', text:'nuk permban'},{ oper:'nu', text:'eshte bosh'},{ oper:'nn', text:'nuk eshte bosh'}, {oper:'bt', text:'between'}],
33
+ groupOps: [{ op: "AND", text: "te gjithe" },{ op: "OR", text: "cfaredo" }],
34
+ operandTitle : "Kliko per te zgjedhur veprimin.",
35
+ resetTitle : "Fshi vlerat e kerkimit",
36
+ addsubgrup : "Add subgroup",
37
+ addrule : "Add rule",
38
+ delgroup : "Delete group",
39
+ delrule : "Delete rule"
40
+
41
+ },
42
+ edit : {
43
+ addCaption: "Shto rresht",
44
+ editCaption: "Fshi rresht",
45
+ bSubmit: "Vendos",
46
+ bCancel: "Anullo",
47
+ bClose: "Mbyll",
48
+ saveData: "Te dhenat jane ndryshuar! Deshironi ti ruani ndryshimet?",
49
+ bYes : "Po",
50
+ bNo : "Jo",
51
+ bExit : "Anullo",
52
+ msg: {
53
+ required:"Kjo fushe eshte e detyrueshme",
54
+ number:"Ju lutem, vendosni nje numer te vlefshem",
55
+ minValue:"vlera duhet te jete me e madhe ose e njejte me ",
56
+ maxValue:"vlera duhet te jete me e vogel ose e njejte me",
57
+ email: "nuk eshte adrese poste elektronike e vlefshme",
58
+ integer: "Ju lutem, vendosni nje numer te plote te vlefshem",
59
+ date: "Ju lutem, vendosni nje date te vlefshme",
60
+ url: "nuk eshte URL e vlefshme. Nevojitet prefiksi ('http://' ose 'https://')",
61
+ nodefined : " nuk eshte percaktuar!",
62
+ novalue : " vlera si pergjigje eshte e detyreshme!",
63
+ customarray : "Funksioni i personalizuar duhet te ktheje nje array!",
64
+ customfcheck : "unksioni i personalizuar duhet te egzistoje ne rast kontrolli te personalizuar!"
65
+
66
+ }
67
+ },
68
+ view : {
69
+ caption: "Shfaq Rreshtin",
70
+ bClose: "Mbyll"
71
+ },
72
+ del : {
73
+ caption: "Fshi",
74
+ msg: "Deshironi te fshini rreshtin/rreshtat e zgjedhur?",
75
+ bSubmit: "Fshi",
76
+ bCancel: "Anullo"
77
+ },
78
+ nav : {
79
+ edittext: "",
80
+ edittitle: "Modifiko rreshtin e zgjedhur",
81
+ addtext:"",
82
+ addtitle: "Shto rresht te ri",
83
+ deltext: "",
84
+ deltitle: "Fshi rreshtin e zgjedhur",
85
+ searchtext: "",
86
+ searchtitle: "Gjej rreshtat",
87
+ refreshtext: "",
88
+ refreshtitle: "Ringarko listen",
89
+ alertcap: "Paralajmerim",
90
+ alerttext: "Ju lutem, zgjidh nje rresht",
91
+ viewtext: "",
92
+ viewtitle: "Shfaq rreshtin e zgjedhur",
93
+ savetext: "",
94
+ savetitle: "Ruaj rreshtin",
95
+ canceltext: "",
96
+ canceltitle : "Anullo modifikim rreshti",
97
+ selectcaption : "Veprime..."
98
+ },
99
+ col : {
100
+ caption: "Zgjidh kolona",
101
+ bSubmit: "Ok",
102
+ bCancel: "Anullo"
103
+ },
104
+ errors : {
105
+ errcap : "Gabim",
106
+ nourl : "Nuk eshte percaktuar asnje URL",
107
+ norecords: "Nuk ka rreshta per perpunim",
108
+ model : "Gjatesia e emrit te kolones <> modeli i kolones!"
109
+ },
110
+ formatter : {
111
+ integer : {thousandsSeparator: ",", defaultValue: '0'},
112
+ number : {decimalSeparator:".", thousandsSeparator: ",", decimalPlaces: 2, defaultValue: '0.00'},
113
+ currency : {decimalSeparator:".", thousandsSeparator: ",", decimalPlaces: 2, prefix: "", suffix:"", defaultValue: '0.00'},
114
+ date : {
115
+ dayNames: [
116
+ "Dje", "Hën", "Mar", "Mër", "Enj", "Pre", "Sht",
117
+ "Djelë", "Hënë", "Martë", "Mërkurë", "Enjte", "Premte", "Shtunë"
118
+ ],
119
+ monthNames: [
120
+ "Jan", "Shk", "Mar", "Pri", "Maj", "Qer", "Kor", "Gus", "Sht", "Tet", "Nën", "Dhj",
121
+ "Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor"
122
+ ],
123
+ AmPm : ["am","pm","AM","PM"],
124
+ S: function (j) {return j < 11 || j > 13 ? ['st', 'nd', 'rd', 'th'][Math.min((j - 1) % 10, 3)] : 'th';},
125
+ srcformat: 'Y-m-d',
126
+ newformat: 'n/j/Y',
127
+ parseRe : /[#%\\\/:_;.,\t\s-]/,
128
+ masks : {
129
+ // see http://php.net/manual/en/function.date.php for PHP format used in jqGrid
130
+ // and see http://docs.jquery.com/UI/Datepicker/formatDate
131
+ // and https://github.com/jquery/globalize#dates for alternative formats used frequently
132
+ // one can find on https://github.com/jquery/globalize/tree/master/lib/cultures many
133
+ // information about date, time, numbers and currency formats used in different countries
134
+ // one should just convert the information in PHP format
135
+ ISO8601Long:"Y-m-d H:i:s",
136
+ ISO8601Short:"Y-m-d",
137
+ // short date:
138
+ // n - Numeric representation of a month, without leading zeros
139
+ // j - Day of the month without leading zeros
140
+ // Y - A full numeric representation of a year, 4 digits
141
+ // example: 3/1/2012 which means 1 March 2012
142
+ ShortDate: "n/j/Y", // in jQuery UI Datepicker: "M/d/yyyy"
143
+ // long date:
144
+ // l - A full textual representation of the day of the week
145
+ // F - A full textual representation of a month
146
+ // d - Day of the month, 2 digits with leading zeros
147
+ // Y - A full numeric representation of a year, 4 digits
148
+ LongDate: "l, F d, Y", // in jQuery UI Datepicker: "dddd, MMMM dd, yyyy"
149
+ // long date with long time:
150
+ // l - A full textual representation of the day of the week
151
+ // F - A full textual representation of a month
152
+ // d - Day of the month, 2 digits with leading zeros
153
+ // Y - A full numeric representation of a year, 4 digits
154
+ // g - 12-hour format of an hour without leading zeros
155
+ // i - Minutes with leading zeros
156
+ // s - Seconds, with leading zeros
157
+ // A - Uppercase Ante meridiem and Post meridiem (AM or PM)
158
+ FullDateTime: "l, F d, Y g:i:s A", // in jQuery UI Datepicker: "dddd, MMMM dd, yyyy h:mm:ss tt"
159
+ // month day:
160
+ // F - A full textual representation of a month
161
+ // d - Day of the month, 2 digits with leading zeros
162
+ MonthDay: "F d", // in jQuery UI Datepicker: "MMMM dd"
163
+ // short time (without seconds)
164
+ // g - 12-hour format of an hour without leading zeros
165
+ // i - Minutes with leading zeros
166
+ // A - Uppercase Ante meridiem and Post meridiem (AM or PM)
167
+ ShortTime: "g:i A", // in jQuery UI Datepicker: "h:mm tt"
168
+ // long time (with seconds)
169
+ // g - 12-hour format of an hour without leading zeros
170
+ // i - Minutes with leading zeros
171
+ // s - Seconds, with leading zeros
172
+ // A - Uppercase Ante meridiem and Post meridiem (AM or PM)
173
+ LongTime: "g:i:s A", // in jQuery UI Datepicker: "h:mm:ss tt"
174
+ SortableDateTime: "Y-m-d\\TH:i:s",
175
+ UniversalSortableDateTime: "Y-m-d H:i:sO",
176
+ // month with year
177
+ // Y - A full numeric representation of a year, 4 digits
178
+ // F - A full textual representation of a month
179
+ YearMonth: "F, Y" // in jQuery UI Datepicker: "MMMM, yyyy"
180
+ },
181
+ reformatAfterEdit : false,
182
+ userLocalTime : false
183
+ },
184
+ baseLinkUrl: '',
185
+ showAction: '',
186
+ target: '',
187
+ checkbox : {disabled:true},
188
+ idName : 'id'
189
+ },
190
+ colmenu : {
191
+ sortasc : "Sort Ascending",
192
+ sortdesc : "Sort Descending",
193
+ columns : "Columns",
194
+ filter : "Filter",
195
+ grouping : "Group By",
196
+ ungrouping : "Ungroup",
197
+ searchTitle : "Get items with value that:",
198
+ freeze : "Freeze",
199
+ unfreeze : "Unfreeze",
200
+ reorder : "Move to reorder"
201
+ }
202
+ });
203
+ })(jQuery);
app/assets/js/i18n/{grid.locale-ua.js → grid.locale-uk.js} RENAMED
File without changes
app/assets/js/notify.js ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($) {
2
+
3
+ $.sNotify = function(options) {
4
+ console.log('1');
5
+ if (!this.length) {
6
+ return this;
7
+ }
8
+
9
+ var $wrapper = $('<div class="s-notify">').css({
10
+ position: 'fixed',
11
+ display: 'none',
12
+ right: '1.7em',
13
+ top: '3.3em',
14
+ padding: '1em',
15
+ 'background-color': 'white',
16
+ 'box-shadow': '0px 0px 6px 0px rgba(0,0,0,0.1)'
17
+ });
18
+
19
+ $wrapper.wrapInner(this);
20
+ $wrapper.appendTo('body');
21
+
22
+ if (options.icon) {
23
+ $('<i/>').addClass(options.icon).appendTo($wrapper);
24
+ }
25
+
26
+ if (options.content) {
27
+ $('<div class="notify-content"></div>').css('display', 'inline-block').wrapInner(options.content).appendTo($wrapper);
28
+ }
29
+
30
+ setTimeout(function() {
31
+ $wrapper.fadeIn();
32
+ if (options.delay) {
33
+ setTimeout(function() {
34
+ $wrapper.fadeOut(function() {
35
+ $wrapper.remove();
36
+ });
37
+ }, options.delay);
38
+ }
39
+ }, 200);
40
+
41
+ return $.extend($wrapper, {
42
+ close: function(timeout) {
43
+ setTimeout(function() {
44
+ $wrapper.fadeOut(function() {
45
+ $wrapper.remove();
46
+ });
47
+ }, timeout || '0');
48
+ },
49
+ update: function(content, icon) {
50
+ this.find('.notify-content').empty().append(content);
51
+ if (icon) {
52
+ this.find('i').removeClass().addClass(icon);
53
+ }
54
+ return this;
55
+ }
56
+ });
57
+ };
58
+
59
+ })(jQuery);
app/assets/js/supsystic.ui.js CHANGED
@@ -9,13 +9,15 @@
9
 
10
  jQuery(document).one('click','.supsystic-admin-notice a, .supsystic-admin-notice button',function(event) {
11
  var responseCode = jQuery(this).data('response-code') || 'hide';
 
12
 
13
  jQuery('.supsystic-admin-notice .notice-dismiss').trigger('click');
14
 
15
  window.supsystic.Tables.request({
16
  module: 'tables',action: 'reviewNoticeResponse'
17
  },{
18
- responseCode: responseCode
 
19
  });
20
  });
21
 
@@ -51,6 +53,10 @@
51
  $target.fadeToggle();
52
  });
53
 
 
 
 
 
54
  /* Minimum height for the container */
55
  var $autoHeight = $('.supsystic-item'),
56
  naviationHeight = $('.supsystic-navigation').outerHeight();
9
 
10
  jQuery(document).one('click','.supsystic-admin-notice a, .supsystic-admin-notice button',function(event) {
11
  var responseCode = jQuery(this).data('response-code') || 'hide';
12
+ var responseType = jQuery(this).data('response-type');
13
 
14
  jQuery('.supsystic-admin-notice .notice-dismiss').trigger('click');
15
 
16
  window.supsystic.Tables.request({
17
  module: 'tables',action: 'reviewNoticeResponse'
18
  },{
19
+ responseCode: responseCode,
20
+ responseType: responseType
21
  });
22
  });
23
 
53
  $target.fadeToggle();
54
  });
55
 
56
+ $('input.stbCopyTextCode').click(function(){
57
+ this.select();
58
+ });
59
+
60
  /* Minimum height for the container */
61
  var $autoHeight = $('.supsystic-item'),
62
  naviationHeight = $('.supsystic-navigation').outerHeight();
app/templates/layout.twig CHANGED
@@ -54,39 +54,32 @@
54
  {{ environment.getDispatcher().dispatch('notices') }}
55
  {% block content %}{% endblock %}
56
 
57
- <div id="dtgAddDialog" style="display: none;" title="{{ environment.translate('Add new table') }}">
58
- <div style="min-height: 70px;">
59
- <form id="tableForm">
60
- <label for="dtgAddDialog_title">
61
- {{ environment.translate('Table title') }}
62
- </label>
63
- <input id="dtgAddDialog_title" class="supsystic-text" type="text" style="width:100%;"/>
64
- <!-- /#dtgAddDialog_title.regular-text -->
65
- <div class="row">
66
- <div class="col-xs-6">
67
- <label for="dtgAddDialog_cols">
68
- {{ environment.translate('Columns') }}
69
- </label>
70
- <input id="dtgAddDialog_cols" class="supsystic-text" type="number" value="5" min="1" max="100" style="width: 100%"/>
71
- <!-- /#dtgAddDialog_cols -->
72
- </div>
73
- <!-- /.col-xs-6 -->
74
- <div class="col-xs-6">
75
- <label for="dtgAddDialog_rows">
76
- {{ environment.translate('Rows') }}
77
- </label>
78
- <input id="dtgAddDialog_rows" class="supsystic-text" type="number" value="5" min="1" max="100" style="width: 100%"/>
79
- <!-- /#dtgAddDialog_rows -->
80
- </div>
81
- <!-- /.col-xs-6 -->
82
  </div>
83
- <!-- /.row -->
84
- <div style="padding-top: 5px;">{{ environment.translate('You can change number of Columns and Rows later') }}</div>
85
- </form>
86
- <div id="formError" style="color: red; display: none; float: left;">
87
- <p></p>
88
  </div>
89
- <!-- /#formError -->
 
 
 
90
  </div>
91
  </div>
92
  <!-- /#dtgAddDialog -->
54
  {{ environment.getDispatcher().dispatch('notices') }}
55
  {% block content %}{% endblock %}
56
 
57
+ <div id="dtgAddDialog" style="display: none;" title="{{ environment.translate('Add new table') }}" style="min-height: 70px;">
58
+ <form id="tableForm">
59
+ <div class="row">
60
+ <div class="col-xs-12">
61
+ <label for="dtgAddDialog_title">
62
+ {{ environment.translate('Table title') }}
63
+ </label>
64
+ <input id="dtgAddDialog_title" class="supsystic-text" type="text" style="width:100%;"/>
65
+ </div>
66
+ <div class="col-xs-6">
67
+ <label for="dtgAddDialog_cols">
68
+ {{ environment.translate('Columns') }}
69
+ </label>
70
+ <input id="dtgAddDialog_cols" class="supsystic-text" type="number" value="5" min="1" max="100" style="width: 100%"/>
71
+ </div>
72
+ <div class="col-xs-6">
73
+ <label for="dtgAddDialog_rows">
74
+ {{ environment.translate('Rows') }}
75
+ </label>
76
+ <input id="dtgAddDialog_rows" class="supsystic-text" type="number" value="5" min="1" max="100" style="width: 100%"/>
 
 
 
 
 
77
  </div>
 
 
 
 
 
78
  </div>
79
+ <div style="padding-top: 5px;">{{ environment.translate('You can change number of Columns and Rows later') }}</div>
80
+ </form>
81
+ <div id="formError" style="color: red; display: none; float: left;">
82
+ <p></p>
83
  </div>
84
  </div>
85
  <!-- /#dtgAddDialog -->
index.php CHANGED
@@ -4,26 +4,28 @@
4
  * Plugin Name: Data Tables Generator by Supsystic
5
  * Plugin URI: http://supsystic.com
6
  * Description: Create and manage beautiful data tables with custom design. No HTML knowledge is required
7
- * Version: 1.9.3
8
  * Author: supsystic.com
9
  * Author URI: http://supsystic.com
10
  */
11
 
12
  include dirname(__FILE__) . '/app/SupsysticTables.php';
13
 
 
 
 
14
  if (!defined('SUPSYSTIC_TABLES_SHORTCODE_NAME')) {
15
  define('SUPSYSTIC_TABLES_SHORTCODE_NAME', 'supsystic-tables');
16
  }
17
- if (!defined('SUPSYSTIC_TABLES_VALUE_SHORTCODE_NAME')) {
18
- define('SUPSYSTIC_TABLES_VALUE_SHORTCODE_NAME', 'supsystic-tables-cell');
19
  }
20
  if (!defined('SUPSYSTIC_TABLES_CELL_SHORTCODE_NAME')) {
21
- define('SUPSYSTIC_TABLES_CELL_SHORTCODE_NAME', 'supsystic-tables-cell-full');
22
  }
23
- if (!defined('SUPSYSTIC_STB_DEBUG')) {
24
- define('SUPSYSTIC_STB_DEBUG', false);
25
  }
26
-
27
  $supsysticTables = new SupsysticTables();
28
  $supsysticTables->activate(__FILE__);
29
  $supsysticTables->run();
4
  * Plugin Name: Data Tables Generator by Supsystic
5
  * Plugin URI: http://supsystic.com
6
  * Description: Create and manage beautiful data tables with custom design. No HTML knowledge is required
7
+ * Version: 1.9.6
8
  * Author: supsystic.com
9
  * Author URI: http://supsystic.com
10
  */
11
 
12
  include dirname(__FILE__) . '/app/SupsysticTables.php';
13
 
14
+ if (!defined('SUPSYSTIC_STB_DEBUG')) {
15
+ define('SUPSYSTIC_STB_DEBUG', false);
16
+ }
17
  if (!defined('SUPSYSTIC_TABLES_SHORTCODE_NAME')) {
18
  define('SUPSYSTIC_TABLES_SHORTCODE_NAME', 'supsystic-tables');
19
  }
20
+ if (!defined('SUPSYSTIC_TABLES_PART_SHORTCODE_NAME')) {
21
+ define('SUPSYSTIC_TABLES_PART_SHORTCODE_NAME', SUPSYSTIC_TABLES_SHORTCODE_NAME.'-part');
22
  }
23
  if (!defined('SUPSYSTIC_TABLES_CELL_SHORTCODE_NAME')) {
24
+ define('SUPSYSTIC_TABLES_CELL_SHORTCODE_NAME', SUPSYSTIC_TABLES_SHORTCODE_NAME.'-cell-full');
25
  }
26
+ if (!defined('SUPSYSTIC_TABLES_VALUE_SHORTCODE_NAME')) {
27
+ define('SUPSYSTIC_TABLES_VALUE_SHORTCODE_NAME', SUPSYSTIC_TABLES_SHORTCODE_NAME.'-cell');
28
  }
 
29
  $supsysticTables = new SupsysticTables();
30
  $supsysticTables->activate(__FILE__);
31
  $supsysticTables->run();
readme.txt CHANGED
@@ -1,28 +1,32 @@
1
- === Data Tables Generator by Supsystic ===
2
  Contributors: supsystic.com
3
- Tags: csv, csv file, csv to table, excel, table, tablesorter, post, data table, table, database, html table, table generator, builder, generator, cells, area chart, bar chart, candlestick chart, canvas, chart, charting, charts, column chart, gauge chart, geo chart, google chart, google visualization api, graph, graphing, graphs, html5, line chart, pie chart, scatter chart, spreadsheet, visualisation, visualise data, visualization, visualize data
4
- Tested up to: 4.9.8
5
- Stable tag: 1.9.3
6
 
7
- Create data tables with charts and graphs. Custom design, navigation, searching and ordering functions. Export to PDF, CSV, Print. Excel spreadsheet
8
 
9
  == Description ==
10
 
11
- Create and manage tables from the admin panel quickly, easily and effectively. Make data tables responsive with interactive charts and graphs, sorting, pagination, filtering and more. [Data Tables by Supsystic](http://supsystic.com/plugins/data-tables-generator-plugin?utm_source=wordpress&utm_medium=description&utm_campaign=datatables "Data Tables WordPress plugin") plugin features:
12
 
13
  * No coding required, responsive tables
14
  * [FrontEnd Table Editing](http://supsystic.com/product/data-tables-generator-plugin/#examples "FrontEnd Data Table Editing Example")
15
- * FrontEnd Table export - CSV, Excel, PDF
16
- * Diagrams, Charts and Graphs
17
- * Formulas support, HTML tables support for data cells
 
 
 
 
18
  * Enable table Caption, Header, Footer
19
  * "Bold" and "Italic" font style support for the data table cells
20
  * Change cell and font color
21
- * [Navigation with Searching and Ordering functions](http://supsystic.com/product/data-tables-generator-plugin/#examples "Data Table navigation with Searching and Ordering functions")
22
  * Various style setting appropriated for any sites type
23
  * SEO friendly, content of DataTable picked up by search engines
24
  * Build diagrams from the data table
25
- * [Google Charts integration](http://supsystic.com/table-with-diagram-example/ "Google Charts WordPress plugin example")
26
  * [Automatic import from Google Sheetss](https://supsystic.com/documentation/synchronization-table-google-sheet/ "Autoupdates from Google Sheets")
27
  * [Data Table Examples](http://supsystic.com/data-tables-examples?utm_source=wordpress&utm_medium=examples&utm_campaign=datatables "Data Table Examples")
28
 
@@ -72,15 +76,21 @@ Main Table settings is [here](https://supsystic.com/docs/table-settings/ "Table
72
  You can paste HTML elements into our tables. Read [here](https://supsystic.com/documentation/use-html-elements-tables/ "How to use HTML elements in tables?") how to do that
73
 
74
  = How to install PRO version of plugin? =
 
75
  To install Data Tables Generator by Supsystic PRO follow this [instruction](https://supsystic.com/documentation/data-tables-installation-pro-version/ "Installation of PRO version")
 
 
 
 
 
76
 
77
  == Screenshots ==
78
 
79
  1. [Data Table Plugin Admin Area](http://supsystic.com/plugins/data-tables-generator-plugin?utm_source=wordpress&utm_medium=screenshotsfirst&utm_campaign=datatables "Data Tables WordPress plugin")
80
-
81
  2. Data Table with Images and Links. [More Examples](http://supsystic.com/data-tables-examples?utm_source=wordpress&utm_medium=screenshotssecond&utm_campaign=datatables "Data Table WordPress Plugin Examples") include tables with charts, graphs and diagrams
82
-
83
  3. [Data Table with Google Charts](http://supsystic.com/table-with-diagram-example/ "Data Table with Google Charts")
 
 
84
 
85
  == Installation ==
86
 
@@ -192,6 +202,66 @@ Important! Shortcode must be inserted in a text editor page, and not in the visu
192
 
193
  == Changelog ==
194
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
195
  = 1.9.3 / 01.11.2018 =
196
  * Add integration with Contact Form by Supsystic
197
  * Fix of merging cells for fixed rows / columns. Small code fix and improvement
1
+ === Data Tables Generator by Supsystic ===
2
  Contributors: supsystic.com
3
+ Tags: csv, excel, table, tablesorter,data table, table, database, table generator, builder, generator, cells, chart, charting, charts, column chart, gauge chart, graph, graphs, html5, line chart, pie chart, scatter chart, spreadsheet, visualise data, Woo, Woo Commerce, WooCommerce, product table, woocommerce product, product tables, catalog, product catalog, price list, pricing list, order forms, woocommerce tables, wholesale
4
+ Tested up to: 5.0.2
5
+ Stable tag: 1.9.6
6
 
7
+ Create data tables with charts and graphs. WooCommerce Integration. List the products with responsive Product Table. Custom design, navigation, searching and ordering functions. Export to PDF, CSV, Print. Excel spreadsheet.
8
 
9
  == Description ==
10
 
11
+ Create and manage tables from the admin panel quickly, easily and effectively. List the products with responsive [WooCommerce Product Table](https://supsystic.com/plugins/woocommerce-product-table "WooCommerce Product Table"). Perfect for product list views, order forms, wholesale, product catalogs. Make data tables responsive with interactive charts and graphs, sorting, pagination, filtering and more. [Data Tables by Supsystic](http://supsystic.com/plugins/data-tables-generator-plugin?utm_source=wordpress&utm_medium=description&utm_campaign=datatables "Data Tables WordPress plugin") plugin features:
12
 
13
  * No coding required, responsive tables
14
  * [FrontEnd Table Editing](http://supsystic.com/product/data-tables-generator-plugin/#examples "FrontEnd Data Table Editing Example")
15
+ * [FrontEnd Table export - CSV, Excel, PDF](https://supsystic.com/example/export-import-of-tables "Export & Import of Tables")
16
+ * [Diagrams, Charts and Graphs](https://supsystic.com/example/table-with-diagram-example "Data Table With Google Charts")
17
+ * [Formulas support, HTML tables support for data cells](https://supsystic.com/example/table-with-calculations-example "Table with Calculations")
18
+ * [WooCommerce Integration](https://supsystic.com/plugins/woocommerce-product-table "WooCommerce Product Table")
19
+ * WooCommerce Attribute & Category Support
20
+ * Quantities and Multiple add to cart
21
+ * [Product Table online builder](https://supsystic.com/feature/product-table-online-builder/ "Product Table online builder")
22
  * Enable table Caption, Header, Footer
23
  * "Bold" and "Italic" font style support for the data table cells
24
  * Change cell and font color
25
+ * [Navigation with Searching, Sorting, Pagination functions](http://supsystic.com/product/data-tables-generator-plugin/#examples "Data Table navigation with Searching and Ordering functions")
26
  * Various style setting appropriated for any sites type
27
  * SEO friendly, content of DataTable picked up by search engines
28
  * Build diagrams from the data table
29
+ * [Google Charts integration](https://supsystic.com/example/table-and-diagrams-interaction/ "Google Charts WordPress plugin example")
30
  * [Automatic import from Google Sheetss](https://supsystic.com/documentation/synchronization-table-google-sheet/ "Autoupdates from Google Sheets")
31
  * [Data Table Examples](http://supsystic.com/data-tables-examples?utm_source=wordpress&utm_medium=examples&utm_campaign=datatables "Data Table Examples")
32
 
76
  You can paste HTML elements into our tables. Read [here](https://supsystic.com/documentation/use-html-elements-tables/ "How to use HTML elements in tables?") how to do that
77
 
78
  = How to install PRO version of plugin? =
79
+
80
  To install Data Tables Generator by Supsystic PRO follow this [instruction](https://supsystic.com/documentation/data-tables-installation-pro-version/ "Installation of PRO version")
81
+ = How to create WooCommerce Product Table? =
82
+ Different tutorials about creating and customizing the Produst Table you can find [here](https://supsystic.com/docs/woocommerce-product-table/ "Product Table Documentation")
83
+
84
+ = Which properties and columns can I display in the Product table? =
85
+ Your WooCommerce product table can include any of the following columns: Product attributes, Categories, SKU, Add to cart button, Summary, Date, Price, Product Thumbnail, Reviews and you can display each type as a separate column in the product table.
86
 
87
  == Screenshots ==
88
 
89
  1. [Data Table Plugin Admin Area](http://supsystic.com/plugins/data-tables-generator-plugin?utm_source=wordpress&utm_medium=screenshotsfirst&utm_campaign=datatables "Data Tables WordPress plugin")
 
90
  2. Data Table with Images and Links. [More Examples](http://supsystic.com/data-tables-examples?utm_source=wordpress&utm_medium=screenshotssecond&utm_campaign=datatables "Data Table WordPress Plugin Examples") include tables with charts, graphs and diagrams
 
91
  3. [Data Table with Google Charts](http://supsystic.com/table-with-diagram-example/ "Data Table with Google Charts")
92
+ 4. [WooCommerce Product Table](https://supsystic.com/plugins/woocommerce-product-table/ "WooCommerce Product Table")
93
+
94
 
95
  == Installation ==
96
 
202
 
203
  == Changelog ==
204
 
205
+ = 1.9.6 / 20.12.2018 =
206
+ * Added option on-off legend labels along with parts of the chart
207
+ * Small Fix Zing Charts
208
+ * Fix of exporting of tables with collapsible cells
209
+ * Fix of formula COUNTIF
210
+ * Fix of applying of format to cell value
211
+ * Styles fix for Add New Table popup
212
+ * Encode cell data before saving in db
213
+ * Removed slashes from cell after import from Spreadheets
214
+
215
+
216
+ = 1.9.5 / 12.12.2018 =
217
+ * Removed urldecode to prevent replace '+' to ' '
218
+ * Added compability with tables-generator-pro
219
+ * Fix of SUBSTITUTE formula
220
+ * Fix of TEXT formula
221
+ * Work with woo plugin addon
222
+ * Improved vendor file to compability with other possible addons
223
+ * Removed unused css
224
+ * Add of ability to search tables in admin area by id
225
+ * Add "Mark Last Edited Cell" option
226
+ * Fixed Google Charts tooltip flickering
227
+ * Add Global Page Search Form for multiple searching by all tables on page
228
+ * Fix of integration with Contact Form by Supsystiс
229
+ * Fix of displaying error if ZipArchive extension is not enabled
230
+ * Fix of localization of tables' list in admin area
231
+ * Fix of exporting table to PDF
232
+ * Fixed fatal error (controller name creation)
233
+ * Fix of displaying of inserted images in table cells
234
+ * Fix of dates formatting after automatic import from Google Sheet if Server Side Processing is enabled
235
+ * Add of shortcode param "search" to preset the search value for table
236
+ * Fix of exporting of tables with hidden cells to PDF
237
+ * Fix of displaying of message if export from Google Spreadsheets is denied
238
+ * Add ability to show full images in lightbox for table images
239
+ * add new screenshot
240
+ * Fix of applying of table events for tables with pagination and search features, if Server-side Processing is enabled
241
+ * Fixed compability free plugin with woo pro addon.
242
+ * minify numeral.min.js
243
+ * Added multy products functional
244
+ * Fix of searching by columns
245
+ * Fixed cloned table with woo addon data
246
+ * Fix of exporting of tables with hidden cells to PDF
247
+ * Fix of using of frontend fields in tables with fixed header / footer / columns
248
+ * Added server side processing for woo addon
249
+ * Fix of exporting tables with hidden cells to MS Excel
250
+ * Fixed woo addon bugs
251
+ * Fixed javascript error for tables with merged cells
252
+ * Fixed pagination with 'all' parametr. Fixed draw() table after search event
253
+ * Fixed add to cart with ssp
254
+ * Fix of applying of condition formatting
255
+ * Fixed preview and css
256
+ * Fix of exporting table to PDF and Excel
257
+ * Fixed column search
258
+ * Add advertise for Woo Addon
259
+
260
+ = 1.9.4 / 06.11.2018 =
261
+ * Started integtate woo products in plugin
262
+ * Add position for column search fields
263
+ * Fix compatibility with old version of Contact Form plugin
264
+
265
  = 1.9.3 / 01.11.2018 =
266
  * Add integration with Contact Form by Supsystic
267
  * Fix of merging cells for fixed rows / columns. Small code fix and improvement
screenshot-4.png ADDED
Binary file
src/SupsysticTables/Core/ModelsFactory.php CHANGED
@@ -31,7 +31,7 @@ class SupsysticTables_Core_ModelsFactory
31
  {
32
  $className = $this->getClassName($model, $module);
33
 
34
- if (!class_exists($className) && $this->environment->isPro()) {
35
  $className = $this->getClassName(
36
  $model,
37
  $module,
@@ -39,6 +39,14 @@ class SupsysticTables_Core_ModelsFactory
39
  );
40
  }
41
 
 
 
 
 
 
 
 
 
42
  if (!class_exists($className)) {
43
  throw new InvalidArgumentException(
44
  sprintf('Cant find class for model %s', $model)
31
  {
32
  $className = $this->getClassName($model, $module);
33
 
34
+ if (!class_exists($className) && $this->environment->isPro() ) {
35
  $className = $this->getClassName(
36
  $model,
37
  $module,
39
  );
40
  }
41
 
42
+ if (!class_exists($className) && $this->environment->isWooPro()) {
43
+ $className = $this->getClassName(
44
+ $model,
45
+ $module,
46
+ $this->environment->getConfig()->get('pro_woo_modules_prefix')
47
+ );
48
+ }
49
+
50
  if (!class_exists($className)) {
51
  throw new InvalidArgumentException(
52
  sprintf('Cant find class for model %s', $model)
src/SupsysticTables/Core/Module.php CHANGED
@@ -65,6 +65,7 @@ class SupsysticTables_Core_Module extends SupsysticTables_Core_BaseModule
65
  );
66
  if(is_admin()) {
67
  $jsData['isPro'] = $environment->isPro();
 
68
  }
69
  wp_localize_script('jquery', 'SDT_DATA', $jsData);
70
  }
@@ -243,8 +244,10 @@ class SupsysticTables_Core_Module extends SupsysticTables_Core_BaseModule
243
  );
244
 
245
  if ($environment->isAction('index')) {
246
-
247
  $locale = $environment->getLangCode2Letter();
 
 
248
  $ui->add(
249
  $ui->createStyle('jqgrid-css')
250
  ->setHookName($hookName)
@@ -253,17 +256,17 @@ class SupsysticTables_Core_Module extends SupsysticTables_Core_BaseModule
253
  ->setVersion('4.7.0')
254
  );
255
  $ui->add(
256
- $ui->createScript('jquery-jqGrid')
257
  ->setHookName($hookName)
258
- ->setLocalSource('js/libraries/jqGrid/jquery.jqGrid.min.js')
259
  ->addDependency('jquery')
260
  ->setCachingAllowed($cachingAllowed)
261
  ->setVersion($pluginVersion)
262
  );
263
  $ui->add(
264
- $ui->createScript('jquery-jqGrid-locale')
265
  ->setHookName($hookName)
266
- ->setLocalSource('js/i18n/grid.locale-'.$locale.'.js')
267
  ->addDependency('jquery')
268
  ->setCachingAllowed($cachingAllowed)
269
  ->setVersion($pluginVersion)
@@ -368,6 +371,8 @@ class SupsysticTables_Core_Module extends SupsysticTables_Core_BaseModule
368
  if (array_key_exists('action', $route)) {
369
  $actionName = $route['action'] . 'Action';
370
  }
 
 
371
  $module = $environment->getModule($moduleName);
372
 
373
  if (!$module) {
65
  );
66
  if(is_admin()) {
67
  $jsData['isPro'] = $environment->isPro();
68
+ $jsData['isWooPro'] = $environment->isWooPro();
69
  }
70
  wp_localize_script('jquery', 'SDT_DATA', $jsData);
71
  }
244
  );
245
 
246
  if ($environment->isAction('index')) {
247
+ $appAssetsPath = plugin_dir_path(dirname(dirname(dirname(__FILE__)))).'app/assets/';
248
  $locale = $environment->getLangCode2Letter();
249
+ $locale = file_exists($appAssetsPath.'js/i18n/grid.locale-'.$locale.'.js') ? $locale : 'en';
250
+
251
  $ui->add(
252
  $ui->createStyle('jqgrid-css')
253
  ->setHookName($hookName)
256
  ->setVersion('4.7.0')
257
  );
258
  $ui->add(
259
+ $ui->createScript('jquery-jqGrid-locale')
260
  ->setHookName($hookName)
261
+ ->setLocalSource('js/i18n/grid.locale-'.$locale.'.js')
262
  ->addDependency('jquery')
263
  ->setCachingAllowed($cachingAllowed)
264
  ->setVersion($pluginVersion)
265
  );
266
  $ui->add(
267
+ $ui->createScript('jquery-jqGrid')
268
  ->setHookName($hookName)
269
+ ->setLocalSource('js/libraries/jqGrid/jquery.jqGrid.min.js')
270
  ->addDependency('jquery')
271
  ->setCachingAllowed($cachingAllowed)
272
  ->setVersion($pluginVersion)
371
  if (array_key_exists('action', $route)) {
372
  $actionName = $route['action'] . 'Action';
373
  }
374
+
375
+
376
  $module = $environment->getModule($moduleName);
377
 
378
  if (!$module) {
src/SupsysticTables/Core/assets/js/core.js CHANGED
@@ -2,12 +2,14 @@ if(typeof(SDT_DATA) == 'undefined') {
2
  var SDT_DATA = {};
3
  }
4
  var g_stbServerSideProcessing = false;
 
5
 
6
  (function (vendor, $, window) {
7
 
8
  var appName = 'Tables';
9
  var dataTableInstances = [];
10
  var ruleJSInstances = [];
 
11
 
12
  if (!(appName in vendor)) {
13
  vendor[appName] = {};
@@ -16,6 +18,10 @@ var g_stbServerSideProcessing = false;
16
  return appName;
17
  });
18
 
 
 
 
 
19
  vendor[appName].getParameterByName = (function(name) {
20
  name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
21
 
@@ -208,7 +214,7 @@ var g_stbServerSideProcessing = false;
208
  searching: false,
209
  stateSave: false,
210
  api: true,
211
- retrieve: true,
212
  initComplete: callback,
213
  headerCallback: function( thead, data, start, end, display ) {
214
  $(thead).closest('thead').find('th').each(function() {
@@ -285,6 +291,9 @@ var g_stbServerSideProcessing = false;
285
  var featureName = this.replace(/[-_]([a-z])/g, function (g) { return g[1].toUpperCase(); });
286
  config[featureName] = true;
287
  });
 
 
 
288
  if (toeInArray('searching', features) != -1 && searchingSettings) {
289
  if (searchingSettings.minChars > 0 ||
290
  searchingSettings.resultOnly ||
@@ -353,18 +362,31 @@ var g_stbServerSideProcessing = false;
353
  }
354
  });
355
  }
356
- if (searchingSettings.columnSearch && $table.find('tfoot').find('input').length == 0) {
357
- var tds = $table.find('thead tr:first').find('th'),
358
- ths = '';
359
-
360
- for (var i = 0; i < tds.length; i++) {
361
- ths += '<th><input type="text" /></th>';
362
- }
363
- if (ths.length > 0) {
364
- if($table.find('tfoot').length == 0) {
365
- $table.append($('<tfoot>'));
 
 
 
 
 
 
 
 
 
 
 
366
  }
367
- $table.find('tfoot').append('<tr>' + ths + '</tr>');
 
 
368
  }
369
  }
370
  }
@@ -604,7 +626,10 @@ var g_stbServerSideProcessing = false;
604
  return (input.length ? input.val() : '');
605
  },
606
  header: headerRowsCount,
607
- footer: footerRowsCount},
 
 
 
608
  dataFilter: function(data){
609
  var json = jQuery.parseJSON(data),
610
  rows = $(json.rows).find('tr'),
@@ -628,6 +653,7 @@ var g_stbServerSideProcessing = false;
628
  }
629
  json.rows = '';
630
  json.data = aData;
 
631
  return JSON.stringify(json);
632
  }
633
  },
@@ -638,7 +664,7 @@ var g_stbServerSideProcessing = false;
638
  });
639
  }
640
  }
641
- }
642
  if(typeof(config.aoColumnDefs) == 'undefined') {
643
  config.aoColumnDefs = [];
644
  }
@@ -688,11 +714,11 @@ var g_stbServerSideProcessing = false;
688
  }
689
  });
690
  }
691
- }
692
  });
693
  }
694
  $table.trigger('beforeInitializeTable', $table);
695
- tableInstance = $table.dataTable($.extend({}, defaultFeatures, config, ajaxSource, reinit));
696
  tableInstance.table_id = $table.data('id');
697
  tableInstance.table_view_id = $table.data('view-id');
698
  tableInstance.fnFakeRowspan();
@@ -702,8 +728,13 @@ var g_stbServerSideProcessing = false;
702
  $('.dataTables_processing').css('z-index', '10');
703
  } else {
704
  self.setColumnSearch($table);
705
- }
706
-
 
 
 
 
 
707
  if(addInstance) {
708
  this.setTableInstance(tableInstance);
709
  }
@@ -747,31 +778,27 @@ var g_stbServerSideProcessing = false;
747
  // Set formats
748
  self.formatDataAtTable($table, true);
749
 
750
- $(document).on('click', '.paginate_button', function () {
751
- setTimeout(function() {
752
- _ruleJS.init();
753
- self.formatDataAtTable($table, true);
754
- }, 50);
755
- });
756
 
757
  // Show comments on tap
758
  if ('ontouchstart' in window || navigator.msMaxTouchPoints) {
759
  $table.parents('.supsystic-tables-wrap:first').find('td, th').on('click', self.applyMobileTableComments);
760
- $table.on('page.dt', function() {
761
- var tbl = $(this);
762
- setTimeout(function() {
763
- tbl.parents('.supsystic-tables-wrap:first').find('td, th').on('click', self.applyMobileTableComments);
764
- }, 50);
765
- });
766
  }
767
 
768
  // Prepare Contact Form by Supsystic buttons
769
  $table.parents('.supsystic-tables-wrap:first').find('th, td').each(self._contactFormBtnCellClb);
 
 
770
  $table.on('page.dt', function() {
771
- var tbl = $(this);
772
- setTimeout(function() {
773
- tbl.parents('.supsystic-tables-wrap:first').find('td, th').each(self._contactFormBtnCellClb);
774
- }, 50);
 
 
775
  });
776
 
777
  // Frontend fields
@@ -835,7 +862,11 @@ var g_stbServerSideProcessing = false;
835
  tBody.removeStyle('border-bottom');
836
  }
837
  if(g_stbServerSideProcessing) {
838
- self.getTableInstanceByViewId(viewId).fnAdjustColumnSizing(false);
 
 
 
 
839
  }
840
  }).trigger('resize');
841
 
@@ -848,11 +879,11 @@ var g_stbServerSideProcessing = false;
848
  $(window).trigger('resize');
849
  }, 200);
850
  }
851
- $tHeadTable = $tableWrap.find('.dataTables_scrollHead .supsystic-table');
852
  if($tHeadTable.length) {
853
  self.formatDataAtTable($tHeadTable, true);
854
  }
855
- $tFootTable = $tableWrap.find('.dataTables_scrollFoot .supsystic-table');
856
  if($tFootTable.length) {
857
  self.formatDataAtTable($tFootTable, true);
858
  }
@@ -937,7 +968,7 @@ var g_stbServerSideProcessing = false;
937
  if(responsiveMode === 0 || responsiveMode === 2) {
938
  $(window).trigger('resize');
939
  }
940
- }).trigger('draw.dt');
941
  }
942
 
943
  function b64DecodeUnicode(str) {
@@ -947,6 +978,37 @@ var g_stbServerSideProcessing = false;
947
  }
948
  });
949
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
950
  vendor[appName].applyMobileTableComments = function(e) {
951
  var $elem = $(this),
952
  title = $elem.attr('title');
@@ -1007,46 +1069,24 @@ var g_stbServerSideProcessing = false;
1007
  });
1008
 
1009
  vendor[appName].setColumnSearch = (function(table) {
1010
- var dtable = $('#supsystic-table-' + table.data('id') + '[data-view-id="' + table.data('view-id') + '"]'),
1011
- tfoot = $('#supsystic-table-' + table.data('view-id')).find('div .dataTables_scrollFootInner table '),
1012
- inputs = (tfoot.length == 0 ? dtable.find('tfoot tr:last input') : tfoot.eq(0).find('tfoot tr:last input'));
1013
-
1014
- if(inputs.length == 0) {
1015
  return;
1016
- }
1017
- dtable.DataTable().columns().every( function (colIdx) {
1018
- var that = this;
1019
- inputs.eq(colIdx).off('keyup.dtg change.dtg').on('keyup.dtg change.dtg', function () {
1020
- if ( that.search() !== this.value ) {
1021
- that
1022
- .search (this.value.replace(/;/g, "|"), true, false)
1023
- .draw ();
1024
- }
1025
- });
1026
- });
1027
- var div = $('#supsystic-table-' + table.data('view-id')),
1028
- leftTable = div.find('.DTFC_LeftBodyWrapper').find('table'),
1029
- rightTable = div.find('.DTFC_RightBodyWrapper').find('table'),
1030
- self = vendor[appName];
1031
-
1032
- if(leftTable.length) {
1033
- var leftFoot = div.find('.DTFC_LeftFootWrapper').find('table'),
1034
- leftInputs = (leftFoot.length == 0 ? leftTable.find('tfoot tr:last input') : leftFoot.eq(0).find('tfoot tr:last input'));
1035
-
1036
- leftInputs.each( function (colIdx) {
1037
- self.setCopyEvents(this, inputs.eq(colIdx).data('events'));
1038
- });
1039
- }
1040
- if(rightTable.length) {
1041
- var rightFoot = div.find('.DTFC_RightFootWrapper').find('table'),
1042
- rightInputs = (rightFoot.length == 0 ? rightTable.find('tfoot tr:last input') : rightFoot.eq(0).find('tfoot tr:last input')),
1043
- cntRight = rightInputs.length,
1044
- cntInputs = inputs.length;
1045
-
1046
- rightInputs.each( function (colIdx) {
1047
- self.setCopyEvents(this, inputs.eq(cntInputs - cntRight + colIdx).data('events'));
1048
- });
1049
- }
1050
  });
1051
 
1052
  vendor[appName].setCopyEvents = (function(obj, events) {
@@ -1116,14 +1156,15 @@ var g_stbServerSideProcessing = false;
1116
  generalCurrencyFormat = table.data('currency-format'),
1117
  generalPercentFormat = table.data('percent-format'),
1118
  generalDateFormat = table.data('date-format'),
1119
- generalTimeFormat = table.data('time-format'),
1120
- skipFirstCol = table.data('auto-index') != 'off',
1121
- hasCollapsedCells = table.data('responsive-mode') == 1 && table.hasClass('collapsed');
1122
 
1123
  table.find('th, td').each(function(index, el) {
1124
  var $this = $(this);
1125
 
1126
- if((skipFirstCol && $this.is(':first-child')) || (hasCollapsedCells && $this.hasClass('child'))) {
 
 
 
1127
  // Break current .each iteration
1128
  return;
1129
  }
@@ -1169,8 +1210,10 @@ var g_stbServerSideProcessing = false;
1169
  $this.data('order',value);
1170
  $this.attr('data-order',value);
1171
 
1172
- $this.data('cell-reformat',false);
1173
- $this.attr('data-cell-reformat',value);
 
 
1174
  }
1175
  break;
1176
  case 'time_duration':
@@ -1198,8 +1241,10 @@ var g_stbServerSideProcessing = false;
1198
  $this.data('order',value);
1199
  $this.attr('data-order',value);
1200
 
1201
- $this.data('cell-reformat',false);
1202
- $this.attr('data-cell-reformat',value);
 
 
1203
  }
1204
  break;
1205
  default:
2
  var SDT_DATA = {};
3
  }
4
  var g_stbServerSideProcessing = false;
5
+ var g_stbServerSideProcessingIsActive = false;
6
 
7
  (function (vendor, $, window) {
8
 
9
  var appName = 'Tables';
10
  var dataTableInstances = [];
11
  var ruleJSInstances = [];
12
+ var extraConfig = {};
13
 
14
  if (!(appName in vendor)) {
15
  vendor[appName] = {};
18
  return appName;
19
  });
20
 
21
+ vendor[appName].setExtraConfig = (function(param, value) {
22
+ extraConfig[param] = value;
23
+ });
24
+
25
  vendor[appName].getParameterByName = (function(name) {
26
  name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
27
 
214
  searching: false,
215
  stateSave: false,
216
  api: true,
217
+ retrieve: true,
218
  initComplete: callback,
219
  headerCallback: function( thead, data, start, end, display ) {
220
  $(thead).closest('thead').find('th').each(function() {
291
  var featureName = this.replace(/[-_]([a-z])/g, function (g) { return g[1].toUpperCase(); });
292
  config[featureName] = true;
293
  });
294
+ if($table.data('search-value') && !config['searching']) {
295
+ config['searching'] = true;
296
+ }
297
  if (toeInArray('searching', features) != -1 && searchingSettings) {
298
  if (searchingSettings.minChars > 0 ||
299
  searchingSettings.resultOnly ||
362
  }
363
  });
364
  }
365
+ if (searchingSettings.columnSearch) {
366
+ var inputTop = (searchingSettings.columnSearchPosition && searchingSettings.columnSearchPosition == 'top'),
367
+ tPosition = inputTop ? 'thead' : 'tfoot';
368
+ if(!$table.find('.stbColumnsSearchWrapper').length) {
369
+ var headerRow = $table.find('thead tr:first').find('th');
370
+ if(headerRow.length) {
371
+ var searchRow = '<tr class="stbColumnsSearchWrapper">',
372
+ func = inputTop ? 'prepend' : 'append';
373
+
374
+ for (var i = 0; i < headerRow.length; i++) {
375
+ var style = '';
376
+ if(!g_stbServerSideProcessing){
377
+ var style = $(headerRow[i]).is(':visible') ? '' : 'style="display: none;"';
378
+ }
379
+ searchRow += '<th ' + style + '><input class="search-column" type="text" /></th>';
380
+ }
381
+ searchRow += '</tr>';
382
+ if($table.find(tPosition).length == 0) {
383
+ $table.append($('<' + tPosition + '>'));
384
+ }
385
+ $table.find(tPosition)[func](searchRow);
386
  }
387
+ }
388
+ if($table.data('auto-index') !== 'off'){
389
+ $('.stbColumnsSearchWrapper th:first-child input').css({'visibility':'hidden'});
390
  }
391
  }
392
  }
626
  return (input.length ? input.val() : '');
627
  },
628
  header: headerRowsCount,
629
+ footer: footerRowsCount,
630
+ beforeSend: function() {
631
+ g_stbServerSideProcessingIsActive = true;
632
+ }},
633
  dataFilter: function(data){
634
  var json = jQuery.parseJSON(data),
635
  rows = $(json.rows).find('tr'),
653
  }
654
  json.rows = '';
655
  json.data = aData;
656
+ g_stbServerSideProcessingIsActive = false;
657
  return JSON.stringify(json);
658
  }
659
  },
664
  });
665
  }
666
  }
667
+ };
668
  if(typeof(config.aoColumnDefs) == 'undefined') {
669
  config.aoColumnDefs = [];
670
  }
714
  }
715
  });
716
  }
717
+ }
718
  });
719
  }
720
  $table.trigger('beforeInitializeTable', $table);
721
+ tableInstance = $table.dataTable($.extend({}, defaultFeatures, config, extraConfig, ajaxSource, reinit));
722
  tableInstance.table_id = $table.data('id');
723
  tableInstance.table_view_id = $table.data('view-id');
724
  tableInstance.fnFakeRowspan();
728
  $('.dataTables_processing').css('z-index', '10');
729
  } else {
730
  self.setColumnSearch($table);
731
+ }
732
+ $table.on('draw.dt', function(){
733
+ var searching = $table.data('searching-settings');
734
+ if(searching && ('columnSearch' in searching) && searching.columnSearch == 'on') {
735
+ self.setColumnSearch($table);
736
+ }
737
+ });
738
  if(addInstance) {
739
  this.setTableInstance(tableInstance);
740
  }
778
  // Set formats
779
  self.formatDataAtTable($table, true);
780
 
781
+ // Apply shortcode param "search"
782
+ if($table.data('search-value')) {
783
+ $table.api().search($table.data('search-value')).draw();
784
+ }
 
 
785
 
786
  // Show comments on tap
787
  if ('ontouchstart' in window || navigator.msMaxTouchPoints) {
788
  $table.parents('.supsystic-tables-wrap:first').find('td, th').on('click', self.applyMobileTableComments);
 
 
 
 
 
 
789
  }
790
 
791
  // Prepare Contact Form by Supsystic buttons
792
  $table.parents('.supsystic-tables-wrap:first').find('th, td').each(self._contactFormBtnCellClb);
793
+
794
+ // Page change callback
795
  $table.on('page.dt', function() {
796
+ if(g_stbServerSideProcessing) {
797
+ g_stbServerSideProcessingIsActive = true;
798
+ }
799
+ var table = $(this),
800
+ tableSelector = '#supsystic-table-' + table.data('view-id') + ' #supsystic-table-' + table.data('id');
801
+ self.applyTableEventClb(self.pageEvent, 50, tableSelector);
802
  });
803
 
804
  // Frontend fields
862
  tBody.removeStyle('border-bottom');
863
  }
864
  if(g_stbServerSideProcessing) {
865
+ if(typeof self.getTableInstanceById(viewId).fnAdjustColumnSizing == 'function' ) {
866
+ setTimeout(function(){
867
+ self.getTableInstanceById(table.data('id')).fnAdjustColumnSizing(false);
868
+ }, 350);
869
+ }
870
  }
871
  }).trigger('resize');
872
 
879
  $(window).trigger('resize');
880
  }, 200);
881
  }
882
+ var $tHeadTable = $tableWrap.find('.dataTables_scrollHead .supsystic-table');
883
  if($tHeadTable.length) {
884
  self.formatDataAtTable($tHeadTable, true);
885
  }
886
+ var $tFootTable = $tableWrap.find('.dataTables_scrollFoot .supsystic-table');
887
  if($tFootTable.length) {
888
  self.formatDataAtTable($tFootTable, true);
889
  }
968
  if(responsiveMode === 0 || responsiveMode === 2) {
969
  $(window).trigger('resize');
970
  }
971
+ }).trigger('draw.dt');
972
  }
973
 
974
  function b64DecodeUnicode(str) {
978
  }
979
  });
980
 
981
+ vendor[appName].applyTableEventClb = (function(clb, timeout, tableSelector) {
982
+ timeout = timeout ? timeout : 0;
983
+ var self = this,
984
+ args = Array.from(arguments);
985
+
986
+ if(g_stbServerSideProcessing && g_stbServerSideProcessingIsActive) {
987
+ setTimeout(function() {
988
+ self.applyTableEventClb.apply(self, args);
989
+ }, 50);
990
+ } else {
991
+ if(typeof clb == 'function') {
992
+ args = args.slice(2);
993
+ setTimeout(function() {
994
+ clb.apply(self, args);
995
+ }, timeout);
996
+ }
997
+ }
998
+ });
999
+
1000
+ vendor[appName].pageEvent = (function(tableSelector) {
1001
+ var table = $(tableSelector),
1002
+ tableWrapper = table.parents('.supsystic-tables-wrap:first');
1003
+
1004
+ this.getRuleJSInstance(table).init();
1005
+ this.formatDataAtTable(table, true);
1006
+ if ('ontouchstart' in window || navigator.msMaxTouchPoints) {
1007
+ tableWrapper.find('td, th').on('click', this.applyMobileTableComments);
1008
+ }
1009
+ tableWrapper.find('td, th').each(this._contactFormBtnCellClb);
1010
+ });
1011
+
1012
  vendor[appName].applyMobileTableComments = function(e) {
1013
  var $elem = $(this),
1014
  title = $elem.attr('title');
1069
  });
1070
 
1071
  vendor[appName].setColumnSearch = (function(table) {
1072
+ var searchingSettings = table.data('searching-settings'),
1073
+ inputs = table.parents('.dataTables_wrapper:first').find('.stbColumnsSearchWrapper .search-column');
1074
+ if(inputs.length == 0) {
 
 
1075
  return;
1076
+ }
1077
+ $(document).off('keyup change', ".dataTables_wrapper:first .stbColumnsSearchWrapper .search-column")
1078
+ .on('keyup change', ".dataTables_wrapper:first .stbColumnsSearchWrapper .search-column",function () {
1079
+ var input = $(this),
1080
+ position = input.parents('th:first').index(),
1081
+ value = this.value,
1082
+ column = table.api().column(position);
1083
+ if (column.search() !== value) {
1084
+ column.search(value.replace(/;/g, "|"), true, false).draw();
1085
+ setTimeout(function() {
1086
+ column.draw();
1087
+ }, 50);
1088
+ }
1089
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1090
  });
1091
 
1092
  vendor[appName].setCopyEvents = (function(obj, events) {
1156
  generalCurrencyFormat = table.data('currency-format'),
1157
  generalPercentFormat = table.data('percent-format'),
1158
  generalDateFormat = table.data('date-format'),
1159
+ generalTimeFormat = table.data('time-format');
 
 
1160
 
1161
  table.find('th, td').each(function(index, el) {
1162
  var $this = $(this);
1163
 
1164
+ if((table.data('auto-index') != 'off' && $this.is(':first-child'))
1165
+ || (table.data('responsive-mode') == 1 && table.hasClass('collapsed') && $this.hasClass('child'))
1166
+ || $this.find('.search-column').length
1167
+ ) {
1168
  // Break current .each iteration
1169
  return;
1170
  }
1210
  $this.data('order',value);
1211
  $this.attr('data-order',value);
1212
 
1213
+ if(!g_stbServerSideProcessing) {
1214
+ $this.data('cell-reformat',false);
1215
+ $this.attr('data-cell-reformat',0);
1216
+ }
1217
  }
1218
  break;
1219
  case 'time_duration':
1241
  $this.data('order',value);
1242
  $this.attr('data-order',value);
1243
 
1244
+ if(!g_stbServerSideProcessing) {
1245
+ $this.data('cell-reformat',false);
1246
+ $this.attr('data-cell-reformat',0);
1247
+ }
1248
  }
1249
  break;
1250
  default:
src/SupsysticTables/Core/assets/js/create-table.js CHANGED
@@ -17,6 +17,9 @@
17
  window.location.hash = '';
18
  },
19
  buttons: {
 
 
 
20
  Create: function (event) {
21
  var $button = $(event.target);
22
  if($button.is('span')) $button = $button.parent();
@@ -59,9 +62,6 @@
59
  $error.find('p').text(message);
60
  $error.fadeIn();
61
  });
62
- },
63
- Cancel: function () {
64
- $dialog.dialog('close');
65
  }
66
  }
67
  });
17
  window.location.hash = '';
18
  },
19
  buttons: {
20
+ Cancel: function () {
21
+ $dialog.dialog('close');
22
+ },
23
  Create: function (event) {
24
  var $button = $(event.target);
25
  if($button.is('span')) $button = $button.parent();
62
  $error.find('p').text(message);
63
  $error.fadeIn();
64
  });
 
 
 
65
  }
66
  }
67
  });
src/SupsysticTables/Core/assets/js/lib/jquery.dataTables.min.js CHANGED
@@ -31,7 +31,7 @@ f.sEmptyTable&&0===a.fnRecordsTotal()&&(c=f.sEmptyTable),b[0]=h("<tr/>",{"class"
31
  c.bSort&&mb(a);d?fa(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;O(a);a._drawHold=!1}function nb(a){var b=a.oClasses,c=h(a.nTable),c=h("<div/>").insertBefore(c),d=a.oFeatures,e=h("<div/>",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var f=a.sDom.split(""),g,j,i,n,l,q,t=0;t<f.length;t++){g=null;j=f[t];if("<"==j){i=h("<div/>")[0];
32
  n=f[t+1];if("'"==n||'"'==n){l="";for(q=2;f[t+q]!=n;)l+=f[t+q],q++;"H"==l?l=b.sJUIHeader:"F"==l&&(l=b.sJUIFooter);-1!=l.indexOf(".")?(n=l.split("."),i.id=n[0].substr(1,n[0].length-1),i.className=n[1]):"#"==l.charAt(0)?i.id=l.substr(1,l.length-1):i.className=l;t+=q}e.append(i);e=h(i)}else if(">"==j)e=e.parent();else if("l"==j&&d.bPaginate&&d.bLengthChange)g=ob(a);else if("f"==j&&d.bFilter)g=pb(a);else if("r"==j&&d.bProcessing)g=qb(a);else if("t"==j)g=rb(a);else if("i"==j&&d.bInfo)g=sb(a);else if("p"==
33
  j&&d.bPaginate)g=tb(a);else if(0!==m.ext.feature.length){i=m.ext.feature;q=0;for(n=i.length;q<n;q++)if(j==i[q].cFeature){g=i[q].fnInit(a);break}}g&&(i=a.aanFeatures,i[j]||(i[j]=[]),i[j].push(g),e.append(g))}c.replaceWith(e);a.nHolding=null}function da(a,b){var c=h(b).children("tr"),d,e,f,g,j,i,n,l,q,t;a.splice(0,a.length);f=0;for(i=c.length;f<i;f++)a.push([]);f=0;for(i=c.length;f<i;f++){d=c[f];for(e=d.firstChild;e;){if("TD"==e.nodeName.toUpperCase()||"TH"==e.nodeName.toUpperCase()){l=1*e.getAttribute("colspan");
34
- q=1*e.getAttribute("rowspan");l=!l||0===l||1===l?1:l;q=!q||0===q||1===q?1:q;g=0;for(j=a[f];j[g];)g++;n=g;t=1===l?!0:!1;for(j=0;j<l;j++)for(g=0;g<q;g++)a[f+g][n+j]={cell:e,unique:t},a[f+g].nTr=d}e=e.nextSibling}}}function qa(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],da(c,b)));for(var b=0,e=c.length;b<e;b++)for(var f=0,g=c[b].length;f<g;f++)if(c[b][f].unique&&(!d[f]||!a.bSortCellsTop))d[f]=c[b][f].cell;return d}function ra(a,b,c){u(a,"aoServerParams","serverParams",[b]);if(b&&h.isArray(b)){var d={},
35
  e=/(.*?)\[\]$/;h.each(b,function(a,b){var c=b.name.match(e);c?(c=c[0],d[c]||(d[c]=[]),d[c].push(b.value)):d[b.name]=b.value});b=d}var f,g=a.ajax,j=a.oInstance,i=function(b){u(a,null,"xhr",[a,b,a.jqXHR]);c(b)};if(h.isPlainObject(g)&&g.data){f=g.data;var n=h.isFunction(f)?f(b,a):f,b=h.isFunction(f)&&n?n:h.extend(!0,b,n);delete g.data}n={data:b,success:function(b){var c=b.error||b.sError;c&&L(a,0,c);a.json=b;i(b)},dataType:"json",cache:!1,type:a.sServerMethod,error:function(b,c){var d=u(a,null,"xhr",
36
  [a,null,a.jqXHR]);-1===h.inArray(!0,d)&&("parsererror"==c?L(a,0,"Invalid JSON response",1):4===b.readyState&&L(a,0,"Ajax error",7));C(a,!1)}};a.oAjaxData=b;u(a,null,"preXhr",[a,b]);a.fnServerData?a.fnServerData.call(j,a.sAjaxSource,h.map(b,function(a,b){return{name:b,value:a}}),i,a):a.sAjaxSource||"string"===typeof g?a.jqXHR=h.ajax(h.extend(n,{url:g||a.sAjaxSource})):h.isFunction(g)?a.jqXHR=g.call(j,b,i,a):(a.jqXHR=h.ajax(h.extend(n,g)),g.data=f)}function lb(a){return a.bAjaxDataGet?(a.iDraw++,C(a,
37
  !0),ra(a,ub(a),function(b){vb(a,b)}),!1):!0}function ub(a){var b=a.aoColumns,c=b.length,d=a.oFeatures,e=a.oPreviousSearch,f=a.aoPreSearchCols,g,j=[],i,n,l,q=V(a);g=a._iDisplayStart;i=!1!==d.bPaginate?a._iDisplayLength:-1;var k=function(a,b){j.push({name:a,value:b})};k("sEcho",a.iDraw);k("iColumns",c);k("sColumns",G(b,"sName").join(","));k("iDisplayStart",g);k("iDisplayLength",i);var S={draw:a.iDraw,columns:[],order:[],start:g,length:i,search:{value:e.sSearch,regex:e.bRegex}};for(g=0;g<c;g++)n=b[g],
31
  c.bSort&&mb(a);d?fa(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;O(a);a._drawHold=!1}function nb(a){var b=a.oClasses,c=h(a.nTable),c=h("<div/>").insertBefore(c),d=a.oFeatures,e=h("<div/>",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var f=a.sDom.split(""),g,j,i,n,l,q,t=0;t<f.length;t++){g=null;j=f[t];if("<"==j){i=h("<div/>")[0];
32
  n=f[t+1];if("'"==n||'"'==n){l="";for(q=2;f[t+q]!=n;)l+=f[t+q],q++;"H"==l?l=b.sJUIHeader:"F"==l&&(l=b.sJUIFooter);-1!=l.indexOf(".")?(n=l.split("."),i.id=n[0].substr(1,n[0].length-1),i.className=n[1]):"#"==l.charAt(0)?i.id=l.substr(1,l.length-1):i.className=l;t+=q}e.append(i);e=h(i)}else if(">"==j)e=e.parent();else if("l"==j&&d.bPaginate&&d.bLengthChange)g=ob(a);else if("f"==j&&d.bFilter)g=pb(a);else if("r"==j&&d.bProcessing)g=qb(a);else if("t"==j)g=rb(a);else if("i"==j&&d.bInfo)g=sb(a);else if("p"==
33
  j&&d.bPaginate)g=tb(a);else if(0!==m.ext.feature.length){i=m.ext.feature;q=0;for(n=i.length;q<n;q++)if(j==i[q].cFeature){g=i[q].fnInit(a);break}}g&&(i=a.aanFeatures,i[j]||(i[j]=[]),i[j].push(g),e.append(g))}c.replaceWith(e);a.nHolding=null}function da(a,b){var c=h(b).children("tr"),d,e,f,g,j,i,n,l,q,t;a.splice(0,a.length);f=0;for(i=c.length;f<i;f++)a.push([]);f=0;for(i=c.length;f<i;f++){d=c[f];for(e=d.firstChild;e;){if("TD"==e.nodeName.toUpperCase()||"TH"==e.nodeName.toUpperCase()){l=1*e.getAttribute("colspan");
34
+ q=1*e.getAttribute("rowspan");l=!l||0===l||1===l?1:l;q=!q||0===q||1===q?1:q;g=0;for(j=a[f];j[g];)g++;n=g;t=1===l?!0:!1;for(j=0;j<l;j++)for(g=0;g<q;g++)a[f+g][n+j]={cell:e,unique:t},a[f+g].nTr=d}e=e.nextSibling}}}function qa(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],da(c,b)));for(var b=0,e=c.length;b<e;b++)for(var f=0,g=c[b].length;f<g;f++)if(c[b][f]&&c[b][f].unique&&(!d[f]||!a.bSortCellsTop))d[f]=c[b][f].cell;return d}function ra(a,b,c){u(a,"aoServerParams","serverParams",[b]);if(b&&h.isArray(b)){var d={},
35
  e=/(.*?)\[\]$/;h.each(b,function(a,b){var c=b.name.match(e);c?(c=c[0],d[c]||(d[c]=[]),d[c].push(b.value)):d[b.name]=b.value});b=d}var f,g=a.ajax,j=a.oInstance,i=function(b){u(a,null,"xhr",[a,b,a.jqXHR]);c(b)};if(h.isPlainObject(g)&&g.data){f=g.data;var n=h.isFunction(f)?f(b,a):f,b=h.isFunction(f)&&n?n:h.extend(!0,b,n);delete g.data}n={data:b,success:function(b){var c=b.error||b.sError;c&&L(a,0,c);a.json=b;i(b)},dataType:"json",cache:!1,type:a.sServerMethod,error:function(b,c){var d=u(a,null,"xhr",
36
  [a,null,a.jqXHR]);-1===h.inArray(!0,d)&&("parsererror"==c?L(a,0,"Invalid JSON response",1):4===b.readyState&&L(a,0,"Ajax error",7));C(a,!1)}};a.oAjaxData=b;u(a,null,"preXhr",[a,b]);a.fnServerData?a.fnServerData.call(j,a.sAjaxSource,h.map(b,function(a,b){return{name:b,value:a}}),i,a):a.sAjaxSource||"string"===typeof g?a.jqXHR=h.ajax(h.extend(n,{url:g||a.sAjaxSource})):h.isFunction(g)?a.jqXHR=g.call(j,b,i,a):(a.jqXHR=h.ajax(h.extend(n,g)),g.data=f)}function lb(a){return a.bAjaxDataGet?(a.iDraw++,C(a,
37
  !0),ra(a,ub(a),function(b){vb(a,b)}),!1):!0}function ub(a){var b=a.aoColumns,c=b.length,d=a.oFeatures,e=a.oPreviousSearch,f=a.aoPreSearchCols,g,j=[],i,n,l,q=V(a);g=a._iDisplayStart;i=!1!==d.bPaginate?a._iDisplayLength:-1;var k=function(a,b){j.push({name:a,value:b})};k("sEcho",a.iDraw);k("iColumns",c);k("sColumns",G(b,"sName").join(","));k("iDisplayStart",g);k("iDisplayLength",i);var S={draw:a.iDraw,columns:[],order:[],start:g,length:i,search:{value:e.sSearch,regex:e.bRegex}};for(g=0;g<c;g++)n=b[g],
src/SupsysticTables/Core/updates/rev-61.sql ADDED
File without changes
src/SupsysticTables/Settings/assets/css/settings.css CHANGED
@@ -45,6 +45,10 @@
45
  .table-option:last-child {
46
  margin-bottom: 0;
47
  }
 
 
 
 
48
  .settings-list .setting .setting-description i{
49
  float: inherit;
50
  }
45
  .table-option:last-child {
46
  margin-bottom: 0;
47
  }
48
+ .table-option input[type="text"] {
49
+ width: 300px;
50
+ vertical-align: middle;
51
+ }
52
  .settings-list .setting .setting-description i{
53
  float: inherit;
54
  }
src/SupsysticTables/Settings/views/index.twig CHANGED
@@ -44,11 +44,14 @@
44
  </div>
45
  <div class="setting-control">
46
  <input type="checkbox" name="settings[editor_pagination]" {% if settings.editor_pagination == 'on' %} checked {% endif %}>
47
- <label>{{ environment.translate('rows per page') }}: </label>
48
- <input type="text"
49
- name="settings[editor_pagination_rows]"
50
- style="width:60px"
51
- value="{{ settings.editor_pagination_rows | default('500') }}" />
 
 
 
52
  </div>
53
  </div>
54
  <div class="table-step-option table-option">
@@ -60,6 +63,21 @@
60
  <input type="text" name="settings[table_step]" value="{{ settings.table_step | default(400) }}">
61
  </div>
62
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  <div class="table-roles-option table-option">
64
  <div class="setting-description">
65
  <label>{{ environment.translate('Roles') }}</label>
@@ -77,13 +95,13 @@
77
  <select multiple="multiple" name="settings[access_roles][]" class="chosen-select" data-placeholder="{{ environment.translate('Select avalilable roles to use tables')}}">
78
  <option value="administrator" disabled selected>Administrator</option>
79
  {% for role, title in wpRoles %}
80
- {% if role != 'administrator' %}
81
- <option value="{{ role }}"
82
- {% if role in settings.access_roles %}
83
- selected="selected"
84
- {% endif %}
85
- >{{ title }}
86
- </option>
87
  {% endif %}
88
  {% endfor %}
89
  </select>
44
  </div>
45
  <div class="setting-control">
46
  <input type="checkbox" name="settings[editor_pagination]" {% if settings.editor_pagination == 'on' %} checked {% endif %}>
47
+ <div style="margin-top: 10px;">
48
+ <input type="text"
49
+ name="settings[editor_pagination_rows]"
50
+ id="settings_editor_pagination_rows"
51
+ style="width:60px"
52
+ value="{{ settings.editor_pagination_rows | default('500') }}" />
53
+ <label for="settings_editor_pagination_rows"> {{ environment.translate('rows per page') }}</label>
54
+ </div>
55
  </div>
56
  </div>
57
  <div class="table-step-option table-option">
63
  <input type="text" name="settings[table_step]" value="{{ settings.table_step | default(400) }}">
64
  </div>
65
  </div>
66
+ <div class="table-global-page-search-option table-option">
67
+ <div class="setting-description">
68
+ <label>{{ environment.translate('Global Page Search Form') }}</label>
69
+ {{ tooltip.icon(environment.translate('Use this form to make global search by all tables on page'), 'top', true) }}
70
+
71
+ {% if environment.isPro() == false %}
72
+ <a target="_blank" href="{{ build_pro_url({ 'utm_medium': 'global_page_search' }) }}">
73
+ {{ environment.translate('PRO option') }}
74
+ </a>
75
+ {% endif %}
76
+ </div>
77
+ <div class="setting-control">
78
+ <input type="text" value="{{ '[supsystic-tables-global-page-search]' }}" class="stbCopyTextCode" readonly="readonly" />
79
+ </div>
80
+ </div>
81
  <div class="table-roles-option table-option">
82
  <div class="setting-description">
83
  <label>{{ environment.translate('Roles') }}</label>
95
  <select multiple="multiple" name="settings[access_roles][]" class="chosen-select" data-placeholder="{{ environment.translate('Select avalilable roles to use tables')}}">
96
  <option value="administrator" disabled selected>Administrator</option>
97
  {% for role, title in wpRoles %}
98
+ {% if role != 'administrator' %}
99
+ <option value="{{ role }}"
100
+ {% if role in settings.access_roles %}
101
+ selected="selected"
102
+ {% endif %}
103
+ >{{ title }}
104
+ </option>
105
  {% endif %}
106
  {% endfor %}
107
  </select>
src/SupsysticTables/Tables/Controller.php CHANGED
@@ -136,7 +136,8 @@ class SupsysticTables_Tables_Controller extends SupsysticTables_Core_BaseControl
136
  'install_link' => admin_url('plugin-install.php?s=contact+form+by+supsystic&tab=search&type=term'),
137
  'create_link' => $contactFormIsInstalled ? $contactForm->findModule('options')->getTabUrl('forms_add_new') : '',
138
  'is_installed' => $contactFormIsInstalled,
139
- 'forms_list' => $contactFormIsInstalled ? $contactForm->getModel()->getAllForms() : array(),
 
140
  'pages_list' => $contactFormIsInstalled ? $this->getPagesListForSelect() : array(),
141
  ),
142
  )
@@ -186,13 +187,11 @@ class SupsysticTables_Tables_Controller extends SupsysticTables_Core_BaseControl
186
  */
187
  public function getPageRowsAction(Rsc_Http_Request $request)
188
  {
189
-
190
  $id = (int)$request->post->get('id');
191
  $tables = $this->getModel('tables');
192
 
193
  try {
194
  $this->getEnvironment()->getModule('tables')->setIniLimits();
195
-
196
  $start = $request->post->get('start');
197
  $length = $request->post->get('length');
198
  $searchAll = $request->post->get('search');
@@ -202,7 +201,6 @@ class SupsysticTables_Tables_Controller extends SupsysticTables_Core_BaseControl
202
  if (isset($searchValue) && $searchValue != '') {
203
  $searchAll['value'] = $searchValue;
204
  }
205
-
206
  $searchCols = array();
207
  foreach ($columns as $j => $column) {
208
  if (isset($column['search']) && isset($column['search']['value'])) {
@@ -220,12 +218,14 @@ class SupsysticTables_Tables_Controller extends SupsysticTables_Core_BaseControl
220
  $orderAsc = (isset($order[0]) && isset($order[0]['dir']) && $order[0]['dir'] == 'asc');
221
  $header = (int)$request->post->get('header');
222
  $footer = (int)$request->post->get('footer');
 
223
 
224
- $rows = $tables->getRowsByPart($id, ($searchAll['value'] == '' ? false : $searchAll['value']), $searchCols, $orderCol, $orderAsc, $start, $length, $header, $footer, $searchParams);
225
-
226
- $table = $tables->getById($id);
227
- $table->rows = $rows['data'];
228
-
 
229
  $module = $this->getEnvironment()->getModule('tables');
230
  $module->setIniLimits();
231
  $module->setDataForPage($table);
@@ -538,11 +538,16 @@ class SupsysticTables_Tables_Controller extends SupsysticTables_Core_BaseControl
538
  if (!$this->isValidTitle($title)) {
539
  return $this->ajaxError($this->translate('Title can\'t be empty or more than 255 characters'));
540
  }
541
- $tableId = $tablesModel->add(array(
542
  'title' => $title,
543
  'settings' => serialize($clonedTable->settings),
544
  'meta' => serialize($clonedTable->meta)
545
- ));
 
 
 
 
 
546
  $newTableMeta = $clonedTable->meta;
547
  $newTableMeta['css'] = preg_replace('/#supsystic-table-(\d+)/', '#supsystic-table-' . $tableId, $clonedTable->meta['css']);
548
  $tablesModel->setMeta($tableId,$newTableMeta);
@@ -558,7 +563,19 @@ class SupsysticTables_Tables_Controller extends SupsysticTables_Core_BaseControl
558
 
559
  public function reviewNoticeResponseAction(Rsc_Http_Request $request) {
560
  $responseCode = $request->post->get('responseCode');
561
- $option = $this->getConfig()->get('db_prefix') . 'reviewNotice';
 
 
 
 
 
 
 
 
 
 
 
 
562
 
563
  if ($responseCode === 'later') {
564
  update_option($option, array(
136
  'install_link' => admin_url('plugin-install.php?s=contact+form+by+supsystic&tab=search&type=term'),
137
  'create_link' => $contactFormIsInstalled ? $contactForm->findModule('options')->getTabUrl('forms_add_new') : '',
138
  'is_installed' => $contactFormIsInstalled,
139
+ 'forms_list' => $contactFormIsInstalled && method_exists($contactForm->getModel(), 'getAllForms')
140
+ ? $contactForm->getModel()->getAllForms() : array(),
141
  'pages_list' => $contactFormIsInstalled ? $this->getPagesListForSelect() : array(),
142
  ),
143
  )
187
  */
188
  public function getPageRowsAction(Rsc_Http_Request $request)
189
  {
 
190
  $id = (int)$request->post->get('id');
191
  $tables = $this->getModel('tables');
192
 
193
  try {
194
  $this->getEnvironment()->getModule('tables')->setIniLimits();
 
195
  $start = $request->post->get('start');
196
  $length = $request->post->get('length');
197
  $searchAll = $request->post->get('search');
201
  if (isset($searchValue) && $searchValue != '') {
202
  $searchAll['value'] = $searchValue;
203
  }
 
204
  $searchCols = array();
205
  foreach ($columns as $j => $column) {
206
  if (isset($column['search']) && isset($column['search']['value'])) {
218
  $orderAsc = (isset($order[0]) && isset($order[0]['dir']) && $order[0]['dir'] == 'asc');
219
  $header = (int)$request->post->get('header');
220
  $footer = (int)$request->post->get('footer');
221
+ $table = $tables->getById($id);
222
 
223
+ if($this->getEnvironment()->isWooPro() && isset($table->woo_settings) && $table->woo_settings['woocommerce']['enable'] === 'on'){
224
+ $rows = $this->getEnvironment()->getModule('woocommerce')->getController()->getRowsByPart($id, array(), $start, $length, $searchAll['value']);
225
+ }else{
226
+ $rows = $tables->getRowsByPart($id, ($searchAll['value'] == '' ? false : $searchAll['value']), $searchCols, $orderCol, $orderAsc, $start, $length, $header, $footer, $searchParams, $table);
227
+ }
228
+ $table->rows = $rows['data'];
229
  $module = $this->getEnvironment()->getModule('tables');
230
  $module->setIniLimits();
231
  $module->setDataForPage($table);
538
  if (!$this->isValidTitle($title)) {
539
  return $this->ajaxError($this->translate('Title can\'t be empty or more than 255 characters'));
540
  }
541
+ $tableData = array(
542
  'title' => $title,
543
  'settings' => serialize($clonedTable->settings),
544
  'meta' => serialize($clonedTable->meta)
545
+ );
546
+ if($this->getEnvironment()->isWooPro()){
547
+ $wooSettings = $tablesModel->getWooSettings($id);
548
+ $tableData['woo_settings'] = $wooSettings;
549
+ }
550
+ $tableId = $tablesModel->add($tableData);
551
  $newTableMeta = $clonedTable->meta;
552
  $newTableMeta['css'] = preg_replace('/#supsystic-table-(\d+)/', '#supsystic-table-' . $tableId, $clonedTable->meta['css']);
553
  $tablesModel->setMeta($tableId,$newTableMeta);
563
 
564
  public function reviewNoticeResponseAction(Rsc_Http_Request $request) {
565
  $responseCode = $request->post->get('responseCode');
566
+ $responseType = $request->post->get('responseType');
567
+
568
+ $optionname = 'reviewNotice';
569
+ switch ( $responseType ){
570
+ case 'wooads':
571
+ $optionname = 'wooAdsNotice';
572
+ break;
573
+ case 'stars':
574
+ $optionname = 'reviewNotice';
575
+ break;
576
+ }
577
+
578
+ $option = $this->getConfig()->get('db_prefix') . $optionname;
579
 
580
  if ($responseCode === 'later') {
581
  update_option($option, array(
src/SupsysticTables/Tables/Model/Tables.php CHANGED
@@ -48,21 +48,7 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
48
  $limitStart = isset($params['limitStart']) ? $params['limitStart'] : '';
49
  $search = isset($params['search']) ? $params['search'] : '';
50
 
51
- // jqGrid search
52
- // $isSearch = $request->get_param('_search');
53
- // if($isSearch) {
54
- // $searchField = trim($request->get_param('searchField'));
55
- // $searchString = trim($request->get_param('searchString'));
56
- // if(!empty($searchField) && !empty($searchString)) {
57
- // // For some cases - we will need to modify search keys and/or values before put it to the model
58
- // $model->addWhere(array(
59
- // $this->_prepareSearchField($searchField) => $this->_prepareSearchString($searchString)
60
- // ));
61
- // }
62
- // }
63
-
64
-
65
- $query = $this->getQueryBuilder()->select('*')
66
  ->from($this->db->prefix . 'supsystic_tbl_tables')
67
  ->orderBy($orderBy)
68
  ->order($sortOrder)
@@ -76,11 +62,11 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
76
  if(empty($v)) continue;
77
  if($k == 'text_like') {
78
  if(!empty($v)) {
79
- $query->where( 'title', 'LIKE', '%'.$v.'%' );
80
 
81
  }
82
  } else {
83
- $query->where( 'title', '=', '%'.$v.'%' );
84
  }
85
  }
86
  }
@@ -425,12 +411,20 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
425
  public function getNeededRows($id, &$settings, $isSSP, $all = false)
426
  {
427
  $source = ($this->environment->isPro() && isset($settings['source']) ? $settings['source'] : '');
428
-
429
  if (isset($source['database']) && $source['database'] == 'on' && isset($source['dbTable'])){
430
  $core = $this->environment->getModule('core');
431
  $dbTableModel = $core->getModelsFactory()->get('DBTables', 'tables');
432
  return $dbTableModel->getRowsData($settings);
433
  }
 
 
 
 
 
 
 
 
 
434
  if (!$all && $isSSP) {
435
  $cntHead = 1;
436
  $footers = array();
@@ -446,6 +440,7 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
446
  }
447
  return array_merge($headers, $footers);
448
  }
 
449
  return $this->getRows($id);
450
  }
451
 
@@ -522,7 +517,7 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
522
  * Calc rows for AJAX page
523
  * @return array
524
  */
525
- public function getRowsByPart($id, $searchAll, $searchCols, $orderCol, $orderAsc, $start, $length, $header, $footer, $searchParams)
526
  {
527
  $sort = $orderCol !== false;
528
  $sorter = array();
@@ -548,7 +543,14 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
548
  if ($rawData) {
549
  $recordsFiltered = $recordsTotal;
550
  $offset = $header + $start;
551
- $limit = ($offset + $length - 1 > $bodyStop ? $bodyStop - $offset + 1: $length);
 
 
 
 
 
 
 
552
  $query->limit($limit)->offset($offset);
553
  } else {
554
  $offset = $bodyStart;
@@ -557,15 +559,21 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
557
  do {
558
  $query->offset($offset);
559
  $rows = $this->db->get_results($query->build());
 
560
  if($this->db->last_error) {
561
  throw new RuntimeException($this->db->last_error);
562
  }
563
 
564
  foreach ($rows as $i => $row) {
565
  $values = $this->prepareRowsData(@unserialize($row->data), false);
 
566
  $cells = $values['cells'];
567
  $filterCols = true;
 
568
  foreach ($searchCols as $j => $s) {
 
 
 
569
  if (!$this->searchInValue($cells[$j]['data'], $s)) {
570
  $filterCols = false;
571
  break;
@@ -871,6 +879,9 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
871
  if(!empty($table->history_settings)) {
872
  $table->historySettings = unserialize(htmlspecialchars_decode($table->history_settings));
873
  }
 
 
 
874
 
875
  return $table;
876
  }
@@ -1123,4 +1134,16 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
1123
  {
1124
  return $this->getTableHistoryModel()->setHistorySettings($id, $settings);
1125
  }
 
 
 
 
 
 
 
 
 
 
 
 
1126
  }
48
  $limitStart = isset($params['limitStart']) ? $params['limitStart'] : '';
49
  $search = isset($params['search']) ? $params['search'] : '';
50
 
51
+ $query = $this->getQueryBuilder()->select('id,title')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  ->from($this->db->prefix . 'supsystic_tbl_tables')
53
  ->orderBy($orderBy)
54
  ->order($sortOrder)
62
  if(empty($v)) continue;
63
  if($k == 'text_like') {
64
  if(!empty($v)) {
65
+ $query->where( 'title', 'LIKE', '%'.$v.'%' )->orWhere( 'id', 'LIKE', '%'.$v.'%' );
66
 
67
  }
68
  } else {
69
+ $query->where( 'title', '=', '%'.$v.'%' )->orWhere( 'id', 'LIKE', '%'.$v.'%' );
70
  }
71
  }
72
  }
411
  public function getNeededRows($id, &$settings, $isSSP, $all = false)
412
  {
413
  $source = ($this->environment->isPro() && isset($settings['source']) ? $settings['source'] : '');
 
414
  if (isset($source['database']) && $source['database'] == 'on' && isset($source['dbTable'])){
415
  $core = $this->environment->getModule('core');
416
  $dbTableModel = $core->getModelsFactory()->get('DBTables', 'tables');
417
  return $dbTableModel->getRowsData($settings);
418
  }
419
+ if($this->environment->isWooPro()){
420
+ $table = $this->getWooSettings($id);
421
+ $tableSettings = unserialize($table);
422
+ if(!empty($tableSettings['woocommerce']['enable']) && $tableSettings['woocommerce']['enable'] === 'on'){
423
+ if($this->environment->getModule('woocommerce')->getController()->getRows($id, $settings)){
424
+ return $this->environment->getModule('woocommerce')->getController()->getRows($id, $settings) ;
425
+ }
426
+ }
427
+ }
428
  if (!$all && $isSSP) {
429
  $cntHead = 1;
430
  $footers = array();
440
  }
441
  return array_merge($headers, $footers);
442
  }
443
+
444
  return $this->getRows($id);
445
  }
446
 
517
  * Calc rows for AJAX page
518
  * @return array
519
  */
520
+ public function getRowsByPart($id, $searchAll, $searchCols, $orderCol, $orderAsc, $start, $length, $header, $footer, $searchParams, $table)
521
  {
522
  $sort = $orderCol !== false;
523
  $sorter = array();
543
  if ($rawData) {
544
  $recordsFiltered = $recordsTotal;
545
  $offset = $header + $start;
546
+
547
+ if( (int)$length === -1 ){
548
+ //for all option in pagination
549
+ $limit = $bodyStop;
550
+ }else{
551
+ $limit = ($offset + $length - 1 > $bodyStop ? $bodyStop - $offset + 1: $length);
552
+ }
553
+
554
  $query->limit($limit)->offset($offset);
555
  } else {
556
  $offset = $bodyStart;
559
  do {
560
  $query->offset($offset);
561
  $rows = $this->db->get_results($query->build());
562
+
563
  if($this->db->last_error) {
564
  throw new RuntimeException($this->db->last_error);
565
  }
566
 
567
  foreach ($rows as $i => $row) {
568
  $values = $this->prepareRowsData(@unserialize($row->data), false);
569
+
570
  $cells = $values['cells'];
571
  $filterCols = true;
572
+
573
  foreach ($searchCols as $j => $s) {
574
+ if($table->settings['autoIndex'] === 'new'){
575
+ $j = $j - 1;
576
+ }
577
  if (!$this->searchInValue($cells[$j]['data'], $s)) {
578
  $filterCols = false;
579
  break;
879
  if(!empty($table->history_settings)) {
880
  $table->historySettings = unserialize(htmlspecialchars_decode($table->history_settings));
881
  }
882
+ if(!empty($table->woo_settings)) {
883
+ $table->woo_settings = unserialize(htmlspecialchars_decode($table->woo_settings));
884
+ }
885
 
886
  return $table;
887
  }
1134
  {
1135
  return $this->getTableHistoryModel()->setHistorySettings($id, $settings);
1136
  }
1137
+
1138
+ public function getWooSettings($id)
1139
+ {
1140
+ $query = $this->getQueryBuilder()
1141
+ ->select($this->getField('tables', 'woo_settings'))
1142
+ ->from($this->getTable('tables'))
1143
+ ->where('id', '=', (int)$id);
1144
+
1145
+ $rows = $this->db->get_var( $query->build() );
1146
+ return $rows;
1147
+ }
1148
+
1149
  }
src/SupsysticTables/Tables/Module.php CHANGED
@@ -7,7 +7,6 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
7
  */
8
  protected $isSingleCell = array();
9
  protected $isTablePart = array();
10
-
11
  /**
12
  * Data for loading tables' rows from history
13
  */
@@ -17,7 +16,13 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
17
  * Check for auto import data from Google Spreadsheet
18
  */
19
  protected $checkSpreadsheet = false;
20
-
 
 
 
 
 
 
21
  private $_tablesInPosts = array();
22
  private $_tablesObj = array();
23
  private $_tablesStyles = array();
@@ -32,10 +37,7 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
32
  $dispatcher = $this->getEnvironment()->getDispatcher();
33
  $dispatcher->on('before_table_render', array($this, 'loadLanguageData'));
34
 
35
- $this->registerShortcode();
36
- $this->registerValueShortcode();
37
- $this->registerCellShortcode();
38
- $this->registerTablePartShortcode();
39
  $this->registerTwigTableRender();
40
  $this->registerMenuItem();
41
  $this->addTwigHighlighter();
@@ -45,6 +47,7 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
45
 
46
  if ($this->isPluginPage()) {
47
  $this->reviewNoticeCheck();
 
48
  }
49
  add_action('template_redirect', array($this, 'getDataTablesInPosts'));
50
  add_action('wp_head', array($this, 'setDataTableStyles'));
@@ -245,7 +248,16 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
245
  && isset($table->settings['features']['import']['google']['automatically_update'])
246
  && isset($table->settings['features']['import']['google']['link']);
247
 
248
- if (!$table->isSSP && !isset($table->settings['disableCache']) && !$this->isSingleCell && !$this->isTablePart && !$this->checkSpreadsheet && !$this->isFromHistory && file_exists($cachePath) && $this->getEnvironment()->isProd()) {
 
 
 
 
 
 
 
 
 
249
  $table->rows = $tables->getNeededRows($id, $table->settings, $table->isSSP);
250
  // Connect scripts and styles depending on table settings and table's cells settings for table cache
251
  $dispatcher = $this->getEnvironment()->getDispatcher();
@@ -363,10 +375,18 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
363
  $dispatcher = $this->getEnvironment()->getDispatcher();
364
  $dispatcher->apply('before_table_render', array($table));
365
 
 
 
 
 
 
 
 
 
366
  $renderData = $twig->render($this->getShortcodeTemplate(), array('table' => $table, 'is_feed' => is_feed()));
367
  $renderData = preg_replace('/\s+/', ' ', trim($renderData));
368
 
369
- if(!in_array($table->view_id, $this->_tablesStyles)) {
370
  $renderData = $this->addDataTableStyles($table) . $renderData;
371
  }
372
  if (!$this->isSingleCell && !$this->isTablePart && !$this->checkSpreadsheet && !$this->isFromHistory && isset($this->cacheDirectory)) {
@@ -476,6 +496,9 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
476
  $config->get('shortcode_name')
477
  );
478
  }
 
 
 
479
  $ui = $environment->getModule('ui');
480
  $assets = array_filter($ui->getAssets(), array($this, 'filterAssets'));
481
 
@@ -487,12 +510,6 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
487
  return $this->render((int)$attributes['id']);
488
  }
489
 
490
- private function registerValueShortcode() {
491
- $config = $this->getEnvironment()->getConfig();
492
-
493
- add_shortcode($config->get('shortcode_value_name'), array($this, 'doValueShortcode'));
494
- }
495
-
496
  public function doValueShortcode($attributes)
497
  {
498
  $environment = $this->getEnvironment();
@@ -506,12 +523,6 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
506
  return $this->renderCellValue((int)$attributes['id'], (int)$attributes['row'], (int)$this->_lettersToNumbers($attributes['col']));
507
  }
508
 
509
- private function registerCellShortcode() {
510
- $config = $this->getEnvironment()->getConfig();
511
-
512
- add_shortcode($config->get('shortcode_cell_name'), array($this, 'doCellShortcode'));
513
- }
514
-
515
  public function doCellShortcode($attributes)
516
  {
517
  $environment = $this->getEnvironment();
@@ -535,12 +546,6 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
535
  return $this->render((int) (int)$attributes['id']);
536
  }
537
 
538
- private function registerTablePartShortcode() {
539
- $config = $this->getEnvironment()->getConfig();
540
-
541
- add_shortcode($config->get('shortcode_part_name'), array($this, 'doTablePartShortcode'));
542
- }
543
-
544
  public function doTablePartShortcode($attributes) {
545
  $environment = $this->getEnvironment();
546
  $config = $environment->getConfig();
@@ -599,12 +604,14 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
599
  return $this->render((int)$attributes['id']);
600
  }
601
 
602
- private function registerShortcode()
603
  {
604
  $config = $this->getEnvironment()->getConfig();
605
- $callable = array($this, 'doShortcode');
606
 
607
- add_shortcode($config->get('shortcode_name'), $callable);
 
 
 
608
  }
609
 
610
  public function registerWidget() {
@@ -703,6 +710,17 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
703
  ->addDependency('supsystic-tables-datatables-numeral')
704
  );
705
 
 
 
 
 
 
 
 
 
 
 
 
706
  /* Backend scripts */
707
  if ($environment->isModule('tables')) {
708
  $ui->add(
@@ -748,13 +766,13 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
748
  ->setCachingAllowed($cachingAllowed)
749
  ->setVersion($version)
750
  );
751
- $ui->add(
752
  $ui->createStyle('jquery-ui-structure')
753
  ->setHookName($hookName)
754
  ->setLocalSource('css/jquery-ui.structure.min.css')
755
  ->setCachingAllowed($cachingAllowed)
756
  ->setVersion($version)
757
- );
758
  $ui->add(
759
  $ui->createStyle('jquery-ui-theme')
760
  ->setHookName($hookName)
@@ -1227,6 +1245,23 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
1227
  print $this->getTwig()->render('@tables/notice/review.twig');
1228
  }
1229
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1230
  public function setIniLimits() {
1231
  // Override local and wp limits
1232
  if(strlen(ini_get('memory_limit')) < 4) {
@@ -1310,7 +1345,7 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
1310
  'part_shortcode' => array(
1311
  'name' => $config->get('shortcode_part_name'),
1312
  'label' => $environment->translate('Table Part Shortcode'),
1313
- 'attrs' => 'row=1,2 col=A,B',
1314
  ),
1315
  'cell_shortcode' => array(
1316
  'name' => $config->get('shortcode_cell_name'),
7
  */
8
  protected $isSingleCell = array();
9
  protected $isTablePart = array();
 
10
  /**
11
  * Data for loading tables' rows from history
12
  */
16
  * Check for auto import data from Google Spreadsheet
17
  */
18
  protected $checkSpreadsheet = false;
19
+ /**
20
+ * Contains the value of "search" shortcode param for applying it to table
21
+ */
22
+ private $tableSearch = '';
23
+ /**
24
+ * Variables for appending of table styles to site header
25
+ */
26
  private $_tablesInPosts = array();
27
  private $_tablesObj = array();
28
  private $_tablesStyles = array();
37
  $dispatcher = $this->getEnvironment()->getDispatcher();
38
  $dispatcher->on('before_table_render', array($this, 'loadLanguageData'));
39
 
40
+ $this->registerShortcodes();
 
 
 
41
  $this->registerTwigTableRender();
42
  $this->registerMenuItem();
43
  $this->addTwigHighlighter();
47
 
48
  if ($this->isPluginPage()) {
49
  $this->reviewNoticeCheck();
50
+ $this->wooProAddonAds();
51
  }
52
  add_action('template_redirect', array($this, 'getDataTablesInPosts'));
53
  add_action('wp_head', array($this, 'setDataTableStyles'));
248
  && isset($table->settings['features']['import']['google']['automatically_update'])
249
  && isset($table->settings['features']['import']['google']['link']);
250
 
251
+ if (!$table->isSSP
252
+ && !isset($table->settings['disableCache'])
253
+ && empty($this->tableSearch)
254
+ && !$this->isSingleCell
255
+ && !$this->isTablePart
256
+ && !$this->checkSpreadsheet
257
+ && !$this->isFromHistory
258
+ && file_exists($cachePath)
259
+ && $this->getEnvironment()->isProd()
260
+ ) {
261
  $table->rows = $tables->getNeededRows($id, $table->settings, $table->isSSP);
262
  // Connect scripts and styles depending on table settings and table's cells settings for table cache
263
  $dispatcher = $this->getEnvironment()->getDispatcher();
375
  $dispatcher = $this->getEnvironment()->getDispatcher();
376
  $dispatcher->apply('before_table_render', array($table));
377
 
378
+ $searchValue = '';
379
+
380
+ if(!empty($this->tableSearch)) {
381
+ $table->search_value = $this->tableSearch;
382
+ // clean variable for correct render of other tables on the page
383
+ $this->tableSearch = '';
384
+ }
385
+
386
  $renderData = $twig->render($this->getShortcodeTemplate(), array('table' => $table, 'is_feed' => is_feed()));
387
  $renderData = preg_replace('/\s+/', ' ', trim($renderData));
388
 
389
+ if(!$table->isSSP && !in_array($table->view_id, $this->_tablesStyles)) {
390
  $renderData = $this->addDataTableStyles($table) . $renderData;
391
  }
392
  if (!$this->isSingleCell && !$this->isTablePart && !$this->checkSpreadsheet && !$this->isFromHistory && isset($this->cacheDirectory)) {
496
  $config->get('shortcode_name')
497
  );
498
  }
499
+ if(!empty($attributes['search'])) {
500
+ $this->tableSearch = $attributes['search'];
501
+ }
502
  $ui = $environment->getModule('ui');
503
  $assets = array_filter($ui->getAssets(), array($this, 'filterAssets'));
504
 
510
  return $this->render((int)$attributes['id']);
511
  }
512
 
 
 
 
 
 
 
513
  public function doValueShortcode($attributes)
514
  {
515
  $environment = $this->getEnvironment();
523
  return $this->renderCellValue((int)$attributes['id'], (int)$attributes['row'], (int)$this->_lettersToNumbers($attributes['col']));
524
  }
525
 
 
 
 
 
 
 
526
  public function doCellShortcode($attributes)
527
  {
528
  $environment = $this->getEnvironment();
546
  return $this->render((int) (int)$attributes['id']);
547
  }
548
 
 
 
 
 
 
 
549
  public function doTablePartShortcode($attributes) {
550
  $environment = $this->getEnvironment();
551
  $config = $environment->getConfig();
604
  return $this->render((int)$attributes['id']);
605
  }
606
 
607
+ protected function registerShortcodes()
608
  {
609
  $config = $this->getEnvironment()->getConfig();
 
610
 
611
+ add_shortcode($config->get('shortcode_name'), array($this, 'doShortcode'));
612
+ add_shortcode($config->get('shortcode_part_name'), array($this, 'doTablePartShortcode'));
613
+ add_shortcode($config->get('shortcode_cell_name'), array($this, 'doCellShortcode'));
614
+ add_shortcode($config->get('shortcode_value_name'), array($this, 'doValueShortcode'));
615
  }
616
 
617
  public function registerWidget() {
710
  ->addDependency('supsystic-tables-datatables-numeral')
711
  );
712
 
713
+ $ui->add(
714
+ $ui->createScript('supsystic-tables-notify')
715
+ ->setHookName($dynamicHookName)
716
+ ->setSource($environment->getConfig()->get('plugin_url') . '/app/assets/js/notify.js')
717
+ ->setVersion($version)
718
+ ->setCachingAllowed($cachingAllowed)
719
+ ->addDependency('jquery')
720
+ ->addDependency('supsystic-tables-datatables-js')
721
+ ->addDependency('supsystic-tables-datatables-numeral')
722
+ );
723
+
724
  /* Backend scripts */
725
  if ($environment->isModule('tables')) {
726
  $ui->add(
766
  ->setCachingAllowed($cachingAllowed)
767
  ->setVersion($version)
768
  );
769
+ /*$ui->add(
770
  $ui->createStyle('jquery-ui-structure')
771
  ->setHookName($hookName)
772
  ->setLocalSource('css/jquery-ui.structure.min.css')
773
  ->setCachingAllowed($cachingAllowed)
774
  ->setVersion($version)
775
+ );*/
776
  $ui->add(
777
  $ui->createStyle('jquery-ui-theme')
778
  ->setHookName($hookName)
1245
  print $this->getTwig()->render('@tables/notice/review.twig');
1246
  }
1247
 
1248
+ public function wooProAddonAds(){
1249
+ $option = $this->config('db_prefix') . 'wooAdsNotice';
1250
+ $notice = get_option($option);
1251
+ if (!$notice) {
1252
+ update_option($option, array(
1253
+ 'time' => time() - 1000,
1254
+ 'shown' => false
1255
+ ));
1256
+ } elseif ($notice['shown'] === false && time() > $notice['time']) {
1257
+ add_action('admin_notices', array($this, 'showWooAdsNotice'));
1258
+ }
1259
+ }
1260
+
1261
+ public function showWooAdsNotice() {
1262
+ print $this->getTwig()->render('@tables/notice/wooAds.twig');
1263
+ }
1264
+
1265
  public function setIniLimits() {
1266
  // Override local and wp limits
1267
  if(strlen(ini_get('memory_limit')) < 4) {
1345
  'part_shortcode' => array(
1346
  'name' => $config->get('shortcode_part_name'),
1347
  'label' => $environment->translate('Table Part Shortcode'),
1348
+ 'attrs' => 'row=1-3 col=A,B',
1349
  ),
1350
  'cell_shortcode' => array(
1351
  'name' => $config->get('shortcode_cell_name'),
src/SupsysticTables/Tables/assets/css/loaders.css CHANGED
@@ -199,4 +199,5 @@
199
  transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
200
  -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
201
  }
202
- }
 
199
  transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
200
  -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
201
  }
202
+ }
203
+ svg > g > g:last-child { pointer-events: none }
src/SupsysticTables/Tables/assets/css/tables.shortcode.css CHANGED
@@ -236,7 +236,7 @@ table.oneColumnWithLabels tr:not(.haveMergedCell) td:after {
236
  .supsystic-tables-wrap .dataTables_scroll {
237
  padding-top: 0 !important;
238
  }
239
- table.dataTable tfoot input {
240
  width: 100%;
241
  padding: 3px;
242
  box-sizing: border-box;
@@ -248,4 +248,12 @@ table.dataTable tfoot input {
248
  color:white;
249
  padding:7px;
250
  z-index: 10;
 
 
 
 
 
 
 
 
251
  }
236
  .supsystic-tables-wrap .dataTables_scroll {
237
  padding-top: 0 !important;
238
  }
239
+ table.dataTable input.search-column {
240
  width: 100%;
241
  padding: 3px;
242
  box-sizing: border-box;
248
  color:white;
249
  padding:7px;
250
  z-index: 10;
251
+ }
252
+ .supsystic-table.compact[data-auto-index='new'] tr td:first-child{
253
+ word-break: normal;
254
+ }
255
+
256
+ .dataTables_wrapper table td,
257
+ .dataTables_wrapper table th {
258
+ word-break: unset!important;
259
  }
src/SupsysticTables/Tables/assets/css/tables.view.css CHANGED
@@ -278,6 +278,9 @@
278
  .tables-view .row-settings-tab .icheckbox_minimal, .tables-view .row-settings-tab .iradio_minimal {
279
  float: left;
280
  }
 
 
 
281
  .tables-view .row-settings-tab .icheckbox_minimal {
282
  margin-top: 8px;
283
  }
278
  .tables-view .row-settings-tab .icheckbox_minimal, .tables-view .row-settings-tab .iradio_minimal {
279
  float: left;
280
  }
281
+ #row-tab-woocommerce .icheckbox_minimal{
282
+ float: left;
283
+ }
284
  .tables-view .row-settings-tab .icheckbox_minimal {
285
  margin-top: 8px;
286
  }
src/SupsysticTables/Tables/assets/js/editor/tables.editor.toolbar.js CHANGED
@@ -230,8 +230,7 @@ var g_stbCellBgColorTimeoutSet = false,
230
  editor = this.getEditor(),
231
  selection = editor.getSelectedRange(),
232
  highlighted = selection === undefined ? { col: 0, row: 0 } : selection.highlight,
233
- url,
234
- media;
235
 
236
  if (event.ctrlKey) {
237
  url = prompt('Enter URL of image file:', 'http://');
@@ -242,29 +241,19 @@ var g_stbCellBgColorTimeoutSet = false,
242
  this.getEditor().setDataAtCell(highlighted.row, highlighted.col, this.getHtmlForAttachment({ url: url, type: 'image' }));
243
  return;
244
  }
245
-
246
- if (typeof media === "undefined") {
247
- media = window.wp.media({
248
- title: 'Choose Media File',
249
- button: {
250
- text: 'Select'
251
- },
252
- multiple: false
253
- });
254
-
255
- media.on('select', function () {
256
- var attachment = media.state().get('selection').first().toJSON();
257
-
258
- if(attachment && attachment.url) {
259
- editor.setDataAtCell(highlighted.row, highlighted.col, self.getHtmlForAttachment(attachment));
260
- setTimeout(function(){
261
- editor.render();
262
- }, 200);
263
- }
264
- });
265
- }
266
-
267
- media.open();
268
  },
269
  addEditComment: function () {
270
  var e = this.getEditor(),
@@ -585,29 +574,80 @@ var g_stbCellBgColorTimeoutSet = false,
585
 
586
  return text;
587
  };
588
- Toolbar.prototype.getHtmlForAttachment = function(attachment) {
589
- var content = attachment.url;
590
-
591
- switch(attachment.type) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
592
  case 'image':
593
- content = '<img src="' + attachment.url + '" />';
 
 
 
594
  break;
595
  case 'video':
596
- content = '<div class="video-container"><video controls>';
597
- content += '<source src="' + attachment.url + '" ' +
598
- (typeof attachment.mime != 'undefined' ? 'type="' + attachment.mime + '"' : '') + '>';
599
- content += '</video></div>';
 
 
 
 
600
  break;
601
  case 'audio':
602
- content = '<audio controls>';
603
- content += '<source src="' + attachment.url + '" ' +
604
- (typeof attachment.mime != 'undefined' ? 'type="' + attachment.mime + '"' : '') + '>';
605
- content += '</audio>';
 
 
 
 
606
  break;
607
  case 'application':
608
- content = '<a href="' + attachment.url + '">';
609
- content += (typeof attachment.title != 'undefined' ? attachment.title : attachment.url);
610
- content += '</a>';
611
  break;
612
  default:
613
  break;
230
  editor = this.getEditor(),
231
  selection = editor.getSelectedRange(),
232
  highlighted = selection === undefined ? { col: 0, row: 0 } : selection.highlight,
233
+ url;
 
234
 
235
  if (event.ctrlKey) {
236
  url = prompt('Enter URL of image file:', 'http://');
241
  this.getEditor().setDataAtCell(highlighted.row, highlighted.col, this.getHtmlForAttachment({ url: url, type: 'image' }));
242
  return;
243
  }
244
+ _custom_media = true;
245
+ wp.media.editor.send.attachment = function(props, attachment) {
246
+ if( _custom_media ) {
247
+ editor.setDataAtCell(highlighted.row, highlighted.col, self.getHtmlForAttachment({
248
+ url: attachment.url,
249
+ type: attachment.type
250
+ }, props, attachment));
251
+ } else {
252
+ return _orig_send_attachment.apply( this, [props, attachment] );
253
+ }
254
+ };
255
+ wp.media.editor.open();
256
+ return false;
 
 
 
 
 
 
 
 
 
 
257
  },
258
  addEditComment: function () {
259
  var e = this.getEditor(),
574
 
575
  return text;
576
  };
577
+ Toolbar.prototype.getHtmlForAttachment = function(data, props, attachment) {
578
+ var content = data.url,
579
+ url = data.url,
580
+ fullUrl = data.url,
581
+ type = data.type,
582
+ link = '',
583
+ linkHtml = '',
584
+ classes = '',
585
+ attrs = 'style="max-width: 100%; height: auto;"',
586
+ isEmbed = false;
587
+
588
+ if(props && attachment) {
589
+ if (attachment.sizes) {
590
+ if (attachment.sizes[props.size]) {
591
+ url = attachment.sizes[props.size].url;
592
+ classes += 'align' + props.align + ' size-' + props.size;
593
+ }
594
+ if (attachment.sizes['full']) {
595
+ fullUrl = attachment.sizes['full'].url;
596
+ }
597
+ }
598
+ if (type == 'image') {
599
+ attrs = 'width="' + attachment.sizes[props.size].width + '" height="' + attachment.sizes[props.size].width + '"';
600
+ }
601
+ switch(props.link) {
602
+ case 'file':
603
+ link = attachment.url;
604
+ linkHtml = '<a href="'+link+'">'+attachment.title+'</a>';
605
+ break;
606
+ case 'post':
607
+ link = attachment.link;
608
+ linkHtml = '<a href="'+link+'">'+attachment.title+'</a>';
609
+ break;
610
+ case 'custom':
611
+ link = props.linkUrl;
612
+ break;
613
+ case 'embed':
614
+ isEmbed = true;
615
+ break;
616
+ default:
617
+ break;
618
+ }
619
+ }
620
+ switch(type) {
621
  case 'image':
622
+ content = '<img src="' + url + '" class="' + classes + '" ' + attrs + ' data-full="' + fullUrl + '" />';
623
+ if(link) {
624
+ content = '<a href="' + link + '">' + content + '</a>';
625
+ }
626
  break;
627
  case 'video':
628
+ if(isEmbed) {
629
+ content = '<div class="video-container"><video controls>';
630
+ content += '<source src="' + url + '" ' +
631
+ (typeof attachment.mime != 'undefined' ? 'type="' + attachment.mime + '"' : '') + '>';
632
+ content += '</video></div>';
633
+ } else if(linkHtml) {
634
+ content = linkHtml;
635
+ }
636
  break;
637
  case 'audio':
638
+ if(isEmbed) {
639
+ content = '<div class="audio-container"><audio controls>';
640
+ content += '<source src="' + url + '" ' +
641
+ (typeof attachment.mime != 'undefined' ? 'type="' + attachment.mime + '"' : '') + '>';
642
+ content += '</audio></div>';
643
+ } else if(linkHtml) {
644
+ content = linkHtml;
645
+ }
646
  break;
647
  case 'application':
648
+ if(linkHtml) {
649
+ content = linkHtml;
650
+ }
651
  break;
652
  default:
653
  break;
src/SupsysticTables/Tables/assets/js/tables.model.js CHANGED
@@ -185,6 +185,8 @@ var g_stbPreviewTimeoutSet = false;
185
  }
186
  };
187
 
 
 
188
  TablesModel.prototype.getDefaultRenderer = function(preview) {
189
  return Handsontable.renderers.DefaultRenderer;
190
  };
@@ -642,6 +644,13 @@ var g_stbPreviewTimeoutSet = false;
642
  return self.setRows(id, rowsData, byPart, preview);
643
  }
644
  );
 
 
 
 
 
 
 
645
  } else {
646
  if(preview && !g_stbPreviewTimeoutSet) {
647
  this.getPreview(id, preview);
@@ -955,25 +964,33 @@ var g_stbPreviewTimeoutSet = false;
955
  if(SDT_DATA.isPro && typeof(app.createEditableFields) != 'function') { // for compatibility with old pro versions
956
  $.getScript(SDT_DATA.pluginsUrl + '/tables-generator-pro/src/SupsysticTablesPro/Tables/assets/js/frontend.pro.js');
957
  }
958
-
959
  // Fix of conflict with handsontable library - it triggers error if user makes click on link without href attribute
960
  var features = table.data('features');
961
-
962
  if(toeInArray('paging', features) != -1) {
963
- $('.dataTables_paginate .paginate_button').each(function() {
964
  $(this).attr('href', '#');
965
  $(this).attr('onclick', 'return false');
966
  });
 
 
 
 
 
 
967
  table.on('page.dt', function() {
 
 
 
 
968
  setTimeout(function() {
969
- $('.dataTables_paginate .paginate_button').each(function() {
970
  $(this).attr('href', '#');
971
  $(this).attr('onclick', 'return false');
972
  });
973
- }, 50);
974
-
975
  });
976
  }
 
977
  };
978
 
979
  TablesModel.prototype._b64EncodeUnicode = function(str) {
185
  }
186
  };
187
 
188
+
189
+
190
  TablesModel.prototype.getDefaultRenderer = function(preview) {
191
  return Handsontable.renderers.DefaultRenderer;
192
  };
644
  return self.setRows(id, rowsData, byPart, preview);
645
  }
646
  );
647
+ ajaxPromise = ajaxPromise.then(
648
+ function() {
649
+ if(SDT_DATA.isWooPro) {
650
+ return self.setWooSettings(id, $('form#woocommerce-settings'));
651
+ }
652
+ }
653
+ );
654
  } else {
655
  if(preview && !g_stbPreviewTimeoutSet) {
656
  this.getPreview(id, preview);
964
  if(SDT_DATA.isPro && typeof(app.createEditableFields) != 'function') { // for compatibility with old pro versions
965
  $.getScript(SDT_DATA.pluginsUrl + '/tables-generator-pro/src/SupsysticTablesPro/Tables/assets/js/frontend.pro.js');
966
  }
 
967
  // Fix of conflict with handsontable library - it triggers error if user makes click on link without href attribute
968
  var features = table.data('features');
 
969
  if(toeInArray('paging', features) != -1) {
970
+ $('#table-preview').find('.dataTables_paginate .paginate_button').each(function() {
971
  $(this).attr('href', '#');
972
  $(this).attr('onclick', 'return false');
973
  });
974
+ setTimeout(function() {
975
+ $('#table-preview').find('.dataTables_paginate .paginate_button').each(function() {
976
+ $(this).attr('href', '#');
977
+ $(this).attr('onclick', 'return false');
978
+ });
979
+ }, 750);
980
  table.on('page.dt', function() {
981
+ $('#table-preview').find('.dataTables_paginate .paginate_button').each(function() {
982
+ $(this).attr('href', '#');
983
+ $(this).attr('onclick', 'return false');
984
+ });
985
  setTimeout(function() {
986
+ $('#table-preview').find('.dataTables_paginate .paginate_button').each(function() {
987
  $(this).attr('href', '#');
988
  $(this).attr('onclick', 'return false');
989
  });
990
+ }, 750);
 
991
  });
992
  }
993
+
994
  };
995
 
996
  TablesModel.prototype._b64EncodeUnicode = function(str) {
src/SupsysticTables/Tables/assets/js/tables.view.js CHANGED
@@ -99,9 +99,6 @@ var g_stbCopyPasteColsCount = [];
99
  $('#stbCopyTextCodeExamples').change(function(){
100
  $('.stbCopyTextCodeShowBlock').hide().filter('[data-for="'+ jQuery(this).val()+ '"]').show();
101
  }).trigger('change');
102
- $('input[name="stbCopyTextCode"]').click(function(){
103
- this.select();
104
- });
105
 
106
  // Edit Table Title
107
  $('#stbTableTitleShell').click(function(){
@@ -338,7 +335,7 @@ var g_stbCopyPasteColsCount = [];
338
  var shell = $('#addContactFormBtnDialog'),
339
  url = shell.find('[name="posts_list"]').val(),
340
  urlArr = url.split('?'),
341
- text = shell.find('[name="btn_text"]').val(),
342
  classes = shell.find('[name="btn_class"]').val(),
343
  styles = shell.find('[name="btn_style"]').val(),
344
  target = shell.find('[name="btn_target"]').is(':checked'),
@@ -350,7 +347,7 @@ var g_stbCopyPasteColsCount = [];
350
  var f = $(fields[i]);
351
  if(f.val()) {
352
  var label = f.parents('.contactFormFieldRow').find('[name="field_name"]').val();
353
- link += '&'+label+'='+f.val();
354
  }
355
  }
356
  btn += '<a href="'+link+'"';
@@ -441,6 +438,16 @@ var g_stbCopyPasteColsCount = [];
441
  }
442
  }
443
  }
 
 
 
 
 
 
 
 
 
 
444
  });
445
 
446
  // Settings Form Options
@@ -551,6 +558,15 @@ var g_stbCopyPasteColsCount = [];
551
  }
552
  });
553
 
 
 
 
 
 
 
 
 
 
554
  // Show results only - Show empty table
555
  $('input[name="searching[resultOnly]"]').on('change ifChanged', function() {
556
  if($(this).is(':checked')) {
@@ -561,6 +577,7 @@ var g_stbCopyPasteColsCount = [];
561
  });
562
  $('input[name="features[searching]"]').on('change ifChanged', function() {
563
  $('input[name="searching[resultOnly]"]').trigger('change');
 
564
  });
565
 
566
  // Table Loader
99
  $('#stbCopyTextCodeExamples').change(function(){
100
  $('.stbCopyTextCodeShowBlock').hide().filter('[data-for="'+ jQuery(this).val()+ '"]').show();
101
  }).trigger('change');
 
 
 
102
 
103
  // Edit Table Title
104
  $('#stbTableTitleShell').click(function(){
335
  var shell = $('#addContactFormBtnDialog'),
336
  url = shell.find('[name="posts_list"]').val(),
337
  urlArr = url.split('?'),
338
+ text = shell.find('[name="btn_text"]').val() || 'Button',
339
  classes = shell.find('[name="btn_class"]').val(),
340
  styles = shell.find('[name="btn_style"]').val(),
341
  target = shell.find('[name="btn_target"]').is(':checked'),
347
  var f = $(fields[i]);
348
  if(f.val()) {
349
  var label = f.parents('.contactFormFieldRow').find('[name="field_name"]').val();
350
+ link += '&cfs_'+label+'='+f.val();
351
  }
352
  }
353
  btn += '<a href="'+link+'"';
438
  }
439
  }
440
  }
441
+ if($('#woocommerce-settings').length){
442
+ //remove html with options
443
+ $('input[name="woocommerce[order]"]').val('');
444
+ $('input[name="woocommerce[productids]"]').val('');
445
+ $('input[name="woocommerce[enable]"]').prop('checked', false).iCheck('update');
446
+ tablesModel.saveTable();
447
+ setTimeout(function() {
448
+ location.reload();
449
+ }, 500);
450
+ }
451
  });
452
 
453
  // Settings Form Options
558
  }
559
  });
560
 
561
+ // Search by Columns - Position
562
+ $('input[name="searching[columnSearch]"]').on('change ifChanged', function() {
563
+ if($(this).is(':checked')) {
564
+ $('select[name="searching[columnSearchPosition]"]').parents('.setting-wrapper:first').fadeIn(300);
565
+ } else {
566
+ $('select[name="searching[columnSearchPosition]"]').parents('.setting-wrapper:first').fadeOut(300);
567
+ }
568
+ });
569
+
570
  // Show results only - Show empty table
571
  $('input[name="searching[resultOnly]"]').on('change ifChanged', function() {
572
  if($(this).is(':checked')) {
577
  });
578
  $('input[name="features[searching]"]').on('change ifChanged', function() {
579
  $('input[name="searching[resultOnly]"]').trigger('change');
580
+ $('input[name="searching[columnSearch]"]').trigger('change');
581
  });
582
 
583
  // Table Loader
src/SupsysticTables/Tables/assets/libraries/numeral.min.js CHANGED
@@ -1,681 +1 @@
1
- /*!
2
- * numeral.js
3
- * version : 1.5.3
4
- * author : Adam Draper
5
- * license : MIT
6
- * http://adamwdraper.github.com/Numeral-js/
7
- */
8
-
9
- (function () {
10
-
11
- /************************************
12
- Constants
13
- ************************************/
14
-
15
- var numeral,
16
- VERSION = '1.5.3',
17
- // internal storage for language config files
18
- languages = {},
19
- currentLanguage = 'en',
20
- zeroFormat = null,
21
- defaultFormat = '0,0',
22
- // check for nodeJS
23
- hasModule = (typeof module !== 'undefined' && module.exports);
24
-
25
-
26
- /************************************
27
- Constructors
28
- ************************************/
29
-
30
-
31
- // Numeral prototype object
32
- function Numeral (number) {
33
- this._value = number;
34
- }
35
-
36
- /**
37
- * Implementation of toFixed() that treats floats more like decimals
38
- *
39
- * Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61') that present
40
- * problems for accounting- and finance-related software.
41
- */
42
- function toFixed (value, precision, roundingFunction, optionals) {
43
- var power = Math.pow(10, precision),
44
- optionalsRegExp,
45
- output;
46
-
47
- //roundingFunction = (roundingFunction !== undefined ? roundingFunction : Math.round);
48
- // Multiply up by precision, round accurately, then divide and use native toFixed():
49
- output = (roundingFunction(value * power) / power).toFixed(precision);
50
-
51
- if (optionals) {
52
- optionalsRegExp = new RegExp('0{1,' + optionals + '}$');
53
- output = output.replace(optionalsRegExp, '');
54
- }
55
-
56
- return output;
57
- }
58
-
59
- /************************************
60
- Formatting
61
- ************************************/
62
-
63
- // determine what type of formatting we need to do
64
- function formatNumeral (n, format, roundingFunction, currencySymbol) {
65
- var output;
66
-
67
- // figure out what kind of format we are dealing with
68
- if (format.indexOf('$') > -1) { // currency!!!!!
69
- output = formatCurrency(n, format, roundingFunction, currencySymbol);
70
- } else if (format.indexOf('%') > -1) { // percentage
71
- output = formatPercentage(n, format, roundingFunction);
72
- } else if (format.indexOf(':') > -1) { // time
73
- output = formatTime(n, format);
74
- } else { // plain ol' numbers or bytes
75
- output = formatNumber(n._value, format, roundingFunction);
76
- }
77
-
78
- // return string
79
- return output;
80
- }
81
-
82
- // revert to number
83
- function unformatNumeral (n, string) {
84
- var stringOriginal = string,
85
- thousandRegExp,
86
- millionRegExp,
87
- billionRegExp,
88
- trillionRegExp,
89
- suffixes = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
90
- bytesMultiplier = false,
91
- power;
92
-
93
- if (string.indexOf(':') > -1) {
94
- n._value = unformatTime(string);
95
- } else {
96
- if (string === zeroFormat) {
97
- n._value = 0;
98
- } else {
99
- if (languages[currentLanguage].delimiters.decimal !== '.') {
100
- string = string.replace(/\./g,'').replace(languages[currentLanguage].delimiters.decimal, '.');
101
- }
102
-
103
- // see if abbreviations are there so that we can multiply to the correct number
104
- thousandRegExp = new RegExp('[^a-zA-Z]' + languages[currentLanguage].abbreviations.thousand + '(?:\\)|(\\' + languages[currentLanguage].currency.symbol + ')?(?:\\))?)?$');
105
- millionRegExp = new RegExp('[^a-zA-Z]' + languages[currentLanguage].abbreviations.million + '(?:\\)|(\\' + languages[currentLanguage].currency.symbol + ')?(?:\\))?)?$');
106
- billionRegExp = new RegExp('[^a-zA-Z]' + languages[currentLanguage].abbreviations.billion + '(?:\\)|(\\' + languages[currentLanguage].currency.symbol + ')?(?:\\))?)?$');
107
- trillionRegExp = new RegExp('[^a-zA-Z]' + languages[currentLanguage].abbreviations.trillion + '(?:\\)|(\\' + languages[currentLanguage].currency.symbol + ')?(?:\\))?)?$');
108
-
109
- // see if bytes are there so that we can multiply to the correct number
110
- for (power = 0; power <= suffixes.length; power++) {
111
- bytesMultiplier = (string.indexOf(suffixes[power]) > -1) ? Math.pow(1024, power + 1) : false;
112
-
113
- if (bytesMultiplier) {
114
- break;
115
- }
116
- }
117
-
118
- // do some math to create our number
119
- n._value = ((bytesMultiplier) ? bytesMultiplier : 1) * ((stringOriginal.match(thousandRegExp)) ? Math.pow(10, 3) : 1) * ((stringOriginal.match(millionRegExp)) ? Math.pow(10, 6) : 1) * ((stringOriginal.match(billionRegExp)) ? Math.pow(10, 9) : 1) * ((stringOriginal.match(trillionRegExp)) ? Math.pow(10, 12) : 1) * ((string.indexOf('%') > -1) ? 0.01 : 1) * (((string.split('-').length + Math.min(string.split('(').length-1, string.split(')').length-1)) % 2)? 1: -1) * Number(string.replace(/[^0-9\.]+/g, ''));
120
-
121
- // round if we are talking about bytes
122
- n._value = (bytesMultiplier) ? Math.ceil(n._value) : n._value;
123
- }
124
- }
125
- return n._value;
126
- }
127
-
128
- function formatCurrency (n, format, roundingFunction, currencySymbol) {
129
- var symbolIndex = format.indexOf('$'),
130
- openParenIndex = format.indexOf('('),
131
- minusSignIndex = format.indexOf('-'),
132
- space = '',
133
- spliceIndex,
134
- output,
135
- symbol = currencySymbol?currencySymbol:languages[currentLanguage].currency.symbol;
136
-
137
- // check for space before or after currency
138
- if (format.indexOf(' $') > -1) {
139
- space = ' ';
140
- format = format.replace(' $', '');
141
- } else if (format.indexOf('$ ') > -1) {
142
- space = ' ';
143
- format = format.replace('$ ', '');
144
- } else {
145
- format = format.replace('$', '');
146
- }
147
-
148
- // format the number
149
- output = formatNumber(n._value, format, roundingFunction);
150
-
151
- // position the symbol
152
- if (symbolIndex <= 1) {
153
- if (output.indexOf('(') > -1 || output.indexOf('-') > -1) {
154
- output = output.split('');
155
- spliceIndex = 1;
156
- if (symbolIndex < openParenIndex || symbolIndex < minusSignIndex){
157
- // the symbol appears before the "(" or "-"
158
- spliceIndex = 0;
159
- }
160
- output.splice(spliceIndex, 0, symbol + space);
161
- output = output.join('');
162
- } else {
163
- output = symbol + space + output;
164
- }
165
- } else {
166
- if (output.indexOf(')') > -1) {
167
- output = output.split('');
168
- output.splice(-1, 0, space + symbol);
169
- output = output.join('');
170
- } else {
171
- output = output + space + symbol;
172
- }
173
- }
174
-
175
- return output;
176
- }
177
-
178
- function formatPercentage (n, format, roundingFunction) {
179
- var space = '',
180
- output,
181
- value = n._value * 100;
182
-
183
- // check for space before %
184
- if (format.indexOf(' %') > -1) {
185
- space = ' ';
186
- format = format.replace(' %', '');
187
- } else {
188
- format = format.replace('%', '');
189
- }
190
-
191
- output = formatNumber(value, format, roundingFunction);
192
-
193
- if (output.indexOf(')') > -1 ) {
194
- output = output.split('');
195
- output.splice(-1, 0, space + '%');
196
- output = output.join('');
197
- } else {
198
- output = output + space + '%';
199
- }
200
-
201
- return output;
202
- }
203
-
204
- function formatTime (n) {
205
- var hours = Math.floor(n._value/60/60),
206
- minutes = Math.floor((n._value - (hours * 60 * 60))/60),
207
- seconds = Math.round(n._value - (hours * 60 * 60) - (minutes * 60));
208
- return hours + ':' + ((minutes < 10) ? '0' + minutes : minutes) + ':' + ((seconds < 10) ? '0' + seconds : seconds);
209
- }
210
-
211
- function unformatTime (string) {
212
- var timeArray = string.split(':'),
213
- seconds = 0;
214
- // turn hours and minutes into seconds and add them all up
215
- if (timeArray.length === 3) {
216
- // hours
217
- seconds = seconds + (Number(timeArray[0]) * 60 * 60);
218
- // minutes
219
- seconds = seconds + (Number(timeArray[1]) * 60);
220
- // seconds
221
- seconds = seconds + Number(timeArray[2]);
222
- } else if (timeArray.length === 2) {
223
- // minutes
224
- seconds = seconds + (Number(timeArray[0]) * 60);
225
- // seconds
226
- seconds = seconds + Number(timeArray[1]);
227
- }
228
- return Number(seconds);
229
- }
230
-
231
- function formatNumber (value, format, roundingFunction) {
232
- var negP = false,
233
- signed = false,
234
- optDec = false,
235
- abbr = '',
236
- abbrK = false, // force abbreviation to thousands
237
- abbrM = false, // force abbreviation to millions
238
- abbrB = false, // force abbreviation to billions
239
- abbrT = false, // force abbreviation to trillions
240
- abbrForce = false, // force abbreviation
241
- bytes = '',
242
- ord = '',
243
- abs = Math.abs(value),
244
- suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
245
- min,
246
- max,
247
- power,
248
- w,
249
- precision,
250
- thousands,
251
- d = '',
252
- neg = false;
253
-
254
- // check if number is zero and a custom zero format has been set
255
- if (value === 0 && zeroFormat !== null) {
256
- return zeroFormat;
257
- } else {
258
- // see if we should use parentheses for negative number or if we should prefix with a sign
259
- // if both are present we default to parentheses
260
- if (format.indexOf('(') > -1) {
261
- negP = true;
262
- format = format.slice(1, -1);
263
- } else if (format.indexOf('+') > -1) {
264
- signed = true;
265
- format = format.replace(/\+/g, '');
266
- }
267
-
268
- // see if abbreviation is wanted
269
- if (format.indexOf('a') > -1) {
270
- // check if abbreviation is specified
271
- abbrK = format.indexOf('aK') >= 0;
272
- abbrM = format.indexOf('aM') >= 0;
273
- abbrB = format.indexOf('aB') >= 0;
274
- abbrT = format.indexOf('aT') >= 0;
275
- abbrForce = abbrK || abbrM || abbrB || abbrT;
276
-
277
- // check for space before abbreviation
278
- if (format.indexOf(' a') > -1) {
279
- abbr = ' ';
280
- format = format.replace(' a', '');
281
- } else {
282
- format = format.replace('a', '');
283
- }
284
-
285
- if (abs >= Math.pow(10, 12) && !abbrForce || abbrT) {
286
- // trillion
287
- abbr = abbr + languages[currentLanguage].abbreviations.trillion;
288
- value = value / Math.pow(10, 12);
289
- } else if (abs < Math.pow(10, 12) && abs >= Math.pow(10, 9) && !abbrForce || abbrB) {
290
- // billion
291
- abbr = abbr + languages[currentLanguage].abbreviations.billion;
292
- value = value / Math.pow(10, 9);
293
- } else if (abs < Math.pow(10, 9) && abs >= Math.pow(10, 6) && !abbrForce || abbrM) {
294
- // million
295
- abbr = abbr + languages[currentLanguage].abbreviations.million;
296
- value = value / Math.pow(10, 6);
297
- } else if (abs < Math.pow(10, 6) && abs >= Math.pow(10, 3) && !abbrForce || abbrK) {
298
- // thousand
299
- abbr = abbr + languages[currentLanguage].abbreviations.thousand;
300
- value = value / Math.pow(10, 3);
301
- }
302
- }
303
-
304
- // see if we are formatting bytes
305
- if (format.indexOf('b') > -1) {
306
- // check for space before
307
- if (format.indexOf(' b') > -1) {
308
- bytes = ' ';
309
- format = format.replace(' b', '');
310
- } else {
311
- format = format.replace('b', '');
312
- }
313
-
314
- for (power = 0; power <= suffixes.length; power++) {
315
- min = Math.pow(1024, power);
316
- max = Math.pow(1024, power+1);
317
-
318
- if (value >= min && value < max) {
319
- bytes = bytes + suffixes[power];
320
- if (min > 0) {
321
- value = value / min;
322
- }
323
- break;
324
- }
325
- }
326
- }
327
-
328
- // see if ordinal is wanted
329
- if (format.indexOf('o') > -1) {
330
- // check for space before
331
- if (format.indexOf(' o') > -1) {
332
- ord = ' ';
333
- format = format.replace(' o', '');
334
- } else {
335
- format = format.replace('o', '');
336
- }
337
-
338
- ord = ord + languages[currentLanguage].ordinal(value);
339
- }
340
-
341
- if (format.indexOf('[.]') > -1) {
342
- optDec = true;
343
- format = format.replace('[.]', '.');
344
- }
345
-
346
- w = value.toString().split('.')[0];
347
- precision = format.split('.')[1];
348
- thousands = format.indexOf(',');
349
-
350
- if (precision) {
351
- if (precision.indexOf('[') > -1) {
352
- precision = precision.replace(']', '');
353
- precision = precision.split('[');
354
- d = toFixed(value, (precision[0].length + precision[1].length), roundingFunction, precision[1].length);
355
- } else {
356
- d = toFixed(value, precision.length, roundingFunction);
357
- }
358
-
359
- w = d.split('.')[0];
360
-
361
- if (d.split('.')[1].length) {
362
- d = languages[currentLanguage].delimiters.decimal + d.split('.')[1];
363
- } else {
364
- d = '';
365
- }
366
-
367
- if (optDec && Number(d.slice(1)) === 0) {
368
- d = '';
369
- }
370
- } else {
371
- w = toFixed(value, null, roundingFunction);
372
- }
373
-
374
- // format number
375
- if (w.indexOf('-') > -1) {
376
- w = w.slice(1);
377
- neg = true;
378
- }
379
-
380
- if (thousands > -1) {
381
- w = w.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + languages[currentLanguage].delimiters.thousands);
382
- }
383
-
384
- if (format.indexOf('.') === 0) {
385
- w = '';
386
- }
387
-
388
- return ((negP && neg) ? '(' : '') + ((!negP && neg) ? '-' : '') + ((!neg && signed) ? '+' : '') + w + d + ((ord) ? ord : '') + ((abbr) ? abbr : '') + ((bytes) ? bytes : '') + ((negP && neg) ? ')' : '');
389
- }
390
- }
391
-
392
- /************************************
393
- Top Level Functions
394
- ************************************/
395
-
396
- numeral = function (input) {
397
- if (numeral.isNumeral(input)) {
398
- input = input.value();
399
- } else if (input === 0 || typeof input === 'undefined') {
400
- input = 0;
401
- } else if (!Number(input)) {
402
- input = numeral.fn.unformat(input);
403
- }
404
-
405
- return new Numeral(Number(input));
406
- };
407
-
408
- // version number
409
- numeral.version = VERSION;
410
-
411
- // compare numeral object
412
- numeral.isNumeral = function (obj) {
413
- return obj instanceof Numeral;
414
- };
415
-
416
- // This function will load languages and then set the global language. If
417
- // no arguments are passed in, it will simply return the current global
418
- // language key.
419
- numeral.language = function (key, values) {
420
- if (!key) {
421
- return currentLanguage;
422
- }
423
-
424
- if (key && !values) {
425
- if(!languages[key]) {
426
- throw new Error('Unknown language : ' + key);
427
- }
428
- currentLanguage = key;
429
- }
430
-
431
- if (values || !languages[key]) {
432
- loadLanguage(key, values);
433
- }
434
-
435
- return numeral;
436
- };
437
-
438
- // This function provides access to the loaded language data. If
439
- // no arguments are passed in, it will simply return the current
440
- // global language object.
441
- numeral.languageData = function (key) {
442
- if (!key) {
443
- return languages[currentLanguage];
444
- }
445
-
446
- if (!languages[key]) {
447
- throw new Error('Unknown language : ' + key);
448
- }
449
-
450
- return languages[key];
451
- };
452
-
453
- numeral.language('en', {
454
- delimiters: {
455
- thousands: ',',
456
- decimal: '.'
457
- },
458
- abbreviations: {
459
- thousand: 'k',
460
- million: 'm',
461
- billion: 'b',
462
- trillion: 't'
463
- },
464
- ordinal: function (number) {
465
- var b = number % 10;
466
- return (~~ (number % 100 / 10) === 1) ? 'th' :
467
- (b === 1) ? 'st' :
468
- (b === 2) ? 'nd' :
469
- (b === 3) ? 'rd' : 'th';
470
- },
471
- currency: {
472
- symbol: '$'
473
- }
474
- });
475
-
476
- numeral.zeroFormat = function (format) {
477
- zeroFormat = typeof(format) === 'string' ? format : null;
478
- };
479
-
480
- numeral.defaultFormat = function (format) {
481
- defaultFormat = typeof(format) === 'string' ? format : '0.0';
482
- };
483
-
484
- /************************************
485
- Helpers
486
- ************************************/
487
-
488
- function loadLanguage(key, values) {
489
- languages[key] = values;
490
- }
491
-
492
- /************************************
493
- Floating-point helpers
494
- ************************************/
495
-
496
- // The floating-point helper functions and implementation
497
- // borrows heavily from sinful.js: http://guipn.github.io/sinful.js/
498
-
499
- /**
500
- * Array.prototype.reduce for browsers that don't support it
501
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce#Compatibility
502
- */
503
- if ('function' !== typeof Array.prototype.reduce) {
504
- Array.prototype.reduce = function (callback, opt_initialValue) {
505
- 'use strict';
506
-
507
- if (null === this || 'undefined' === typeof this) {
508
- // At the moment all modern browsers, that support strict mode, have
509
- // native implementation of Array.prototype.reduce. For instance, IE8
510
- // does not support strict mode, so this check is actually useless.
511
- throw new TypeError('Array.prototype.reduce called on null or undefined');
512
- }
513
-
514
- if ('function' !== typeof callback) {
515
- throw new TypeError(callback + ' is not a function');
516
- }
517
-
518
- var index,
519
- value,
520
- length = this.length >>> 0,
521
- isValueSet = false;
522
-
523
- if (1 < arguments.length) {
524
- value = opt_initialValue;
525
- isValueSet = true;
526
- }
527
-
528
- for (index = 0; length > index; ++index) {
529
- if (this.hasOwnProperty(index)) {
530
- if (isValueSet) {
531
- value = callback(value, this[index], index, this);
532
- } else {
533
- value = this[index];
534
- isValueSet = true;
535
- }
536
- }
537
- }
538
-
539
- if (!isValueSet) {
540
- throw new TypeError('Reduce of empty array with no initial value');
541
- }
542
-
543
- return value;
544
- };
545
- }
546
-
547
-
548
- /**
549
- * Computes the multiplier necessary to make x >= 1,
550
- * effectively eliminating miscalculations caused by
551
- * finite precision.
552
- */
553
- function multiplier(x) {
554
- var parts = x.toString().split('.');
555
- if (parts.length < 2) {
556
- return 1;
557
- }
558
- return Math.pow(10, parts[1].length);
559
- }
560
-
561
- /**
562
- * Given a variable number of arguments, returns the maximum
563
- * multiplier that must be used to normalize an operation involving
564
- * all of them.
565
- */
566
- function correctionFactor() {
567
- var args = Array.prototype.slice.call(arguments);
568
- return args.reduce(function (prev, next) {
569
- var mp = multiplier(prev),
570
- mn = multiplier(next);
571
- return mp > mn ? mp : mn;
572
- }, -Infinity);
573
- }
574
-
575
-
576
- /************************************
577
- Numeral Prototype
578
- ************************************/
579
-
580
-
581
- numeral.fn = Numeral.prototype = {
582
-
583
- clone : function () {
584
- return numeral(this);
585
- },
586
-
587
- format : function (inputString, roundingFunction, currencySymbol) {
588
- return formatNumeral(this,
589
- inputString ? inputString : defaultFormat,
590
- (roundingFunction !== undefined) ? roundingFunction : Math.round,
591
- currencySymbol ? currencySymbol : null
592
- );
593
- },
594
-
595
- unformat : function (inputString) {
596
- if (Object.prototype.toString.call(inputString) === '[object Number]') {
597
- return inputString;
598
- }
599
- return unformatNumeral(this, inputString ? inputString : defaultFormat);
600
- },
601
-
602
- value : function () {
603
- return this._value;
604
- },
605
-
606
- valueOf : function () {
607
- return this._value;
608
- },
609
-
610
- set : function (value) {
611
- this._value = Number(value);
612
- return this;
613
- },
614
-
615
- add : function (value) {
616
- var corrFactor = correctionFactor.call(null, this._value, value);
617
- function cback(accum, curr, currI, O) {
618
- return accum + corrFactor * curr;
619
- }
620
- this._value = [this._value, value].reduce(cback, 0) / corrFactor;
621
- return this;
622
- },
623
-
624
- subtract : function (value) {
625
- var corrFactor = correctionFactor.call(null, this._value, value);
626
- function cback(accum, curr, currI, O) {
627
- return accum - corrFactor * curr;
628
- }
629
- this._value = [value].reduce(cback, this._value * corrFactor) / corrFactor;
630
- return this;
631
- },
632
-
633
- multiply : function (value) {
634
- function cback(accum, curr, currI, O) {
635
- var corrFactor = correctionFactor(accum, curr);
636
- return (accum * corrFactor) * (curr * corrFactor) /
637
- (corrFactor * corrFactor);
638
- }
639
- this._value = [this._value, value].reduce(cback, 1);
640
- return this;
641
- },
642
-
643
- divide : function (value) {
644
- function cback(accum, curr, currI, O) {
645
- var corrFactor = correctionFactor(accum, curr);
646
- return (accum * corrFactor) / (curr * corrFactor);
647
- }
648
- this._value = [this._value, value].reduce(cback);
649
- return this;
650
- },
651
-
652
- difference : function (value) {
653
- return Math.abs(numeral(this._value).subtract(value).value());
654
- }
655
-
656
- };
657
-
658
- /************************************
659
- Exposing Numeral
660
- ************************************/
661
-
662
- // CommonJS module is defined
663
- if (hasModule) {
664
- module.exports = numeral;
665
- }
666
-
667
- /*global ender:false */
668
- if (typeof ender === 'undefined') {
669
- // here, `this` means `window` in the browser, or `global` on the server
670
- // add `numeral` as a global object via a string identifier,
671
- // for Closure Compiler 'advanced' mode
672
- this['numeral'] = numeral;
673
- }
674
-
675
- /*global define:false */
676
- if (typeof define === 'function' && define.amd) {
677
- define([], function () {
678
- return numeral;
679
- });
680
- }
681
- }).call(this);
1
+ (function(){var e,n={},t="en",r=null,i="0,0",a="undefined"!=typeof module&&module.exports;function l(e){this._value=e}function u(e,n,t,r){var i,a,l=Math.pow(10,n);return a=(t(e*l)/l).toFixed(n),r&&(i=new RegExp("0{1,"+r+"}$"),a=a.replace(i,"")),a}function o(e,r,i,a){var l,u,o,f,s;return r.indexOf("$")>-1?l=function(e,r,i,a){var l,u,o=r.indexOf("$"),f=r.indexOf("("),s=r.indexOf("-"),h="",d=a||n[t].currency.symbol;r.indexOf(" $")>-1?(h=" ",r=r.replace(" $","")):r.indexOf("$ ")>-1?(h=" ",r=r.replace("$ ","")):r=r.replace("$","");u=c(e._value,r,i),o<=1?u.indexOf("(")>-1||u.indexOf("-")>-1?(u=u.split(""),l=1,(o<f||o<s)&&(l=0),u.splice(l,0,d+h),u=u.join("")):u=d+h+u:u.indexOf(")")>-1?((u=u.split("")).splice(-1,0,h+d),u=u.join("")):u=u+h+d;return u}(e,r,i,a):r.indexOf("%")>-1?l=function(e,n,t){var r,i="",a=100*e._value;n.indexOf(" %")>-1?(i=" ",n=n.replace(" %","")):n=n.replace("%","");(r=c(a,n,t)).indexOf(")")>-1?((r=r.split("")).splice(-1,0,i+"%"),r=r.join("")):r=r+i+"%";return r}(e,r,i):r.indexOf(":")>-1?(u=e,o=Math.floor(u._value/60/60),f=Math.floor((u._value-60*o*60)/60),s=Math.round(u._value-60*o*60-60*f),l=o+":"+(f<10?"0"+f:f)+":"+(s<10?"0"+s:s)):l=c(e._value,r,i),l}function f(e,i){var a,l,u,o,f,c=i,s=["KB","MB","GB","TB","PB","EB","ZB","YB"],h=!1;if(i.indexOf(":")>-1)e._value=function(e){var n=e.split(":"),t=0;3===n.length?(t+=60*Number(n[0])*60,t+=60*Number(n[1]),t+=Number(n[2])):2===n.length&&(t+=60*Number(n[0]),t+=Number(n[1]));return Number(t)}(i);else if(i===r)e._value=0;else{for("."!==n[t].delimiters.decimal&&(i=i.replace(/\./g,"").replace(n[t].delimiters.decimal,".")),a=new RegExp("[^a-zA-Z]"+n[t].abbreviations.thousand+"(?:\\)|(\\"+n[t].currency.symbol+")?(?:\\))?)?$"),l=new RegExp("[^a-zA-Z]"+n[t].abbreviations.million+"(?:\\)|(\\"+n[t].currency.symbol+")?(?:\\))?)?$"),u=new RegExp("[^a-zA-Z]"+n[t].abbreviations.billion+"(?:\\)|(\\"+n[t].currency.symbol+")?(?:\\))?)?$"),o=new RegExp("[^a-zA-Z]"+n[t].abbreviations.trillion+"(?:\\)|(\\"+n[t].currency.symbol+")?(?:\\))?)?$"),f=0;f<=s.length&&!(h=i.indexOf(s[f])>-1&&Math.pow(1024,f+1));f++);e._value=(h||1)*(c.match(a)?Math.pow(10,3):1)*(c.match(l)?Math.pow(10,6):1)*(c.match(u)?Math.pow(10,9):1)*(c.match(o)?Math.pow(10,12):1)*(i.indexOf("%")>-1?.01:1)*((i.split("-").length+Math.min(i.split("(").length-1,i.split(")").length-1))%2?1:-1)*Number(i.replace(/[^0-9\.]+/g,"")),e._value=h?Math.ceil(e._value):e._value}return e._value}function c(e,i,a){var l,o,f,c,s,h,d=!1,p=!1,v=!1,b="",m=!1,g=!1,x=!1,w=!1,y=!1,O="",M="",_=Math.abs(e),B=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],N="",$=!1;if(0===e&&null!==r)return r;if(i.indexOf("(")>-1?(d=!0,i=i.slice(1,-1)):i.indexOf("+")>-1&&(p=!0,i=i.replace(/\+/g,"")),i.indexOf("a")>-1&&(m=i.indexOf("aK")>=0,g=i.indexOf("aM")>=0,x=i.indexOf("aB")>=0,w=i.indexOf("aT")>=0,y=m||g||x||w,i.indexOf(" a")>-1?(b=" ",i=i.replace(" a","")):i=i.replace("a",""),_>=Math.pow(10,12)&&!y||w?(b+=n[t].abbreviations.trillion,e/=Math.pow(10,12)):_<Math.pow(10,12)&&_>=Math.pow(10,9)&&!y||x?(b+=n[t].abbreviations.billion,e/=Math.pow(10,9)):_<Math.pow(10,9)&&_>=Math.pow(10,6)&&!y||g?(b+=n[t].abbreviations.million,e/=Math.pow(10,6)):(_<Math.pow(10,6)&&_>=Math.pow(10,3)&&!y||m)&&(b+=n[t].abbreviations.thousand,e/=Math.pow(10,3))),i.indexOf("b")>-1)for(i.indexOf(" b")>-1?(O=" ",i=i.replace(" b","")):i=i.replace("b",""),f=0;f<=B.length;f++)if(l=Math.pow(1024,f),o=Math.pow(1024,f+1),e>=l&&e<o){O+=B[f],l>0&&(e/=l);break}return i.indexOf("o")>-1&&(i.indexOf(" o")>-1?(M=" ",i=i.replace(" o","")):i=i.replace("o",""),M+=n[t].ordinal(e)),i.indexOf("[.]")>-1&&(v=!0,i=i.replace("[.]",".")),c=e.toString().split(".")[0],s=i.split(".")[1],h=i.indexOf(","),s?(c=(N=s.indexOf("[")>-1?u(e,(s=(s=s.replace("]","")).split("["))[0].length+s[1].length,a,s[1].length):u(e,s.length,a)).split(".")[0],N=N.split(".")[1].length?n[t].delimiters.decimal+N.split(".")[1]:"",v&&0===Number(N.slice(1))&&(N="")):c=u(e,null,a),c.indexOf("-")>-1&&(c=c.slice(1),$=!0),h>-1&&(c=c.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+n[t].delimiters.thousands)),0===i.indexOf(".")&&(c=""),(d&&$?"(":"")+(!d&&$?"-":"")+(!$&&p?"+":"")+c+N+(M||"")+(b||"")+(O||"")+(d&&$?")":"")}function s(e){var n=e.toString().split(".");return n.length<2?1:Math.pow(10,n[1].length)}function h(){return Array.prototype.slice.call(arguments).reduce(function(e,n){var t=s(e),r=s(n);return t>r?t:r},-1/0)}(e=function(n){return e.isNumeral(n)?n=n.value():0===n||void 0===n?n=0:Number(n)||(n=e.fn.unformat(n)),new l(Number(n))}).version="1.5.3",e.isNumeral=function(e){return e instanceof l},e.language=function(r,i){if(!r)return t;if(r&&!i){if(!n[r])throw new Error("Unknown language : "+r);t=r}var a;return!i&&n[r]||(a=i,n[r]=a),e},e.languageData=function(e){if(!e)return n[t];if(!n[e])throw new Error("Unknown language : "+e);return n[e]},e.language("en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(e){var n=e%10;return 1==~~(e%100/10)?"th":1===n?"st":2===n?"nd":3===n?"rd":"th"},currency:{symbol:"$"}}),e.zeroFormat=function(e){r="string"==typeof e?e:null},e.defaultFormat=function(e){i="string"==typeof e?e:"0.0"},"function"!=typeof Array.prototype.reduce&&(Array.prototype.reduce=function(e,n){"use strict";if(null===this||void 0===this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!=typeof e)throw new TypeError(e+" is not a function");var t,r,i=this.length>>>0,a=!1;for(1<arguments.length&&(r=n,a=!0),t=0;i>t;++t)this.hasOwnProperty(t)&&(a?r=e(r,this[t],t,this):(r=this[t],a=!0));if(!a)throw new TypeError("Reduce of empty array with no initial value");return r}),e.fn=l.prototype={clone:function(){return e(this)},format:function(e,n,t){return o(this,e||i,void 0!==n?n:Math.round,t||null)},unformat:function(e){return"[object Number]"===Object.prototype.toString.call(e)?e:f(this,e||i)},value:function(){return this._value},valueOf:function(){return this._value},set:function(e){return this._value=Number(e),this},add:function(e){var n=h.call(null,this._value,e);return this._value=[this._value,e].reduce(function(e,t,r,i){return e+n*t},0)/n,this},subtract:function(e){var n=h.call(null,this._value,e);return this._value=[e].reduce(function(e,t,r,i){return e-n*t},this._value*n)/n,this},multiply:function(e){return this._value=[this._value,e].reduce(function(e,n,t,r){var i=h(e,n);return e*i*(n*i)/(i*i)},1),this},divide:function(e){return this._value=[this._value,e].reduce(function(e,n,t,r){var i=h(e,n);return e*i/(n*i)}),this},difference:function(n){return Math.abs(e(this._value).subtract(n).value())}},a&&(module.exports=e),"undefined"==typeof ender&&(this.numeral=e),"function"==typeof define&&define.amd&&define([],function(){return e})}).call(this);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/SupsysticTables/Tables/assets/libraries/ruleJS/ruleJS.lib.full.js CHANGED
@@ -19650,38 +19650,39 @@ this.j$ = this.jStat = (function(Math, undefined) {
19650
  for (var i = 0; i < range.length; i++) {
19651
  var newCriteria = criteria;
19652
 
19653
- if (!isNaN(range[i]) && range[i] != '') {
19654
- newCriteria = newCriteria.replace('=', '');
19655
- if (!/[<>=!]/.test(newCriteria)) {
19656
- newCriteria = '=="'+newCriteria+'"';
19657
- }
19658
- if (eval(range[i]+newCriteria)) {
19659
- matches++;
19660
- }
19661
- } else {
19662
- range[i] = range[i].toString().toUpperCase();
19663
-
19664
- newCriteria = newCriteria.replace(/\*/g, function(match, contents, offset, s) {
19665
- if(offset[contents - 1] != '~') {
19666
- return '.*';
19667
  }
19668
- return '*';
19669
- });
19670
- newCriteria = newCriteria.replace(/\?/g, function(match, contents, offset, s) {
19671
- if(offset[contents - 1] != '~') {
19672
- return '.{1}';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19673
  }
19674
- return '?';
19675
- });
19676
- newCriteria = newCriteria.replace(/~\*/g, '\\*');
19677
- newCriteria = newCriteria.replace(/~\?/g, '\\?');
19678
-
19679
- if (range[i].match(new RegExp('^'+newCriteria+'$'))) {
19680
- matches++;
19681
  }
19682
  }
19683
  }
19684
-
19685
  return matches;
19686
  };
19687
 
@@ -20724,21 +20725,24 @@ this.j$ = this.jStat = (function(Math, undefined) {
20724
  };
20725
 
20726
  Formula.SUBSTITUTE = function (text, old_text, new_text, occurrence) {
20727
- if (!text || !old_text || !new_text) {
20728
- return text;
20729
- } else if (typeof occurrence === 'undefined') {
20730
- return text.replace(new RegExp(old_text, 'g'), new_text);
20731
- } else {
20732
- var index = 0;
20733
- var i = 0;
20734
- while (text.indexOf(old_text, index) > 0) {
20735
- index = text.indexOf(old_text, index + 1);
20736
- i++;
20737
- if (i === occurrence) {
20738
- return text.substring(0, index) + new_text + text.substring(index + old_text.length);
20739
- }
20740
- }
20741
- }
 
 
 
20742
  };
20743
 
20744
  Formula.T = function (value) {
@@ -20746,9 +20750,8 @@ this.j$ = this.jStat = (function(Math, undefined) {
20746
  };
20747
 
20748
  Formula.TEXT = function (value, format) {
20749
- if (!value) {
20750
- return '';
20751
- }
20752
 
20753
  if (value instanceof Object) {
20754
  try {
@@ -20758,16 +20761,16 @@ this.j$ = this.jStat = (function(Math, undefined) {
20758
  return '';
20759
  }
20760
  }
20761
-
20762
  if (typeof value === 'string') {
20763
- if (!format) { return value; }
20764
  return (format.indexOf('0') >= 0) ? numeral(value).format(format) : moment(new Date(value)).format(format);
20765
  }
20766
-
 
 
 
20767
  if (value.toString && typeof value.toString === 'function') {
20768
  return value.toString();
20769
  }
20770
-
20771
  return '';
20772
  };
20773
 
19650
  for (var i = 0; i < range.length; i++) {
19651
  var newCriteria = criteria;
19652
 
19653
+ if(range[i] !== null && range[i] !== undefined) {
19654
+ if (!isNaN(range[i]) && range[i] != '') {
19655
+ // it is number
19656
+ if (!/[<>!]/.test(newCriteria)) {
19657
+ newCriteria = newCriteria.replace('=', '');
19658
+ newCriteria = '=="'+newCriteria+'"';
 
 
 
 
 
 
 
 
19659
  }
19660
+ if (eval(range[i]+newCriteria)) {
19661
+ matches++;
19662
+ }
19663
+ } else {
19664
+ // it is string
19665
+ range[i] = range[i].toString();
19666
+ newCriteria = newCriteria.replace(/\*/g, function(match, contents, offset, s) {
19667
+ if(offset[contents - 1] != '~') {
19668
+ return '.*';
19669
+ }
19670
+ return '*';
19671
+ });
19672
+ newCriteria = newCriteria.replace(/\?/g, function(match, contents, offset, s) {
19673
+ if(offset[contents - 1] != '~') {
19674
+ return '.{1}';
19675
+ }
19676
+ return '?';
19677
+ });
19678
+ newCriteria = newCriteria.replace(/~\*/g, '\\*');
19679
+ newCriteria = newCriteria.replace(/~\?/g, '\\?');
19680
+ if (range[i].match(new RegExp('^'+newCriteria+'$'), 'i')) {
19681
+ matches++;
19682
  }
 
 
 
 
 
 
 
19683
  }
19684
  }
19685
  }
 
19686
  return matches;
19687
  };
19688
 
20725
  };
20726
 
20727
  Formula.SUBSTITUTE = function (text, old_text, new_text, occurrence) {
20728
+ if (typeof text === 'undefined' || typeof old_text === 'undefined' || typeof new_text === 'undefined') {
20729
+ return text;
20730
+ } else {
20731
+ old_text = String(old_text);
20732
+ new_text = String(new_text);
20733
+ if (typeof occurrence !== 'undefined') {
20734
+ var index = 0;
20735
+ var i = 0;
20736
+ while (i < text.length && text.indexOf(old_text, index) > 0) {
20737
+ index = text.indexOf(old_text, index + 1);
20738
+ i++;
20739
+ if (i === occurrence && index > 0) {
20740
+ return text.substring(0, index) + new_text + text.substring(index + old_text.length);
20741
+ }
20742
+ }
20743
+ }
20744
+ return text.replace(new RegExp(old_text, 'g'), new_text);
20745
+ }
20746
  };
20747
 
20748
  Formula.T = function (value) {
20750
  };
20751
 
20752
  Formula.TEXT = function (value, format) {
20753
+ if (!value) { return ''; }
20754
+ if (!format) { return value; }
 
20755
 
20756
  if (value instanceof Object) {
20757
  try {
20761
  return '';
20762
  }
20763
  }
 
20764
  if (typeof value === 'string') {
 
20765
  return (format.indexOf('0') >= 0) ? numeral(value).format(format) : moment(new Date(value)).format(format);
20766
  }
20767
+ if (typeof value === 'number') { // number or time in milliseconds since January 1, 1970, 00:00:00 UTC
20768
+ // moment needs time in seconds as it is
20769
+ return (format.indexOf('0') >= 0) ? numeral(value).format(format) : moment(new Date(value*86400*1000)).utc().format(format);
20770
+ }
20771
  if (value.toString && typeof value.toString === 'function') {
20772
  return value.toString();
20773
  }
 
20774
  return '';
20775
  };
20776
 
src/SupsysticTables/Tables/views/notice/review.twig CHANGED
@@ -2,8 +2,8 @@
2
  <h3>Hey, I noticed you just use Tables by Supsystic over a week – that’s awesome!</h3>
3
  <p>Could you please do me a BIG favor and give it a 5-star rating on WordPress? Just to help us spread the word and boost our motivation.</p>
4
  <p>
5
- <a class="button button-primary" href="//wordpress.org/support/view/plugin-reviews/data-tables-generator-by-supsystic?rate=5#postform" target="_blank" data-response-code="hide">Ok, you deserve it</a>
6
- <button class="button" href="#" data-response-code="later">Nope, maybe later</button>
7
- <button class="button" href="#" data-response-code="done">I already did</button>
8
  </p>
9
  </div>
2
  <h3>Hey, I noticed you just use Tables by Supsystic over a week – that’s awesome!</h3>
3
  <p>Could you please do me a BIG favor and give it a 5-star rating on WordPress? Just to help us spread the word and boost our motivation.</p>
4
  <p>
5
+ <a class="button button-primary" href="//wordpress.org/support/view/plugin-reviews/data-tables-generator-by-supsystic?rate=5#postform" target="_blank" data-response-code="hide" data-response-type="stars">Ok, you deserve it</a>
6
+ <button class="button" href="#" data-response-code="later" data-response-type="stars">Nope, maybe later</button>
7
+ <button class="button" href="#" data-response-code="done" data-response-type="stars">I already did</button>
8
  </p>
9
  </div>
src/SupsysticTables/Tables/views/notice/wooAds.twig ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="updated notice supsystic-admin-notice is-dismissible">
2
+ <h3>Hey, You know, now you can use Tables by Supsystic for WooCommerce. That’s awesome!</h3>
3
+ <p>To do this, install Pro version - WooCommerce Product Table.
4
+ This is perfect for online stores and commerce - more info <a href="https://supsystic.com/plugins/woocommerce-product-table/" target="_blank" >here</a>.</p>
5
+ <p>Sure, if you don't need it - just skip and continue enjoy our software!</p>
6
+ <p>
7
+ <a class="button button-primary" href="https://supsystic.com/plugins/woocommerce-product-table/" target="_blank" data-response-code="hide" data-response-type="wooads">Yes, install it</a>
8
+ <button class="button" href="#" data-response-code="later" data-response-type="wooads">Nope, maybe later</button>
9
+ <button class="button" href="#" data-response-code="done" data-response-type="wooads">I already did</button>
10
+ </p>
11
+ </div>
src/SupsysticTables/Tables/views/shortcode.twig CHANGED
@@ -56,7 +56,6 @@
56
  {% else %}
57
  data-order="{{ data | e }}"
58
  {% endif %}
59
-
60
  {% if 'auto_width' not in context.table.settings.features | keys
61
  and (context.table.settings.styling.compact is not defined
62
  or (context.table.settings.styling.compact is defined and context.table.settings.tableWidthType != 'auto'))
@@ -71,7 +70,8 @@
71
  and context.table.meta.columnsWidth[cellIndex] is defined
72
  and context.table.meta.columnsWidth[cellIndex] is not empty
73
  %}
74
- style="min-width: {{ context.table.meta.columnsWidth[cellIndex] }}%; width: {{ context.table.meta.columnsWidth[cellIndex] }}%;"
 
75
  {% else %}
76
  style="width: {{ cell.width }}px"
77
  {% endif %}
@@ -172,6 +172,9 @@
172
  {% endif %}
173
  >
174
  {% block before_table %}{% endblock %}
 
 
 
175
  {% block caption_fixed %}
176
  {% if fixedRowsCols == true and isCaption %}
177
  <div class="supsystic-table-caption">
@@ -198,6 +201,7 @@
198
  data-date-format="{{ table.settings.dateFormat | default('DD.MM.YYYY') }}"
199
  data-time-format="{{ table.settings.timeFormat | default('HH:mm') }}"
200
  data-features="{{ table.settings.features | keys | json_encode | e }}"
 
201
  {% if 'lightboxImg' in table.settings.styling | keys %}
202
  data-lightbox-img="{{ table.settings.styling.lightboxImg }}"
203
  {% endif %}
@@ -279,6 +283,10 @@
279
  {% if tableWidth is defined and tableWidth == 'auto' %}
280
  style="width: {{ tableWidth }};"
281
  {% endif %}
 
 
 
 
282
  >
283
 
284
  {% block caption %}
56
  {% else %}
57
  data-order="{{ data | e }}"
58
  {% endif %}
 
59
  {% if 'auto_width' not in context.table.settings.features | keys
60
  and (context.table.settings.styling.compact is not defined
61
  or (context.table.settings.styling.compact is defined and context.table.settings.tableWidthType != 'auto'))
70
  and context.table.meta.columnsWidth[cellIndex] is defined
71
  and context.table.meta.columnsWidth[cellIndex] is not empty
72
  %}
73
+ {#style="min-width: {{ context.table.meta.columnsWidth[cellIndex] }}%; width: {{ context.table.meta.columnsWidth[cellIndex] }}%;"#}
74
+ style="min-width: {{ context.table.meta.columnsWidth[cellIndex] }}%; "
75
  {% else %}
76
  style="width: {{ cell.width }}px"
77
  {% endif %}
172
  {% endif %}
173
  >
174
  {% block before_table %}{% endblock %}
175
+ {% if table.woo_settings is defined and table.woo_settings.woocommerce.multiple_add_cart =='on' %}
176
+ <div class="stAddMultyWrapper"><button class="button stAddMultyButton stHidden" data-table-id="{{ table.id }}"><span>{{ environment.translate('Add selected to cart') }}</span></button></div>
177
+ {% endif %}
178
  {% block caption_fixed %}
179
  {% if fixedRowsCols == true and isCaption %}
180
  <div class="supsystic-table-caption">
201
  data-date-format="{{ table.settings.dateFormat | default('DD.MM.YYYY') }}"
202
  data-time-format="{{ table.settings.timeFormat | default('HH:mm') }}"
203
  data-features="{{ table.settings.features | keys | json_encode | e }}"
204
+ data-search-value="{{ table.search_value }}"
205
  {% if 'lightboxImg' in table.settings.styling | keys %}
206
  data-lightbox-img="{{ table.settings.styling.lightboxImg }}"
207
  {% endif %}
283
  {% if tableWidth is defined and tableWidth == 'auto' %}
284
  style="width: {{ tableWidth }};"
285
  {% endif %}
286
+
287
+ {% if table.woo_settings is defined and table.woo_settings.woocommerce.multiple_add_cart =='on' %}
288
+ data-multiple-add-cart="{{ table.woo_settings.woocommerce.multiple_add_cart }}"
289
+ {% endif %}
290
  >
291
 
292
  {% block caption %}
src/SupsysticTables/Tables/views/view.twig CHANGED
@@ -32,14 +32,7 @@
32
  </select>
33
  </div>
34
  <div class="col-md-1 col-sm-1 col-xs-2 stbTooltipInfo">
35
- {{ tooltip.icon('
36
- <b>Table Shortcode:</b> lets display the table in the site content.<br /><br />
37
- <b>Table Part Shortcode:</b> lets display just a part of table in the site content.<br /><br />
38
- <b>Value Shortcode:</b> lets display a value of single table cell in the site content.<br /><br />
39
- <b>Cell Shortcode:</b> lets display a table with single cell in the site content.<br /><br />
40
- <b>History Shortcode:</b> lets display an individual table data for each autorized user. Users can change the table data through editable fields on frontend. All user tables can be shown on Table History tab.<br /><br />
41
- <b>Table PHP code:</b> lets display the table through themes/plugins files (for example in the site footer). You can use any shortcode in this way.', 'top', true)
42
- }}
43
  </div>
44
  {% for index, option in shortcodeOptions %}
45
  <div class="col-md-8 col-sm-6 col-xs-10 stbCopyTextCodeShowBlock ShortCodeFirstBlock" data-for="{{ index }}" style="display: none;">
@@ -786,6 +779,36 @@
786
  >
787
  </div>
788
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
789
  <div class="setting-wrapper row searching-options"
790
  {% if table.settings.features.searching is not defined %}
791
  style="display:none"
@@ -932,6 +955,18 @@
932
  <input type="checkbox" disabled="disabled" id="save-editable-fields-unavailable"/>
933
  </div>
934
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
935
  <div class="setting-wrapper row">
936
  <div class="setting-item col-md-6 col-sm-6 col-xs-12">
937
  <label for="editable-fields-logged-in-unavailable">
32
  </select>
33
  </div>
34
  <div class="col-md-1 col-sm-1 col-xs-2 stbTooltipInfo">
35
+ {{ tooltip.icon("<b>Table Shortcode:</b> lets display the table in the site content.<br /><br /><b>Table Part Shortcode:</b> lets display just a part of table in the site content. You can display several rows or cols, for example, 'row=1,2,3', or set diapazone: 'row=1-3' or 'row=1-3,6'.<br /><br /><b>Value Shortcode:</b> lets display a value of single table cell in the site content.<br /><br /><b>Cell Shortcode:</b> lets display a table with single cell in the site content.<br /><br /><b>History Shortcode:</b> lets display an individual table data for each autorized user. Users can change the table data through editable fields on frontend. All user tables can be shown on Table History tab.<br /><br /><b>Table PHP code:</b> lets display the table through themes/plugins files (for example in the site footer). You can use any shortcode in this way.", 'top', true) }}
 
 
 
 
 
 
 
36
  </div>
37
  {% for index, option in shortcodeOptions %}
38
  <div class="col-md-8 col-sm-6 col-xs-10 stbCopyTextCodeShowBlock ShortCodeFirstBlock" data-for="{{ index }}" style="display: none;">
779
  >
780
  </div>
781
  </div>
782
+ <div class="setting-wrapper row searching-options"
783
+ {% if table.settings.features.searching is not defined
784
+ or (table.settings.features.searching is defined and table.settings.searching.columnSearch is not defined)
785
+ %}
786
+ style="display:none"
787
+ {% endif %}
788
+ >
789
+ <div class="setting-item setting-options col-md-6 col-sm-6 col-xs-12">
790
+ <label for="features-search-by-column-position">
791
+ {{ environment.translate('Location of Search Fields') }}
792
+ {{ tooltip.icon(environment.translate('Here you can choose where the column search fields will be: at the top or bottom of the table.')) }}
793
+ </label>
794
+ </div>
795
+ <div class="setting-item col-md-6 col-sm-6 col-xs-12">
796
+ <select name="searching[columnSearchPosition]" id="features-search-by-column-position" >
797
+ {% for value, name in {
798
+ 'bottom': environment.translate('Bottom'),
799
+ 'top': environment.translate('Top'),
800
+ } %}
801
+ <option value="{{ value }}"
802
+ {% if value == table.settings.searching.columnSearchPosition|default('Bottom') %}
803
+ selected="selected"
804
+ {% endif %}
805
+ >
806
+ {{ name }}
807
+ </option>
808
+ {% endfor %}
809
+ </select>
810
+ </div>
811
+ </div>
812
  <div class="setting-wrapper row searching-options"
813
  {% if table.settings.features.searching is not defined %}
814
  style="display:none"
955
  <input type="checkbox" disabled="disabled" id="save-editable-fields-unavailable"/>
956
  </div>
957
  </div>
958
+ <div class="setting-wrapper row">
959
+ <div class="setting-item col-md-6 col-sm-6 col-xs-12">
960
+ <label for="mark-last-edited-cell-unavailable">
961
+ {{ environment.translate('Mark Last Edited Cell') }}
962
+ {{ tooltip.icon(environment.translate('Adds a symbol ✓ to last edited cell.')) }}
963
+ <a target="_blank" class="supsystic-pro-feature" href="{{ build_pro_url({ 'utm_medium': 'mark_last_edited_cell' }) }}">{{ environment.translate('PRO option') }}</a>
964
+ </label>
965
+ </div>
966
+ <div class="setting-item col-md-6 col-sm-6 col-xs-12">
967
+ <input type="checkbox" disabled="disabled" id="mark-last-edited-cell-unavailable"/>
968
+ </div>
969
+ </div>
970
  <div class="setting-wrapper row">
971
  <div class="setting-item col-md-6 col-sm-6 col-xs-12">
972
  <label for="editable-fields-logged-in-unavailable">
src/SupsysticTables/Woocommerce/Module.php ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class SupsysticTables_Diagram_Module
4
+ */
5
+ class SupsysticTables_Woocommerce_Module extends SupsysticTables_Core_BaseModule
6
+ {
7
+ /**
8
+ * {@inheritdoc}
9
+ */
10
+ public function onInit()
11
+ {
12
+ parent::onInit();
13
+
14
+ $this->renderWoocommerceSection();
15
+ }
16
+
17
+ /**
18
+ * Runs the callbacks after the table editor tabs rendered.
19
+ */
20
+ private function renderWoocommerceSection()
21
+ {
22
+ $dispatcher = $this->getEnvironment()->getDispatcher();
23
+
24
+ $dispatcher->on('tabs_rendered', array($this, 'afterTabsRendered'));
25
+ $dispatcher->on('tabs_content_rendered', array($this, 'afterTabsContentRendered'));
26
+ }
27
+
28
+ /**
29
+ * Renders the "Diagrams" tab.
30
+ * @param \stdClass $table Current table
31
+ */
32
+ public function afterTabsRendered()
33
+ {
34
+ $twig = $this->getEnvironment()->getTwig();
35
+ $twig->display('@woocommerce/partials/tab.twig', array());
36
+ }
37
+
38
+ /**
39
+ * Renders the "Diagrams" tab content.
40
+ * @param \stdClass $table Current table
41
+ */
42
+ public function afterTabsContentRendered($table)
43
+ {
44
+ $twig = $this->getEnvironment()->getTwig();
45
+ $dispatcher = $this->getEnvironment()->getDispatcher();
46
+
47
+ $twig->display(
48
+ $dispatcher->apply('woocommerce_tabs_content_template', array('@woocommerce/partials/tabContent.twig')),
49
+ $dispatcher->apply('woocommerce_tabs_content_data', array(array( 'table' => $table)))
50
+ );
51
+ }
52
+
53
+ /**
54
+ * @return \SupsysticTables_Core_ModelsFactory
55
+ */
56
+ protected function getModelsFactory()
57
+ {
58
+ /** @var SupsysticTables_Core_Module $core */
59
+ $core = $this->getEnvironment()->getModule('core');
60
+
61
+ return $core->getModelsFactory();
62
+ }
63
+ }
src/SupsysticTables/Woocommerce/assets/img/wooadsfool.gif ADDED
Binary file
src/SupsysticTables/Woocommerce/assets/img/woocommerce.jpg ADDED
Binary file
src/SupsysticTables/Woocommerce/views/partials/tab.twig ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <li>
2
+ <a href="#row-tab-woocommerce" class="button">
3
+ <i class="fa fa-fw fa-bar-chart"></i>
4
+ {{ environment.translate('Woocommerce') }}
5
+ </a>
6
+ </li>
src/SupsysticTables/Woocommerce/views/partials/tabContent.twig ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="row row-tab" id="row-tab-woocommerce">
2
+ {% block content %}
3
+ <div class="col-xs-12">
4
+ <a href="https://supsystic.com/plugins/woocommerce-product-table/" class="button button-hero" target="_blank">
5
+ {{ environment.translate('Get Woo PRO') }}
6
+ </a>
7
+ <p class="description" style="font-size: 16px;">"WooCommerce" Feature allows you to create flexible, responsive WooCommerce Product Table and gives you full control over the columns properties. </p>
8
+ <p class="description" style="font-size: 16px; margin-bottom: 10px">List your products in any format: price list, order forms, product catalogs & more.</p>
9
+ </div>
10
+ <div class="col-xs-12">
11
+ <a href="https://supsystic.com/plugins/woocommerce-product-table/" target="_blank">
12
+ <img src="{{ environment.getModule('woocommerce').getLocationUrl() }}/assets/img/wooadsfool.gif" alt="Woo ads gig" title="Available in PRO version" style="width: 100%; height: auto;">
13
+ </a>
14
+ </div>
15
+ {% endblock %}
16
+ </div>
vendor/Rsc/Environment.php CHANGED
@@ -251,6 +251,11 @@ class Rsc_Environment
251
  return $this->config->get('is_pro', false);
252
  }
253
 
 
 
 
 
 
254
  /**
255
  * Returns an instance of the Twig
256
  * @return Twig_Environment
251
  return $this->config->get('is_pro', false);
252
  }
253
 
254
+ public function isWooPro()
255
+ {
256
+ return $this->config->get('is_woo_pro', false);
257
+ }
258
+
259
  /**
260
  * Returns an instance of the Twig
261
  * @return Twig_Environment
vendor/Rsc/Mvc/Module.php CHANGED
@@ -239,14 +239,22 @@ class Rsc_Mvc_Module
239
  $path = $this->location;
240
  $module = ucfirst($this->getModuleName());
241
 
242
- if ($this->overloadController) {
243
- $prefix = $config->get('pro_modules_prefix');
244
- $path = $config->get('pro_modules_path')
245
- . '/'
246
- . $prefix
247
- . '/'
248
- . $module;
249
- }
 
 
 
 
 
 
 
 
250
 
251
  $classname = $prefix . '_' . $module . '_Controller';
252
 
239
  $path = $this->location;
240
  $module = ucfirst($this->getModuleName());
241
 
242
+ $filterPathName = 'mvc_module_path_' . $this->environment->getPluginName() . '_' . $prefix;
243
+ $filterPrefixName = 'mvc_module_prefix_' . $this->environment->getPluginName() . '_' . $prefix;
244
+
245
+ if($this->overloadController){
246
+ if(!has_filter($filterPathName) && !has_filter($filterPrefixName)){
247
+ $prefix = $config->get('pro_modules_prefix');
248
+ $path = $config->get('pro_modules_path')
249
+ . '/'
250
+ . $prefix
251
+ . '/'
252
+ . $module;
253
+ }else{
254
+ $prefix = apply_filters($filterPrefixName, $prefix);
255
+ $path = apply_filters($filterPathName, $path);
256
+ }
257
+ }
258
 
259
  $classname = $prefix . '_' . $module . '_Controller';
260
 
vendor/Rsc/Resolver.php CHANGED
@@ -118,18 +118,23 @@ class Rsc_Resolver
118
  try {
119
  $loader = $this->environment->getTwig()->getLoader();
120
  $loader->addPath($instance->getLocation() . '/views', strtolower($name));
121
-
122
  // Add PRO module path to the @namespace.
123
- if ($instance->getOverloadController()) {
124
- $prefix = $config->get('pro_modules_prefix');
125
- $location = $config->get('pro_modules_path')
126
- . DIRECTORY_SEPARATOR
127
- . $prefix
128
- . DIRECTORY_SEPARATOR
129
- . ucfirst($name);
130
-
131
- $loader->addPath($location . '/views', strtolower($name) . '_pro');
132
- }
 
 
 
 
 
 
133
  } catch (Twig_Error_Loader $e) { }
134
 
135
  $configLoader = $config->getLoader();
118
  try {
119
  $loader = $this->environment->getTwig()->getLoader();
120
  $loader->addPath($instance->getLocation() . '/views', strtolower($name));
 
121
  // Add PRO module path to the @namespace.
122
+
123
+ if ($instance->getOverloadController()){
124
+ $actionName = 'resolver_add_path_' . $this->environment->getPluginName() . '_' . $name;
125
+ if(!has_action($actionName)){
126
+ $prefix = $config->get('pro_modules_prefix');
127
+ $location = $config->get('pro_modules_path')
128
+ . DIRECTORY_SEPARATOR
129
+ . $prefix
130
+ . DIRECTORY_SEPARATOR
131
+ . ucfirst($name);
132
+
133
+ $loader->addPath($location . '/views', strtolower($name) . '_pro');
134
+ }else{
135
+ do_action($actionName);
136
+ }
137
+ }
138
  } catch (Twig_Error_Loader $e) { }
139
 
140
  $configLoader = $config->getLoader();