Data Tables Generator by Supsystic - Version 1.8.2

Version Description

/ 20.04.2018 = * Hotfix by compatibility with old pro versions

Download this release

Release Info

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

Code changes from version 1.7.5 to 1.8.2

Files changed (57) hide show
  1. app/SupsysticTables.php +2 -1
  2. app/assets/css/supsystic-ui.css +15 -0
  3. app/assets/js/supsystic.ui.js +12 -0
  4. app/langs/{supsystic_tables-es-ES.mo → supsystic_tables-es_ES.mo} +0 -0
  5. app/langs/{supsystic_tables-es-ES.po → supsystic_tables-es_ES.po} +0 -0
  6. app/langs/supsystic_tables-lv.mo +0 -0
  7. app/langs/supsystic_tables-lv.po +2157 -0
  8. app/templates/404.twig +2 -1
  9. index.php +1 -1
  10. readme.txt +70 -2
  11. src/SupsysticTables/Core/Model/Core.php +12 -8
  12. src/SupsysticTables/Core/Module.php +85 -88
  13. src/SupsysticTables/Core/assets/css/images/sort_asc.png +0 -0
  14. src/SupsysticTables/Core/assets/css/images/sort_asc_disabled.png +0 -0
  15. src/SupsysticTables/Core/assets/css/images/sort_both.png +0 -0
  16. src/SupsysticTables/Core/assets/css/images/sort_desc.png +0 -0
  17. src/SupsysticTables/Core/assets/css/images/sort_desc_disabled.png +0 -0
  18. src/SupsysticTables/Core/assets/css/lib/fixedColumns.dataTables.min.css +1 -0
  19. src/SupsysticTables/Core/assets/css/lib/fixedHeader.dataTables.min.css +1 -0
  20. src/SupsysticTables/Core/assets/css/lib/jquery.dataTables.min.css +1 -0
  21. src/SupsysticTables/Core/assets/css/lib/responsive.dataTables.min.css +1 -0
  22. src/SupsysticTables/Core/assets/js/core.js +1063 -1087
  23. src/SupsysticTables/Core/assets/js/lib/dataTables.customExtensions.js +149 -0
  24. src/SupsysticTables/Core/assets/js/lib/dataTables.fixedColumns.min.js +35 -0
  25. src/SupsysticTables/Core/assets/js/lib/dataTables.fixedHeader.min.js +17 -0
  26. src/SupsysticTables/Core/assets/js/lib/dataTables.responsive.min.js +25 -0
  27. src/SupsysticTables/Core/assets/js/lib/jquery.dataTables.min.js +166 -0
  28. src/SupsysticTables/Core/assets/js/lib/natural.js +114 -0
  29. src/SupsysticTables/Settings/Module.php +3 -2
  30. src/SupsysticTables/Settings/views/index.twig +4 -4
  31. src/SupsysticTables/Tables/Controller.php +4 -7
  32. src/SupsysticTables/Tables/Model/History.php +228 -0
  33. src/SupsysticTables/Tables/Model/Languages.php +100 -146
  34. src/SupsysticTables/Tables/Model/Tables.php +69 -139
  35. src/SupsysticTables/Tables/Module.php +432 -268
  36. src/SupsysticTables/Tables/assets/css/tables.editor.css +94 -16
  37. src/SupsysticTables/Tables/assets/css/tables.shortcode.css +1 -4
  38. src/SupsysticTables/Tables/assets/css/tables.view.css +29 -11
  39. src/SupsysticTables/Tables/assets/img/conditional_formatting_dialog.png +0 -0
  40. src/SupsysticTables/Tables/assets/js/editor/tables.editor.formula.js +1 -1
  41. src/SupsysticTables/Tables/assets/js/editor/tables.editor.js +57 -194
  42. src/SupsysticTables/Tables/assets/js/editor/tables.editor.toolbar.js +20 -14
  43. src/SupsysticTables/Tables/assets/js/tables.model.js +525 -114
  44. src/SupsysticTables/Tables/assets/js/tables.shortcode.js +6 -0
  45. src/SupsysticTables/Tables/assets/js/tables.view.js +61 -313
  46. src/SupsysticTables/Tables/assets/languagesData.php +1502 -0
  47. src/SupsysticTables/Tables/assets/libraries/ruleJS/handsontable.formula.js +276 -100
  48. src/SupsysticTables/Tables/assets/libraries/ruleJS/ruleJS.js +97 -18
  49. src/SupsysticTables/Tables/assets/libraries/ruleJS/ruleJS.lib.full.js +145 -27
  50. src/SupsysticTables/Tables/views/shortcode.twig +219 -197
  51. src/SupsysticTables/Tables/views/view.twig +192 -155
  52. vendor/Rsc/Environment.php +7 -7
  53. vendor/Rsc/Http/Parameters.php +6 -0
  54. vendor/Rsc/Menu/Page.php +4 -4
  55. vendor/Rsc/Mvc/Controller.php +4 -0
  56. vendor/Rsc/Mvc/Module.php +32 -30
  57. vendor/Twig/Extension/Core.php +7 -1
app/SupsysticTables.php CHANGED
@@ -17,7 +17,7 @@ class SupsysticTables
17
  add_action('init', array($this, 'addShortcodeButton'));
18
 
19
  $pluginPath = dirname(dirname(__FILE__));
20
- $environment = new Rsc_Environment('st', '1.7.5', $pluginPath);
21
 
22
  /* Configure */
23
  $environment->configure(
@@ -47,6 +47,7 @@ class SupsysticTables
47
  'shortcode_name' => defined('SUPSYSTIC_TABLES_SHORTCODE_NAME') ? SUPSYSTIC_TABLES_SHORTCODE_NAME : 'supsystic-tables',
48
  'shortcode_value_name' => defined('SUPSYSTIC_TABLES_VALUE_SHORTCODE_NAME') ? SUPSYSTIC_TABLES_VALUE_SHORTCODE_NAME : 'supsystic-tables-cell',
49
  'shortcode_cell_name' => defined('SUPSYSTIC_TABLES_CELL_SHORTCODE_NAME') ? SUPSYSTIC_TABLES_CELL_SHORTCODE_NAME : 'supsystic-tables-cell-full',
 
50
  'db_prefix' => 'supsystic_tbl_',
51
  'hooks_prefix' => 'supsystic_tbl_',
52
  'ajax_url' => admin_url('admin-ajax.php'),
17
  add_action('init', array($this, 'addShortcodeButton'));
18
 
19
  $pluginPath = dirname(dirname(__FILE__));
20
+ $environment = new Rsc_Environment('st', '1.8.2', $pluginPath);
21
 
22
  /* Configure */
23
  $environment->configure(
47
  'shortcode_name' => defined('SUPSYSTIC_TABLES_SHORTCODE_NAME') ? SUPSYSTIC_TABLES_SHORTCODE_NAME : 'supsystic-tables',
48
  'shortcode_value_name' => defined('SUPSYSTIC_TABLES_VALUE_SHORTCODE_NAME') ? SUPSYSTIC_TABLES_VALUE_SHORTCODE_NAME : 'supsystic-tables-cell',
49
  'shortcode_cell_name' => defined('SUPSYSTIC_TABLES_CELL_SHORTCODE_NAME') ? SUPSYSTIC_TABLES_CELL_SHORTCODE_NAME : 'supsystic-tables-cell-full',
50
+ 'shortcode_part_name' => defined('SUPSYSTIC_TABLES_PART_SHORTCODE_NAME') ? SUPSYSTIC_TABLES_PART_SHORTCODE_NAME : 'supsystic-tables-part',
51
  'db_prefix' => 'supsystic_tbl_',
52
  'hooks_prefix' => 'supsystic_tbl_',
53
  'ajax_url' => admin_url('admin-ajax.php'),
app/assets/css/supsystic-ui.css CHANGED
@@ -557,6 +557,21 @@ h3.nav-tab-wrapper {
557
  padding: 0 6px;
558
  }
559
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
560
 
561
  /*sticky items*/
562
 
557
  padding: 0 6px;
558
  }
559
 
560
+ .supsystic-plugin .fa-stack {
561
+ width: 20px;
562
+ height: 20px;
563
+ line-height: inherit;
564
+ }
565
+
566
+ .supsystic-plugin .fa-stack .fa.fa-stack-1x {
567
+ font-size: 13px !important;
568
+ line-height: 20px !important;
569
+ }
570
+
571
+ .supsystic-plugin .fa-stack .fa.fa-stack-2x {
572
+ font-size: 22px !important;
573
+ line-height: 20px !important;
574
+ }
575
 
576
  /*sticky items*/
577
 
app/assets/js/supsystic.ui.js CHANGED
@@ -7,6 +7,18 @@
7
  */
8
  (function ($, window, vendor, undefined) {
9
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  $(document).ready(function () {
11
 
12
  /* Bootstrap Tooltips */
7
  */
8
  (function ($, window, vendor, undefined) {
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
+
22
  $(document).ready(function () {
23
 
24
  /* Bootstrap Tooltips */
app/langs/{supsystic_tables-es-ES.mo → supsystic_tables-es_ES.mo} RENAMED
File without changes
app/langs/{supsystic_tables-es-ES.po → supsystic_tables-es_ES.po} RENAMED
File without changes
app/langs/supsystic_tables-lv.mo ADDED
Binary file
app/langs/supsystic_tables-lv.po ADDED
@@ -0,0 +1,2157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Data Tables Generator by Supsystic\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2018-02-15 14:09+0000\n"
6
+ "PO-Revision-Date: 2018-02-21 17:28+0200\n"
7
+ "Last-Translator: Janis <johnny09@inbox.lv>\n"
8
+ "Language-Team: Latvian\n"
9
+ "Language: lv\n"
10
+ "Plural-Forms: nplurals=3; plural=n % 10 == 1 && n % 100 != 11 ? 0 : n != 0 ? "
11
+ "1 : 2;\n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "X-Generator: Poedit 2.0.5\n"
16
+
17
+ msgid ""
18
+ "\n"
19
+ " You can set the rows and cols from the selected "
20
+ "range, which is need to be removed from diagram.<br /><br />\n"
21
+ " For example: 1r,2c<br /><br />\n"
22
+ " In this case the first row and the second column will "
23
+ "be removed from diagram.<br /><br />\n"
24
+ " Leave this field blank to use all selected rows and "
25
+ "columns."
26
+ msgstr ""
27
+ "\n"
28
+ " Jūs varat iestatīt rindas un kolonnas no izvēlētā "
29
+ "diapazona, kas ir jānoņemamas no diagrammas. <br /> <br />\n"
30
+ " Piemēram: 1r, 2c <br /> <br />\n"
31
+ " Šajā gadījumā pirmā rinda un otrā kolonna tiks "
32
+ "noņemta no diagrammas. <br /> <br />\n"
33
+ " Atstājiet šo lauku tukšu, lai izmantotu visas "
34
+ "atlasītās rindas un kolonnas."
35
+
36
+ msgid "(filtered from _MAX_ total entries)"
37
+ msgstr "(filtered from _MAX_ total entries)"
38
+
39
+ msgid "11x17"
40
+ msgstr "11x17"
41
+
42
+ msgid "2A0"
43
+ msgstr "2A0"
44
+
45
+ msgid "3D Diagram"
46
+ msgstr "3D Diagramma"
47
+
48
+ msgid "4A0"
49
+ msgstr "4A0"
50
+
51
+ msgid "8.5x11"
52
+ msgstr "8.5x11"
53
+
54
+ msgid "8.5x14"
55
+ msgstr "8.5x14"
56
+
57
+ msgid ""
58
+ "<a href=\"//supsystic.com/forum/datatable-plugin/\" target=\"_blank\"> "
59
+ "Contact us </a> through the Forum on our site - if you have some question, "
60
+ "offer or wish."
61
+ msgstr ""
62
+ "<a href=\"//supsystic.com/forum/datatable-plugin/\" target=\"_blank\"> "
63
+ "Sazinieties ar mums </a>, izmantojot forumu mūsu mājas lapā - ja jums rodas "
64
+ "kāds jautājums, droši sazinieties ar mums."
65
+
66
+ msgid ""
67
+ "<b>Upgrading</b> <br>Once you have purchased Premium version of plugin - "
68
+ "you’ll have to enter license key (you can find it in your personal account "
69
+ "on our site). Go to the License tab and enter your email and license key. "
70
+ "Once you have activated your PRO license - you can use all its advanced "
71
+ "options. <br><br>That’s all. From this moment you can use your Data Table "
72
+ "without any doubt. But if you still have some question - do not hesitate to "
73
+ "contact us through our <a href=\"https://supsystic.com/contact-us/"
74
+ "\">internal support</a> or on our <a href=\"http://supsystic.com/forum/"
75
+ "datatable-plugin/\">Supsystic Forum.</a> Besides you can always describe "
76
+ "your questions on <a href=\"https://wordpress.org/support/plugin/data-tables-"
77
+ "generator-by-supsystic\">WordPress Ultimate Forum.</a> <br><br><b>Enjoy this "
78
+ "plugin?</b> <br>It will be nice if you`ll help us and boost plugin with <a "
79
+ "href=\"https://wordpress.org/support/view/plugin-reviews/data-tables-"
80
+ "generator-by-supsystic?rate=5#postform/\">Five Stars rating on WordPress.org."
81
+ "</a> <br><br>We hope that you like our Data Table plugin and wish you all "
82
+ "the best! Good luck!"
83
+ msgstr ""
84
+ "<b> Atjaunot </b> <br> Kad esat iegādājies spraudņa Premium versiju, jums "
85
+ "būs jāievada licences atslēga (to varat atrast savā personīgajā kontā mūsu "
86
+ "mājas lapā). Atveriet cilni Licence un ievadiet savu e-pastu un licences "
87
+ "atslēgu. Tiklīdz esat aktivizējis PRO licenci, jūs varat izmantot visas "
88
+ "papildu iespējas. <br><br> Tas viss. No šī brīža jūs bez šaubām varat "
89
+ "izmantot Data Table. Bet, ja jums joprojām ir kāds jautājums - "
90
+ "nevilcinieties sazināties ar mums, izmantojot mūsu <a href=\"https://"
91
+ "supsystic.com/contact-us/\"> iekšējo atbalstu </a> vai mūsu <a href = "
92
+ "\"http : //supsystic.com/forum/datatable-plugin/ \"> Supsystic forumu. </a> "
93
+ "Bez tam jūs vienmēr varat aprakstīt savus jautājumus <a href =\" https://"
94
+ "wordpress.org/support/plugin/data-tables -generator-by-supsystic \"> "
95
+ "WordPress Ultimate forumā. </a> <br> <br> <b> Izbaudiet šo spraudni? </ b> "
96
+ "<br> Tas būs jauki, ja jūs mums palīdzēsiet un papildināt spraudni ar <a "
97
+ "href=\"https://wordpress.org/support/view/plugin-reviews/data-tables-"
98
+ "generator-by-supsystic?rate=5#postform/\"> piecu zvaigžņu vērtējums vietnē "
99
+ "WordPress.org. </ a > <br> <br> Mēs ceram, ka jums patīk mūsu Data Table "
100
+ "spraudnis un novēlam Jums visu to labāko! Veiksmi!"
101
+
102
+ msgid "A small guide for the first-time user"
103
+ msgstr "Mazs ceļvedis pirmreizējam lietotājam"
104
+
105
+ msgid ""
106
+ "A stacked column chart is a column chart that places related values atop one "
107
+ "another.<br /><br />\n"
108
+ " \"Relative Mode\" formats each value as a fraction "
109
+ "of 1.<br /><br />\n"
110
+ " \"Percent Mode\" formats each value as a percentage "
111
+ "of 100%. "
112
+ msgstr ""
113
+ "Sakrauta kolonnu diagramma ir kolonnu diagramma, kurā saistītās vērtības "
114
+ "pievieno viens otram. <br /> <br />\n"
115
+ " \"Relatīvā režīma\" formāts katrai vērtībai ir kā "
116
+ "daļa no 1. <br /> <br />\n"
117
+ " \"Procentu režīms\" katrai vērtībai veido 100% "
118
+ "procentuālo daļu."
119
+
120
+ msgid "A0"
121
+ msgstr "A0"
122
+
123
+ msgid "A1"
124
+ msgstr "A1"
125
+
126
+ msgid "A10"
127
+ msgstr "A10"
128
+
129
+ msgid "A2"
130
+ msgstr "A2"
131
+
132
+ msgid "A3"
133
+ msgstr "A3"
134
+
135
+ msgid "A4"
136
+ msgstr "A4"
137
+
138
+ msgid "A5"
139
+ msgstr "A5"
140
+
141
+ msgid "A6"
142
+ msgstr "A6"
143
+
144
+ msgid "A7"
145
+ msgstr "A7"
146
+
147
+ msgid "A8"
148
+ msgstr "A8"
149
+
150
+ msgid "A9"
151
+ msgstr "A9"
152
+
153
+ msgid "Above table"
154
+ msgstr "Virs tabulas"
155
+
156
+ msgid "Above the chart"
157
+ msgstr "Virs diagrammas"
158
+
159
+ msgid "Actions"
160
+ msgstr "Darbības"
161
+
162
+ msgid "Activate"
163
+ msgstr "Aktivizēt"
164
+
165
+ msgid "Activate License"
166
+ msgstr "Aktivizēt licenci"
167
+
168
+ msgid ""
169
+ "Actually, Data Table plugin is very simple and has a lot of different "
170
+ "options at the same time. That’s why when you close this article I will show "
171
+ "you the main of them, but the very detailed one you can find on our site. I "
172
+ "hope that you will have no questions after even this small guide. For the "
173
+ "first time we will help you to install and create your first table, but if "
174
+ "you need help - contact us through the internal support"
175
+ msgstr ""
176
+ "Patiesībā Data Table spraudnis ir ļoti vienkāršs un tajā pašā laikā tam ir "
177
+ "daudz un dažādu iespēju. Tāpēc, aizverot šo rakstu, es jums parādīšu galveno "
178
+ "no tiem, bet ļoti detalizēti, kuru varat arī atrast mūsu mājas lapā. Es "
179
+ "ceru, ka pēc šī mazā ceļveža jums nebūs jautājumu. Pirmo reizi mēs "
180
+ "palīdzēsim jums instalēt un izveidot savu pirmo tabulu, bet, ja jums "
181
+ "nepieciešama palīdzība, sazinieties ar mums, izmantojot iekšējo atbalstu"
182
+
183
+ msgid ""
184
+ "Add <a href=\"%s\" target=\"_blank\">editable field</a> for selected cells "
185
+ "to edit cell value on frontend. Enjoy the <a href=\"%s\" target=\"_blank"
186
+ "\">practical example</a>."
187
+ msgstr ""
188
+ "Pievienot izvēlētajām šūnām <a href=\"%s\" target=\"_blank\"> rediģējamo "
189
+ "lauku </a>, lai rediģētu šūnas vērtību priekšpusē. Izbaudiet <a href=\"%s\" "
190
+ "target=\"_blank\"> praktisko piemēru </a>."
191
+
192
+ msgid "Add Fixed Column Width"
193
+ msgstr "Pievienot fiksēto kolonnu platumu"
194
+
195
+ msgid "Add Multiple Sorting"
196
+ msgstr "Pievienot papildus šķirošanu"
197
+
198
+ msgid "Add Option"
199
+ msgstr "Pievienot opciju"
200
+
201
+ msgid "Add automatic highlight for table odd rows"
202
+ msgstr "Pievienojiet automātisko izcelšanu nepāra tabulu rindām"
203
+
204
+ msgid "Add column on the left"
205
+ msgstr "Pievienot kreisajā pusē kolonnu"
206
+
207
+ msgid "Add diagram"
208
+ msgstr "Pievienot diagrammu"
209
+
210
+ msgid ""
211
+ "Add dropdown list for highlighted cell to change cell value on frontend."
212
+ msgstr ""
213
+ "Pievienojiet nolaižamo sarakstu izceltajai šūnai, lai mainītu šūnu vērtību "
214
+ "uz priekšu."
215
+
216
+ msgid "Add editable field"
217
+ msgstr "Pievienot rediģējamu lauku"
218
+
219
+ msgid "Add new table"
220
+ msgstr "Pievienot jaunu tabulu"
221
+
222
+ msgid "Add row above"
223
+ msgstr "Pievienot rindu augšā"
224
+
225
+ msgid "Add table"
226
+ msgstr "Pievienot tabulu"
227
+
228
+ msgid "Align by First Table"
229
+ msgstr "Izlīdzināt ar pirmo tabulu"
230
+
231
+ msgid "Alignment"
232
+ msgstr "Izlīdzinājums"
233
+
234
+ msgid "Allow export table to pdf, csv, xls on frontend"
235
+ msgstr "Atļaut tabulu eksportēšanu pdf, csv, xls uz priekšpusi"
236
+
237
+ msgid ""
238
+ "Allows to <a href=\"%s\" target=\"_blank\">use frontend fields only for "
239
+ "logged in users</a>. See the next buttons on the editor toolbar:<br />\n"
240
+ " Add editable field<br />\n"
241
+ " Add dropdown list"
242
+ msgstr ""
243
+ "Atļaut <a href=\"%s\" target=\"_blank\"> izmantot priekšpuses laukus tikai "
244
+ "reģistrētiem lietotājiem </a>. Skatīties nākamās pogas redaktora rīkjoslā: "
245
+ "<br />\n"
246
+ " Pievienot rediģējamu lauku <br /"
247
+ ">\n"
248
+ " Pievienot nolaižamo sarakstu"
249
+
250
+ msgid ""
251
+ "Allows to <a href=\"%s\" target=\"_blank\">use frontend fields only for "
252
+ "logged in users</a>. See the next buttons on the editor toolbar:<br />\n"
253
+ " Add editable field<br />\n"
254
+ " Add dropdown list"
255
+ msgstr ""
256
+ "Atļaut <a href=\"%s\" target=\"_blank\"> izmantot priekšpuses laukus tikai "
257
+ "reģistrētiem lietotājiem </a>. Skatīties nākamās pogas redaktora rīkjoslā: "
258
+ "<br />\n"
259
+ " Pievienot rediģējamu lauku <br />\n"
260
+ " Pievienot nolaižamo sarakstu"
261
+
262
+ msgid ""
263
+ "Allows to choose language for the table's labels (pagination, search ets.)"
264
+ msgstr ""
265
+ "Atļaut izvēlēties tabulas etiķetes valodu (lappuses, meklēšana un citi.)"
266
+
267
+ msgid "Allows to execute custom javascript code after table is loaded."
268
+ msgstr "Atļaut izpildīt pielāgotu javascript kodu pēc tabulu ielādes."
269
+
270
+ msgid ""
271
+ "Allows to export table in pdf, csv, xls formats from the front-end. Choose "
272
+ "needed formats"
273
+ msgstr ""
274
+ "Atļaut eksportēt tabulu pdf, csv, xls formātā no priekšpuses. Izvēlieties "
275
+ "nepieciešamos formātus"
276
+
277
+ msgid ""
278
+ "Allows to fix columns during table scrolling. Important! The fixing of "
279
+ "columns suggests that the table will have a horisontal scroll type of "
280
+ "responsive mode, otherwise you will not see that the fixed columns exist. So "
281
+ "this feature is a kind of responsive mode on its own and will not work with "
282
+ "such Responsive Modes as Standard and Automatic columns hiding."
283
+ msgstr ""
284
+ "Atļaut iestatīt kolonnas tabulas ritināšanas laikā. Svarīgi! Kolonnu "
285
+ "fiksēšana liecina, ka tabulā būs horizontālā ritināšanas veids jeb jutīgais "
286
+ "režīms, pretējā gadījumā jūs neredzēsiet, ka ir izveidotas fiksētās slejas. "
287
+ "Tātad šī funkcija pati par sevi ir savietojama ar reaģēšanas režīmu un "
288
+ "nedarbosies ar tādiem reaģējošiem režīmiem kā standarta un automātiskās "
289
+ "slejas."
290
+
291
+ msgid ""
292
+ "Allows to fix the table's footer during table scrolling. Important! Footer "
293
+ "option must be enabled for using this feature. Also you need to set Fixed "
294
+ "Table Height to create a vertical scroll at the table. To see the work of "
295
+ "this feature you should not use such Responsive Modes as Standard and "
296
+ "Automatic columns hiding."
297
+ msgstr ""
298
+ "Atļaut salabot tabulas kājeni tabulas ritināšanas laikā. Svarīgi! Lai "
299
+ "izmantotu šo funkciju, ir jābūt aktivizētam kājenes opcijai. Arī jums ir "
300
+ "jāiestata fiksētais tabulas augstums, lai izveidotu vertikālu ritināšanu "
301
+ "tabulā. Lai apskatītu šīs funkcijas darbu, jums nevajadzētu izmantot tādus "
302
+ "atbildīgus režīmus kā slēpšanas standartā un automātiskās slejas."
303
+
304
+ msgid ""
305
+ "Allows to fix the table's header during table scrolling. Important! Header "
306
+ "option must be enabled for using this feature. Also you need to set Fixed "
307
+ "Table Height to create a vertical scroll for your table. To see the work of "
308
+ "this feature you should not use such Responsive Modes such as Standard and "
309
+ "Automatic columns hiding."
310
+ msgstr ""
311
+ "Atļaut salabot tabulas galveni tabulas ritināšanas laikā. Svarīgi! Lai "
312
+ "izmantotu šo funkciju, ir jābūt iespējotai opcijai Galvene jeb Header. Arī "
313
+ "jums jāiestata fiksētais galda augstums, lai izveidotu vertikālu ritināšanu "
314
+ "savai tabulai. Lai redzētu šīs funkcijas darbu, jums nevajadzētu izmantot "
315
+ "tādus reaģējošos režīmus kā standarta un automātiskās slejas."
316
+
317
+ msgid ""
318
+ "Allows to save data to the table through the frontend fields. See the next "
319
+ "buttons on the editor toolbar:<br />\n"
320
+ " Add editable field<br />\n"
321
+ " Add dropdown list"
322
+ msgstr ""
323
+ "Atļaut saglabāt datus pie tabulas, izmantojot priekšpuses laukus. Skatīties "
324
+ "nākamās pogas redaktora rīkjoslā: <br />\n"
325
+ " Pievienot rediģējamu lauku <br /"
326
+ ">\n"
327
+ " Pievienot nolaižamo sarakstu"
328
+
329
+ msgid ""
330
+ "Allows to save data to the table through the frontend fields. See the next "
331
+ "buttons on the editor toolbar:<br />\n"
332
+ " Add editable field<br />\n"
333
+ " Add dropdown list"
334
+ msgstr ""
335
+ "Atļaut saglabāt datus tabulā, izmantojot priekšpuses laukus. Skatīties "
336
+ "nākamās pogas redaktora rīkjoslā: <br />\n"
337
+ " Pievienot rediģējamu lauku <br />\n"
338
+ " Pievienot nolaižamo sarakstu"
339
+
340
+ msgid ""
341
+ "Allows to use editable fields only for users with selected roles. If there "
342
+ "are no chosen roles - all logged in users will have ability to use the "
343
+ "editable fields."
344
+ msgstr ""
345
+ "Atļaut rediģējamos laukus izmantot tikai lietotājiem ar atlasītām lomām. Ja "
346
+ "izvēlētajām lomām nav, visi lietotāji, kuri piesasitīti varēs izmantot "
347
+ "rediģējamos laukus."
348
+
349
+ msgid "An error has occurred"
350
+ msgstr "Ir radusies kļūda"
351
+
352
+ msgid "Append to existing table data"
353
+ msgstr "Pievienot esošajiem tabulas datiem"
354
+
355
+ msgid "Area Chart"
356
+ msgstr "Apgabala diagramma"
357
+
358
+ msgid "Ascending"
359
+ msgstr "Augošā secībā"
360
+
361
+ msgid "Auto Index"
362
+ msgstr "Auto indekss"
363
+
364
+ msgid "Auto Table Width"
365
+ msgstr "Auto tabulas platums"
366
+
367
+ msgid "Autoimport from Google Sheet"
368
+ msgstr "Importēt no Google Sheet"
369
+
370
+ msgid "Automatic"
371
+ msgstr "Automātiska"
372
+
373
+ msgid "Automatic column hiding"
374
+ msgstr "Automātiskās sleja slēpšana"
375
+
376
+ msgid ""
377
+ "Automatic column hiding - in this mode table columns will collapse from "
378
+ "right to left if content does not fit to parent container width"
379
+ msgstr ""
380
+ "Automātiskā slejas slēpšana - šajā režīmā tabulas kolonnas tiks paslēptas no "
381
+ "labās uz kreiso pusi, ja saturs neatbilst noklusējuma konteinera platumam"
382
+
383
+ msgid "Automticaly appends selected logo for output pdf or printing"
384
+ msgstr ""
385
+ "Automātiski pievienot izvēlēto logotipu printējot pdf vai drukājot ko citu"
386
+
387
+ msgid "Axis X Format"
388
+ msgstr "Ass X formāts"
389
+
390
+ msgid "Axis X Title"
391
+ msgstr "Ass X nosaukums"
392
+
393
+ msgid "Axis Y Format"
394
+ msgstr "Ass Y formāts"
395
+
396
+ msgid "Axis Y Title"
397
+ msgstr "Ass Y nosaukums"
398
+
399
+ msgid "B0"
400
+ msgstr "B0"
401
+
402
+ msgid "B1"
403
+ msgstr "B1"
404
+
405
+ msgid "B10"
406
+ msgstr "B10"
407
+
408
+ msgid "B2"
409
+ msgstr "B2"
410
+
411
+ msgid "B3"
412
+ msgstr "B3"
413
+
414
+ msgid "B4"
415
+ msgstr "B4"
416
+
417
+ msgid "B5"
418
+ msgstr "B5"
419
+
420
+ msgid "B6"
421
+ msgstr "B6"
422
+
423
+ msgid "B7"
424
+ msgstr "B7"
425
+
426
+ msgid "B8"
427
+ msgstr "B8"
428
+
429
+ msgid "B9"
430
+ msgstr "B9"
431
+
432
+ msgid "Background color"
433
+ msgstr "Fona krāsa"
434
+
435
+ msgid "Backup Plugin"
436
+ msgstr "Backup Plugin"
437
+
438
+ msgid ""
439
+ "Backup and Restore WordPress Plugin by Supsystic provides quick and "
440
+ "unhitched DropBox, FTP, Amazon S3, Google Drive backup for your WordPress "
441
+ "website."
442
+ msgstr ""
443
+ "Backup and Restore WordPress spraudnis izmantojot Supsystic, nodrošina ātru "
444
+ "DropBox, FTP, Amazon S3, Google diska rezerves kopijas izveidošanu no jūsu "
445
+ "WordPress mājas lapas."
446
+
447
+ msgid "Bar Chart"
448
+ msgstr "Joslu diagramma"
449
+
450
+ msgid ""
451
+ "Be closer to your visitors and customers with Live Chat Support by "
452
+ "Supsystic. Help you visitors, support them in real-time with exceptional "
453
+ "Live Chat WordPress plugin by Supsystic."
454
+ msgstr ""
455
+ "Pārvaldiet savus apmeklētājus un klientus, izmantojot Live Chat Support no "
456
+ "Supsystic. Palīdziet saviem apmeklētājiem reālā laikā palīdzēt izmantojot "
457
+ "Supsystic Live Chat WordPress spraudni."
458
+
459
+ msgid "Begin Step-by-step Tutorial"
460
+ msgstr "Soli pa solim"
461
+
462
+ msgid "Below table"
463
+ msgstr "Zem tabulas"
464
+
465
+ msgid "Below the chart"
466
+ msgstr "Zem diagrammas"
467
+
468
+ msgid "Bold"
469
+ msgstr "Bold"
470
+
471
+ msgid "Borders"
472
+ msgstr "Robežas"
473
+
474
+ msgid "Bubble Chart"
475
+ msgstr "Burbuļu diagramma"
476
+
477
+ msgid "C0"
478
+ msgstr "C0"
479
+
480
+ msgid "C1"
481
+ msgstr "C1"
482
+
483
+ msgid "C10"
484
+ msgstr "C10"
485
+
486
+ msgid "C2"
487
+ msgstr "C2"
488
+
489
+ msgid "C3"
490
+ msgstr "C3"
491
+
492
+ msgid "C4"
493
+ msgstr "C4"
494
+
495
+ msgid "C5"
496
+ msgstr "C5"
497
+
498
+ msgid "C6"
499
+ msgstr "C6"
500
+
501
+ msgid "C7"
502
+ msgstr "C7"
503
+
504
+ msgid "C8"
505
+ msgstr "C8"
506
+
507
+ msgid "C9"
508
+ msgstr "C9"
509
+
510
+ msgid "CSS"
511
+ msgstr "CSS"
512
+
513
+ msgid "CSS Editor"
514
+ msgstr "CSS redaktors"
515
+
516
+ msgid "Can't decode table meta from JSON."
517
+ msgstr "Nevar atšifrēt table meta no JSON."
518
+
519
+ msgid "Can't decode table rows from JSON."
520
+ msgstr "Nevar atšifrēt table rows no JSON."
521
+
522
+ msgid "Caption"
523
+ msgstr "Paraksts"
524
+
525
+ msgid "Catalog #10 1/2 Envelope"
526
+ msgstr "Catalog #10 1/2 Envelope"
527
+
528
+ msgid "Cell"
529
+ msgstr "Šūna"
530
+
531
+ msgid ""
532
+ "Cell - adds border around all four sides of each cell, Row - adds border "
533
+ "only over and under each row. (i.e. only for the rows)."
534
+ msgstr ""
535
+ "Šūna - pievieno robežu ap visām četrām šūnas malām, Rinda - rinda tiek "
536
+ "pievienota tikai un pēc katras rindas. (t.i., tikai rindām)."
537
+
538
+ msgid "Center"
539
+ msgstr "Centrēt"
540
+
541
+ msgid "Check all other FAQs"
542
+ msgstr "Pārbaudiet visus citus bieži uzdotos jautājumus"
543
+
544
+ msgid "Check the result of formula in the table on your site."
545
+ msgstr "Pārbaudiet formulas rezultātu savas vietnes tabulā."
546
+
547
+ msgid "Choose Icon"
548
+ msgstr "Izvēlieties ikonu"
549
+
550
+ msgid "Choose color for loader"
551
+ msgstr "Izvēlieties krāsu iekrāvējam"
552
+
553
+ msgid "Choose icon"
554
+ msgstr "Izvēlieties ikonu"
555
+
556
+ msgid "Choose icon for loader"
557
+ msgstr "Izvēlieties krāsu iekrāvējam"
558
+
559
+ msgid "Choose the orientation for PDF pages"
560
+ msgstr "Izvēlieties PDF lapu orientāciju"
561
+
562
+ msgid "Choose the paper size for PDF pages"
563
+ msgstr "Izvēlieties papīra izmēru PDF lapām"
564
+
565
+ msgid "Clear"
566
+ msgstr "Notīrīt"
567
+
568
+ msgid ""
569
+ "Click on the button “Add new table” and see the first form, which you need "
570
+ "to fill in. A very simple step!"
571
+ msgstr ""
572
+ "Noklikšķiniet uz pogas \"Pievienot jaunu tabulu\" un apskataties pirmo "
573
+ "veidlapu, kas jums jāaizpilda. Ļoti vienkāršs solis!"
574
+
575
+ msgid "Clone"
576
+ msgstr "Duplicēt"
577
+
578
+ msgid "Close Tutorial"
579
+ msgstr "Aizvērt pamācību"
580
+
581
+ msgid "Column Chart"
582
+ msgstr "Kolonna"
583
+
584
+ msgid "Columns"
585
+ msgstr "Kolonnas"
586
+
587
+ msgid "Coming Soon Plugin"
588
+ msgstr "Drīzuma spraudnis"
589
+
590
+ msgid ""
591
+ "Coming soon page with drag-and-drop builder or under construction | "
592
+ "maintenance mode to notify visitors and collects emails."
593
+ msgstr ""
594
+ "Drīzuma mājas lapa ar drag-and-drop builder vai under construction | "
595
+ "maintenance mode, lai informētu apmeklētājus un apkopotu e-pastus."
596
+
597
+ msgid "Comment"
598
+ msgstr "Komentēt"
599
+
600
+ msgid "Commerical #10 Envelope"
601
+ msgstr "Commerical #10 aploksne"
602
+
603
+ msgid "Compact Table"
604
+ msgstr "Kompakta tabula"
605
+
606
+ msgid ""
607
+ "Congratulations! You have successfully installed and activated PRO version "
608
+ "of %s plugin."
609
+ msgstr ""
610
+ "Apsveicam! Jūs esat veiksmīgi instalējis un PRO versija ir aktivizēta %s"
611
+
612
+ msgid ""
613
+ "Congratulations! You have successfully installed and activated PRO version "
614
+ "of ' ~ environment.getMenu().getMenuTitle() ~ ' plugin."
615
+ msgstr ""
616
+ "Apsveicam! Jūs esat veiksmīgi instalējis un PRO versija ir aktivizēta ' ~ "
617
+ "environment.getMenu().getMenuTitle() ~ ' spraudnis."
618
+
619
+ msgid "Contact Form Plugin"
620
+ msgstr "Kontaktformas spraudnis"
621
+
622
+ msgid "Count of Footer Rows"
623
+ msgstr "Kājenes rindu skaits"
624
+
625
+ msgid "Count of Header Rows"
626
+ msgstr "Virsrakstu rindu skaits"
627
+
628
+ msgid "Count of table rows, which will be moved to footer."
629
+ msgstr "Tabulu rindu skaits, kas tiks pārvietots uz kājeni."
630
+
631
+ msgid "Count of table rows, which will be moved to header."
632
+ msgstr "Tabulu rindu skaits, kas tiks pārvietots uz galveni."
633
+
634
+ msgid ""
635
+ "Create and manage beautiful data tables with custom design. No HTML "
636
+ "knowledge is required."
637
+ msgstr ""
638
+ "Izveidojiet un pārvaldiet skaistas datu tabulas ar pielāgotu dizainu. HTML "
639
+ "zināšanas nav nepieciešamas."
640
+
641
+ msgid ""
642
+ "Create online membership community with custom user profiles, roles, "
643
+ "FrontEnd registration and login. Members Directory, activity, groups, "
644
+ "messages."
645
+ msgstr ""
646
+ "Izveidojiet tiešsaistes dalības kopienu ar lietotāja profiliem, lomām, "
647
+ "FrontEnd reģistrāciju un pieteikšanos. Lietotāju katalogs, aktivitāte, "
648
+ "grupas, ziņojumi."
649
+
650
+ msgid "Create your first table"
651
+ msgstr "Izveidojiet savu pirmo tabulu"
652
+
653
+ msgid "Created"
654
+ msgstr "Izveidots"
655
+
656
+ msgid ""
657
+ "Creating slideshows with Slider plugin is fast and easy. Simply select "
658
+ "images from your WordPress Media Library, Flickr, Instagram or Facebook, set "
659
+ "slide captions, links and SEO fields all from one page."
660
+ msgstr ""
661
+ "Slīdrādes izveide ar Slider spraudni ir ātra un vienkārša. Vienkārši "
662
+ "atlasiet attēlus no savas WordPress Media Library, Flickr, Instagram vai "
663
+ "Facebook, no vienas lapas iestatiet slaidu virsrakstus, saites un SEO laukus."
664
+
665
+ msgid "Currency"
666
+ msgstr "Valūta"
667
+
668
+ msgid "Custom Footer"
669
+ msgstr "Pielāgota kājene"
670
+
671
+ msgid "Data Formats"
672
+ msgstr "Datu formāti"
673
+
674
+ msgid "Data Tables Generator"
675
+ msgstr "Datu tabulu ģenerators"
676
+
677
+ msgid "Date"
678
+ msgstr "Datums"
679
+
680
+ msgid "Decrease the amount of whitespace in the table."
681
+ msgstr "Samazināt atstarpes apjomu tabulā."
682
+
683
+ msgid "Default"
684
+ msgstr "Noklusējums"
685
+
686
+ msgid "Delete"
687
+ msgstr "Izdzēst"
688
+
689
+ msgid "Delimiter"
690
+ msgstr "Atdalītājs"
691
+
692
+ msgid "Descending"
693
+ msgstr "Dilstošā secībā"
694
+
695
+ msgid "Description"
696
+ msgstr "Apraksts"
697
+
698
+ msgid "Description Text"
699
+ msgstr "Apraksta teksts"
700
+
701
+ msgid "Design"
702
+ msgstr "Dizains"
703
+
704
+ msgid "Diagram"
705
+ msgstr "Diagramma"
706
+
707
+ msgid "Diagram Title"
708
+ msgstr "Diagrammas virsraksts"
709
+
710
+ msgid "Diagrams"
711
+ msgstr "Diagrammas"
712
+
713
+ msgid ""
714
+ "Diagrams - this is a Pro feature of our plugin, which can help you to follow "
715
+ "the statistics of your table. Several types for every taste and any wishes."
716
+ msgstr ""
717
+ "Diagrammas - šī ir mūsu spraudņa Pro funkcija, kas var palīdzēt jums sekot "
718
+ "jūsu tabulas statistikai. Vairāki veidi katrai gaumei un vēlmēm."
719
+
720
+ msgid "Digital Publication Plugin"
721
+ msgstr "Digitālā publikācijas spraudnis"
722
+
723
+ msgid ""
724
+ "Digital Publication WordPress Plugin by Supsystic for Magazines, Catalogs, "
725
+ "Portfolios. Convert images, posts, PDF to the page flip book."
726
+ msgstr ""
727
+ "Digital Publication WordPress spraudnis ar Supsystic priekšs žurnāliem, "
728
+ "katalogiem, portfolio. Konvertējiet attēlus, ziņas, PDF lapas lappuses "
729
+ "grāmatā."
730
+
731
+ msgid "Disable"
732
+ msgstr "Atspējot"
733
+
734
+ msgid "Disable Responsivity"
735
+ msgstr "Atspējot Responsivity"
736
+
737
+ msgid "Disable Responsivity - default table fluid layout"
738
+ msgstr "Atspējot Responsivity - noklusējuma tabulas sķidrais izkārtojums"
739
+
740
+ msgid "Disable Sorting"
741
+ msgstr "Atspējot šķirošanu"
742
+
743
+ msgid "Disable Wrapping"
744
+ msgstr "Atspējot iesaiņošanu"
745
+
746
+ msgid "Disable indexing table for search bots"
747
+ msgstr "Atspējot meklēšanas robotu indeksēšanas tabulu"
748
+
749
+ msgid ""
750
+ "Disable wrapping of content in the table, so every word in the cells will be "
751
+ "in one single line."
752
+ msgstr ""
753
+ "Atspējot satura ietīšanu tabulā, tāpēc katrs vārds šūnās būt vienā rindā."
754
+
755
+ msgid "Disallow Indexing"
756
+ msgstr "Neatļaut indeksēšanu"
757
+
758
+ msgid ""
759
+ "Display custom Google Maps. Set markers and locations with text, images, "
760
+ "categories and links. Customize google map in a simple and intuitive way."
761
+ msgstr ""
762
+ "Parādīt pielāgotu Google Maps. Iestatīt marķierus un atrašanās vietas ar "
763
+ "tekstu, attēliem, kategorijām un saitēm. Pielāgojiet Google karti vienkāršā "
764
+ "un intuitīvā veidā."
765
+
766
+ msgid "Display only entries with matching characters in the beginning of words"
767
+ msgstr "Parādiet tikai ierakstus ar atbilstošām rakstzīmēm vārdu sākumā"
768
+
769
+ msgid "Edit table \"%s\""
770
+ msgstr "Rediģēt tabulu \"% s\""
771
+
772
+ msgid "Editable fields"
773
+ msgstr "Rediģējamie lauki"
774
+
775
+ msgid "Editor"
776
+ msgstr "Redaktors"
777
+
778
+ msgid "Editor tab"
779
+ msgstr "Cilnes redaktors"
780
+
781
+ msgid "Email"
782
+ msgstr "Epasts"
783
+
784
+ msgid "Empty info text"
785
+ msgstr "Tukšs informācijas teksts"
786
+
787
+ msgid "Empty table"
788
+ msgstr "Tukša tabula"
789
+
790
+ msgid "Enable"
791
+ msgstr "Iespējot"
792
+
793
+ msgid ""
794
+ "Enable / disable table loader icon before table will be completely loaded."
795
+ msgstr ""
796
+ "Iespējot / atspējot tabula ielādes ikonu, pirms tabula tiek pilnībā ielādēta."
797
+
798
+ msgid "Enable Table History"
799
+ msgstr "Iespējot tabulas vēsturi"
800
+
801
+ msgid "Enter the name and create Data Table"
802
+ msgstr "Ievadiet nosaukumu un izveidojiet datu tabulu"
803
+
804
+ msgid "Execute JS Script After Table Is Loaded"
805
+ msgstr "Izpildīt JS skriptu pēc tam, kad tabula ir ielādēta"
806
+
807
+ msgid "Executive"
808
+ msgstr "Izpilddirektors"
809
+
810
+ msgid "Export"
811
+ msgstr "Eksportēt"
812
+
813
+ msgid "Export Data to the File"
814
+ msgstr "Eksportēt datus uz failu"
815
+
816
+ msgid "Export Logo"
817
+ msgstr "Eksporta logotips"
818
+
819
+ msgid "Export Page Orientation"
820
+ msgstr "Eksporta lapas orientācija"
821
+
822
+ msgid "Export Paper Size"
823
+ msgstr "Eksportēt papīra izmēru"
824
+
825
+ msgid "Export available only in PRO version."
826
+ msgstr "Eksports pieejams tikai PRO versijā."
827
+
828
+ msgid "Export label"
829
+ msgstr "Eksportēt etiķeti"
830
+
831
+ msgid "Export table"
832
+ msgstr "Eksportēt tabulu"
833
+
834
+ msgid "Failed to find diagram %s."
835
+ msgstr "Neizdevās atrast diagrammu% s."
836
+
837
+ msgid "Failed to find table %s."
838
+ msgstr "Neizdevās atrast tabulu% s."
839
+
840
+ msgid "Failed to get table rows: %s"
841
+ msgstr "Neizdevās iegūt tabulu rindas:% s"
842
+
843
+ msgid "Failed to import data from the uploaded file"
844
+ msgstr "Neizdevās importēt datus no augšupielādētā faila"
845
+
846
+ msgid "Failed to import selected file"
847
+ msgstr "Neizdevās importēt izvēlēto failu"
848
+
849
+ msgid "Failed to import selected file: Wrong spreadsheet id or url"
850
+ msgstr "Neizdevās importēt atlasīto failu: Nepareizs izklājlapas ID vai URL"
851
+
852
+ msgid "Failed to save table meta data: %s"
853
+ msgstr "Neizdevās saglabāt tabulas metadatus:% s"
854
+
855
+ msgid "Failed to save table rows: %s"
856
+ msgstr "Neizdevās saglabāt tabulas rindas:% s"
857
+
858
+ msgid "Failed to upload selected file"
859
+ msgstr "Neizdevās augšupielādēt izvēlēto failu"
860
+
861
+ msgid "Featured Plugins"
862
+ msgstr "Piedāvātie spraudņi"
863
+
864
+ msgid "Features"
865
+ msgstr "Iespējas"
866
+
867
+ msgid "Feel free to contact us and don’t worry, everything gonna be ok!"
868
+ msgstr "Aicinam sazināties ar mums un neuztraucieties, viss būs kārtībā!"
869
+
870
+ msgid "File Type"
871
+ msgstr "Faila tips"
872
+
873
+ msgid "File extension type"
874
+ msgstr "Faila paplašinājuma tips"
875
+
876
+ msgid "Fill in the rest of the formula."
877
+ msgstr "Aizpildiet pārējo formulu."
878
+
879
+ msgid ""
880
+ "Fill the table title and choose the number of columns and rows. Don’t worry, "
881
+ "you will be able to change it (add or delete some) later!"
882
+ msgstr ""
883
+ "Aizpildiet tabulas nosaukumu un izvēlieties kolonnu un rindu skaitu. "
884
+ "Neuztraucieties, to varēsiet mainīt (pievienot vai dzēst) vēlāk!"
885
+
886
+ msgid "Filtered info text"
887
+ msgstr "Filtrēts informācijas teksts"
888
+
889
+ msgid "Fixed Columns"
890
+ msgstr "Fiksētās slejas"
891
+
892
+ msgid "Fixed Footer"
893
+ msgstr "Fiksēta kājene"
894
+
895
+ msgid "Fixed Header"
896
+ msgstr "Fiksēta galvene"
897
+
898
+ msgid "Fixed Table Height"
899
+ msgstr "Fiksēts tabulas augstums"
900
+
901
+ msgid "Fixed Table Width"
902
+ msgstr "Fiksēts tabulas platums"
903
+
904
+ msgid ""
905
+ "Fixed table height in px. This value must be less than the original table "
906
+ "height to create a vertical scroll, otherwise you will not see that the "
907
+ "fixed header / footer exists."
908
+ msgstr ""
909
+ "Fiksēts tabulas augstums px. Lai izveidotu vertikālu ritināšanu, šai "
910
+ "vērtībai jābūt mazākai par sākotnējo tabulas augstumu, pretējā gadījumā jūs "
911
+ "neredzēsiet, ka pastāv fiksēta galvene / kājene."
912
+
913
+ msgid "Folio"
914
+ msgstr "Folio"
915
+
916
+ msgid "Font Family"
917
+ msgstr "Fontu ģimene"
918
+
919
+ msgid "Font Size"
920
+ msgstr "Fonta izmērs"
921
+
922
+ msgid "Font family changing available only in PRO version."
923
+ msgstr "Fontu nomainīt var tikai PRO versijā."
924
+
925
+ msgid "Footer"
926
+ msgstr "Kājene"
927
+
928
+ msgid ""
929
+ "Formats for cells value. All formats convert cell values to appropriate "
930
+ "format types.\n"
931
+ " <b>Percent with Convert</b> format sets percent "
932
+ "format and convert cells value to percentage by division by 100.\n"
933
+ " "
934
+ msgstr ""
935
+ "Šūnu vērtības formāti. Visi formāti pārveido šūnu vērtības atbilstošiem "
936
+ "formāta veidiem.\n"
937
+ " <b> Procenti ar konvertēšanu </ b> formāts "
938
+ "nosaka procentu formātu un pārveido šūnas vērtību procentos sadalījumā pa "
939
+ "100."
940
+
941
+ msgid "Frequently Asked Questions"
942
+ msgstr "Bieži uzdotie jautājumi"
943
+
944
+ msgid "Frontend Export"
945
+ msgstr "Priekšpuses eksports (Frontend Export)"
946
+
947
+ msgid "Get Browser Language"
948
+ msgstr "Iegūstiet pārlūkprogrammas valodu"
949
+
950
+ msgid "Get PRO"
951
+ msgstr "Iegūt PRO"
952
+
953
+ msgid "Get PRO version"
954
+ msgstr "Iegūt PRO versiju"
955
+
956
+ msgid "Global Table Data Search"
957
+ msgstr "Globālo tabulu datu meklēšana"
958
+
959
+ msgid "Go to Editor of Data Table."
960
+ msgstr "Doties uz datu tabulas redaktoru."
961
+
962
+ msgid "Google Maps Easy"
963
+ msgstr "Google Maps viegli"
964
+
965
+ msgid "Google Spreadsheet Url"
966
+ msgstr "Google Spreadsheet Url"
967
+
968
+ msgid "Header"
969
+ msgstr "Galvene"
970
+
971
+ msgid "Height"
972
+ msgstr "Augstums"
973
+
974
+ msgid "Hello Supsystic Team!"
975
+ msgstr "Sveika Supsystic komanda!"
976
+
977
+ msgid "Hello! This is the Data Tables by Supsystic"
978
+ msgstr "Sveiki! Šis ir Supsystic datu tabulas"
979
+
980
+ msgid "Hide Table Loader"
981
+ msgstr "Slēpt tabulu ielādi"
982
+
983
+ msgid "Hide table by default and show only if search has a result."
984
+ msgstr ""
985
+ "Nerādīt tabulu pēc noklusējuma un rādīt tikai tad, ja meklēšanas rezultāts "
986
+ "ir atrodams."
987
+
988
+ msgid "Highlight the Order Column"
989
+ msgstr "Izcelt pasūtījuma kolonnu"
990
+
991
+ msgid "Highlighting by Mousehover"
992
+ msgstr "Izcelt ar Mousehover"
993
+
994
+ msgid "Horizontal scroll"
995
+ msgstr "Horizontālā ritināšana"
996
+
997
+ msgid ""
998
+ "Horizontal scroll - in this mode scroll bar will be added if table overflows "
999
+ "parent container width"
1000
+ msgstr ""
1001
+ "Horizontālā ritināšana - šajā režīmā ritināšana tiks pievienota, ja tabula "
1002
+ "pārpildīs vecāko konteinera platumu"
1003
+
1004
+ msgid "How to use formulas in the table?"
1005
+ msgstr "Kā izmantot formulas tabulā?"
1006
+
1007
+ msgid ""
1008
+ "I need to have line breaks/spaces between the paragraphs within the cells."
1009
+ msgstr "Man vajag līniju pārtraukumus / atstarpes starp šūnu punktiem."
1010
+
1011
+ msgid ""
1012
+ "If checked - footer will be created from the last table rows. Otherwise - "
1013
+ "footer will be created from header rows."
1014
+ msgstr ""
1015
+ "Ja ir atzīmēts, pēdējās tabulas rindas tiks izveidotas. Pretējā gadījumā - "
1016
+ "kājene tiks izveidota no galvenes rindām."
1017
+
1018
+ msgid ""
1019
+ "If checked - table data on frontend will be overloaded from selected Google "
1020
+ "Sheet. <a href=\"%s\" tagget=\"_blank\">Read more</a> about how organize "
1021
+ "Auto Import form Google Sheets"
1022
+ msgstr ""
1023
+ "Ja izvēlēts - Google lapā tiks pārsniegta pārbaudāmā tabulas informācija. <a "
1024
+ "href=\"%s\" tagget=\"_blank\"> Lasiet vairāk </a> par to, kā organizēt "
1025
+ "automātisko importa veidlapu Google izklājlapas"
1026
+
1027
+ msgid "If checked - table data will be included in the global site search"
1028
+ msgstr ""
1029
+ "Ja izvēlēts - pārbaudītās tabulas dati tiks iekļauti globālajā vietnes "
1030
+ "meklēšanā"
1031
+
1032
+ msgid "If checked - the current sorted column will be highlighted"
1033
+ msgstr "Ja izvēlēts - pašreizējā sakārtotajā slejā tiks iezīmēta"
1034
+
1035
+ msgid ""
1036
+ "If checked - this table will be resized by first supsystic table on page. "
1037
+ "Important! This option makes sense only if table is not on responsive mode "
1038
+ "or responsive mode is disabled. Also if the first table has different count "
1039
+ "of columns or different settings, their sizes may not be equal."
1040
+ msgstr ""
1041
+ "Ja izvēlēts - šī tabula tiks mainīta, izmantojot pirmo tabulas sākumu lapā. "
1042
+ "Svarīgi! Šī opcija ir pielietojama tikai tad, ja tabulā nav reaģējoša režīma "
1043
+ "vai reaģējošais režīms ir atspējots. Arī tad, ja pirmajā tabulā ir atšķirīgs "
1044
+ "kolonnu vai dažādu iestatījumu skaits, to izmēri var nebūt vienādi."
1045
+
1046
+ msgid ""
1047
+ "If checked - width of table columns will be calculated automatically for "
1048
+ "table width 100%.<br /><br />\n"
1049
+ " Otherwise - you can set "
1050
+ "table width manually: columns width will be get from Fixed Table Width "
1051
+ "option\n"
1052
+ " (toolbar on Editor tab) or "
1053
+ "calculated depending on the columns width in the table editor.<br /><br />\n"
1054
+ " If you do not want to apply "
1055
+ "columns width at all - you should uncheck \"Auto Table Width\" option, set "
1056
+ "\"Fixed Table Width\"\n"
1057
+ " option to \"auto\" and check "
1058
+ "\"Compact Table\" option."
1059
+ msgstr ""
1060
+ "Ja tas ir atzīmēts, tabulas kolonnu platums tiks automātiski aprēķināts pēc "
1061
+ "tabulas platuma 100%. <br /> <br />\n"
1062
+ " Pretējā gadījumā galda platumu varat "
1063
+ "iestatīt manuāli: kolonnu platums būs no fiksētā gala platuma opcijas\n"
1064
+ " (rīkjosla cilnē Rediģēt) vai aprēķina "
1065
+ "pēc sleju platuma tabulas redaktorā. <br /> <br />\n"
1066
+ " Ja nevēlaties vispār pielietot kolonnu "
1067
+ "platumu - jums vajadzētu noņemt atzīmi no opcijas \"Auto tabulas platums\", "
1068
+ "iestatiet \"Fiksēto tabulu platums\"\n"
1069
+ " opcija \"auto\" un pārbaudiet opciju "
1070
+ "\"Compact Table\"."
1071
+
1072
+ msgid ""
1073
+ "If multiple sorting for columns is not set - the table will be sorted in the "
1074
+ "specified order by the column set in the table settings: Settings-> Features-"
1075
+ "> Sorting Order / Sorting Column. Otherwise - table will be sorted by the "
1076
+ "specified custom columns in sequense, in which they are listed."
1077
+ msgstr ""
1078
+ "Ja ir iestatīta vairāku kolonnu šķirošana - tabula tiks sakārtota norādītajā "
1079
+ "secībā pēc tabulas iestatījumos norādītās kolonnas: Iestatījumi-> Funkcijas-"
1080
+ "> Kārtošanas secības / šķirošanas kolonna. Pretējā gadījumā tabula tiks "
1081
+ "sakārtota pēc norādītajām pielāgotajām slejām secībā, kurā tie ir uzskaitīti."
1082
+
1083
+ msgid ""
1084
+ "If you use some specific characters (greek, cyrillic etc.) it is better to "
1085
+ "check this box for PDF export."
1086
+ msgstr ""
1087
+ "Ja izmantojat dažas īpašas rakstzīmes (grieķu, cyrillic uc), labāk ir "
1088
+ "atzīmēt šo lodziņu PDF eksportam."
1089
+
1090
+ msgid ""
1091
+ "If, unfortunately, you have some problem - we are ready to help you in our "
1092
+ "<a href=\"//supsystic.com/contact-us/\" target=\"_blank\">internal support.</"
1093
+ "a>"
1094
+ msgstr ""
1095
+ "Ja jums, diemžēl, ir kāda problēma - mēs esam gatavi jums palīdzēt mūsu <a "
1096
+ "href=\"//supsystic.com/contact-us/\" target=\"_blank\"> iekšējā atbalstā </"
1097
+ "a>."
1098
+
1099
+ msgid "Import"
1100
+ msgstr "Importēt"
1101
+
1102
+ msgid "Import Data to the Table"
1103
+ msgstr "Importēt datus uz tabulu"
1104
+
1105
+ msgid "Import Settings"
1106
+ msgstr "Importēšanas iestatījumi"
1107
+
1108
+ msgid "Import available only in PRO version."
1109
+ msgstr "Importēšana ir pieejama tikai PRO versijā."
1110
+
1111
+ msgid "Import error"
1112
+ msgstr "Importēšanas kļūda"
1113
+
1114
+ msgid "Import settings"
1115
+ msgstr "Importēšanas iestatījumi"
1116
+
1117
+ msgid "Import to the table"
1118
+ msgstr "Importēt tabulā"
1119
+
1120
+ msgid "Import/Export"
1121
+ msgstr "Importēt/eksportēt"
1122
+
1123
+ msgid ""
1124
+ "Important! Please, check the sharing settings of your spreadsheet: it must "
1125
+ "be accessed to edit for everyone who has link. In other case the data will "
1126
+ "not import to table."
1127
+ msgstr ""
1128
+ "Svarīgi! Lūdzu, pārbaudiet savas izklājlapas kopīgošanas iestatījumus: tai "
1129
+ "ir jābūt pieejamai rediģēšanai visiem, kam ir saite / links. Citos gadījumos "
1130
+ "dati netiks importēti tabulā."
1131
+
1132
+ msgid ""
1133
+ "In case you have special or at least, basic knowledge of CSS code - you can "
1134
+ "easily change the table here. Just make sure that you know, what you are "
1135
+ "doing and you will not destroy the table."
1136
+ msgstr ""
1137
+ "Gadījumā, ja jums ir īpašas vai vismaz pamatzināšanas par CSS kodu, šeit "
1138
+ "varat viegli mainīt tabulu. Vienkārši pārliecinieties, ka jūs zināt, ko jūs "
1139
+ "darāt, un jūs neiznīcināsiet savu tabulu."
1140
+
1141
+ msgid "Insert Link"
1142
+ msgstr "Ievietojiet saiti"
1143
+
1144
+ msgid "Insert link"
1145
+ msgstr "Ievietojiet saiti"
1146
+
1147
+ msgid "Insert picture"
1148
+ msgstr "Ievietojiet attēlu"
1149
+
1150
+ msgid "Inside by the top left corner"
1151
+ msgstr "Iekšpusē augšējā kreisajā stūrī"
1152
+
1153
+ msgid "Invalid range specified."
1154
+ msgstr "Nederīgs diapazons."
1155
+
1156
+ msgid "Italic"
1157
+ msgstr "Italic"
1158
+
1159
+ msgid ""
1160
+ "It’s never been so easy to create and manage pricing and comparison tables "
1161
+ "with table builder. Any element of the table can be customise with mouse "
1162
+ "click."
1163
+ msgstr ""
1164
+ "Nekad nav bijis tik viegli izveidot un pārvaldīt cenu no salīdzināšanas "
1165
+ "tabulas ar tabulas veidotāju. Jebkurus tabulas elementus var pielāgot ar "
1166
+ "peles klikšķi."
1167
+
1168
+ msgid "Landscape"
1169
+ msgstr "Ainava"
1170
+
1171
+ msgid "Language"
1172
+ msgstr "Valoda"
1173
+
1174
+ msgid "Language and Text"
1175
+ msgstr "Valoda un teksts"
1176
+
1177
+ msgid "Large"
1178
+ msgstr "Liels"
1179
+
1180
+ msgid ""
1181
+ "Learn more about how to do this <a href=\"//supsystic.com/how-to-use-tables/"
1182
+ "\" target=\"_blank\">here</a>."
1183
+ msgstr ""
1184
+ "Uzziniet vairāk par to, kā to izdarīt <a href=\"//supsystic.com/how-to-use-"
1185
+ "tables/\" target=\"_blank\"> šeit </a>."
1186
+
1187
+ msgid "Ledger"
1188
+ msgstr "Ledger"
1189
+
1190
+ msgid "Left"
1191
+ msgstr "Pa kreisi"
1192
+
1193
+ msgid "Left Columns Count"
1194
+ msgstr "Kreisā kolonnas skaits"
1195
+
1196
+ msgid "Left of the chart"
1197
+ msgstr "Pa kreisi no diagrammas"
1198
+
1199
+ msgid "Legal"
1200
+ msgstr "Juridiski"
1201
+
1202
+ msgid "Legend Position"
1203
+ msgstr "Leģendāra pozīcija"
1204
+
1205
+ msgid "Length text"
1206
+ msgstr "Garuma teksts"
1207
+
1208
+ msgid "Let's Start!"
1209
+ msgstr "Sāksim!"
1210
+
1211
+ msgid ""
1212
+ "Lets make search by fields, marked as hidden (see appropriate button on "
1213
+ "editor toolbar)"
1214
+ msgstr ""
1215
+ "Ļauj veikt meklēšanu pēc laukiem, kuri atzīmēti kā slēpti (skatīt atbilstošo "
1216
+ "pogu redaktora rīkjoslā)."
1217
+
1218
+ msgid "Letter"
1219
+ msgstr "Vēstule"
1220
+
1221
+ msgid "License"
1222
+ msgstr "Licence"
1223
+
1224
+ msgid "Line Chart"
1225
+ msgstr "Līnijas diagramma"
1226
+
1227
+ msgid "Lines between slices and values"
1228
+ msgstr "Rindas starp šķēlītēm un vērtībām"
1229
+
1230
+ msgid "Link Text"
1231
+ msgstr "Saites teksts"
1232
+
1233
+ msgid "Link from Google Tables"
1234
+ msgstr "Saite no Google tabulām"
1235
+
1236
+ msgid "List of columns for multiple sorting"
1237
+ msgstr "Kolonu saraksts priekšs šķirošanas"
1238
+
1239
+ msgid "List of columns, disabled from manual sorting"
1240
+ msgstr "Sleju saraksts, kas atspējo no manuālas šķirošanas"
1241
+
1242
+ msgid "List of width sizes, set for table columns:"
1243
+ msgstr "Platuma izmēru saraksts priekšs kolonu tabulām:"
1244
+
1245
+ msgid "Live Chat Plugin"
1246
+ msgstr "Live Chat spraudnis"
1247
+
1248
+ msgid "Loading your table, please wait..."
1249
+ msgstr "Augšupielādējam tabulu, lūdzu uzgaidiet ..."
1250
+
1251
+ msgid "Logo Alignment"
1252
+ msgstr "Logo pielīdzināšana"
1253
+
1254
+ msgid "Logo Position"
1255
+ msgstr "Logo Pozīcija"
1256
+
1257
+ msgid "Long Number"
1258
+ msgstr "Garšs numurs"
1259
+
1260
+ msgid "Main"
1261
+ msgstr "Galvenais"
1262
+
1263
+ msgid ""
1264
+ "Main Settings of your first table. Here you can see main settings which are "
1265
+ "conected with languages, table elements, styling and other different editors "
1266
+ "settings. Generally it’s a tab where you can edit the visual part of the "
1267
+ "whole table, switch on/off the responsive mode, set pagination etc."
1268
+ msgstr ""
1269
+ "Jūsu pirmās tabulas galvenie iestatījumi. Šeit varat redzēt galvenos "
1270
+ "iestatījumus, kas ir savienoti ar valodām, tabulas elementiem, stilu un "
1271
+ "citiem dažādiem redaktoru iestatījumiem. Parasti tā ir cilne, kurā varat "
1272
+ "rediģēt visu tabulas vizuālo daļu, ieslēgt / izslēgt reaģējošo režīmu, "
1273
+ "iestatīt \"pagnation\" utt."
1274
+
1275
+ msgid "Make data table responsive"
1276
+ msgstr "Datu tabulas pielāgošana"
1277
+
1278
+ msgid ""
1279
+ "Mandatory attribute \"id\" is not specified. ' . 'Shortcode usage example: "
1280
+ "[%s id=\"{table_id}\"]"
1281
+ msgstr ""
1282
+ "Obligātais atribūts \"id\" nav norādīts. \" 'Īstermiņa kodēšanas lietojuma "
1283
+ "piemērs: [%s id = \"{table_id}\"]"
1284
+
1285
+ msgid ""
1286
+ "Mark selected cells as hidden and remove them from frontend. Can be useful "
1287
+ "for placing information in the table for admins only. <br /><br />Importanr! "
1288
+ "To display the table correctly, please, add this property for the whole row "
1289
+ "or the whole column of table."
1290
+ msgstr ""
1291
+ "Atzīmējiet atlasītās šūnas kā slēptas un noņemiet tās no pārlūka. Var būt "
1292
+ "lietderīgi izvietot informāciju tabulā tikai administratoriem. <br /> <br /> "
1293
+ "Svarīgi! Lai pareizi parādītu tabulu, lūdzu, pievienojiet šo īpašumu visai "
1294
+ "rindai vai visai tabulas slejai."
1295
+
1296
+ msgid ""
1297
+ "Mark selected cells as invisible and hide them on frontend. Can be useful "
1298
+ "for placing intermediate calculations. <br /><br />To display the table "
1299
+ "correctly, please, add this property for the whole row or the whole column "
1300
+ "of table."
1301
+ msgstr ""
1302
+ "Atzīmējiet atlasītās šūnas kā neredzamas un paslēpiet tās no ārpasaules. Var "
1303
+ "būt noderīgi, lai veiktu starpprognozējumus. <br /> <br /> Lai pareizi "
1304
+ "parādītu tabulu, lūdzu, pievienojiet šo īpašumu visai rindai vai visai "
1305
+ "tabulas slejai."
1306
+
1307
+ msgid "Medium"
1308
+ msgstr "Vidējs"
1309
+
1310
+ msgid "Membership by Supsystic"
1311
+ msgstr "Dalība ar Supsystic"
1312
+
1313
+ msgid "Message"
1314
+ msgstr "Ziņa"
1315
+
1316
+ msgid "Minimum Count of Characters"
1317
+ msgstr "Minimālais simbolu skaits"
1318
+
1319
+ msgid "Name"
1320
+ msgstr "Vārds"
1321
+
1322
+ msgid "Name of Cloned Table"
1323
+ msgstr "Klonētas tabulas nosaukums"
1324
+
1325
+ msgid "Name of slice"
1326
+ msgstr "Šķēles nosaukums"
1327
+
1328
+ msgid "Newsletter Plugin"
1329
+ msgstr "Informatīvā izdevuma spraudnis"
1330
+
1331
+ msgid "Next"
1332
+ msgstr "Nākamais"
1333
+
1334
+ msgid "No"
1335
+ msgstr "Nē"
1336
+
1337
+ msgid "No data available in table"
1338
+ msgstr "Tabulā nav pieejami dati"
1339
+
1340
+ msgid "No detected"
1341
+ msgstr "Nav konstatēts"
1342
+
1343
+ msgid "No legend"
1344
+ msgstr "Nav leģendu"
1345
+
1346
+ msgid "No matching records are found"
1347
+ msgstr "Nav atbilstošu ierakstu"
1348
+
1349
+ msgid "No value"
1350
+ msgstr "Nav vērtības"
1351
+
1352
+ msgid "None"
1353
+ msgstr "Nav"
1354
+
1355
+ msgid "Not displaying"
1356
+ msgstr "Nav redzams"
1357
+
1358
+ msgid ""
1359
+ "Note that the table may look a little different depending on your theme "
1360
+ "style."
1361
+ msgstr ""
1362
+ "Ņemiet vērā, ka tabula var nedaudz atšķirties atkarībā no jūsu motīvu stila."
1363
+
1364
+ msgid "Number"
1365
+ msgstr "Numurs"
1366
+
1367
+ msgid "Number Formatting"
1368
+ msgstr "Numuru formatēšana"
1369
+
1370
+ msgid ""
1371
+ "Number of column to apply sort order. Set no value to disable table sorting "
1372
+ "by default."
1373
+ msgstr ""
1374
+ "Kolonnas numurs, lai izmantotu šķirošanas secību. Noklikšķiniet uz vērtības, "
1375
+ "lai pēc noklusējuma atspējotu tabulu šķirošanu."
1376
+
1377
+ msgid "Number of column to fix by left side of the table."
1378
+ msgstr "Kolonnas numurs, kas jānostiprina ar galda kreiso pusi."
1379
+
1380
+ msgid "Number of column to fix by right side of the table."
1381
+ msgstr "Kolonnas numurs, kas jālabo tabulas labajā pusē."
1382
+
1383
+ msgid "Offset Bottom"
1384
+ msgstr "Nobīdīt apakšā"
1385
+
1386
+ msgid "Offset Left"
1387
+ msgstr "Nobīdīt pa kreisi"
1388
+
1389
+ msgid "Offset Right"
1390
+ msgstr "Nobīdīt pa labi"
1391
+
1392
+ msgid "Offset Top"
1393
+ msgstr "Nobīdīt augšā"
1394
+
1395
+ msgid "Offset for axes' area by bottom."
1396
+ msgstr "Asu platuma nobīde no apakšas."
1397
+
1398
+ msgid "Offset for axes' area by left."
1399
+ msgstr "Kreisās ass platums."
1400
+
1401
+ msgid "Offset for axes' area by right."
1402
+ msgstr "Asu platuma nobīde pa labi."
1403
+
1404
+ msgid "Offset for axes' area by top."
1405
+ msgstr "Asu platuma nobīde no augšas."
1406
+
1407
+ msgid ""
1408
+ "One of the best plugin for creating Contact Forms on your WordPress site. "
1409
+ "Changeable fonts, backgrounds, an option for adding fields etc."
1410
+ msgstr ""
1411
+ "Viens no labākajiem spraudņiem veidojot kontaktu formas WordPress vietnē. "
1412
+ "Maināmi fonti, foni un iespēja pievienot jaunus laukus utt."
1413
+
1414
+ msgid "Open in new tab"
1415
+ msgstr "Atvērt jaunā cilnē"
1416
+
1417
+ msgid "Other"
1418
+ msgstr "Cits"
1419
+
1420
+ msgid "Overview"
1421
+ msgstr "Pārskats"
1422
+
1423
+ msgid "Overwrite Table Text"
1424
+ msgstr "Pārrakstīt tabulas tekstu"
1425
+
1426
+ msgid "PHP"
1427
+ msgstr "PHP"
1428
+
1429
+ msgid "PRO option"
1430
+ msgstr "PRO opcija"
1431
+
1432
+ msgid "PRO version"
1433
+ msgstr "PRO versija"
1434
+
1435
+ msgid "Pagination"
1436
+ msgstr "Paginācija"
1437
+
1438
+ msgid "Pagination List Content"
1439
+ msgstr "Pagināciju saraksta saturs"
1440
+
1441
+ msgid "Pagination Size"
1442
+ msgstr "Paginācijas izmērs"
1443
+
1444
+ msgid "Paragraph Mode"
1445
+ msgstr "Punkta režīms"
1446
+
1447
+ msgid "Paste script code here"
1448
+ msgstr "Ielīmējiet skripta kodu šeit"
1449
+
1450
+ msgid "Percent"
1451
+ msgstr "Procenti"
1452
+
1453
+ msgid "Percent Mode"
1454
+ msgstr "Procentu režīms"
1455
+
1456
+ msgid "Percent with Convert"
1457
+ msgstr "Procentuālā vērtība ar konvertēšanu"
1458
+
1459
+ msgid "Percentage of slice size out of total"
1460
+ msgstr "No kopējā izgriezuma lieluma procentuālā daļa"
1461
+
1462
+ msgid "Photo Gallery Plugin"
1463
+ msgstr "Foto galerijas spraudnis"
1464
+
1465
+ msgid ""
1466
+ "Photo Gallery Plugin with a great number of layouts will help you to create "
1467
+ "quality respectable portfolios and image galleries."
1468
+ msgstr ""
1469
+ "Foto galerijas spraudnis ar lielu izkārtojumu skaitu palīdzēs jums izveidot "
1470
+ "kvalitatīvus respektablus portfolio un attēlu galerijas."
1471
+
1472
+ msgid "Pie Chart"
1473
+ msgstr "Pie diagramma"
1474
+
1475
+ msgid "Plain"
1476
+ msgstr "Plain"
1477
+
1478
+ msgid ""
1479
+ "Please be advised that this option is available only in %s. You can %s today "
1480
+ "and get this and other PRO option for your tables!"
1481
+ msgstr ""
1482
+ "Lūdzu, ņemiet vērā, ka šī opcija ir pieejama tikai %s. Jūs varat %s šodien "
1483
+ "un iegūt šo un citu PRO opciju jūsu tabulām!"
1484
+
1485
+ msgid "Plugin options"
1486
+ msgstr "Plugin iespējas"
1487
+
1488
+ msgid "Popup Plugin"
1489
+ msgstr "Uznirstošais spraudnis"
1490
+
1491
+ msgid "Portrait"
1492
+ msgstr "Portrets"
1493
+
1494
+ msgid "Preview"
1495
+ msgstr "Priekšskatījums"
1496
+
1497
+ msgid ""
1498
+ "Preview insert for your comfort. Before updating the table on your page - "
1499
+ "you can see the result of your efforts and changes, look at it and enjoy the "
1500
+ "final outcome."
1501
+ msgstr ""
1502
+ "Priekšskatījuma ievietošana jūsu ērtībai. Pirms atjaunināt tabulas lapu - "
1503
+ "jūs varat redzēt savu centienu un izmaiņu rezultātu, apskatīt to un baudīt "
1504
+ "gala rezultātu."
1505
+
1506
+ msgid "Pricing Table"
1507
+ msgstr "Cenu tabula"
1508
+
1509
+ msgid "Quantitative value of slice"
1510
+ msgstr "Šķēles kvantitatīvā vērtība"
1511
+
1512
+ msgid "RA0"
1513
+ msgstr "RA0"
1514
+
1515
+ msgid "RA1"
1516
+ msgstr "RA1"
1517
+
1518
+ msgid "RA2"
1519
+ msgstr "RA2"
1520
+
1521
+ msgid "RA3"
1522
+ msgstr "RA3"
1523
+
1524
+ msgid "RA4"
1525
+ msgstr "RA4"
1526
+
1527
+ msgid "Redo"
1528
+ msgstr "Atkārtoti"
1529
+
1530
+ msgid "Relative Mode"
1531
+ msgstr "Relatīvais režīms"
1532
+
1533
+ msgid "Remove"
1534
+ msgstr "Noņemt"
1535
+
1536
+ msgid "Remove Data"
1537
+ msgstr "Noņemt datus"
1538
+
1539
+ msgid "Remove Logo"
1540
+ msgstr "Noņemt logotipu"
1541
+
1542
+ msgid "Renew License"
1543
+ msgstr "Atjaunot licenci"
1544
+
1545
+ msgid "Report a bug"
1546
+ msgstr "Ziņot par kļūdu"
1547
+
1548
+ msgid "Require a new functionallity"
1549
+ msgstr "Nepieciešama jauna funkcija"
1550
+
1551
+ msgid "Responsive Mode"
1552
+ msgstr "Atbildīgs režīms"
1553
+
1554
+ msgid "Right"
1555
+ msgstr "Pa labi"
1556
+
1557
+ msgid "Right Columns Count"
1558
+ msgstr "Labo kolonnu skaits"
1559
+
1560
+ msgid "Right of the chart"
1561
+ msgstr "Diagrammas tiesības"
1562
+
1563
+ msgid "Role for users who can use plugin. Administrator is included by default"
1564
+ msgstr ""
1565
+ "Loma lietotājiem, kuri var izmantot spraudni. Administrators ir iekļauts pēc "
1566
+ "noklusējuma"
1567
+
1568
+ msgid "Roles"
1569
+ msgstr "Lomas"
1570
+
1571
+ msgid "Row"
1572
+ msgstr "Rinda"
1573
+
1574
+ msgid "Row Striping"
1575
+ msgstr "Rindu virskārta"
1576
+
1577
+ msgid "Row highlighting by mouse hover."
1578
+ msgstr "Rindas izcelšana ar peles kursoru."
1579
+
1580
+ msgid "Rows"
1581
+ msgstr "Rindas"
1582
+
1583
+ msgid "Rows Count per Request"
1584
+ msgstr "Rindu skaits uz pieprasījumu"
1585
+
1586
+ msgid "SRA0"
1587
+ msgstr "SRA0"
1588
+
1589
+ msgid "SRA1"
1590
+ msgstr "SRA1"
1591
+
1592
+ msgid "SRA2"
1593
+ msgstr "SRA2"
1594
+
1595
+ msgid "SRA3"
1596
+ msgstr "SRA3"
1597
+
1598
+ msgid "SRA4"
1599
+ msgstr "SRA4"
1600
+
1601
+ msgid "Save"
1602
+ msgstr "Saglabāt"
1603
+
1604
+ msgid "Save Frontend Fields"
1605
+ msgstr "Saglabāt priekšpusē laukus"
1606
+
1607
+ msgid "Save as"
1608
+ msgstr "Saglabāt"
1609
+
1610
+ msgid "Save the changes of table."
1611
+ msgstr "Saglabāt tabulas izmaiņas."
1612
+
1613
+ msgid "Scientific"
1614
+ msgstr "Zinātniskais"
1615
+
1616
+ msgid "Search by Hidden Fields"
1617
+ msgstr "Meklēt pēc slēptiem laukiem"
1618
+
1619
+ msgid "Search label"
1620
+ msgstr "Meklēšanas etiķete"
1621
+
1622
+ msgid "Search:"
1623
+ msgstr "Meklēt:"
1624
+
1625
+ msgid "Searching"
1626
+ msgstr "Meklēšana"
1627
+
1628
+ msgid "Select Logo"
1629
+ msgstr "Izvēlieties Logo"
1630
+
1631
+ msgid "Select User to display its table"
1632
+ msgstr "Atlasiet lietotāju, lai parādītu tā tabulu"
1633
+
1634
+ msgid ""
1635
+ "Select a cell and start typing. In a cell, type an equal sign “=” to start "
1636
+ "the formula."
1637
+ msgstr ""
1638
+ "Izvēlieties šūnu un sāciet rakstīt. Šūnā ierakstiet vienādības zīmi \"=\", "
1639
+ "lai uzsāktu formulu."
1640
+
1641
+ msgid "Select alignment of table logotype"
1642
+ msgstr "Atlasiet tabulas logotipa pielīdzināšanu"
1643
+
1644
+ msgid "Select avalilable roles to use tables"
1645
+ msgstr "Izvēlieties publiski pieejamās lomas, lai izmantotu tabulas"
1646
+
1647
+ msgid "Select chart type"
1648
+ msgstr "Atlasīt diagrammas veidu"
1649
+
1650
+ msgid "Select file type to export table:"
1651
+ msgstr "Atlasīt faila tipu tabulas eksportēšanai:"
1652
+
1653
+ msgid "Select position of table logotype"
1654
+ msgstr "Atlasiet tabulas logotipa pozīciju"
1655
+
1656
+ msgid "Select roles"
1657
+ msgstr "Atlasiet lomas"
1658
+
1659
+ msgid "Selectable fields"
1660
+ msgstr "Atlasāmie lauki"
1661
+
1662
+ msgid ""
1663
+ "Set column width for selected columns in pixels or percents. Press \"Clear "
1664
+ "Fixed Width\" to clear fixed columns width for all table columns. All "
1665
+ "changes will be applied after table saving."
1666
+ msgstr ""
1667
+ "Iestatīt kolonnu platumu atlasītajām kolonnām pikseļos vai procentos. "
1668
+ "Nospiediet \"Notīrīt fiksēto platumu\", lai notīrītu visu stabiņu kolonnu "
1669
+ "fiksēto sleju platumu. Visas izmaiņas tiks veiktas pēc tabulu saglabāšanas."
1670
+
1671
+ msgid ""
1672
+ "Set count of table rows, which will be saved per one request. If you do not "
1673
+ "know why does this value need for - it's better to keep the preferred value: "
1674
+ "400."
1675
+ msgstr ""
1676
+ "Iestatiet tabulas rindu skaitu, kas tiks saglabāts uz vienu pieprasījumu. Ja "
1677
+ "jūs nezināt, kāpēc šī vērtība ir nepieciešama, labāk saglabāt vēlamo "
1678
+ "vērtību: 400."
1679
+
1680
+ msgid ""
1681
+ "Set fixed table width in px, % or auto (in this case table will be adjusted "
1682
+ "by table content)"
1683
+ msgstr ""
1684
+ "Iestatīt fiksēto tabulas platumu px, % vai auto (šajā gadījumā tabulu "
1685
+ "noregulēs pēc tabulas satura)"
1686
+
1687
+ msgid "Set format of all numbers in the table"
1688
+ msgstr "Iestatiet visu tabulas numuru"
1689
+
1690
+ msgid ""
1691
+ "Set minimum count of characters to start search in Search field. Set 0 to "
1692
+ "make search in any case."
1693
+ msgstr ""
1694
+ "Iestatiet minimālo rakstzīmju skaitu, lai sāktu meklēšanu laukā Meklēšana. "
1695
+ "Iestatiet 0, lai veiktu meklēšanu jebkurā gadījumā."
1696
+
1697
+ msgid ""
1698
+ "Set multiple column sorting for selected columns. Press \"Clear Multiple "
1699
+ "Sorting\" to clear multiple sorting for all table columns. All changes will "
1700
+ "be applied after table saving."
1701
+ msgstr ""
1702
+ "Iestatīt vairāku kolonnu šķirošanu atlasītajām slejām. Nospiediet \"Notīrīt "
1703
+ "vairākkārtēju šķirošanu\", lai izdzēstu visu tabulas kolonnu vairākkārtēju "
1704
+ "šķirošanu. Visas izmaiņas tiks veiktas pēc tabulas saglabāšanas."
1705
+
1706
+ msgid ""
1707
+ "Set output format for currencies. Supports only 1 currency for 1 table. "
1708
+ "Besides here you can establish needed divider between integer and fractional "
1709
+ "parts and quantity of zeros at fractional part. For example:<br />\n"
1710
+ " $ 1,000.000<br />\n"
1711
+ " € 1.00"
1712
+ msgstr ""
1713
+ "Iestatīt valūtu izvades formātu. Atbalsta tikai 1 valūtu 1 tabulā. Bez tam "
1714
+ "šeit jūs varat izveidot nepieciešamo dalītāju starp veselu skaitli un "
1715
+ "daļējām daļām un nulles daudzumu frakcionētajā daļā. Piemēram: <br />\n"
1716
+ " $ 1 000 000 <br />\n"
1717
+ " € 1,00"
1718
+
1719
+ msgid ""
1720
+ "Set output format for date. For example:<br />\n"
1721
+ " YYYY-MM-DD - 1991-12-25<br />\n"
1722
+ " DD.MM.YY - 25.12.91"
1723
+ msgstr ""
1724
+ "Iestatiet datuma izvades formātu. Piemēram: <br />\n"
1725
+ " GGGG-MM-DD - 1991-12-25 <br />\n"
1726
+ " DD.MM.YY - 25.12.91"
1727
+
1728
+ msgid "Set output format for numbers e.g. 1,000.00, 1.00"
1729
+ msgstr "Iestatiet skaitļu izvades formātu, piem., 1,000.00, 1.00"
1730
+
1731
+ msgid ""
1732
+ "Set output format for percent numbers. For example:<br />\n"
1733
+ " 10.00%<br />\n"
1734
+ " 10%"
1735
+ msgstr ""
1736
+ "Iestatiet izvades formātu procentiem. Piemēram: <br />\n"
1737
+ " 10,00% <br />\n"
1738
+ " 10%"
1739
+
1740
+ msgid ""
1741
+ "Set output format for time and duration. For example:<br />\n"
1742
+ " 1) time<br />\n"
1743
+ " HH:mm - 18:00<br />\n"
1744
+ " hh:mm a - 9:00 pm<br /><br />\n"
1745
+ " 2) duration<br />\n"
1746
+ " hh:mm - 36:40<br />\n"
1747
+ " hh:mm:ss - 36:40:12"
1748
+ msgstr ""
1749
+ "Iestatiet izejas formātu par laiku un ilgumu. Piemēram: <br />\n"
1750
+ " 1) laiks <br />\n"
1751
+ " HH:mm - 18:00 <br />\n"
1752
+ " hh:mm - 9:00 <br /> <br />\n"
1753
+ " 2) ilgums <br />\n"
1754
+ " hh:mm - 36:40 <br />\n"
1755
+ " hh:mm:ss - 36:40:12"
1756
+
1757
+ msgid "Set sort order by default"
1758
+ msgstr "Kārtot sec;ibu pēc noklusējuma"
1759
+
1760
+ msgid ""
1761
+ "Set the numeric value from 0 to 100, for example 10 (equals to 10%). Leave "
1762
+ "this field empty to use default offset value."
1763
+ msgstr ""
1764
+ "Iestatiet ciparu vērtību no 0 līdz 100, piemēram, 10 (vienāds ar 10%). "
1765
+ "Atstājiet šo lauku tukšu, lai izmantotu noklusējuma kompensācijas vērtību."
1766
+
1767
+ msgid ""
1768
+ "Set the value in px or %, for example, 200 (equals to 200px) or 80%. Leave "
1769
+ "this field empty to use default height value."
1770
+ msgstr ""
1771
+ "Iestatiet vērtību px vai %, piemēram, 200 (vienāda ar 200 px) vai 80%. "
1772
+ "Atstājiet šo lauku tukšā, lai izmantotu noklusējuma augstuma vērtību."
1773
+
1774
+ msgid ""
1775
+ "Set the value in px or %, for example, 400 (equals to 400px) or 90%. Leave "
1776
+ "this field empty to use default width value."
1777
+ msgstr ""
1778
+ "Iestatiet vērtību px vai %, piemēram, 400 (vienāds ar 400 px) vai 90%. "
1779
+ "Atstājiet šo lauku tukšā, lai izmantotu noklusējuma platuma vērtību."
1780
+
1781
+ msgid "Settings"
1782
+ msgstr "Iestatījumi"
1783
+
1784
+ msgid "Short Number"
1785
+ msgstr "Īss numurs"
1786
+
1787
+ msgid "Shortcode"
1788
+ msgstr "Īsais kods"
1789
+
1790
+ msgid "Show Empty Table"
1791
+ msgstr "Rādīt tukšo tabulu"
1792
+
1793
+ msgid "Show Only Search Results"
1794
+ msgstr "Rādīt tikai meklēšanas rezultātus"
1795
+
1796
+ msgid "Show _MENU_ entries"
1797
+ msgstr "Atrādīt _MENU_ ierakstus"
1798
+
1799
+ msgid "Showing 0 to 0 of 0 entries"
1800
+ msgstr "Rāda 0 līdz 0 no 0 ierakstiem"
1801
+
1802
+ msgid "Showing _START_ to _END_ of _TOTAL_ entries"
1803
+ msgstr "Atrādīt _START_ līdz _END_ no _TOTAL_ ierakstiem"
1804
+
1805
+ msgid "Signature"
1806
+ msgstr "Paraksts"
1807
+
1808
+ msgid "Signature Text"
1809
+ msgstr "Teksta paraksts"
1810
+
1811
+ msgid "Slider Plugin"
1812
+ msgstr "\"Slider\" spraudnis"
1813
+
1814
+ msgid "Slider by Supsystic"
1815
+ msgstr "\"Slider\" ar Supsystic"
1816
+
1817
+ msgid "Small"
1818
+ msgstr "Mazs"
1819
+
1820
+ msgid "Social Share Buttons"
1821
+ msgstr "Sociālās koplietošanas pogas"
1822
+
1823
+ msgid ""
1824
+ "Social share buttons to increase social traffic and popularity. Social "
1825
+ "sharing to Facebook, Twitter and other social networks."
1826
+ msgstr ""
1827
+ "Sociālās koplietošanas pogas palielina sociālo satiksmi un popularitāti. "
1828
+ "Sociālā koplietošana Facebook, Twitter un citos sociālajos tīklos."
1829
+
1830
+ msgid ""
1831
+ "Some errors occurred while sending mail please send your message trough this "
1832
+ "contact form:"
1833
+ msgstr ""
1834
+ "Sūtot e-pastu, radās kļūdas, lūdzu nosūtiet ziņu caur šo saziņas formu:"
1835
+
1836
+ msgid "Sort order"
1837
+ msgstr "Šķirošanas secība"
1838
+
1839
+ msgid "Sorting"
1840
+ msgstr "Šķirošana"
1841
+
1842
+ msgid "Sorting Column"
1843
+ msgstr "Šķirot kolonna"
1844
+
1845
+ msgid "Sorting Order"
1846
+ msgstr "Šķirošanas secība"
1847
+
1848
+ msgid "Stacked Columns"
1849
+ msgstr "Stacked kolonnas"
1850
+
1851
+ msgid "Standard Responsive mode"
1852
+ msgstr "Standarta reaģējošais režīms"
1853
+
1854
+ msgid ""
1855
+ "Standard Responsive mode - in this mode if table content doesn't fit all "
1856
+ "columns become under each other with one cell per row"
1857
+ msgstr ""
1858
+ "Standarta reaģēšanas režīms - šajā režīmā, ja tabulu saturs neatbilst visām "
1859
+ "kolonnām, tas kļūst viens zem otra ar vienu šūnu katrā rindā"
1860
+
1861
+ msgid "Step-by-step Tutorial"
1862
+ msgstr "Soli pa solim"
1863
+
1864
+ msgid "Strict Matching"
1865
+ msgstr "\"Strict\" atbilstība"
1866
+
1867
+ msgid "Subject"
1868
+ msgstr "Nosaukums"
1869
+
1870
+ msgid "Support"
1871
+ msgstr "Atbalsts"
1872
+
1873
+ msgid ""
1874
+ "Supsystic Newsletter plugin for automatic mailing of your letters. You will "
1875
+ "have no need to control it or send them manually. No coding, hard skills or "
1876
+ "long hours of customizing are required."
1877
+ msgstr ""
1878
+ "Supsystic Newsletter spraudnis automātiskai vēstules nosūtīšanai. Jums nebūs "
1879
+ "nepieciešams to kontrolēt vai nosūtīt tos manuāli. Nav nepieciešama "
1880
+ "kodēšana, prasmes vai ilgstošas ​​pielāgošanas stundas."
1881
+
1882
+ msgid "Switch rows / columns"
1883
+ msgstr "Pārslēgt rindas / kolonnas"
1884
+
1885
+ msgid "Table Elements"
1886
+ msgstr "Tabulas elementi"
1887
+
1888
+ msgid "Table History"
1889
+ msgstr "Tabulas vēsture"
1890
+
1891
+ msgid "Table Information"
1892
+ msgstr ""
1893
+ "Tabula informācija\n"
1894
+ "="
1895
+
1896
+ msgid "Table Language"
1897
+ msgstr "Tabulas valoda"
1898
+
1899
+ msgid "Table Loader Color"
1900
+ msgstr "\"Table Loader \" krāsa"
1901
+
1902
+ msgid "Table Loader Icon"
1903
+ msgstr "\"Table Loader \" ikona"
1904
+
1905
+ msgid "Table info text"
1906
+ msgstr "Tabulas informācijas teksts"
1907
+
1908
+ msgid "Table information display field. %s"
1909
+ msgstr "Tabulas informācijas displeja lauks. %s"
1910
+
1911
+ msgid "Table title"
1912
+ msgstr "Tabulas virsraksts"
1913
+
1914
+ msgid "Table will not be hidden by default , but will be empty."
1915
+ msgstr "Tabula pēc noklusējuma netiks paslēpta, bet būs tukša."
1916
+
1917
+ msgid "Tables"
1918
+ msgstr "Tabulas"
1919
+
1920
+ msgid "Tabloid"
1921
+ msgstr "Tabloids"
1922
+
1923
+ msgid "Text color"
1924
+ msgstr "Teksta krāsa"
1925
+
1926
+ msgid "Text on Slice"
1927
+ msgstr "Teksts uz šķēles"
1928
+
1929
+ msgid ""
1930
+ "Thank you for choosing our Data Tables plugin. Just click here to start "
1931
+ "using it - and we will show you it's possibilities and powerfull features."
1932
+ msgstr ""
1933
+ "Paldies, ka izvēlējāties mūsu Data Table spraudni. Vienkārši noklikšķiniet "
1934
+ "šeit, lai sāktu to lietot - un mēs jums parādīsim tās iespējas un spēcīgas "
1935
+ "funkcijas."
1936
+
1937
+ msgid ""
1938
+ "Thank you for choosing our Data Tables plugin. Let’s make a quick tour "
1939
+ "through features and main options of the plugin. Just click “Next” button."
1940
+ msgstr ""
1941
+ "Paldies, ka izvēlējāties mūsu Data Tables spraudni. Padarēsim ātru ceļojumu, "
1942
+ "izmantojot spraudņa funkcijas un galvenās iespējas. Vienkārši noklikšķiniet "
1943
+ "uz pogas Tālāk."
1944
+
1945
+ msgid ""
1946
+ "The Best WordPress PopUp option plugin to help you gain more subscribers, "
1947
+ "social followers or advertisement. Responsive pop-ups with friendly options."
1948
+ msgstr ""
1949
+ "Labākās WordPress PopUp opcijas spraudnis, kas palīdzēs jums iegūt vairāk "
1950
+ "abonentu, sociālo sekotāju vai reklāmu. Atbildīgi uznirstošie logi ar "
1951
+ "draudzīgām iespējām."
1952
+
1953
+ msgid ""
1954
+ "The most important part of settings - Editor. Here you can fill all the "
1955
+ "cells of your table, add some colors, play with fonts and sizes. This insert "
1956
+ "also allows you to change the alignment of your font, add formats (percents, "
1957
+ "currency), images and links to make your table more visual attraction."
1958
+ msgstr ""
1959
+ "Vissvarīgākā iestatījumu daļa - redaktors. Šeit jūs varat aizpildīt visas "
1960
+ "tabulas šūnas, pievienot dažas krāsas, spēlēties ar fontiem un to izmēriem. "
1961
+ "Šis ieliktnis ļauj arī mainīt fonta izlīdzināšanu, pievienot formātus "
1962
+ "(procentus, valūtu), attēlus un saites, lai padarītu tabulu par vizuāli "
1963
+ "pievilcīgu."
1964
+
1965
+ msgid "The table ID %s not found."
1966
+ msgstr "Tabulas ID %s nav atrasts."
1967
+
1968
+ msgid "The table with ID %d not exists."
1969
+ msgstr "Tabula ar ID %d neeksistē."
1970
+
1971
+ msgid "There are not all shortcode's attributes specified. Usage example"
1972
+ msgstr "Nav norādīti visi īsie koda atribūti. Lietošanas piemērs"
1973
+
1974
+ msgid ""
1975
+ "This label can not be translated using Table Language option. You can change "
1976
+ "this label typing the custom text or hide this label typing _NONE_ as label "
1977
+ "text."
1978
+ msgstr ""
1979
+ "Šo etiķeti nevar pārtulkot, izmantojot tabulas valodas opciju. Varat mainīt "
1980
+ "šo iezīmi, ierakstot pielāgoto tekstu vai paslēpjot šo marķējumu, ierakstot "
1981
+ "_NONE_ kā etiķetes tekstu."
1982
+
1983
+ msgid ""
1984
+ "This mode allows you to separate the content into paragraphs. To move to a "
1985
+ "new line in the cell - please press CTRL + Enter."
1986
+ msgstr ""
1987
+ "Šis režīms ļauj sadalīt saturu paragrāfos. Lai pārvietotu uz jaunu līniju "
1988
+ "šūnu, lūdzu, nospiediet CTRL + Enter."
1989
+
1990
+ msgid "Time / Duration"
1991
+ msgstr "Laiks / ilgums"
1992
+
1993
+ msgid "Title"
1994
+ msgstr "Nosaukums"
1995
+
1996
+ msgid "Topic"
1997
+ msgstr "Temats"
1998
+
1999
+ msgid "Type"
2000
+ msgstr "Tips"
2001
+
2002
+ msgid "Type Google Sheet url to import data from sheet to table"
2003
+ msgstr "Ierakstiet Google Sheet URL, lai importētu datus no lapas uz tabulu"
2004
+
2005
+ msgid "Underline"
2006
+ msgstr "Pasvītrot"
2007
+
2008
+ msgid "Undo"
2009
+ msgstr "Atsaukt"
2010
+
2011
+ msgid "Unsupported export type: %s."
2012
+ msgstr "Neatbalstīts eksporta veids: %s."
2013
+
2014
+ msgid "Url"
2015
+ msgstr "Url"
2016
+
2017
+ msgid "Use Comma as Delimiter"
2018
+ msgstr "Izmantojiet komatu kā atdalītāju"
2019
+
2020
+ msgid "Use Custom Colors"
2021
+ msgstr "Izmantojiet pielāgotas krāsas"
2022
+
2023
+ msgid "Use Editable Fields for Current Roles"
2024
+ msgstr "Izmantojiet rediģējamos laukus pašreizējām lomām"
2025
+
2026
+ msgid "Use Export Font"
2027
+ msgstr "Izmantojiet eksporta fontu"
2028
+
2029
+ msgid "Use Frontend Fields for Logged In Users Only"
2030
+ msgstr "Izmantot frontend laukus tikai reģistrētiem lietotājiem"
2031
+
2032
+ msgid ""
2033
+ "Use comma as delimiter of integer and fractional parts of number for "
2034
+ "editable fields on frontend"
2035
+ msgstr ""
2036
+ "Izmantojiet komatu kā veselu skaitļu delimitatoru un daļēji rediģējamu "
2037
+ "numuru skaitu lauku priekšpusē"
2038
+
2039
+ msgid "Use first column as labels"
2040
+ msgstr "Izmantojiet pirmo sleju kā etiķeti"
2041
+
2042
+ msgid "Use first row as headers"
2043
+ msgstr "Izmantojiet pirmo rindu kā galveni"
2044
+
2045
+ msgid "Vertical alignment"
2046
+ msgstr "Vertikālā izlīdzināšana"
2047
+
2048
+ msgid "Video Tutorial"
2049
+ msgstr "Video apmācība"
2050
+
2051
+ msgid ""
2052
+ "We are trying to make your using of our plugin maximum comfortable and easy. "
2053
+ "So we find it like the best way to tell you about some options and features "
2054
+ "of this plugin."
2055
+ msgstr ""
2056
+ "Mēs cenšamies padarīt mūsu spraudņa lietošanu maksimāli ērtu un vieglu. "
2057
+ "Tāpēc mēs uzskatām, ka tas ir labākais veids, kā pastāstīt par dažām šī "
2058
+ "spraudņa iespējām un priekšrocībām."
2059
+
2060
+ msgid ""
2061
+ "We really like what we do and feel responsibility for our “child”. "
2062
+ "Constantly we are trying to change something or update the new features, but "
2063
+ "sometimes you may have a situation when you need help or have a problem. We "
2064
+ "can offer you two kinds of help: "
2065
+ msgstr ""
2066
+ "Mums patiešām patīk, ko mēs darām, un jūtam atbildību par mūsu \"bērnu\". "
2067
+ "Mēs pastāvīgi cenšamies mainīt kaut ko vai atjaunināt jaunās funkcijas, taču "
2068
+ "dažreiz jums var būt situācija, kad jums nepieciešama palīdzība, lai "
2069
+ "atrisinātu problēmu. Mēs varam piedāvāt divu veidu palīdzību:"
2070
+
2071
+ msgid "Website"
2072
+ msgstr "Mājas lapa"
2073
+
2074
+ msgid "Welcome to Data Tables plugin by Supsystic!"
2075
+ msgstr "Esiet sveicināts Supsystic Data Tables spraudņā datu tabulās!"
2076
+
2077
+ msgid "Welcome to our plugin"
2078
+ msgstr "Laipni lūdzam mūsu spraudnī"
2079
+
2080
+ msgid "Well done!"
2081
+ msgstr "Labi padarīts!"
2082
+
2083
+ msgid ""
2084
+ "When you use frontend fields, <a href=\"%s\" target=\"_blank\">Table Hitory</"
2085
+ "a> allows you (using History Shortcode) to display on frontend the own table "
2086
+ "version for each logged in user. On this tab you can display any user's "
2087
+ "table - just choose the user name from dropdown list."
2088
+ msgstr ""
2089
+ "Kad izmantojat frontend laukus, <a href=\"%s\" target=\"_blank\"> tabulu "
2090
+ "vēsture </a> , tas atļauj (izmantojot vēstures īskodu) un parāda tabulas "
2091
+ "versiju ik vienam ielogojušam lietotājam. Šajā tabulā jūs varat parādīt "
2092
+ "jebkuru lietotāja tabulu - vienkārši izvēlieties lietotājvārdu no nolaižamā "
2093
+ "saraksta."
2094
+
2095
+ msgid "Width"
2096
+ msgstr "Platums"
2097
+
2098
+ msgid ""
2099
+ "With these two buttons in our Pro version you can Import any table of csv "
2100
+ "format and Export the whole table, which you have done."
2101
+ msgstr ""
2102
+ "Izmantojot šīs divas pogas mūsu Pro versijā, jūs varat importēt jebkuru csv "
2103
+ "formāta tabulu un eksportēt visu tabulu, ko esat pabeidzis."
2104
+
2105
+ msgid "Word wrapping"
2106
+ msgstr "Vārdu iesaiņošana (Word wrapping)"
2107
+
2108
+ msgid "Yes"
2109
+ msgstr "Jā"
2110
+
2111
+ msgid "You can change number of Columns and Rows later"
2112
+ msgstr "Jūs varat mainīt kolonnu skaitu un rindas vēlāk"
2113
+
2114
+ msgid ""
2115
+ "You have no diagrams for now. Go to %s -> select the required data in the "
2116
+ "table and click on “Add diagram” button. Also please check the tutorial %s"
2117
+ msgstr ""
2118
+ "Patreiz jums nav diagrammu. Atveriet %s -> atlasiet vajadzīgos datu tabulā "
2119
+ "un noklikšķiniet uz pogas \"Pievienot diagrammu\". Lūdzu, arī pārbaudiet "
2120
+ "apmācības programmu %s"
2121
+
2122
+ msgid ""
2123
+ "You need to enable ZipArchive extension in PHP config file on your server. "
2124
+ "Please, contact to your server administrator."
2125
+ msgstr ""
2126
+ "Jums ir jāiespējo ZipArchive paplašinājums uz sava servera iekšs PHP "
2127
+ "konfigurācijas faila. Lūdzu, sazinieties ar savu servera administratoru."
2128
+
2129
+ msgid "You will not be able to update your pro version with expired license"
2130
+ msgstr "Jūs nevarat atjaunināt savu pro versiju ar izbeigušos licences datumu"
2131
+
2132
+ msgid "Your message successfully send. We contact you soon."
2133
+ msgstr "Jūsu ziņa ir veiksmīgi nosūtīta. Drīzumā mēs sazināsimies ar jums."
2134
+
2135
+ msgid "Your premium support is expired in %s days"
2136
+ msgstr "Jūsu piemaksu atbalsts ir beidzies %s dienās"
2137
+
2138
+ msgid "Your premium support is expired in ' ~ days ~ ' days"
2139
+ msgstr "Jūsu premium atbalsts beidzies pēc ' ~ dienas ~ '"
2140
+
2141
+ msgid "Zero records"
2142
+ msgstr "Nulle ierakstu"
2143
+
2144
+ msgid "by Supsystic!"
2145
+ msgstr "ar Supsystic!"
2146
+
2147
+ msgid "default"
2148
+ msgstr "noklusējums"
2149
+
2150
+ msgid "disable width"
2151
+ msgstr "atspējot platumu"
2152
+
2153
+ msgid "how to create Diagrams with Data Table plugin"
2154
+ msgstr "kā izveidot diagrammas ar Data Table spraudni"
2155
+
2156
+ msgid "value"
2157
+ msgstr "vērtība"
app/templates/404.twig CHANGED
@@ -1,3 +1,4 @@
1
  <div class="wrap">
2
- <h1>The page you requested is not found</h1>
 
3
  </div>
1
  <div class="wrap">
2
+ <h1>The page you requested is not found</h1>
3
+ <div>Method <strong>{{ action }}</strong> does not exists in controller <strong>{{ controller }}</strong></div>
4
  </div>
index.php CHANGED
@@ -4,7 +4,7 @@
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.7.5
8
  * Author: supsystic.com
9
  * Author URI: http://supsystic.com
10
  */
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.8.2
8
  * Author: supsystic.com
9
  * Author URI: http://supsystic.com
10
  */
readme.txt CHANGED
@@ -1,8 +1,8 @@
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.4
5
- Stable tag: 1.7.5
6
 
7
  Create data tables with charts and graphs. Custom design, navigation, searching and ordering functions. Export to PDF, CSV, Print. Excel spreadsheet
8
 
@@ -194,6 +194,74 @@ Important! Shortcode must be inserted in a text editor page, and not in the visu
194
 
195
  == Changelog ==
196
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
197
  = 1.7.5 / 06.02.2018 =
198
  * Hotfix of applying cell styles to table
199
  * Fix of exporting table to PDF in admin area
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.5
5
+ Stable tag: 1.8.2
6
 
7
  Create data tables with charts and graphs. Custom design, navigation, searching and ordering functions. Export to PDF, CSV, Print. Excel spreadsheet
8
 
194
 
195
  == Changelog ==
196
 
197
+ = 1.8.2 / 20.04.2018 =
198
+ * Hotfix by compatibility with old pro versions
199
+
200
+ = 1.8.1 / 13.04.2018 =
201
+ * Hotfix by compatibility with old pro versions
202
+
203
+ = 1.8.0 / 12.04.2018 =
204
+ * Add of ability to remove the escaping of HTML for the formulas results
205
+ * Update of way of parsing table formulas on frontend
206
+ * Fix of applying text wrapping for cells during table export
207
+ * Fix of applying underline text style for cells during table export
208
+ * Fixed auto width + scroll in frontend
209
+ * Fixed the grid offset of the table for Fixed Header
210
+ * Fixed the grid offset of the table for Fixed Footer
211
+ * Fix of applying underline text style for cells during table import
212
+ * Fix of applying text wrapping for cells during table import
213
+ * Fixed parameter "Save Frontend Fields", when save empty values
214
+ * Fixed bug with "Save Frontend Fields" param and exporting changed data
215
+ * Fixed Export to XSL and XSLX for invisible cells
216
+ * Added hidden rows and hidden columns for Excel import
217
+ * Fixed bug with "Cell edit" when using "" parameter
218
+ * Fixed check row height condition
219
+ * Added DB transactions for parameter "Save Frontend Fields"
220
+ * Fixed javascript error for fnAdjustColumnSizing
221
+ * Fixed timing for header resizing
222
+ * Add Conditional Formatting feature
223
+ * Add of shortcode for output only selected rows and / or columns of table
224
+ * Fix of using of lower case in indexes of cells and in formulas in the table editor
225
+ * Add of ability to move columns and rows in the table editor manually
226
+ * Add ability to make the rows collapsible on frontend
227
+ * Add ability to convert content of cells to the icons with tooltips
228
+ * Update of icons of editor toolbar
229
+ * Fix PopUp integration
230
+ * Add ability to import / export the rules of conditional formatting from / to MS Excel
231
+ * Add of check for required extension ZipArchive for import from MS Excel
232
+ * Add ability to set period for creating of new table instance in history
233
+ * Fix of switch the cell from selectable to editable type
234
+ * Update of using of features "removed cells" and "hidden cells" on frontend for tables without headers
235
+ * Fix styles for using auto table width with horizontal scroll
236
+ * Fix of displaying of diagrams
237
+ * Fix of displaying of pagination selectlist for table
238
+ * Update the tooltips for plugin settings page
239
+
240
+ = 1.7.9 / 09.03.2018 =
241
+ * Fix issue for base formulas and empty cells (they should be counted as Zero)
242
+ * Fix issue for some languages (Germany, etc.)
243
+ * Code improvements
244
+
245
+ = 1.7.8 / 07.03.2018 =
246
+ * Add ability to use simple calculation actions with dates
247
+ * Update of way to connect of table's translation
248
+ * Update of tooltips for the "Language and Text" tab in table admin area
249
+ * Fix for detecting browser language in Safari
250
+ * Fix for Norwegian-Nynorsk translation data
251
+ * Fix of formulas updating after rows / columns adding / removing
252
+ * Fix of formulas updating after pasting data from another cell
253
+ * Fix of correction of cells values during cells autofilling
254
+ * Fix of calculation of DATE formulas: DATE, DAY, DAYS, DAYS360, EDATE, EOMONTH, MONTH, HOUR, MINUTE, ISOWEEKNUM, TODAY, NOW, SUBTOTAL
255
+ * Fix of using empty cells in calculations
256
+
257
+ = 1.7.7 / 23.02.2018 =
258
+ * Hotfix for compatibility with old pro versions
259
+
260
+ = 1.7.6 / 20.02.2018 =
261
+ * Security fix for table import and export
262
+ * Fix of execution of JS scripts, added through the Execute JS Script After Table Load option
263
+ * Small code fix
264
+
265
  = 1.7.5 / 06.02.2018 =
266
  * Hotfix of applying cell styles to table
267
  * Fix of exporting table to PDF in admin area
src/SupsysticTables/Core/Model/Core.php CHANGED
@@ -21,15 +21,19 @@ class SupsysticTables_Core_Model_Core extends SupsysticTables_Core_BaseModel
21
  public function update($data)
22
  {
23
  $data = $this->prepare($data);
 
 
 
24
 
25
- if ('alter' === substr(strtolower($data), 0, 5)) {
26
- if($this->checkQueryOnColumnNotExists($data)) {
27
- $this->db->query($data);
28
- }
29
- return;
30
- }
31
-
32
- $this->delta($data);
 
33
  }
34
 
35
  public function checkQueryOnColumnNotExists($queryString) {
21
  public function update($data)
22
  {
23
  $data = $this->prepare($data);
24
+ $queries = explode(';', $data);
25
+ $queries = array_map('trim', $queries);
26
+ $queries = array_filter($queries);
27
 
28
+ foreach($queries as $q) {
29
+ if ('alter' === substr(strtolower($q), 0, 5)) {
30
+ if($this->checkQueryOnColumnNotExists($q)) {
31
+ $this->db->query($q);
32
+ }
33
+ } else {
34
+ $this->delta($q);
35
+ }
36
+ }
37
  }
38
 
39
  public function checkQueryOnColumnNotExists($queryString) {
src/SupsysticTables/Core/Module.php CHANGED
@@ -64,11 +64,6 @@ class SupsysticTables_Core_Module extends SupsysticTables_Core_BaseModule
64
  wp_localize_script('tables-core', 'g_stbStandartFontsList', $standardFontsList);
65
  }
66
 
67
- public function addLanguagesData() {
68
- $languages = $this->getModule('tables')->getController()->getModel('languages', 'tables');
69
- wp_localize_script('tables-core', 'g_stbTblLang', $languages->getLanguageMap());
70
- }
71
-
72
  /**
73
  * {@inheritdoc}
74
  */
@@ -82,103 +77,105 @@ class SupsysticTables_Core_Module extends SupsysticTables_Core_BaseModule
82
  $hookName = 'admin_enqueue_scripts';
83
  $dynamicHookName = is_admin() ? $hookName : 'wp_enqueue_scripts';
84
 
85
- $jquery = $ui->createScript('jquery')
86
- ->setHookName($hookName);
87
-
88
  /* jQuery */
89
- $ui->add($jquery);
 
 
 
90
 
91
- $ui->add($ui->createScript('jquery-ui-dialog')->setHookName('admin_enqueue_scripts'));
 
 
 
92
 
93
- /* Core script with common functions in supsystic.Tables namespace */
94
- $ui->add(
95
- $ui->createScript('tables-core')
96
- ->setHookName($dynamicHookName)
97
- ->setModuleSource($this, 'js/core.js')
98
- ->addDependency($jquery)
99
- ->setCachingAllowed($cachingAllowed)
100
- ->setVersion($pluginVersion)
101
- );
102
  add_action('wp_enqueue_scripts', array($this, 'enquieAjaxUrl'), 999);
103
- add_action($dynamicHookName, array($this, 'addLanguagesData'), 999);
104
  add_action($dynamicHookName, array($this, 'addCommonPluginData'), 999);
105
  add_action($dynamicHookName, array($this, 'addFontsData'), 999);
106
- $ui->add(
107
- $ui->createScript('tables-create-table')
108
- ->setHookName($hookName)
109
- ->setModuleSource($this, 'js/create-table.js')
110
- ->setDependencies(array('jquery', 'jquery-ui-dialog'))
111
- ->setCachingAllowed($cachingAllowed)
112
- ->setVersion($pluginVersion)
113
- );
114
-
115
- $ui->add(
116
- $ui->createStyle('tables-tooltipster')
117
- ->setHookName($hookName)
118
- ->setModuleSource($this, 'css/tooltipster.css')
119
- ->setCachingAllowed($cachingAllowed)
120
- ->setVersion($pluginVersion)
121
- );
122
 
123
- $ui->add(
124
- $ui->createScript('tables-tooltipster')
125
- ->setHookName($hookName)
126
- ->setModuleSource($this, 'js/jquery.tooltipster.min.js')
127
- ->addDependency($jquery)
128
- ->setCachingAllowed(true)
129
- ->setVersion($pluginVersion)
130
- );
 
131
 
132
- /* Bootstrap */
133
- $ui->add(
134
- $ui->createScript('tables-bootstrap')
135
- ->setHookName($hookName)
136
- ->setLocalSource('js/libraries/bootstrap/bootstrap.min.js')
137
- ->addDependency($jquery)
138
- ->setCachingAllowed(true)
139
- ->setVersion('3.3.1')
140
- );
141
 
 
 
 
 
 
 
 
 
142
 
143
- /* Chosen */
144
- $ui->add(
145
- $ui->createScript('tables-chosen')
146
- ->setHookName($hookName)
147
- ->setLocalSource('js/plugins/chosen.jquery.min.js')
148
- ->addDependency($jquery)
149
- ->setCachingAllowed(true)
150
- ->setVersion('1.4.2')
151
- );
152
 
153
- /* iCheck */
154
- $ui->add(
155
- $ui->createScript('tables-iCheck')
156
- ->setHookName($hookName)
157
- ->setLocalSource('js/plugins/icheck.min.js')
158
- ->addDependency($jquery)
159
- ->setCachingAllowed(true)
160
- ->setVersion('1.0.2')
161
- );
162
 
163
- /* Main UI script */
164
- $ui->add(
165
- $ui->createScript('tables-ui')
166
- ->setHookName($hookName)
167
- ->setLocalSource('js/supsystic.ui.js')
168
- ->addDependency($jquery)
169
- ->setCachingAllowed($cachingAllowed)
170
- ->setVersion($pluginVersion)
171
- );
172
 
173
- /* Main UI styles */
174
- $ui->add(
175
- $ui->createStyle('tables-ui-styles')
176
- ->setHookName($hookName)
177
- ->setLocalSource('css/supsystic-ui.css')
178
- ->setCachingAllowed($cachingAllowed)
179
- ->setVersion($pluginVersion)
180
- );
181
 
 
 
 
 
 
 
 
 
182
  }
183
 
184
  /**
64
  wp_localize_script('tables-core', 'g_stbStandartFontsList', $standardFontsList);
65
  }
66
 
 
 
 
 
 
67
  /**
68
  * {@inheritdoc}
69
  */
77
  $hookName = 'admin_enqueue_scripts';
78
  $dynamicHookName = is_admin() ? $hookName : 'wp_enqueue_scripts';
79
 
 
 
 
80
  /* jQuery */
81
+ $ui->add(
82
+ $ui->createScript('jquery')
83
+ ->setHookName($dynamicHookName)
84
+ );
85
 
86
+ $ui->add(
87
+ $ui->createScript('jquery-ui-dialog')
88
+ ->setHookName($hookName)
89
+ );
90
 
91
+ /* Core script with common functions in supsystic.Tables namespace */
92
+ $ui->add(
93
+ $ui->createScript('tables-core')
94
+ ->setHookName($dynamicHookName)
95
+ ->setModuleSource($this, 'js/core.js')
96
+ ->addDependency('jquery')
97
+ ->setCachingAllowed($cachingAllowed)
98
+ ->setVersion($pluginVersion)
99
+ );
100
  add_action('wp_enqueue_scripts', array($this, 'enquieAjaxUrl'), 999);
 
101
  add_action($dynamicHookName, array($this, 'addCommonPluginData'), 999);
102
  add_action($dynamicHookName, array($this, 'addFontsData'), 999);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
 
104
+ /* Script for creating new table by click on main plugin tab "Add table" */
105
+ $ui->add(
106
+ $ui->createScript('tables-create-table')
107
+ ->setHookName($hookName)
108
+ ->setModuleSource($this, 'js/create-table.js')
109
+ ->setDependencies(array('jquery', 'jquery-ui-dialog'))
110
+ ->setCachingAllowed($cachingAllowed)
111
+ ->setVersion($pluginVersion)
112
+ );
113
 
114
+ /* Tooltipster */
115
+ $ui->add(
116
+ $ui->createStyle('tables-tooltipster')
117
+ ->setHookName($hookName)
118
+ ->setModuleSource($this, 'css/tooltipster.css')
119
+ ->setCachingAllowed($cachingAllowed)
120
+ ->setVersion($pluginVersion)
121
+ );
 
122
 
123
+ $ui->add(
124
+ $ui->createScript('tables-tooltipster')
125
+ ->setHookName($hookName)
126
+ ->setModuleSource($this, 'js/jquery.tooltipster.min.js')
127
+ ->addDependency('jquery')
128
+ ->setCachingAllowed(true)
129
+ ->setVersion($pluginVersion)
130
+ );
131
 
132
+ /* Bootstrap */
133
+ $ui->add(
134
+ $ui->createScript('tables-bootstrap')
135
+ ->setHookName($hookName)
136
+ ->setLocalSource('js/libraries/bootstrap/bootstrap.min.js')
137
+ ->addDependency('jquery')
138
+ ->setCachingAllowed(true)
139
+ ->setVersion('3.3.1')
140
+ );
141
 
142
+ /* Chosen */
143
+ $ui->add(
144
+ $ui->createScript('tables-chosen')
145
+ ->setHookName($hookName)
146
+ ->setLocalSource('js/plugins/chosen.jquery.min.js')
147
+ ->addDependency('jquery')
148
+ ->setCachingAllowed(true)
149
+ ->setVersion('1.4.2')
150
+ );
151
 
152
+ /* iCheck */
153
+ $ui->add(
154
+ $ui->createScript('tables-iCheck')
155
+ ->setHookName($hookName)
156
+ ->setLocalSource('js/plugins/icheck.min.js')
157
+ ->addDependency('jquery')
158
+ ->setCachingAllowed(true)
159
+ ->setVersion('1.0.2')
160
+ );
161
 
162
+ /* Supsystic UI */
163
+ $ui->add(
164
+ $ui->createStyle('tables-ui-styles')
165
+ ->setHookName($hookName)
166
+ ->setLocalSource('css/supsystic-ui.css')
167
+ ->setCachingAllowed($cachingAllowed)
168
+ ->setVersion($pluginVersion)
169
+ );
170
 
171
+ $ui->add(
172
+ $ui->createScript('tables-ui')
173
+ ->setHookName($hookName)
174
+ ->setLocalSource('js/supsystic.ui.js')
175
+ ->addDependency('jquery')
176
+ ->setCachingAllowed($cachingAllowed)
177
+ ->setVersion($pluginVersion)
178
+ );
179
  }
180
 
181
  /**
src/SupsysticTables/Core/assets/css/images/sort_asc.png ADDED
Binary file
src/SupsysticTables/Core/assets/css/images/sort_asc_disabled.png ADDED
Binary file
src/SupsysticTables/Core/assets/css/images/sort_both.png ADDED
Binary file
src/SupsysticTables/Core/assets/css/images/sort_desc.png ADDED
Binary file
src/SupsysticTables/Core/assets/css/images/sort_desc_disabled.png ADDED
Binary file
src/SupsysticTables/Core/assets/css/lib/fixedColumns.dataTables.min.css ADDED
@@ -0,0 +1 @@
 
1
+ table.DTFC_Cloned thead,table.DTFC_Cloned tfoot{background-color:white}div.DTFC_Blocker{background-color:white}div.DTFC_LeftWrapper table.dataTable,div.DTFC_RightWrapper table.dataTable{margin-bottom:0;z-index:2}div.DTFC_LeftWrapper table.dataTable.no-footer,div.DTFC_RightWrapper table.dataTable.no-footer{border-bottom:none}
src/SupsysticTables/Core/assets/css/lib/fixedHeader.dataTables.min.css ADDED
@@ -0,0 +1 @@
 
1
+ table.fixedHeader-floating{position:fixed !important;background-color:white}table.fixedHeader-floating.no-footer{border-bottom-width:0}table.fixedHeader-locked{position:absolute !important;background-color:white}@media print{table.fixedHeader-floating{display:none}}
src/SupsysticTables/Core/assets/css/lib/jquery.dataTables.min.css ADDED
@@ -0,0 +1 @@
 
1
+ table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;*cursor:hand}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("../images/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("../images/sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("../images/sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("../images/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("../images/sort_desc_disabled.png")}table.dataTable tbody tr{background-color:#ffffff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#acbad4}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f6f6f6}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{-webkit-box-sizing:content-box;box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table,.dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}}
src/SupsysticTables/Core/assets/css/lib/responsive.dataTables.min.css ADDED
@@ -0,0 +1 @@
 
1
+ table.dataTable.dtr-inline.collapsed>tbody>tr>td.child,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty{cursor:default !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty:before{display:none !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child{position:relative;padding-left:30px;cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child:before{top:8px;left:4px;height:16px;width:16px;display:block;position:absolute;color:white;border:2px solid white;border-radius:16px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:left;font-family:'Courier New', Courier, monospace;text-indent:4px;line-height:16px;content:'+';background-color:#31b131}table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th:first-child:before{content:'-';background-color:#d33333}table.dataTable.dtr-inline.collapsed>tbody>tr.child td:before{display:none}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child{padding-left:27px}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child:before{top:5px;left:4px;height:14px;width:14px;border-radius:14px;line-height:14px;text-indent:3px}table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>th.control{position:relative;cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>th.control:before{top:50%;left:50%;height:16px;width:16px;margin-top:-10px;margin-left:-10px;display:block;position:absolute;color:white;border:2px solid white;border-radius:16px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:left;font-family:'Courier New', Courier, monospace;text-indent:4px;line-height:16px;content:'+';background-color:#31b131}table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before{content:'-';background-color:#d33333}table.dataTable>tbody>tr.child{padding:0.5em 1em}table.dataTable>tbody>tr.child:hover{background:transparent !important}table.dataTable>tbody>tr.child ul{display:inline-block;list-style-type:none;margin:0;padding:0}table.dataTable>tbody>tr.child ul li{border-bottom:1px solid #efefef;padding:0.5em 0}table.dataTable>tbody>tr.child ul li:first-child{padding-top:0}table.dataTable>tbody>tr.child ul li:last-child{border-bottom:none}table.dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:bold}div.dtr-modal{position:fixed;box-sizing:border-box;top:0;left:0;height:100%;width:100%;z-index:100;padding:10em 1em}div.dtr-modal div.dtr-modal-display{position:absolute;top:0;left:0;bottom:0;right:0;width:50%;height:50%;overflow:auto;margin:auto;z-index:102;overflow:auto;background-color:#f5f5f7;border:1px solid black;border-radius:0.5em;box-shadow:0 12px 30px rgba(0,0,0,0.6)}div.dtr-modal div.dtr-modal-content{position:relative;padding:1em}div.dtr-modal div.dtr-modal-close{position:absolute;top:6px;right:6px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtr-modal div.dtr-modal-close:hover{background-color:#eaeaea}div.dtr-modal div.dtr-modal-background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:101;background:rgba(0,0,0,0.6)}@media screen and (max-width: 767px){div.dtr-modal div.dtr-modal-display{width:95%}}
src/SupsysticTables/Core/assets/js/core.js CHANGED
@@ -1,545 +1,507 @@
1
  if(typeof(SDT_DATA) == 'undefined') {
2
- var SDT_DATA = {};
3
  }
4
 
5
  (function (vendor, $, window) {
6
 
7
- var appName = 'Tables';
8
- var dataTableInstances = [];
 
9
 
10
- if (!(appName in vendor)) {
11
- vendor[appName] = {};
12
 
13
- vendor[appName].getAppName = (function getAppName() {
14
- return appName;
15
- });
16
-
17
- vendor[appName].getAllTableInstances = (function getAllTableInstances() {
18
- return dataTableInstances;
19
- });
20
-
21
- vendor[appName].setTableInstance = (function setTableInstance(instance) {
22
- dataTableInstances.push(instance);
23
- });
24
-
25
- vendor[appName].getTableInstanceById = (function getTableInstanceById(id) {
26
- var allTables = vendor[appName].getAllTableInstances();
27
-
28
- for(var i = 0; i < allTables.length; i++) {
29
- if(allTables[i].table_id == id) {
30
- return allTables[i];
31
- }
32
- }
33
- return false;
34
- });
35
-
36
- vendor[appName].getTableInstanceByViewId = (function getTableInstanceById(viewId) {
37
- var allTables = vendor[appName].getAllTableInstances();
38
-
39
- for(var i = 0; i < allTables.length; i++) {
40
- if(allTables[i].table_view_id == viewId) {
41
- return allTables[i];
42
- }
43
- }
44
- return false;
45
- });
46
-
47
- vendor[appName].removeTableInstanceByViewId = (function removeTableInstanceByViewId(viewId) {
48
- var allTables = vendor[appName].getAllTableInstances();
49
-
50
- for(var i = 0; i < allTables.length; i++) {
51
- if(allTables[i].table_view_id == viewId) {
52
- allTables.splice(i, 1);
53
- return true;
54
- }
55
- }
56
- return false;
57
- });
58
 
59
- vendor[appName].getParameterByName = (function getParameterByName(name) {
60
- name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
61
 
62
- var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
63
- results = regex.exec(location.search);
64
 
65
- return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
66
- });
67
 
68
- vendor[appName].replaceParameterByName = (function replaceParameterByName(url, paramName, paramValue) {
69
- var pattern = new RegExp('\\b('+paramName+'=).*?(&|$)');
70
- if (url.search(pattern) >= 0) {
71
- return url.replace(pattern,'$1' + paramValue + '$2');
72
- }
73
- return url + (url.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue;
74
- });
75
 
76
- vendor[appName].request = (function request(route, data) {
77
- if (!$.isPlainObject(route) || !('module' in route) || !('action' in route)) {
78
- throw new Error('Request route is not specified.');
79
- }
80
 
81
- if (!$.isPlainObject(data)) {
82
- data = {};
83
- }
84
 
85
- if ('action' in data) {
86
- throw new Error('Reserved field "action" used.');
87
- }
88
 
89
- data.action = 'supsystic-tables';
 
 
 
 
 
 
90
 
91
- var url = window.ajaxurl ? window.ajaxurl : ajax_obj.ajaxurl,
92
- request = $.post(url, $.extend({}, { route: route }, data)),
93
- deferred = $.Deferred();
94
 
95
- request.done(function (response, textStatus, jqXHR) {
96
- if (typeof response.success !== 'undefined' && response.success) {
97
- deferred.resolve(response, textStatus, jqXHR);
98
- } else {
99
- var message = 'There are errors during the request.';
 
 
100
 
101
- if (typeof response.message !== 'undefined') {
102
- message = response.message;
103
- }
104
 
105
- deferred.reject(message, textStatus, jqXHR);
106
- }
107
- }).fail(function (jqXHR, textStatus, errorThrown) {
108
- deferred.reject(errorThrown, textStatus, jqXHR);
109
- });
 
 
 
110
 
111
- return deferred.promise();
112
- });
 
113
 
114
- vendor[appName].createSpinner = (function createSpinner (elem) {
115
- elem = typeof(elem) != 'undefined' ? elem : false;
 
116
 
117
- if(elem) {
118
- var icon = elem.find('.fa');
 
119
 
120
- if(icon) {
121
- icon.data('icon', icon.attr('class'));
122
- icon.attr('class', 'fa fa-spinner fa-spin');
123
- }
124
- } else {
125
- return $('<i/>', { class: 'fa fa-spinner fa-spin' });
126
- }
127
- });
128
 
129
- vendor[appName].deleteSpinner = (function deleteSpinner (elem) {
130
- var icon = elem.find('.fa');
 
 
 
131
 
132
- if(icon) {
133
- icon.attr('class', icon.data('icon'));
134
- icon.data('icon', '');
135
- }
136
- });
137
-
138
- vendor[appName].initializeTable = (function initializeTable(table, callback, finalCallback, reinit, addInstance) {
139
- reinit = typeof reinit != 'undefined' ? reinit : {};
140
- addInstance = typeof addInstance != 'undefined' ? addInstance : true;
141
-
142
- var $table = (table instanceof $ ? table : $(table)),
143
- features = $table.data('features'),
144
- config = {},
145
- translation = {},
146
- language = $table.data('lang'),
147
- override = $table.data('override'),
148
- responsiveMode = $table.data('responsive-mode'),
149
- searchingSettings = $table.data('searching-settings'),
150
- tableInstance = {},
151
- defaultFeatures = {
152
- autoWidth: false,
153
- info: false,
154
- ordering: false,
155
- paging: false,
156
- responsive: false,
157
- searching: false,
158
- stateSave: false,
159
- api: true,
160
- initComplete: callback,
161
- headerCallback: function( thead, data, start, end, display ) {
162
- $(thead).closest('thead').find('th').each(function() {
163
- setStylesToCell(this);
164
- });
165
- },
166
- footerCallback: function( tfoot, data, start, end, display ) {
167
- $(tfoot).closest('tfoot').find('th').each(function() {
168
- setStylesToCell(this);
169
- });
170
- }
171
- };
172
 
173
- /* custom sort start */
174
- $.extend( $.fn.dataTableExt.oSort, {
175
- "natural-asc": function ( a, b ) {
176
- return naturalSort(a,b,true);
177
- },
178
 
179
- "natural-desc": function ( a, b ) {
180
- return naturalSort(a,b,true) * -1;
181
- },
182
 
183
- "natural-nohtml-asc": function( a, b ) {
184
- return naturalSort(a,b,false);
185
- },
186
 
187
- "natural-nohtml-desc": function( a, b ) {
188
- return naturalSort(a,b,false) * -1;
189
- },
190
 
191
- "natural-ci-asc": function( a, b ) {
192
- a = a.toString().toLowerCase();
193
- b = b.toString().toLowerCase();
 
 
194
 
195
- return naturalSort(a,b,true);
196
- },
 
197
 
198
- "natural-ci-desc": function( a, b ) {
199
- a = a.toString().toLowerCase();
200
- b = b.toString().toLowerCase();
 
 
201
 
202
- return naturalSort(a,b,true) * -1;
203
- },
204
 
205
- "natural-nohtml-ci-asc": function( a, b ) {
206
- a = a.toString().toLowerCase();
207
- b = b.toString().toLowerCase();
208
 
209
- return naturalSort(a,b,false);
210
- },
211
 
212
- "natural-nohtml-ci-desc": function( a, b ) {
213
- a = a.toString().toLowerCase();
214
- b = b.toString().toLowerCase();
 
 
 
 
 
215
 
216
- return naturalSort(a,b,false) * -1;
217
- }
218
- } );
219
- /* custom sort end */
220
 
221
- $.each(features, function () {
222
- var featureName = this.replace(/[-_]([a-z])/g, function (g) { return g[1].toUpperCase(); });
223
- config[featureName] = true;
224
- });
225
- if (toeInArray('searching', features) != -1 && searchingSettings) {
226
- if (searchingSettings.minChars > 0 ||
227
- searchingSettings.resultOnly ||
228
- searchingSettings.strictMatching
229
- ) {
230
-
231
- $.fn.dataTable.ext.search.push(function(settings, data) {
232
- var $searchInput = $(settings.nTableWrapper).find('.dataTables_filter input'),
233
- searchValue = $searchInput.val();
234
-
235
- if (searchingSettings.resultOnly && searchValue.length === 0) {
236
- if (searchingSettings.showTable) {
237
- return false;
238
- }
239
- return false;
240
- }
241
- if (searchingSettings.strictMatching) {
242
- searchValue = $.fn.dataTable.util.escapeRegex(searchValue);
243
- var regExp = new RegExp('^' + searchValue, 'i');
244
-
245
- for (var i = 0; i < data.length; i++) {
246
- var words = data[i].replace(/\s\s+/g, ' ').split(' ');
247
-
248
- for (var j = 0; j < words.length; j++) {
249
- if (words[j].match(regExp)) {
250
- return true;
251
- }
252
- }
253
- }
254
- return false;
255
- } else {
256
- return data.join(' ').toLowerCase().indexOf(searchValue.toLowerCase()) !== -1
257
- }
258
- });
259
- $table.on('init.dt', function (event, settings) {
260
- if (!settings) {
261
- return;
262
- }
263
 
264
- var $tableWrapper = $(settings.nTableWrapper),
265
- $tableSearchInput = $tableWrapper.find('.dataTables_filter input'),
266
- $customInput = $tableSearchInput.clone();
267
-
268
- $tableSearchInput.replaceWith($customInput);
269
-
270
- $customInput.on('input change', function() {
271
- if (!searchingSettings.showTable) {
272
- if (searchingSettings.resultOnly && searchingSettings.minChars && (this.value.length < searchingSettings.minChars || !this.value.length)) {
273
- $table.hide();
274
- $table.parent().find('.dataTables_paginate').hide();
275
- } else {
276
- $table.show();
277
- $table.parent().find('.dataTables_paginate').show();
278
- }
279
- }
280
- if (searchingSettings.minChars && (this.value.length < searchingSettings.minChars && this.value.length !== 0)) {
281
- event.preventDefault();
282
- return false;
283
- }
284
- $table.api().draw();
285
- });
286
 
287
- if (searchingSettings.resultOnly && !searchingSettings.showTable) {
288
- $table.hide();
289
- $table.parent().find('.dataTables_paginate').hide();
290
- }
291
- });
292
- }
293
- }
294
- if (toeInArray('ordering', features) != -1) {
295
- var sortingEnable = ['_all'],
296
- sortingDisable = [],
297
- aaSorting = [],
298
- multipleSorting = $table.data('multiple-sorting'),
299
- disableSorting = $table.data('disable-sorting');
300
-
301
- if (!$table.data('head')) {
302
- sortingDisable = ['_all'];
303
- }
304
- if(disableSorting && disableSorting.length) {
305
- sortingDisable = disableSorting;
306
- }
307
- if (multipleSorting && multipleSorting.length) {
308
- aaSorting = multipleSorting;
309
- } else {
310
- var columnsCount = $table.find('tr:first th').length,
311
- sortColumn = $table.data('sort-column') || 0,
312
- sortOrder = $table.data('sort-order') || 'asc',
313
- columnNumber = sortColumn - 1;
314
-
315
- if(columnNumber >= 0 && columnNumber < columnsCount) {
316
- aaSorting.push([columnNumber, sortOrder]);
317
- }
318
- }
319
- config.aoColumnDefs = [
320
- { aType: 'natural-nohtml-ci', aTargets: '_all' },
321
- { "bSortable": false, "aTargets": sortingDisable },
322
- { "bSortable": true, "aTargets": sortingEnable }
323
- ];
324
- config.aaSorting = aaSorting;
325
- }
326
- if ($table.data('pagination-length')) {
327
- var aLengthMenu = [];
328
- var paginationLength = String($table.data('pagination-length'));
329
- aLengthMenu.push(paginationLength.replace('All', -1).split(',').map(Number));
330
- aLengthMenu.push(paginationLength.split(','));
331
- config.aLengthMenu = aLengthMenu;
332
- }
333
- if ($table.data('auto-index') && $table.data('auto-index') !== 'off') {
334
- $table.on('draw.dt', function() {
335
- $table.api().column(0).nodes().each(function (cell, i) {
336
- cell.innerHTML = i + 1;
337
- });
338
- });
339
- }
340
- if (responsiveMode == 0) {
341
- // Responsive Mode: Standart Responsive Mode
342
- var labelStyles = '<style>',
343
- id = '#' + $table.attr('id');
344
-
345
- // Add header data to each response row
346
- $table.find('thead th').each(function(index, el) {
347
- labelStyles += id + '.oneColumnWithLabels td:nth-of-type(' + (index + 1) + '):before { content: "' + $(this).text() + '"; }';
348
- });
349
- labelStyles += '</style>';
350
- $table.append(labelStyles);
351
-
352
- $(window).on('resize', $table, function(event) {
353
- event.preventDefault();
354
- clearTimeout($table.data('resizeTimer'));
355
-
356
- $table.data('resizeTimer', setTimeout(function() {
357
- $table.removeClass('oneColumn oneColumnWithLabels');
358
- var tableWidth = $table.width(),
359
- wrapperWidth = $table.closest('.supsystic-tables-wrap').width();
360
- if (tableWidth > wrapperWidth) {
361
- $table.addClass('oneColumn');
362
-
363
- if ($table.data('head') == 'on') {
364
- $table.addClass('oneColumnWithLabels');
365
- }
366
- }
367
- }, 150));
368
- }).trigger('resize');
369
- } else if (responsiveMode === 1) {
370
- // Responsive Mode: Automatic Column Hiding
371
- config.responsive = {
372
- details: {
373
- renderer: function (api, rowIdx, columns) {
374
- var $table = $(api.table().node()),
375
- $subTable = $('<table/>');
376
-
377
- $.each(columns, function (i, col) {
378
- if (col.hidden) {
379
- var $cell = $(api.cell(col.rowIndex, col.columnIndex).node()).clone(),
380
- markup = '<tr data-dt-row="'+col.rowIndex+'" data-dt-column="'+col.columnIndex+'">';
381
- if ($table.data('head') == 'on') {
382
- var $headerContent = $(api.table().header()).find('th').eq(col.columnIndex).html();
383
- markup += '<td>';
384
- if ($headerContent) {
385
- markup += $headerContent;
386
- }
387
- markup += '</td>';
388
- }
389
- markup += '</tr>';
390
- $cell.after(
391
- $('<td>')
392
- .addClass('collapsed-cell-holder')
393
- .attr('data-cell-row', col.rowIndex)
394
- .attr('data-cell-column', col.columnIndex)
395
- .hide()
396
- );
397
- $subTable.append($(markup).append($cell.addClass('collapsed').show()));
398
- }
399
- });
400
- return $subTable.is(':empty') ? false : $subTable;
401
- }
402
- }
403
- };
404
- $table.on('responsive-resize.dt', function(event, api, columns) {
405
- if ($table.width() > $table.parent().width()) {
406
- api.responsive.recalc();
407
- return;
408
- }
409
- for (var i = 0, len = columns.length; i < len; i++) {
410
- if (columns[i]) {
411
- $table.find('tr > td.collapsed-cell-holder[data-cell-column="' + i + '"]').each(function(index, el) {
412
- var $this = $(this);
413
- var $cell = $(api.cell(
414
- $this.data('cell-row'),
415
- $this.data('cell-column')
416
- ).node());
417
-
418
- if ($cell.hasClass('collapsed')) {
419
- $cell.removeClass('collapsed');
420
- $this.replaceWith($cell);
421
- }
422
- });
423
  }
424
- }
425
- });
426
- } else if (responsiveMode === 2) {
427
- // Responsive Mode: Horizontal Scroll
428
- config.scrollX = true;
429
- }
430
- if(responsiveMode === 2 || responsiveMode === 3) {
431
- // Responsive Mode: 2 - Horizontal Scroll, 3 - Disable Responsivity
432
- var fixedHead = $table.data('head') && $table.data('fixed-head'),
433
- fixedFoot = $table.data('foot') && $table.data('fixed-foot'),
434
- fixedLeft = $table.data('fixed-left'),
435
- fixedRight = $table.data('fixed-right');
436
-
437
- // TODO: correct the code to set fixed header and fixed footer in the standard way
438
- // TODO: https://datatables.net/extensions/fixedheader/#Features
439
- //config.fixedHeader = {
440
- // header: false,
441
- // footer: false
442
- //};
443
- //if (fixedHead) {
444
- // config.fixedHeader.header = true;
445
- //}
446
- //if (fixedFoot) {
447
- // config.fixedHeader.footer = true;
448
- //}
449
- if(fixedHead || fixedFoot) {
450
- config.scrollY = $table.data('fixed-height');
451
- config.scrollCollapse = true;
452
- }
453
- if ($table.data('fixed-cols')) {
454
- config.fixedColumns = {
455
- leftColumns: fixedLeft ? parseInt(fixedLeft) : 0,
456
- rightColumns: fixedRight ? parseInt(fixedRight) : 0
457
- };
458
- config.scrollX = true;
459
- }
460
- }
461
- $.fn.dataTableExt.oApi.fnFakeRowspan = function (oSettings) {
462
- var cells;
463
- $.each(oSettings.aoData, function(index, rowData) {
464
- setCellAttributes(rowData.anCells);
465
- });
466
- if (oSettings.aoHeader.length) {
467
- cells = [];
468
- $.each(oSettings.aoHeader, function(index, rowData) {
469
- $.each(rowData, function(index, cellData) {
470
- cells.push(cellData.cell);
471
- });
472
- });
473
- setCellAttributes(cells);
474
- }
475
- if (oSettings.aoFooter.length) {
476
- cells = [];
477
- $.each(oSettings.aoFooter, function(index, rowData) {
478
- $.each(rowData, function(index, cellData) {
479
- cells.push(cellData.cell);
480
- });
481
  });
482
- setCellAttributes(cells);
483
- }
484
- return this;
485
- };
486
- _checkOnClickPopups();
487
- if(language) {
488
- if(language == 'browser') {
489
- language = g_stbTblLang && g_stbTblLang[navigator.language] ? g_stbTblLang[navigator.language] : 'default';
490
- }
491
- } else {
492
- language = 'default';
493
- }
494
- if(language != 'default') {
495
- $.get('//cdn.datatables.net/plug-ins/1.10.15/i18n/'+ language +'.json').done(function (response) {
496
- translation = response;
497
- }).always(function () {
498
- applyTableInit();
499
- });
500
- } else {
501
- applyTableInit();
502
- }
503
- // Function for Data Table init
504
- function applyTableInit() {
505
- $.each(override,function(key,value) {
506
- if(value.length) {
507
- translation[key] = value;
508
- // We need to support old DT format, cuz some languages use it
509
- translation['s' + key.charAt(0).toUpperCase() + key.substr(1)] = value;
510
  }
511
  });
512
- config.language = translation;
513
- tableInstance = $table.dataTable($.extend({}, defaultFeatures, config, reinit));
514
- tableInstance.table_id = $table.data('id');
515
- tableInstance.table_view_id = $table.data('view-id');
516
- tableInstance.fnFakeRowspan();
517
- if(addInstance) {
518
- vendor[appName].setTableInstance(tableInstance);
519
- }
520
- if(typeof finalCallback == "function") {
521
- return finalCallback(tableInstance);
522
- } else {
523
- return tableInstance;
524
- }
525
  }
526
- });
527
-
528
- /** Callback for displaying table after initializing
529
- * @param {object} settings - DataTables settings object
530
- * @param {object} json - JSON data retrieved from the server if the ajax option was set. Otherwise undefined.
531
- */
532
- vendor[appName].showTable = (function showTable (settings, json) {
533
- var $table = this,
534
- $tableWrap = $table.closest('.supsystic-tables-wrap'),
535
- afterTableLoadedScriptString = $table.attr('data-after-table-loaded-script'),
536
- _ruleJS = new ruleJS($tableWrap.attr('id')),
537
- responsiveMode = $table.data('responsive-mode'),
538
- mergedCells = $table.data('merged'),
539
- fixedHeader = $table.data('fixed-head') == 'on',
540
- fixedFooter = $table.data('fixed-foot') == 'on',
541
- fixedColumns = $table.data('fixed-right') > 0 || $table.data('fixed-left') > 0,
542
- viewId = $table.data('view-id');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
543
 
544
  // Apply custom CSS styles, which have been set through the table editor
545
  $table.find('th, td').each(function () {
@@ -551,645 +513,584 @@ if(typeof(SDT_DATA) == 'undefined') {
551
  });
552
  });
553
 
554
- // Do not know why we do this
555
- if (!$table.data('head')) {
556
- $table.find('th').removeClass('sorting sorting_asc sorting_desc sorting_disabled');
557
- }
558
-
559
- // Calculate formulas
560
- _ruleJS.init();
561
 
562
- // Set formats
563
- vendor[appName].formatDataAtTable($table);
564
-
565
- $(document).on('click', '.paginate_button', function () {
566
- vendor[appName].formatDataAtTable($table);
567
- });
568
 
569
- // Show comments on tap
570
- if ('ontouchstart' in window || navigator.msMaxTouchPoints) {
571
- $table.find('td, th').on('click', function(e) {
572
- var title = $(this).attr('title');
573
-
574
- if (title) {
575
- var div = $('<div style="' +
576
- 'display:none;' +
577
- 'position:absolute;' +
578
- 'border-radius:6px;' +
579
- 'background-color:#999;' +
580
- 'color:white;' +
581
- 'padding:7px;"/>');
582
-
583
- div.text(title)
584
- .appendTo('body')
585
- .css('top', (e.pageY - 70) + 'px')
586
- .css('left', (e.pageX + 20) + 'px')
587
- .fadeIn('slow');
588
-
589
- setTimeout(function() {
590
- div.fadeOut();
591
- }, 1200);
592
- }
593
- });
594
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
595
 
596
- // Editable fields
597
- if (typeof(vendor[appName].createEditableFields) == 'function') { // for compatibility with old pro versions
598
- var $editableFields = $table.find('.editable'),
599
- $selectableFields = $table.find('.selectable'),
600
- $tableId = $table.data('id'),
601
- useEditableFields = typeof(useEdit) != 'undefined' && typeof(useEdit[$tableId]) != 'undefined' ? useEdit[$tableId] : false;
602
-
603
- if ($editableFields.length || $selectableFields.length) {
604
- if(useEditableFields) {
605
- if (typeof(vendor[appName].setAllFields) == 'function') {
606
- vendor[appName].setAllFields($table, $editableFields, $selectableFields);
607
- } else {
608
- vendor[appName].createEditableFields($table, $editableFields);
609
- }
610
- } else if(SDT_DATA.isAdmin && SDT_DATA.isPro) {
611
- if (typeof(vendor[appName].setAllFields) == 'function') {
612
- vendor[appName].createEditableFields($table, $editableFields);
613
- vendor[appName].createSelectableFields($table, $selectableFields);
614
- } else {
615
- vendor[appName].createEditableFields($table, $editableFields);
616
- }
617
- }
618
- $table.on('init.dt', function() {
619
- $table.on('responsive-resize.dt responsive-display.dt draw.dt', function() {
620
- $editableFields.off('click.sup');
621
- vendor[appName].updateAfterRedraw($table);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
622
  });
623
- });
624
- }
625
- }
626
-
627
- // Show table
628
- $tableWrap.prev('.supsystic-table-loader').hide();
629
- $tableWrap.css('visibility', 'visible');
630
-
631
- vendor[appName].fixSortingForMultipleHeader($table);
632
-
633
- if(typeof mergedCells != 'undefined' && !mergedCells.length) {
634
- $table.fnAdjustColumnSizing();
635
- }
636
- if(responsiveMode === 2 || fixedHeader || fixedFooter) {
637
- // Responsive Mode: Horizontal Scroll
638
- $(window).on('resize', $table, function(event) {
639
- var tBody = $tableWrap.find('.dataTables_scrollBody'),
640
- tBodyTable = tBody.find('.supsystic-table');
641
-
642
- if(tBody.width() > tBodyTable.width()) {
643
- tBody.width(tBodyTable.width());
644
- $tableWrap.find('.dataTables_scrollHead, .dataTables_scrollFoot').width(tBodyTable.width());
645
  }
646
- }).trigger('resize');
647
- }
648
- // Correct width of fixed header / footer
649
- if(fixedHeader || fixedFooter) {
650
- /*var i = 1,
651
- $tableWrap.find('.dataTables_scrollBody table thead tr:first-child th').each(function() {
652
- var thWidth = $tableWrap.find('.dataTables_scrollHead table thead tr:first-child th:nth-child('+ i + ')');
653
-
654
- $(this).css({
655
- 'width': thWidth.width(),
656
- 'min-width': thWidth.width()
657
- });
658
  i++;
659
- });*/
660
- $table.api().fixedHeader.adjust();
661
- }
662
- // Correct width of fixed columns
663
- if(fixedColumns) {
664
- $table.api().fixedColumns().relayout();
665
-
666
- var tableCaption = $('.dataTables_scrollHead caption');
667
-
668
- if(tableCaption.length) {
669
- // Fix for displaying of caption for tables with fixed columns
670
- var fixedColumnsWrapper = $('#supsystic-table-' + viewId + ' .DTFC_LeftWrapper, #supsystic-table-' + viewId + ' .DTFC_RightWrapper');
671
-
672
- fixedColumnsWrapper.find('caption').css({ display: 'none' });
673
- fixedColumnsWrapper.css({ top: tableCaption.height() + 'px' });
674
- }
675
- }
676
- /* Fix for Horizontal scroll responsive mode if table has different width for one column in header and body */
677
- if(!fixedHeader && !fixedFooter && responsiveMode === 2 && toeInArray('auto_width', $table.data('features')) == -1) {
678
- $tableWrap.find('.dataTables_scrollBody table thead tr:first-child th').each(function() {
679
- var tableWidth = $table.width(),
680
- tableWrapWidth = $tableWrap.width();
681
-
682
- if(tableWrapWidth > tableWidth){
683
- $tableWrap
684
- .find('.dataTables_scrollHeadInner, .dataTables_scrollBody, .dataTables_scrollFootInner')
685
- .addClass('fit-content');
686
- }
687
  });
688
- }
689
-
690
- // Load user custom scripts
691
- if (afterTableLoadedScriptString !== undefined) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
692
  afterTableLoadedScriptString = afterTableLoadedScriptString.substring(1, afterTableLoadedScriptString.length - 1);
693
 
694
- var afterTableLoadedScript = b64DecodeUnicode(afterTableLoadedScriptString).replace(/"/g, "'"),
695
- executeScript = new Function(afterTableLoadedScript);
696
 
697
- if (typeof executeScript === "function") {
698
  setTimeout(function() {
699
- executeScript();
700
  }, 1000);
701
- }
702
- }
703
-
704
- function b64DecodeUnicode(str) {
705
- return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {
706
- return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
707
- }).join(''));
708
- }
709
- });
710
 
711
  // Callback for executing script after table is initialized
712
- vendor[appName].executeScript = (function executeScript (table) {
713
  var $table = (table instanceof $ ? table : $(table)),
714
- $tableWrap = $table.closest('.supsystic-tables-wrap'),
715
- _ruleJS = new ruleJS($tableWrap.attr('id'));
716
 
717
- _ruleJS.init();
718
  $tableWrap.prev('.supsystic-table-loader').hide();
719
  $tableWrap.css('visibility', 'visible');
720
  });
721
 
722
- vendor[appName].fixSortingForMultipleHeader = function (table) {
723
- if(table.data('head-rows-count') > 1 && table.data('sort-order')) {
724
- var thead = table.find('thead tr').get().reverse();
725
-
726
- // Fix of sorting for table with multiple header (when header has more than 1 row)
727
- if(table.data('head')) {
728
- $.each(table.find('thead tr:last-child th'), function (index, element) {
729
- var th = $(element),
730
- nthChild = index + 1;
731
-
732
- if(th.data('hide')) {
733
- $(thead).each(function() {
734
- var item = $(this).find('th:nth-child(' + nthChild + ')');
735
-
736
- if(!item.data('hide')) {
737
- item.addClass('sorting');
738
- item.click(function() {
739
- th.trigger('click');
740
- if(th.hasClass('sorting')) {
741
- item.removeClass('sorting_asc');
742
- item.removeClass('sorting_desc');
743
- item.addClass('sorting');
744
- } else if(th.hasClass('sorting_asc')) {
745
- item.removeClass('sorting');
746
- item.removeClass('sorting_desc');
747
- item.addClass('sorting_asc');
748
- } else if(th.hasClass('sorting_desc')) {
749
- item.removeClass('sorting');
750
- item.removeClass('sorting_asc');
751
- item.addClass('sorting_desc');
752
- }
753
- });
754
- return false; // stop .each() function
755
- }
756
- });
757
- }
758
- });
759
- }
760
- // Fix of displaying the footer if table has multiple header
761
- /*if(table.data('foot')) {
762
- var newFooter = [];
763
-
764
- $.each(table.find('tfoot tr th'), function (index, element) {
765
- var nthChild = index + 1;
766
-
767
- $(thead).each(function() {
768
- var item = $(this).find('th:nth-child(' + nthChild + ')');
769
-
770
- if(item.is(':visible')) {
771
- newFooter.push(item.clone());
772
- return false; // stop .each() function
773
- }
774
- });
775
-
776
- });
777
- table.find('tfoot').html(newFooter);
778
- }*/
779
- }
780
- };
781
-
782
- vendor[appName].formatDataAtTable = function formatDataAtTable(table) {
783
- var numberFormat = table.data('number-format'),
784
- generalCurrencyFormat = table.data('currency-format'),
785
- generalPercentFormat = table.data('percent-format'),
786
- generalDateFormat = table.data('date-format'),
787
- generalTimeFormat = table.data('time-format'),
788
- skipFirstCol = table.data('auto-index') != 'off',
789
- hasCollapsedCells = table.data('responsive-mode') == 1 && table.hasClass('collapsed');
790
-
791
- table.find('td').each(function(index, el) {
792
- var $this = $(this);
793
-
794
- if((skipFirstCol && $this.is(':first-child')) || (hasCollapsedCells && $this.hasClass('child'))) {
795
- // Break current .each iteration
796
- return;
797
- }
798
-
799
- var languageData = numeral.languageData(),
800
- format = $this.data('cell-format'),
801
- formatType = $this.data('cell-format-type'),
802
- preparedFormat,
803
- delimiters,
804
- value = $.trim($this.html()),
805
- noFormat = false;
806
-
807
- if(value && formatType == 'date' && $this.data('cell-reformat')) {
808
- var newDate = moment(value, format);
809
- // console.log(newDate);
810
-
811
- if (newDate.isValid()) {
812
- value = newDate.format(generalDateFormat);
813
-
814
- $this.data('cell-format', generalDateFormat);
815
- $this.attr('data-cell-format',generalDateFormat);
816
-
817
- $this.data('original-value', value);
818
- $this.attr('data-original-value',value);
819
-
820
- $this.data('order', value);
821
- $this.attr('data-order',value);
822
-
823
- $this.data('cell-reformat', false);
824
- $this.attr('data-cell-reformat',value);
825
- }
826
- } else if(value && formatType == 'time_duration' && $this.data('cell-reformat')) {
827
- var newTime = moment(value, format),
828
- isValid = false;
829
- // console.log(newTime);
830
-
831
- if (newTime.isValid()) {
832
- value = newTime.format(generalTimeFormat);
833
- isValid = true;
834
- } else {
835
- newTime = moment.duration(value);
836
- if (newTime._milliseconds || value == 0) {
837
- value = newTime.format(generalTimeFormat);
838
- isValid = true;
839
- }
840
- }
841
- if(isValid) {
842
- $this.data('cell-format',generalTimeFormat);
843
- $this.attr('data-cell-format',generalTimeFormat);
844
-
845
- $this.data('original-value',value);
846
- $this.attr('data-original-value',value);
847
-
848
- $this.data('order',value);
849
- $this.attr('data-order',value);
850
-
851
- $this.data('cell-reformat',false);
852
- $this.attr('data-cell-reformat',value);
853
- }
854
- } else if(value && value.toString().match(/^-{0,1}\d+\.{0,1}\d*$/) && !isNaN(value)) {
855
- numberFormat = numberFormat ? numberFormat.toString() : '';
856
-
857
- switch(formatType) {
858
- case 'percent':
859
- format = format ? format : generalPercentFormat;
860
-
861
- if(format) {
862
- format = format.toString();
863
-
864
- var clearFormat = format.indexOf('%') > -1 ? format.replace('%', '') : format;
865
-
866
- value = value.indexOf('%') > -1 ? $this.data('original-value') : value;
867
- delimiters = (clearFormat.match(/[^\d]/g) || [',', '.']).reverse();
868
- languageData.delimiters = {
869
- decimal: delimiters[0], thousands: delimiters[1]
870
- };
871
-
872
- // We need to use dafault delimiters for format string
873
- preparedFormat = format.replace(clearFormat, clearFormat.replace(delimiters[0], '.').replace(delimiters[1], ','));
874
- } else {
875
- noFormat = true;
876
- }
877
- break;
878
- case 'currency':
879
- format = format ? format : generalCurrencyFormat;
880
-
881
- if(format) {
882
- format = format.toString();
883
-
884
- var formatWithoutCurrency = format.match(/\d.?\d*.?\d*/)[0],
885
- currencySymbol = format.replace(formatWithoutCurrency, '') || '$'; // We need to set currency symbol in any case for normal work of numeraljs
886
-
887
- delimiters = (formatWithoutCurrency.match(/[^\d]/g) || [',', '.']).reverse();
888
-
889
- languageData.delimiters = {
890
- decimal: delimiters[0],
891
- thousands: delimiters[1]
892
- };
893
- languageData.currency.symbol = currencySymbol;
894
- // We need to use dafault delimiters for format string
895
- preparedFormat = format
896
- .replace(formatWithoutCurrency, formatWithoutCurrency
897
- .replace(delimiters[0], '.')
898
- .replace(delimiters[1], ','))
899
- .replace(currencySymbol, '$');
900
- } else {
901
- noFormat = true;
902
- }
903
- break;
904
- case 'date':case 'time_duration':
905
- noFormat = true;
906
- break;
907
- default:
908
- if(numberFormat) {
909
- format = numberFormat;
910
- delimiters = (format.match(/[^\d]/g) || [',', '.']).reverse();
911
- languageData.delimiters = {
912
- decimal: delimiters[0]
913
- , thousands: delimiters[1]
914
- };
915
-
916
- // We need to use dafault delimiters for format string
917
- preparedFormat = format.replace(format, format.replace(delimiters[0], '.').replace(delimiters[1], ','));
918
- break;
919
- } else {
920
- noFormat = true;
921
- }
922
- break;
923
- }
924
- if(noFormat) {
925
- noFormat = false;
926
- } else {
927
- numeral.language('en', languageData);
928
- value = numeral(value).format(preparedFormat);
929
- }
930
- }
931
- $this.html(value);
932
- });
933
- };
934
-
935
- vendor[appName].isNumber = function isNumber(value) {
936
- if (value) {
937
- if (value.toString().match(/^-{0,1}\d+\.{0,1}\d*$/)) {
938
- return true;
939
- }
940
- }
941
-
942
- return false;
943
- };
944
-
945
- vendor[appName].Base64 = {
946
- _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
947
- encode : function (input) {
948
- var output = "";
949
- var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
950
- var i = 0;
951
-
952
- input = vendor[appName].Base64._utf8_encode(input);
953
-
954
- while (i < input.length) {
955
-
956
- chr1 = input.charCodeAt(i++);
957
- chr2 = input.charCodeAt(i++);
958
- chr3 = input.charCodeAt(i++);
959
-
960
- enc1 = chr1 >> 2;
961
- enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
962
- enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
963
- enc4 = chr3 & 63;
964
-
965
- if (isNaN(chr2)) {
966
- enc3 = enc4 = 64;
967
- } else if (isNaN(chr3)) {
968
- enc4 = 64;
969
- }
970
-
971
- output = output +
972
- this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
973
- this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
974
-
975
- }
976
-
977
- return output;
978
- },
979
- // private method for UTF-8 encoding
980
- _utf8_encode : function (string) {
981
- string = string.replace(/\r\n/g,"\n");
982
- var utftext = "";
983
-
984
- for (var n = 0; n < string.length; n++) {
985
-
986
- var c = string.charCodeAt(n);
987
 
988
- if (c < 128) {
989
- utftext += String.fromCharCode(c);
990
- }
991
- else if((c > 127) && (c < 2048)) {
992
- utftext += String.fromCharCode((c >> 6) | 192);
993
- utftext += String.fromCharCode((c & 63) | 128);
994
- }
995
- else {
996
- utftext += String.fromCharCode((c >> 12) | 224);
997
- utftext += String.fromCharCode(((c >> 6) & 63) | 128);
998
- utftext += String.fromCharCode((c & 63) | 128);
999
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1000
 
1001
- }
 
 
 
 
 
 
 
1002
 
1003
- return utftext;
1004
- }
1005
- };
1006
- }
1007
- reviewNoticeResponse();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1008
 
1009
  }(window.supsystic = window.supsystic || {}, window.jQuery, window));
1010
 
1011
  // Apply styles to cell from its classes
1012
  function classesRegexp() {
1013
- return {
1014
- color: /color\-([0-9a-f]{6})/,
1015
- background: /bg\-([0-9a-f]{6})/,
1016
- fontFamily: /ffamily\-([a-z_]+)/i,
1017
- fontSize: /fsize\-([0-9]+)/
1018
- }
1019
  }
1020
  function setStylesToCell(cell) {
1021
- var $cell = jQuery(cell),
1022
- viewId = $cell.parents('.supsystic-table:first').data('view-id'),
1023
- classes = classesRegexp(),
1024
- color = classes.color.exec(cell.className),
1025
- background = classes.background.exec(cell.className),
1026
- fontFamily = classes.fontFamily.exec(cell.className),
1027
- fontSize = classes.fontSize.exec(cell.className);
1028
-
1029
- if (null !== color) {
1030
- $cell.css({color: '#' + color[1]});
1031
- }
1032
- if (null !== background) {
1033
- $cell.css({backgroundColor: '#' + background[1]});
1034
- }
1035
- if (null !== fontFamily) {
1036
- var family = fontFamily[1].replace(/_/g, ' '),
1037
- familyName = fontFamily[1].replace(/_/g, '+'),
1038
- familyString = '@import url("//fonts.googleapis.com/css?family=' + familyName + '");',
1039
- style = getFrontendCellStylesElem(viewId);
1040
-
1041
- if(g_stbStandartFontsList
1042
- && toeInArray(family, g_stbStandartFontsList) == -1
1043
- && style.text().indexOf(familyString) == -1
1044
- ) {
1045
- style.text(familyString + '\n' + style.text());
1046
- }
1047
- $cell.css({fontFamily: family});
1048
- }
1049
- if (null !== fontSize) {
1050
- var lineHeight = +fontSize[1] + 6;
1051
- $cell.css({fontSize: fontSize[1] + 'px', lineHeight: lineHeight + 'px'});
1052
- }
1053
  }
1054
  // Get editor styles element
1055
  function getFrontendCellStylesElem(viewId) {
1056
- var $style = jQuery('#supsystic-table-' + viewId + '-css');
1057
 
1058
- if (!$style.length) {
1059
- $style = jQuery('<style/>', { id: 'supsystic-table-' + viewId + '-css' });
1060
- jQuery('head').append($style);
1061
- }
1062
- return $style;
1063
  }
1064
  function getAdminCellStylesElem() {
1065
- var $style = jQuery('#supsystic-tables-style');
1066
 
1067
- if (!$style.length) {
1068
- $style = jQuery('<style/>', { id: 'supsystic-tables-style' });
1069
- jQuery('head').append($style);
1070
- }
1071
- return $style;
1072
- }
1073
- // Merge cells
1074
- function setCellAttributes(cellArray) {
1075
- for (var i = 0; i < cellArray.length; i++) {
1076
- if (cellArray[i].getAttribute('data-hide')) {
1077
- cellArray[i].style.display = 'none';
1078
- }
1079
- if (colspan = cellArray[i].getAttribute('data-colspan')) {
1080
- if (colspan > 1) {
1081
- cellArray[i].setAttribute('colspan', colspan);
1082
- }
1083
- }
1084
- if (rowspan = cellArray[i].getAttribute('data-rowspan')) {
1085
- if (rowspan > 1) {
1086
- cellArray[i].setAttribute('rowspan', rowspan);
1087
- }
1088
- }
1089
- }
1090
- }
1091
- // Custom Natural Sort Function
1092
- // see https://datatables.net/plug-ins/sorting/natural
1093
- function naturalSort (a, b, html) {
1094
- var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?%?$|^0x[0-9a-f]+$|[0-9]+)/gi,
1095
- sre = /(^[ ]*|[ ]*$)/g,
1096
- dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,
1097
- hre = /^0x[0-9a-f]+$/i,
1098
- ore = /^0/,
1099
- htmre = /(<([^>]+)>)/ig,
1100
- // convert all to strings and trim()
1101
- x = a.toString().replace(sre, '') || '',
1102
- y = b.toString().replace(sre, '') || '';
1103
- // remove html from strings if desired
1104
- if (!html) {
1105
- x = x.replace(htmre, '');
1106
- y = y.replace(htmre, '');
1107
- }
1108
- // chunk/tokenize
1109
- var xN = x.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
1110
- yN = y.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
1111
- // numeric, hex or date detection
1112
- xD = parseInt(x.match(hre), 10) || (xN.length !== 1 && x.match(dre) && Date.parse(x)),
1113
- yD = parseInt(y.match(hre), 10) || xD && y.match(dre) && Date.parse(y) || null;
1114
-
1115
- // first try and sort Hex codes or Dates
1116
- if (yD) {
1117
- if ( xD < yD ) {
1118
- return -1;
1119
- }
1120
- else if ( xD > yD ) {
1121
- return 1;
1122
- }
1123
- }
1124
-
1125
- // natural sorting through split numeric strings and default strings
1126
- for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {
1127
- // find floats not starting with '0', string or 0 if not defined (Clint Priest)
1128
-
1129
- /*supsystic*/
1130
- //var oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc], 10) || xN[cLoc] || 0;
1131
- //var oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc], 10) || yN[cLoc] || 0;
1132
- var oFxNcL = parseFloat(xN[cLoc], 10) || xN[cLoc] || 0;
1133
- var oFyNcL = parseFloat(yN[cLoc], 10) || yN[cLoc] || 0;
1134
- /*****/
1135
-
1136
- // handle numeric vs string comparison - number < string - (Kyle Adams)
1137
- if (isNaN(oFxNcL) !== isNaN(oFyNcL)) {
1138
- return (isNaN(oFxNcL)) ? 1 : -1;
1139
- }
1140
- // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'
1141
- else if (typeof oFxNcL !== typeof oFyNcL) {
1142
- oFxNcL += '';
1143
- oFyNcL += '';
1144
- }
1145
- if (oFxNcL < oFyNcL) {
1146
- return -1;
1147
- }
1148
- if (oFxNcL > oFyNcL) {
1149
- return 1;
1150
- }
1151
- }
1152
- return 0;
1153
  }
 
1154
  /**
1155
  * Integration with our PopUp plugin
1156
  */
1157
  function _checkOnClickPopups( $table ) {
1158
- if(typeof(_ppsBindOnElementClickPopups) !== 'undefined' && $table && $table.size()) {
1159
- var $bindedLinks = $table.find('[href*="#ppsShowPopUp_"].ppsClickBinded');
1160
- if($bindedLinks && $bindedLinks.size()) {
1161
- $bindedLinks.removeClass('ppsClickBinded').unbind('click');
1162
- }
1163
- _ppsBindOnElementClickPopups();
1164
- }
1165
- }
1166
- function reviewNoticeResponse() {
1167
- jQuery(document).one('click','.supsystic-admin-notice a, .supsystic-admin-notice button',function(event) {
1168
- var responseCode = jQuery(this).data('response-code') || 'hide';
1169
-
1170
- jQuery('.supsystic-admin-notice .notice-dismiss').trigger('click');
1171
-
1172
- window.supsystic.Tables.request({
1173
- module: 'tables',action: 'reviewNoticeResponse'
1174
- },{
1175
- responseCode: responseCode
1176
- });
1177
- });
1178
  }
1179
 
1180
  /**
1181
  * List of common used functions
1182
  */
1183
  function getChunksArray(arr, len) {
1184
- var chunks = [],
1185
- i = 0,
1186
- n = arr.length;
1187
 
1188
- while (i < n) {
1189
- chunks.push(arr.slice(i, i += len));
1190
- }
1191
 
1192
- return chunks;
1193
  }
1194
  /**
1195
  * We will not use just jQUery.inArray because it is work incorrect for objects
@@ -1205,4 +1106,79 @@ function toeInArray(needle, haystack) {
1205
  return jQuery.inArray(needle, haystack);
1206
  }
1207
  return -1;
1208
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  if(typeof(SDT_DATA) == 'undefined') {
2
+ var SDT_DATA = {};
3
  }
4
 
5
  (function (vendor, $, window) {
6
 
7
+ var appName = 'Tables';
8
+ var dataTableInstances = [];
9
+ var ruleJSInstances = [];
10
 
11
+ if (!(appName in vendor)) {
12
+ vendor[appName] = {};
13
 
14
+ vendor[appName].getAppName = (function() {
15
+ return appName;
16
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
+ vendor[appName].getParameterByName = (function(name) {
19
+ name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
20
 
21
+ var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
22
+ results = regex.exec(location.search);
23
 
24
+ return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
25
+ });
26
 
27
+ vendor[appName].replaceParameterByName = (function(url, paramName, paramValue) {
28
+ var pattern = new RegExp('\\b('+paramName+'=).*?(&|$)');
29
+ if (url.search(pattern) >= 0) {
30
+ return url.replace(pattern,'$1' + paramValue + '$2');
31
+ }
32
+ return url + (url.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue;
33
+ });
34
 
35
+ vendor[appName].getAllTableInstances = (function() {
36
+ return dataTableInstances;
37
+ });
 
38
 
39
+ vendor[appName].setTableInstance = (function(instance) {
40
+ dataTableInstances.push(instance);
41
+ });
42
 
43
+ vendor[appName].getTableInstanceById = (function(id) {
44
+ var allTables = vendor[appName].getAllTableInstances();
 
45
 
46
+ for(var i = 0; i < allTables.length; i++) {
47
+ if(allTables[i].table_id == id) {
48
+ return allTables[i];
49
+ }
50
+ }
51
+ return false;
52
+ });
53
 
54
+ vendor[appName].getTableInstanceByViewId = (function(viewId) {
55
+ var allTables = vendor[appName].getAllTableInstances();
 
56
 
57
+ for(var i = 0; i < allTables.length; i++) {
58
+ if(allTables[i].table_view_id == viewId) {
59
+ return allTables[i];
60
+ }
61
+ }
62
+ return false;
63
+ });
64
 
65
+ vendor[appName].removeTableInstanceByViewId = (function(viewId) {
66
+ var allTables = vendor[appName].getAllTableInstances();
 
67
 
68
+ for(var i = 0; i < allTables.length; i++) {
69
+ if(allTables[i].table_view_id == viewId) {
70
+ allTables.splice(i, 1);
71
+ return true;
72
+ }
73
+ }
74
+ return false;
75
+ });
76
 
77
+ vendor[appName].getAllRuleJSInstances = (function() {
78
+ return ruleJSInstances;
79
+ });
80
 
81
+ vendor[appName].setRuleJSInstance = (function(table) {
82
+ var rootElem = table.closest('.supsystic-tables-wrap'),
83
+ viewId = table.data('view-id');
84
 
85
+ ruleJSInstances[viewId] = new ruleJS(rootElem.attr('id'));
86
+ return ruleJSInstances[viewId];
87
+ });
88
 
89
+ vendor[appName].getRuleJSInstance = (function(table) {
90
+ var allRuleJS = vendor[appName].getAllRuleJSInstances(),
91
+ viewId = table.data('view-id');
 
 
 
 
 
92
 
93
+ if(!allRuleJS[viewId]) {
94
+ vendor[appName].setRuleJSInstance(table);
95
+ }
96
+ return allRuleJS[viewId];
97
+ });
98
 
99
+ vendor[appName].request = (function(route, data) {
100
+ if (!$.isPlainObject(route) || !('module' in route) || !('action' in route)) {
101
+ throw new Error('Request route is not specified.');
102
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
 
104
+ if (!$.isPlainObject(data)) {
105
+ data = {};
106
+ }
 
 
107
 
108
+ if ('action' in data) {
109
+ throw new Error('Reserved field "action" used.');
110
+ }
111
 
112
+ data.action = 'supsystic-tables';
 
 
113
 
114
+ var url = window.ajaxurl ? window.ajaxurl : ajax_obj.ajaxurl,
115
+ request = $.post(url, $.extend({}, { route: route }, data)),
116
+ deferred = $.Deferred();
117
 
118
+ request.done(function (response, textStatus, jqXHR) {
119
+ if (typeof response.success !== 'undefined' && response.success) {
120
+ deferred.resolve(response, textStatus, jqXHR);
121
+ } else {
122
+ var message = 'There are errors during the request.';
123
 
124
+ if (typeof response.message !== 'undefined') {
125
+ message = response.message;
126
+ }
127
 
128
+ deferred.reject(message, textStatus, jqXHR);
129
+ }
130
+ }).fail(function (jqXHR, textStatus, errorThrown) {
131
+ deferred.reject(errorThrown, textStatus, jqXHR);
132
+ });
133
 
134
+ return deferred.promise();
135
+ });
136
 
137
+ vendor[appName].createSpinner = (function(elem) {
138
+ elem = typeof(elem) != 'undefined' ? elem : false;
 
139
 
140
+ if(elem) {
141
+ var icon = elem.find('.fa');
142
 
143
+ if(icon) {
144
+ icon.data('icon', icon.attr('class'));
145
+ icon.attr('class', 'fa fa-spinner fa-spin');
146
+ }
147
+ } else {
148
+ return $('<i/>', { class: 'fa fa-spinner fa-spin' });
149
+ }
150
+ });
151
 
152
+ vendor[appName].deleteSpinner = (function(elem) {
153
+ var icon = elem.find('.fa');
 
 
154
 
155
+ if(icon) {
156
+ icon.attr('class', icon.data('icon'));
157
+ icon.data('icon', '');
158
+ }
159
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
 
161
+ vendor[appName].initializeTable = (function(table, callback, finalCallback, reinit, addInstance) {
162
+ reinit = typeof reinit != 'undefined' ? reinit : {};
163
+ addInstance = typeof addInstance != 'undefined' ? addInstance : true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
 
165
+ var $table = (table instanceof $ ? table : $(table)),
166
+ features = $table.data('features'),
167
+ config = {},
168
+ responsiveMode = $table.data('responsive-mode'),
169
+ searchingSettings = $table.data('searching-settings'),
170
+ tableInstance = {},
171
+ defaultFeatures = {
172
+ autoWidth: false,
173
+ info: false,
174
+ ordering: false,
175
+ paging: false,
176
+ responsive: false,
177
+ searching: false,
178
+ stateSave: false,
179
+ api: true,
180
+ initComplete: callback,
181
+ headerCallback: function( thead, data, start, end, display ) {
182
+ $(thead).closest('thead').find('th').each(function() {
183
+ setStylesToCell(this);
184
+ });
185
+ },
186
+ footerCallback: function( tfoot, data, start, end, display ) {
187
+ $(tfoot).closest('tfoot').find('th').each(function() {
188
+ setStylesToCell(this);
189
+ });
190
+ }
191
+ };
192
+
193
+ // Fix of correct displaying of tables with hidden rows / columns for tables without headers.
194
+ if (!$table.data('head')) {
195
+ $table.find('thead th').each(function(iter, item) {
196
+ var th = $(this),
197
+ itemIndex = iter + 1,
198
+ hidden = true;
199
+
200
+ $table.find('tbody td:nth-child(' + itemIndex + ')').each(function() {
201
+ if(!$(this).hasClass('invisibleCell')) {
202
+ hidden = false;
203
+ return false; // stop current .each() iteration
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
204
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
205
  });
206
+ if(hidden) {
207
+ th.addClass('invisibleCell');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
208
  }
209
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
210
  }
211
+
212
+ // Set features
213
+ $.each(features, function () {
214
+ var featureName = this.replace(/[-_]([a-z])/g, function (g) { return g[1].toUpperCase(); });
215
+ config[featureName] = true;
216
+ });
217
+ if (toeInArray('searching', features) != -1 && searchingSettings) {
218
+ if (searchingSettings.minChars > 0 ||
219
+ searchingSettings.resultOnly ||
220
+ searchingSettings.strictMatching
221
+ ) {
222
+
223
+ $.fn.dataTable.ext.search.push(function(settings, data) {
224
+ var $searchInput = $(settings.nTableWrapper).find('.dataTables_filter input'),
225
+ searchValue = $searchInput.val();
226
+
227
+ if (searchingSettings.resultOnly && searchValue.length === 0) {
228
+ if (searchingSettings.showTable) {
229
+ return false;
230
+ }
231
+ return false;
232
+ }
233
+ if (searchingSettings.strictMatching) {
234
+ searchValue = $.fn.dataTable.util.escapeRegex(searchValue);
235
+ var regExp = new RegExp('^' + searchValue, 'i');
236
+
237
+ for (var i = 0; i < data.length; i++) {
238
+ var words = data[i].replace(/\s\s+/g, ' ').split(' ');
239
+
240
+ for (var j = 0; j < words.length; j++) {
241
+ if (words[j].match(regExp)) {
242
+ return true;
243
+ }
244
+ }
245
+ }
246
+ return false;
247
+ } else {
248
+ return data.join(' ').toLowerCase().indexOf(searchValue.toLowerCase()) !== -1
249
+ }
250
+ });
251
+ $table.on('init.dt', function (event, settings) {
252
+ if (!settings) {
253
+ return;
254
+ }
255
+
256
+ var $tableWrapper = $(settings.nTableWrapper),
257
+ $tableSearchInput = $tableWrapper.find('.dataTables_filter input'),
258
+ $customInput = $tableSearchInput.clone();
259
+
260
+ $tableSearchInput.replaceWith($customInput);
261
+
262
+ $customInput.on('input change', function() {
263
+ if (!searchingSettings.showTable) {
264
+ if (searchingSettings.resultOnly && searchingSettings.minChars && (this.value.length < searchingSettings.minChars || !this.value.length)) {
265
+ $table.hide();
266
+ $table.parent().find('.dataTables_paginate').hide();
267
+ } else {
268
+ $table.show();
269
+ $table.parent().find('.dataTables_paginate').show();
270
+ }
271
+ }
272
+ if (searchingSettings.minChars && (this.value.length < searchingSettings.minChars && this.value.length !== 0)) {
273
+ event.preventDefault();
274
+ return false;
275
+ }
276
+ $table.api().draw();
277
+ });
278
+
279
+ if (searchingSettings.resultOnly && !searchingSettings.showTable) {
280
+ $table.hide();
281
+ $table.parent().find('.dataTables_paginate').hide();
282
+ }
283
+ });
284
+ }
285
+ }
286
+ if (toeInArray('ordering', features) != -1) {
287
+ var sortingEnable = ['_all'],
288
+ sortingDisable = [],
289
+ aaSorting = [],
290
+ multipleSorting = $table.data('multiple-sorting'),
291
+ disableSorting = $table.data('disable-sorting');
292
+
293
+ if (!$table.data('head')) {
294
+ sortingDisable = ['_all'];
295
+ }
296
+ if(disableSorting && disableSorting.length) {
297
+ sortingDisable = disableSorting;
298
+ }
299
+ if (multipleSorting && multipleSorting.length) {
300
+ aaSorting = multipleSorting;
301
+ } else {
302
+ var columnsCount = $table.find('tr:first th').length,
303
+ sortColumn = $table.data('sort-column') || 0,
304
+ sortOrder = $table.data('sort-order') || 'asc',
305
+ columnNumber = sortColumn - 1;
306
+
307
+ if(columnNumber >= 0 && columnNumber < columnsCount) {
308
+ aaSorting.push([columnNumber, sortOrder]);
309
+ }
310
+ }
311
+ config.aoColumnDefs = [
312
+ { aType: 'natural-nohtml-ci', aTargets: '_all' },
313
+ { "bSortable": false, "aTargets": sortingDisable },
314
+ { "bSortable": true, "aTargets": sortingEnable }
315
+ ];
316
+ config.aaSorting = aaSorting;
317
+ }
318
+ if ($table.data('pagination-length')) {
319
+ var paginationLength = String($table.data('pagination-length'));
320
+
321
+ config.aLengthMenu = [];
322
+ config.aLengthMenu.push(paginationLength.replace('All', -1).split(',').map(Number));
323
+ config.aLengthMenu.push(paginationLength.split(','));
324
+ }
325
+ if ($table.data('auto-index') && $table.data('auto-index') !== 'off') {
326
+ $table.on('draw.dt', function() {
327
+ $table.api().column(0).nodes().each(function (cell, i) {
328
+ cell.innerHTML = i + 1;
329
+ });
330
+ });
331
+ }
332
+
333
+ // Set responsive mode
334
+ if (responsiveMode == 0) {
335
+ // Responsive Mode: Standart Responsive Mode
336
+ var labelStyles = '<style>',
337
+ id = '#' + $table.attr('id');
338
+
339
+ // Add header data to each response row
340
+ $table.find('thead th').each(function(index, el) {
341
+ labelStyles += id + '.oneColumnWithLabels td:nth-of-type(' + (index + 1) + '):before { content: "' + $(this).text() + '"; }';
342
+ });
343
+ labelStyles += '</style>';
344
+ $table.append(labelStyles);
345
+
346
+ $(window).on('resize', $table, function(event) {
347
+ event.preventDefault();
348
+ clearTimeout($table.data('resizeTimer'));
349
+
350
+ $table.data('resizeTimer', setTimeout(function() {
351
+ $table.removeClass('oneColumn oneColumnWithLabels');
352
+ var tableWidth = $table.width(),
353
+ wrapperWidth = $table.closest('.supsystic-tables-wrap').width();
354
+ if (tableWidth > wrapperWidth) {
355
+ $table.addClass('oneColumn');
356
+
357
+ if ($table.data('head') == 'on') {
358
+ $table.addClass('oneColumnWithLabels');
359
+ }
360
+ }
361
+ }, 150));
362
+ }).trigger('resize');
363
+ } else if (responsiveMode === 1) {
364
+ // Responsive Mode: Automatic Column Hiding
365
+ config.responsive = {
366
+ details: {
367
+ renderer: function (api, rowIdx, columns) {
368
+ var $table = $(api.table().node()),
369
+ $subTable = $('<table/>');
370
+
371
+ $.each(columns, function (i, col) {
372
+ if (col.hidden) {
373
+ var $cell = $(api.cell(col.rowIndex, col.columnIndex).node()).clone(),
374
+ markup = '<tr data-dt-row="'+col.rowIndex+'" data-dt-column="'+col.columnIndex+'">';
375
+ if ($table.data('head') == 'on') {
376
+ var $headerContent = $(api.table().header()).find('th').eq(col.columnIndex).html();
377
+ markup += '<td>';
378
+ if ($headerContent) {
379
+ markup += $headerContent;
380
+ }
381
+ markup += '</td>';
382
+ }
383
+ markup += '</tr>';
384
+ $cell.after(
385
+ $('<td>')
386
+ .addClass('collapsed-cell-holder')
387
+ .attr('data-cell-row', col.rowIndex)
388
+ .attr('data-cell-column', col.columnIndex)
389
+ .hide()
390
+ );
391
+ $subTable.append($(markup).append($cell.addClass('collapsed').show()));
392
+ }
393
+ });
394
+ return $subTable.is(':empty') ? false : $subTable;
395
+ }
396
+ }
397
+ };
398
+ $table.on('responsive-resize.dt', function(event, api, columns) {
399
+ if ($table.width() > $table.parent().width()) {
400
+ api.responsive.recalc();
401
+ return;
402
+ }
403
+ for (var i = 0, len = columns.length; i < len; i++) {
404
+ if (columns[i]) {
405
+ $table.find('tr > td.collapsed-cell-holder[data-cell-column="' + i + '"]').each(function(index, el) {
406
+ var $this = $(this);
407
+ var $cell = $(api.cell(
408
+ $this.data('cell-row'),
409
+ $this.data('cell-column')
410
+ ).node());
411
+
412
+ if ($cell.hasClass('collapsed')) {
413
+ $cell.removeClass('collapsed');
414
+ $this.replaceWith($cell);
415
+ }
416
+ });
417
+ }
418
+ }
419
+ });
420
+ } else if (responsiveMode === 2) {
421
+ // Responsive Mode: Horizontal Scroll
422
+ config.scrollX = true;
423
+ }
424
+ if(responsiveMode === 2 || responsiveMode === 3) {
425
+ // Responsive Mode: 2 - Horizontal Scroll, 3 - Disable Responsivity
426
+ var fixedHead = $table.data('head') && $table.data('fixed-head'),
427
+ fixedFoot = $table.data('foot') && $table.data('fixed-foot'),
428
+ fixedLeft = $table.data('fixed-left'),
429
+ fixedRight = $table.data('fixed-right');
430
+
431
+ // TODO: correct the code to set fixed header and fixed footer in the standard way
432
+ // TODO: https://datatables.net/extensions/fixedheader/#Features
433
+ //config.fixedHeader = {
434
+ // header: false,
435
+ // footer: false
436
+ //};
437
+ //if (fixedHead) {
438
+ // config.fixedHeader.header = true;
439
+ //}
440
+ //if (fixedFoot) {
441
+ // config.fixedHeader.footer = true;
442
+ //}
443
+ if(fixedHead || fixedFoot) {
444
+ config.scrollY = $table.data('fixed-height');
445
+ config.scrollCollapse = true;
446
+ }
447
+ if ($table.data('fixed-cols')) {
448
+ config.fixedColumns = {
449
+ leftColumns: fixedLeft ? parseInt(fixedLeft) : 0,
450
+ rightColumns: fixedRight ? parseInt(fixedRight) : 0
451
+ };
452
+ config.scrollX = true;
453
+ }
454
+ }
455
+
456
+ // Add translation
457
+ var langData = typeof g_stbTblLangData != 'undefined' ? JSON.parse(g_stbTblLangData) : $table.data('translation'),
458
+ translation = langData || {},
459
+ override = $table.data('override');
460
+
461
+ if(typeof translation != 'object') {
462
+ translation = {}; // for just to be sure that it is object
463
+ }
464
+ $.each(override, function(key, value) {
465
+ if(value.length) {
466
+ translation[key] = value;
467
+ // We need to support old DT format, cuz some languages use it
468
+ translation['s' + key.charAt(0).toUpperCase() + key.substr(1)] = value;
469
+ }
470
+ });
471
+ config.language = translation;
472
+ $table.trigger('beforeInitializeTable', $table);
473
+ tableInstance = $table.dataTable($.extend({}, defaultFeatures, config, reinit));
474
+ tableInstance.table_id = $table.data('id');
475
+ tableInstance.table_view_id = $table.data('view-id');
476
+ tableInstance.fnFakeRowspan();
477
+ // Only after table was inited - we can do this, and only in that way it will work
478
+ _checkOnClickPopups($table);
479
+
480
+ if(addInstance) {
481
+ vendor[appName].setTableInstance(tableInstance);
482
+ }
483
+ if(typeof finalCallback == "function") {
484
+ return finalCallback(tableInstance);
485
+ } else {
486
+ return tableInstance;
487
+ }
488
+ });
489
+
490
+ /** Callback for displaying table after initializing
491
+ * @param {object} settings - DataTables settings object
492
+ * @param {object} json - JSON data retrieved from the server if the ajax option was set. Otherwise undefined.
493
+ */
494
+ vendor[appName].showTable = (function(settings, json) {
495
+ var $table = this instanceof jQuery ? this : settings, // for compatibility with old pro versions
496
+ $tableWrap = $table.closest('.supsystic-tables-wrap'),
497
+ afterTableLoadedScriptString = $table.attr('data-after-table-loaded-script'),
498
+ _ruleJS = vendor[appName].setRuleJSInstance($table),
499
+ responsiveMode = $table.data('responsive-mode'),
500
+ mergedCells = $table.data('merged'),
501
+ fixedHeader = $table.data('fixed-head') == 'on',
502
+ fixedFooter = $table.data('fixed-foot') == 'on',
503
+ fixedColumns = $table.data('fixed-right') > 0 || $table.data('fixed-left') > 0,
504
+ viewId = $table.data('view-id');
505
 
506
  // Apply custom CSS styles, which have been set through the table editor
507
  $table.find('th, td').each(function () {
513
  });
514
  });
515
 
516
+ // Remove sorting visual elements from the tags if there is no header on table
517
+ if (!$table.data('head')) {
518
+ $table.find('th').removeClass('sorting sorting_asc sorting_desc sorting_disabled');
519
+ }
 
 
 
520
 
521
+ // Calculate formulas
522
+ _ruleJS.init();
 
 
 
 
523
 
524
+ // Set formats
525
+ vendor[appName].formatDataAtTable($table);
526
+
527
+ $(document).on('click', '.paginate_button', function () {
528
+ vendor[appName].formatDataAtTable($table);
529
+ });
530
+
531
+ // Show comments on tap
532
+ if ('ontouchstart' in window || navigator.msMaxTouchPoints) {
533
+ $table.find('td, th').on('click', function(e) {
534
+ var title = $(this).attr('title');
535
+
536
+ if (title) {
537
+ var div = $('<div style="' +
538
+ 'display:none;' +
539
+ 'position:absolute;' +
540
+ 'border-radius:6px;' +
541
+ 'background-color:#999;' +
542
+ 'color:white;' +
543
+ 'padding:7px;"/>');
544
+
545
+ div.text(title)
546
+ .appendTo('body')
547
+ .css('top', (e.pageY - 70) + 'px')
548
+ .css('left', (e.pageX + 20) + 'px')
549
+ .fadeIn('slow');
550
+
551
+ setTimeout(function() {
552
+ div.fadeOut();
553
+ }, 1200);
554
+ }
555
+ });
556
+ }
557
+
558
+ // Frontend fields
559
+ if (typeof(vendor[appName].createEditableFields) == 'function') { // for compatibility with old pro versions
560
+ var $editableFields = $tableWrap.find('.editable'),
561
+ $selectableFields = $tableWrap.find('.selectable'),
562
+ $tableId = $table.data('id'),
563
+ useEditableFields = typeof(useEdit) != 'undefined' && typeof(useEdit[$tableId]) != 'undefined'
564
+ ? useEdit[$tableId]
565
+ : false;
566
+
567
+ if(useEditableFields) {
568
+ if (typeof(vendor[appName].setFrontendFields) == 'function') {
569
+ vendor[appName].setFrontendFields($table);
570
+ } else if (typeof(vendor[appName].setAllFields) == 'function') {
571
+ vendor[appName].setAllFields($table, $editableFields, $selectableFields);
572
+ } else {
573
+ vendor[appName].createEditableFields($table, $editableFields);
574
+ }
575
+ } else if(SDT_DATA.isAdmin && SDT_DATA.isPro) {
576
+ if (typeof(vendor[appName].setFrontendFields) == 'function') {
577
+ vendor[appName].setFrontendFields($table);
578
+ } else if (typeof(vendor[appName].setAllFields) == 'function') {
579
+ vendor[appName].createEditableFields($table, $editableFields);
580
+ vendor[appName].createSelectableFields($table, $selectableFields);
581
+ } else {
582
+ vendor[appName].createEditableFields($table, $editableFields);
583
+ }
584
+ }
585
+ $table.on('init.dt', function() {
586
+ $table.on('responsive-resize.dt responsive-display.dt draw.dt', function() {
587
+ $editableFields.off('click.sup'); // for compatibility with old pro versions
588
+ vendor[appName].updateAfterRedraw($table);
589
+ });
590
+ });
591
+ }
592
+ $table.trigger('beforeShowTable', $table);
593
+
594
+ // Show table
595
+ $tableWrap.prev('.supsystic-table-loader').hide();
596
+ $tableWrap.css('visibility', 'visible');
597
 
598
+ vendor[appName].fixSortingForMultipleHeader($table);
599
+
600
+ if(responsiveMode === 2 || fixedHeader || fixedFooter) {
601
+
602
+ // Responsive Mode: Horizontal Scroll
603
+ $(window).on('resize', $table, function(event) {
604
+ var tBody = $tableWrap.find('.dataTables_scrollBody'),
605
+ tBodyTable = tBody.find('.supsystic-table');
606
+ if(tBody.width() > tBodyTable.width() || $tableWrap.width() > tBodyTable.width()) {
607
+ tBody.width(tBodyTable.width());
608
+ //plus one px to avoid displaying scroll
609
+ $tableWrap.find('.dataTables_scrollHead, .dataTables_scrollFoot, .dataTables_scrollBody').width(tBodyTable.width() + 1);
610
+ }
611
+ if( tBodyTable.isHorizontallyScrollable ){
612
+ tBody.css({'border-bottom' : 'none'});
613
+ }else{
614
+ tBody.removeStyle('border-bottom');
615
+ }
616
+ }).trigger('resize');
617
+
618
+ // need resize twice to get better frontend view
619
+ var tBody = $tableWrap.find('.dataTables_scrollBody'),
620
+ tBodyTable = tBody.find('.supsystic-table');
621
+
622
+ if(tBodyTable.is(":visible")){
623
+ setTimeout(function() {
624
+ $(window).trigger('resize');
625
+ }, 200);
626
+ }
627
+
628
+ }
629
+ // Correct width of fixed header / footer
630
+ if(fixedHeader || fixedFooter) {
631
+ $table.api().fixedHeader.adjust();
632
+
633
+ var i = 1;
634
+ setTimeout(function() {
635
+ var flag = fixedHeader,
636
+ el = fixedHeader
637
+ ? $tableWrap.find('.dataTables_scrollHead table thead tr:first-child th')
638
+ : $tableWrap.find('.dataTables_scrollFoot table tfoot tr:first-child th');
639
+
640
+ el.each(function() {
641
+ var thWidth = $tableWrap.find('.dataTables_scrollBody table tbody tr:first-child td:nth-child('+ i + ')');
642
+
643
+ $(this).css({
644
+ 'width': thWidth.outerWidth(),
645
+ 'min-width': thWidth.outerWidth(),
646
+ 'box-sizing': 'border-box'
647
  });
648
+ if(fixedFooter && flag){
649
+ var footerEl = $tableWrap.find('.dataTables_scrollFoot table tfoot tr:first-child th:nth-child('+ i + ')');
650
+ footerEl.css({
651
+ 'width': thWidth.outerWidth(),
652
+ 'min-width': thWidth.outerWidth(),
653
+ 'box-sizing': 'border-box'
654
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
655
  }
 
 
 
 
 
 
 
 
 
 
 
 
656
  i++;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
657
  });
658
+ }, 200);
659
+ }
660
+
661
+ // Correct width of fixed columns
662
+ if(fixedColumns) {
663
+ $table.api().fixedColumns().relayout();
664
+
665
+ var tableCaption = $('.dataTables_scrollHead caption');
666
+
667
+ if(tableCaption.length) {
668
+ // Fix for displaying of caption for tables with fixed columns
669
+ var fixedColumnsWrapper = $('#supsystic-table-' + viewId + ' .DTFC_LeftWrapper, #supsystic-table-' + viewId + ' .DTFC_RightWrapper');
670
+
671
+ fixedColumnsWrapper.find('caption').css({ display: 'none' });
672
+ fixedColumnsWrapper.css({ top: tableCaption.height() + 'px' });
673
+ }
674
+ }
675
+ /* Fix for Horizontal scroll responsive mode if table has different width for one column in header and body */
676
+ if(!fixedHeader && !fixedFooter && responsiveMode === 2 && toeInArray('auto_width', $table.data('features')) == -1) {
677
+ $tableWrap.find('.dataTables_scrollBody table thead tr:first-child th').each(function() {
678
+ var tableWidth = $table.width(),
679
+ tableWrapWidth = $tableWrap.width();
680
+
681
+ if(tableWrapWidth > tableWidth){
682
+ $tableWrap
683
+ .find('.dataTables_scrollHeadInner, .dataTables_scrollBody, .dataTables_scrollFootInner')
684
+ .addClass('fit-content');
685
+ }
686
+ });
687
+ }
688
+
689
+ // Load user custom scripts
690
+ if (afterTableLoadedScriptString !== undefined) {
691
  afterTableLoadedScriptString = afterTableLoadedScriptString.substring(1, afterTableLoadedScriptString.length - 1);
692
 
693
+ var afterTableLoadedScript = b64DecodeUnicode(afterTableLoadedScriptString).replace(/"/g, "'"),
694
+ executeScript = new Function(afterTableLoadedScript);
695
 
696
+ if (typeof executeScript === "function") {
697
  setTimeout(function() {
698
+ executeScript();
699
  }, 1000);
700
+ }
701
+ }
702
+
703
+ function b64DecodeUnicode(str) {
704
+ return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {
705
+ return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
706
+ }).join(''));
707
+ }
708
+ });
709
 
710
  // Callback for executing script after table is initialized
711
+ vendor[appName].executeScript = (function(table) {
712
  var $table = (table instanceof $ ? table : $(table)),
713
+ $tableWrap = $table.closest('.supsystic-tables-wrap');
 
714
 
715
+ vendor[appName].getRuleJSInstance($table).init();
716
  $tableWrap.prev('.supsystic-table-loader').hide();
717
  $tableWrap.css('visibility', 'visible');
718
  });
719
 
720
+ vendor[appName].fixSortingForMultipleHeader = (function(table) {
721
+ if(table.data('head-rows-count') > 1 && table.data('sort-order')) {
722
+ var thead = table.find('thead tr').get().reverse();
723
+
724
+ // Fix of sorting for table with multiple header (when header has more than 1 row)
725
+ if(table.data('head')) {
726
+ $.each(table.find('thead tr:last-child th'), function (index, element) {
727
+ var th = $(element),
728
+ nthChild = index + 1;
729
+
730
+ if(th.data('hide')) {
731
+ $(thead).each(function() {
732
+ var item = $(this).find('th:nth-child(' + nthChild + ')');
733
+
734
+ if(!item.data('hide')) {
735
+ item.addClass('sorting');
736
+ item.click(function() {
737
+ th.trigger('click');
738
+ if(th.hasClass('sorting')) {
739
+ item.removeClass('sorting_asc');
740
+ item.removeClass('sorting_desc');
741
+ item.addClass('sorting');
742
+ } else if(th.hasClass('sorting_asc')) {
743
+ item.removeClass('sorting');
744
+ item.removeClass('sorting_desc');
745
+ item.addClass('sorting_asc');
746
+ } else if(th.hasClass('sorting_desc')) {
747
+ item.removeClass('sorting');
748
+ item.removeClass('sorting_asc');
749
+ item.addClass('sorting_desc');
750
+ }
751
+ });
752
+ return false; // stop .each() function
753
+ }
754
+ });
755
+ }
756
+ });
757
+ }
758
+ // Fix of displaying the footer if table has multiple header
759
+ /*if(table.data('foot')) {
760
+ var newFooter = [];
761
+
762
+ $.each(table.find('tfoot tr th'), function (index, element) {
763
+ var nthChild = index + 1;
764
+
765
+ $(thead).each(function() {
766
+ var item = $(this).find('th:nth-child(' + nthChild + ')');
767
+
768
+ if(item.is(':visible')) {
769
+ newFooter.push(item.clone());
770
+ return false; // stop .each() function
771
+ }
772
+ });
773
+
774
+ });
775
+ table.find('tfoot').html(newFooter);
776
+ }*/
777
+ }
778
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
779
 
780
+ vendor[appName].formatDataAtTable = (function(table) {
781
+ var numberFormat = table.data('number-format'),
782
+ generalCurrencyFormat = table.data('currency-format'),
783
+ generalPercentFormat = table.data('percent-format'),
784
+ generalDateFormat = table.data('date-format'),
785
+ generalTimeFormat = table.data('time-format'),
786
+ skipFirstCol = table.data('auto-index') != 'off',
787
+ hasCollapsedCells = table.data('responsive-mode') == 1 && table.hasClass('collapsed');
788
+
789
+ table.find('td').each(function(index, el) {
790
+ var $this = $(this);
791
+
792
+ if((skipFirstCol && $this.is(':first-child')) || (hasCollapsedCells && $this.hasClass('child'))) {
793
+ // Break current .each iteration
794
+ return;
795
+ }
796
+
797
+ var languageData = numeral.languageData(),
798
+ format = $this.data('cell-format'),
799
+ formatType = $this.data('cell-format-type'),
800
+ preparedFormat,
801
+ delimiters,
802
+ value = $.trim($this.html()),
803
+ noFormat = false;
804
+
805
+ if(value && formatType == 'date' && $this.data('cell-reformat')) {
806
+ var newDate = moment(value, format);
807
+ if (newDate.isValid()) {
808
+ value = newDate.format(generalDateFormat);
809
+
810
+ $this.data('cell-format', generalDateFormat);
811
+ $this.attr('data-cell-format',generalDateFormat);
812
+
813
+ $this.data('original-value', value);
814
+ $this.attr('data-original-value',value);
815
+
816
+ $this.data('order', value);
817
+ $this.attr('data-order',value);
818
+
819
+ $this.data('cell-reformat', false);
820
+ $this.attr('data-cell-reformat',value);
821
+ }
822
+ } else if(value && formatType == 'time_duration' && $this.data('cell-reformat')) {
823
+ var newTime = moment(value, format),
824
+ isValid = false;
825
+ // console.log(newTime);
826
+
827
+ if (newTime.isValid()) {
828
+ value = newTime.format(generalTimeFormat);
829
+ isValid = true;
830
+ } else {
831
+ newTime = moment.duration(value);
832
+ if (newTime._milliseconds || value == 0) {
833
+ value = newTime.format(generalTimeFormat);
834
+ isValid = true;
835
+ }
836
+ }
837
+ if(isValid) {
838
+ $this.data('cell-format',generalTimeFormat);
839
+ $this.attr('data-cell-format',generalTimeFormat);
840
+
841
+ $this.data('original-value',value);
842
+ $this.attr('data-original-value',value);
843
+
844
+ $this.data('order',value);
845
+ $this.attr('data-order',value);
846
+
847
+ $this.data('cell-reformat',false);
848
+ $this.attr('data-cell-reformat',value);
849
+ }
850
+ } else if(value && value.toString().match(/^-{0,1}\d+\.{0,1}\d*$/) && !isNaN(value)) {
851
+ numberFormat = numberFormat ? numberFormat.toString() : '';
852
+
853
+ switch(formatType) {
854
+ case 'percent':
855
+ format = format ? format : generalPercentFormat;
856
+
857
+ if(format) {
858
+ format = format.toString();
859
+
860
+ var clearFormat = format.indexOf('%') > -1 ? format.replace('%', '') : format;
861
+
862
+ value = value.indexOf('%') > -1 ? $this.data('original-value') : value;
863
+ delimiters = (clearFormat.match(/[^\d]/g) || [',', '.']).reverse();
864
+ languageData.delimiters = {
865
+ decimal: delimiters[0], thousands: delimiters[1]
866
+ };
867
+
868
+ // We need to use dafault delimiters for format string
869
+ preparedFormat = format.replace(clearFormat, clearFormat.replace(delimiters[0], '.').replace(delimiters[1], ','));
870
+ } else {
871
+ noFormat = true;
872
+ }
873
+ break;
874
+ case 'currency':
875
+ format = format ? format : generalCurrencyFormat;
876
+
877
+ if(format) {
878
+ format = format.toString();
879
+
880
+ var formatWithoutCurrency = format.match(/\d.?\d*.?\d*/)[0],
881
+ currencySymbol = format.replace(formatWithoutCurrency, '') || '$'; // We need to set currency symbol in any case for normal work of numeraljs
882
+
883
+ delimiters = (formatWithoutCurrency.match(/[^\d]/g) || [',', '.']).reverse();
884
+
885
+ languageData.delimiters = {
886
+ decimal: delimiters[0],
887
+ thousands: delimiters[1]
888
+ };
889
+ languageData.currency.symbol = currencySymbol;
890
+ // We need to use dafault delimiters for format string
891
+ preparedFormat = format
892
+ .replace(formatWithoutCurrency, formatWithoutCurrency
893
+ .replace(delimiters[0], '.')
894
+ .replace(delimiters[1], ','))
895
+ .replace(currencySymbol, '$');
896
+ } else {
897
+ noFormat = true;
898
+ }
899
+ break;
900
+ case 'date':case 'time_duration':
901
+ noFormat = true;
902
+ break;
903
+ default:
904
+ if(numberFormat) {
905
+ format = numberFormat;
906
+ delimiters = (format.match(/[^\d]/g) || [',', '.']).reverse();
907
+ languageData.delimiters = {
908
+ decimal: delimiters[0]
909
+ , thousands: delimiters[1]
910
+ };
911
+
912
+ // We need to use dafault delimiters for format string
913
+ preparedFormat = format.replace(format, format.replace(delimiters[0], '.').replace(delimiters[1], ','));
914
+ break;
915
+ } else {
916
+ noFormat = true;
917
+ }
918
+ break;
919
+ }
920
+ if(noFormat) {
921
+ noFormat = false;
922
+ } else {
923
+ numeral.language('en', languageData);
924
+ value = numeral(value).format(preparedFormat);
925
+ }
926
+ }
927
+ $this.html(value);
928
+ });
929
+ });
930
 
931
+ vendor[appName].isNumber = (function(value) {
932
+ if (value) {
933
+ if (value.toString().match(/^-{0,1}\d+\.{0,1}\d*$/)) {
934
+ return true;
935
+ }
936
+ }
937
+ return false;
938
+ });
939
 
940
+ vendor[appName].Base64 = {
941
+ _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
942
+ encode : function (input) {
943
+ var output = "";
944
+ var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
945
+ var i = 0;
946
+
947
+ input = vendor[appName].Base64._utf8_encode(input);
948
+
949
+ while (i < input.length) {
950
+
951
+ chr1 = input.charCodeAt(i++);
952
+ chr2 = input.charCodeAt(i++);
953
+ chr3 = input.charCodeAt(i++);
954
+
955
+ enc1 = chr1 >> 2;
956
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
957
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
958
+ enc4 = chr3 & 63;
959
+
960
+ if (isNaN(chr2)) {
961
+ enc3 = enc4 = 64;
962
+ } else if (isNaN(chr3)) {
963
+ enc4 = 64;
964
+ }
965
+
966
+ output = output +
967
+ this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
968
+ this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
969
+
970
+ }
971
+
972
+ return output;
973
+ },
974
+ // private method for UTF-8 encoding
975
+ _utf8_encode : function (string) {
976
+ string = string.replace(/\r\n/g,"\n");
977
+ var utftext = "";
978
+
979
+ for (var n = 0; n < string.length; n++) {
980
+
981
+ var c = string.charCodeAt(n);
982
+
983
+ if (c < 128) {
984
+ utftext += String.fromCharCode(c);
985
+ }
986
+ else if((c > 127) && (c < 2048)) {
987
+ utftext += String.fromCharCode((c >> 6) | 192);
988
+ utftext += String.fromCharCode((c & 63) | 128);
989
+ }
990
+ else {
991
+ utftext += String.fromCharCode((c >> 12) | 224);
992
+ utftext += String.fromCharCode(((c >> 6) & 63) | 128);
993
+ utftext += String.fromCharCode((c & 63) | 128);
994
+ }
995
+
996
+ }
997
+
998
+ return utftext;
999
+ }
1000
+ };
1001
+ }
1002
 
1003
  }(window.supsystic = window.supsystic || {}, window.jQuery, window));
1004
 
1005
  // Apply styles to cell from its classes
1006
  function classesRegexp() {
1007
+ return {
1008
+ color: /color\-([0-9a-f]{6})/,
1009
+ background: /bg\-([0-9a-f]{6})/,
1010
+ fontFamily: /ffamily\-([a-z_]+)/i,
1011
+ fontSize: /fsize\-([0-9]+)/
1012
+ }
1013
  }
1014
  function setStylesToCell(cell) {
1015
+ var $cell = jQuery(cell),
1016
+ viewId = $cell.parents('.supsystic-table:first').data('view-id'),
1017
+ classes = classesRegexp(),
1018
+ color = classes.color.exec(cell.className),
1019
+ background = classes.background.exec(cell.className),
1020
+ fontFamily = classes.fontFamily.exec(cell.className),
1021
+ fontSize = classes.fontSize.exec(cell.className);
1022
+
1023
+ if (null !== color) {
1024
+ $cell.css({color: '#' + color[1]});
1025
+ }
1026
+ if (null !== background) {
1027
+ $cell.css({backgroundColor: '#' + background[1]});
1028
+ }
1029
+ if (null !== fontFamily) {
1030
+ var family = fontFamily[1].replace(/_/g, ' '),
1031
+ familyName = fontFamily[1].replace(/_/g, '+'),
1032
+ familyString = '@import url("//fonts.googleapis.com/css?family=' + familyName + '");',
1033
+ style = getFrontendCellStylesElem(viewId);
1034
+
1035
+ if(g_stbStandartFontsList
1036
+ && toeInArray(family, g_stbStandartFontsList) == -1
1037
+ && style.text().indexOf(familyString) == -1
1038
+ ) {
1039
+ style.text(familyString + '\n' + style.text());
1040
+ }
1041
+ $cell.css({fontFamily: family});
1042
+ }
1043
+ if (null !== fontSize) {
1044
+ var lineHeight = +fontSize[1] + 6;
1045
+ $cell.css({fontSize: fontSize[1] + 'px', lineHeight: lineHeight + 'px'});
1046
+ }
1047
  }
1048
  // Get editor styles element
1049
  function getFrontendCellStylesElem(viewId) {
1050
+ var $style = jQuery('#supsystic-table-' + viewId + '-css');
1051
 
1052
+ if (!$style.length) {
1053
+ $style = jQuery('<style/>', { id: 'supsystic-table-' + viewId + '-css' });
1054
+ jQuery('head').append($style);
1055
+ }
1056
+ return $style;
1057
  }
1058
  function getAdminCellStylesElem() {
1059
+ var $style = jQuery('#supsystic-tables-style');
1060
 
1061
+ if (!$style.length) {
1062
+ $style = jQuery('<style/>', { id: 'supsystic-tables-style' });
1063
+ jQuery('head').append($style);
1064
+ }
1065
+ return $style;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1066
  }
1067
+
1068
  /**
1069
  * Integration with our PopUp plugin
1070
  */
1071
  function _checkOnClickPopups( $table ) {
1072
+ if(typeof(_ppsBindOnElementClickPopups) !== 'undefined' && $table && $table.size()) {
1073
+ var $bindedLinks = $table.find('[href*="#ppsShowPopUp_"].ppsClickBinded');
1074
+ if($bindedLinks && $bindedLinks.size()) {
1075
+ $bindedLinks.removeClass('ppsClickBinded').unbind('click');
1076
+ }
1077
+ _ppsBindOnElementClickPopups();
1078
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
1079
  }
1080
 
1081
  /**
1082
  * List of common used functions
1083
  */
1084
  function getChunksArray(arr, len) {
1085
+ var chunks = [],
1086
+ i = 0,
1087
+ n = arr.length;
1088
 
1089
+ while (i < n) {
1090
+ chunks.push(arr.slice(i, i += len));
1091
+ }
1092
 
1093
+ return chunks;
1094
  }
1095
  /**
1096
  * We will not use just jQUery.inArray because it is work incorrect for objects
1106
  return jQuery.inArray(needle, haystack);
1107
  }
1108
  return -1;
1109
+ }
1110
+
1111
+ (function($) {
1112
+
1113
+ /**
1114
+ * Detects whether element can be scrolled vertically.
1115
+ * @this jQuery
1116
+ * @return {boolean}
1117
+ */
1118
+ $.fn.isVerticallyScrollable = function() {
1119
+
1120
+ if (this.scrollTop()) {
1121
+ // Element is already scrolled, so it is scrollable
1122
+ return true;
1123
+ } else {
1124
+ // Test by actually scrolling
1125
+ this.scrollTop(1);
1126
+
1127
+ if (this.scrollTop()) {
1128
+ // Scroll back
1129
+ this.scrollTop(0);
1130
+ return true;
1131
+ }
1132
+ }
1133
+
1134
+ return false;
1135
+ };
1136
+
1137
+ /**
1138
+ * Detects whether element can be scrolled horizontally.
1139
+ * @this jQuery
1140
+ * @return {boolean}
1141
+ */
1142
+ $.fn.isHorizontallyScrollable = function() {
1143
+
1144
+ if (this.scrollLeft()) {
1145
+ // Element is already scrolled, so it is scrollable
1146
+ return true;
1147
+ } else {
1148
+ // Test by actually scrolling
1149
+ this.scrollLeft(1);
1150
+
1151
+ if (this.scrollLeft()) {
1152
+ // Scroll back
1153
+ this.scrollLeft(0);
1154
+ return true;
1155
+ }
1156
+ }
1157
+ return false;
1158
+ };
1159
+
1160
+ $.extend($.expr.pseudos || $.expr[ ":" ], {
1161
+ "vertically-scrollable": function(a, i, m) {
1162
+ return $(a).isVerticallyScrollable();
1163
+ },
1164
+ "horizontally-scrollable": function(a, i, m) {
1165
+ return $(a).isHorizontallyScrollable();
1166
+ }
1167
+ });
1168
+ })(jQuery);
1169
+
1170
+ (function($)
1171
+ {
1172
+ $.fn.removeStyle = function(style)
1173
+ {
1174
+ var search = new RegExp(style + '[^;]+;?', 'g');
1175
+
1176
+ return this.each(function()
1177
+ {
1178
+ $(this).attr('style', function(i, style)
1179
+ {
1180
+ return style && style.replace(search, '');
1181
+ });
1182
+ });
1183
+ };
1184
+ }(jQuery));
src/SupsysticTables/Core/assets/js/lib/dataTables.customExtensions.js ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function ($, app) {
2
+ $.fn.dataTableExt.oApi.fnFakeRowspan = function (oSettings) {
3
+ var cells;
4
+ $.each(oSettings.aoData, function(index, rowData) {
5
+ setCellAttributes(rowData.anCells);
6
+ });
7
+ if (oSettings.aoHeader.length) {
8
+ cells = [];
9
+ $.each(oSettings.aoHeader, function(index, rowData) {
10
+ $.each(rowData, function(index, cellData) {
11
+ cells.push(cellData.cell);
12
+ });
13
+ });
14
+ setCellAttributes(cells);
15
+ }
16
+ if (oSettings.aoFooter.length) {
17
+ cells = [];
18
+ $.each(oSettings.aoFooter, function(index, rowData) {
19
+ $.each(rowData, function(index, cellData) {
20
+ cells.push(cellData.cell);
21
+ });
22
+ });
23
+ setCellAttributes(cells);
24
+ }
25
+ return this;
26
+ };
27
+
28
+ $.extend( $.fn.dataTableExt.oSort, {
29
+ "natural-asc": function ( a, b ) {
30
+ return naturalSort(a,b,true);
31
+ },
32
+ "natural-desc": function ( a, b ) {
33
+ return naturalSort(a,b,true) * -1;
34
+ },
35
+ "natural-nohtml-asc": function( a, b ) {
36
+ return naturalSort(a,b,false);
37
+ },
38
+ "natural-nohtml-desc": function( a, b ) {
39
+ return naturalSort(a,b,false) * -1;
40
+ },
41
+ "natural-ci-asc": function( a, b ) {
42
+ a = a.toString().toLowerCase();
43
+ b = b.toString().toLowerCase();
44
+
45
+ return naturalSort(a,b,true);
46
+ },
47
+ "natural-ci-desc": function( a, b ) {
48
+ a = a.toString().toLowerCase();
49
+ b = b.toString().toLowerCase();
50
+
51
+ return naturalSort(a,b,true) * -1;
52
+ },
53
+ "natural-nohtml-ci-asc": function( a, b ) {
54
+ a = a.toString().toLowerCase();
55
+ b = b.toString().toLowerCase();
56
+
57
+ return naturalSort(a,b,false);
58
+ },
59
+ "natural-nohtml-ci-desc": function( a, b ) {
60
+ a = a.toString().toLowerCase();
61
+ b = b.toString().toLowerCase();
62
+
63
+ return naturalSort(a,b,false) * -1;
64
+ }
65
+ } );
66
+
67
+ function setCellAttributes(cellArray) {
68
+ for (var i = 0; i < cellArray.length; i++) {
69
+ if (cellArray[i].getAttribute('data-hide')) {
70
+ cellArray[i].style.display = 'none';
71
+ }
72
+ if (colspan = cellArray[i].getAttribute('data-colspan')) {
73
+ if (colspan > 1) {
74
+ cellArray[i].setAttribute('colspan', colspan);
75
+ }
76
+ }
77
+ if (rowspan = cellArray[i].getAttribute('data-rowspan')) {
78
+ if (rowspan > 1) {
79
+ cellArray[i].setAttribute('rowspan', rowspan);
80
+ }
81
+ }
82
+ }
83
+ }
84
+
85
+ // Custom Natural Sort Function
86
+ // see https://datatables.net/plug-ins/sorting/natural
87
+ function naturalSort (a, b, html) {
88
+ var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?%?$|^0x[0-9a-f]+$|[0-9]+)/gi,
89
+ sre = /(^[ ]*|[ ]*$)/g,
90
+ dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,
91
+ hre = /^0x[0-9a-f]+$/i,
92
+ ore = /^0/,
93
+ htmre = /(<([^>]+)>)/ig,
94
+ // convert all to strings and trim()
95
+ x = a.toString().replace(sre, '') || '',
96
+ y = b.toString().replace(sre, '') || '';
97
+ // remove html from strings if desired
98
+ if (!html) {
99
+ x = x.replace(htmre, '');
100
+ y = y.replace(htmre, '');
101
+ }
102
+ // chunk/tokenize
103
+ var xN = x.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
104
+ yN = y.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
105
+ // numeric, hex or date detection
106
+ xD = parseInt(x.match(hre), 10) || (xN.length !== 1 && x.match(dre) && Date.parse(x)),
107
+ yD = parseInt(y.match(hre), 10) || xD && y.match(dre) && Date.parse(y) || null;
108
+
109
+ // first try and sort Hex codes or Dates
110
+ if (yD) {
111
+ if ( xD < yD ) {
112
+ return -1;
113
+ }
114
+ else if ( xD > yD ) {
115
+ return 1;
116
+ }
117
+ }
118
+
119
+ // natural sorting through split numeric strings and default strings
120
+ for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {
121
+ // find floats not starting with '0', string or 0 if not defined (Clint Priest)
122
+
123
+ /*supsystic*/
124
+ //var oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc], 10) || xN[cLoc] || 0;
125
+ //var oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc], 10) || yN[cLoc] || 0;
126
+ var oFxNcL = parseFloat(xN[cLoc], 10) || xN[cLoc] || 0;
127
+ var oFyNcL = parseFloat(yN[cLoc], 10) || yN[cLoc] || 0;
128
+ /*****/
129
+
130
+ // handle numeric vs string comparison - number < string - (Kyle Adams)
131
+ if (isNaN(oFxNcL) !== isNaN(oFyNcL)) {
132
+ return (isNaN(oFxNcL)) ? 1 : -1;
133
+ }
134
+ // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'
135
+ else if (typeof oFxNcL !== typeof oFyNcL) {
136
+ oFxNcL += '';
137
+ oFyNcL += '';
138
+ }
139
+ if (oFxNcL < oFyNcL) {
140
+ return -1;
141
+ }
142
+ if (oFxNcL > oFyNcL) {
143
+ return 1;
144
+ }
145
+ }
146
+ return 0;
147
+ }
148
+
149
+ }(window.jQuery, window.supsystic.Tables));
src/SupsysticTables/Core/assets/js/lib/dataTables.fixedColumns.min.js ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ FixedColumns 3.2.2
3
+ ©2010-2016 SpryMedia Ltd - datatables.net/license
4
+ */
5
+ (function(d){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(q){return d(q,window,document)}):"object"===typeof exports?module.exports=function(q,r){q||(q=window);if(!r||!r.fn.dataTable)r=require("datatables.net")(q,r).$;return d(r,q,q.document)}:d(jQuery,window,document)})(function(d,q,r,t){var s=d.fn.dataTable,u,m=function(a,b){var c=this;if(this instanceof m){if(b===t||!0===b)b={};var e=d.fn.dataTable.camelToHungarian;e&&(e(m.defaults,m.defaults,!0),e(m.defaults,
6
+ b));e=(new d.fn.dataTable.Api(a)).settings()[0];this.s={dt:e,iTableColumns:e.aoColumns.length,aiOuterWidths:[],aiInnerWidths:[],rtl:"rtl"===d(e.nTable).css("direction")};this.dom={scroller:null,header:null,body:null,footer:null,grid:{wrapper:null,dt:null,left:{wrapper:null,head:null,body:null,foot:null},right:{wrapper:null,head:null,body:null,foot:null}},clone:{left:{header:null,body:null,footer:null},right:{header:null,body:null,footer:null}}};if(e._oFixedColumns)throw"FixedColumns already initialised on this table";
7
+ e._oFixedColumns=this;e._bInitComplete?this._fnConstruct(b):e.oApi._fnCallbackReg(e,"aoInitComplete",function(){c._fnConstruct(b)},"FixedColumns")}else alert("FixedColumns warning: FixedColumns must be initialised with the 'new' keyword.")};d.extend(m.prototype,{fnUpdate:function(){this._fnDraw(!0)},fnRedrawLayout:function(){this._fnColCalc();this._fnGridLayout();this.fnUpdate()},fnRecalculateHeight:function(a){delete a._DTTC_iHeight;a.style.height="auto"},fnSetRowHeight:function(a,b){a.style.height=
8
+ b+"px"},fnGetPosition:function(a){var b=this.s.dt.oInstance;if(d(a).parents(".DTFC_Cloned").length){if("tr"===a.nodeName.toLowerCase())return a=d(a).index(),b.fnGetPosition(d("tr",this.s.dt.nTBody)[a]);var c=d(a).index(),a=d(a.parentNode).index();return[b.fnGetPosition(d("tr",this.s.dt.nTBody)[a]),c,b.oApi._fnVisibleToColumnIndex(this.s.dt,c)]}return b.fnGetPosition(a)},_fnConstruct:function(a){var b=this;if("function"!=typeof this.s.dt.oInstance.fnVersionCheck||!0!==this.s.dt.oInstance.fnVersionCheck("1.8.0"))alert("FixedColumns "+
9
+ m.VERSION+" required DataTables 1.8.0 or later. Please upgrade your DataTables installation");else if(""===this.s.dt.oScroll.sX)this.s.dt.oInstance.oApi._fnLog(this.s.dt,1,"FixedColumns is not needed (no x-scrolling in DataTables enabled), so no action will be taken. Use 'FixedHeader' for column fixing when scrolling is not enabled");else{this.s=d.extend(!0,this.s,m.defaults,a);a=this.s.dt.oClasses;this.dom.grid.dt=d(this.s.dt.nTable).parents("div."+a.sScrollWrapper)[0];this.dom.scroller=d("div."+
10
+ a.sScrollBody,this.dom.grid.dt)[0];this._fnColCalc();this._fnGridSetup();var c,e=!1;d(this.s.dt.nTableWrapper).on("mousedown.DTFC",function(){e=!0;d(r).one("mouseup",function(){e=!1})});d(this.dom.scroller).on("mouseover.DTFC touchstart.DTFC",function(){e||(c="main")}).on("scroll.DTFC",function(a){!c&&a.originalEvent&&(c="main");if("main"===c&&(0<b.s.iLeftColumns&&(b.dom.grid.left.liner.scrollTop=b.dom.scroller.scrollTop),0<b.s.iRightColumns))b.dom.grid.right.liner.scrollTop=b.dom.scroller.scrollTop});
11
+ var f="onwheel"in r.createElement("div")?"wheel.DTFC":"mousewheel.DTFC";if(0<b.s.iLeftColumns)d(b.dom.grid.left.liner).on("mouseover.DTFC touchstart.DTFC",function(){e||(c="left")}).on("scroll.DTFC",function(a){!c&&a.originalEvent&&(c="left");"left"===c&&(b.dom.scroller.scrollTop=b.dom.grid.left.liner.scrollTop,0<b.s.iRightColumns&&(b.dom.grid.right.liner.scrollTop=b.dom.grid.left.liner.scrollTop))}).on(f,function(a){b.dom.scroller.scrollLeft-="wheel"===a.type?-a.originalEvent.deltaX:a.originalEvent.wheelDeltaX});
12
+ if(0<b.s.iRightColumns)d(b.dom.grid.right.liner).on("mouseover.DTFC touchstart.DTFC",function(){e||(c="right")}).on("scroll.DTFC",function(a){!c&&a.originalEvent&&(c="right");"right"===c&&(b.dom.scroller.scrollTop=b.dom.grid.right.liner.scrollTop,0<b.s.iLeftColumns&&(b.dom.grid.left.liner.scrollTop=b.dom.grid.right.liner.scrollTop))}).on(f,function(a){b.dom.scroller.scrollLeft-="wheel"===a.type?-a.originalEvent.deltaX:a.originalEvent.wheelDeltaX});d(q).on("resize.DTFC",function(){b._fnGridLayout.call(b)});
13
+ var g=!0,h=d(this.s.dt.nTable);h.on("draw.dt.DTFC",function(){b._fnColCalc();b._fnDraw.call(b,g);g=!1}).on("column-sizing.dt.DTFC",function(){b._fnColCalc();b._fnGridLayout(b)}).on("column-visibility.dt.DTFC",function(a,c,d,e,f){if(f===t||f)b._fnColCalc(),b._fnGridLayout(b),b._fnDraw(!0)}).on("select.dt.DTFC deselect.dt.DTFC",function(a){"dt"===a.namespace&&b._fnDraw(!1)}).on("destroy.dt.DTFC",function(){h.off(".DTFC");d(b.dom.scroller).off(".DTFC");d(q).off(".DTFC");d(b.s.dt.nTableWrapper).off(".DTFC");
14
+ d(b.dom.grid.left.liner).off(".DTFC "+f);d(b.dom.grid.left.wrapper).remove();d(b.dom.grid.right.liner).off(".DTFC "+f);d(b.dom.grid.right.wrapper).remove()});this._fnGridLayout();this.s.dt.oInstance.fnDraw(!1)}},_fnColCalc:function(){var a=this,b=0,c=0;this.s.aiInnerWidths=[];this.s.aiOuterWidths=[];d.each(this.s.dt.aoColumns,function(e,f){var g=d(f.nTh),h;if(g.filter(":visible").length){var i=g.outerWidth();0===a.s.aiOuterWidths.length&&(h=d(a.s.dt.nTable).css("border-left-width"),i+="string"===
15
+ typeof h?1:parseInt(h,10));a.s.aiOuterWidths.length===a.s.dt.aoColumns.length-1&&(h=d(a.s.dt.nTable).css("border-right-width"),i+="string"===typeof h?1:parseInt(h,10));a.s.aiOuterWidths.push(i);a.s.aiInnerWidths.push(g.width());e<a.s.iLeftColumns&&(b+=i);a.s.iTableColumns-a.s.iRightColumns<=e&&(c+=i)}else a.s.aiInnerWidths.push(0),a.s.aiOuterWidths.push(0)});this.s.iLeftWidth=b;this.s.iRightWidth=c},_fnGridSetup:function(){var a=this._fnDTOverflow(),b;this.dom.body=this.s.dt.nTable;this.dom.header=
16
+ this.s.dt.nTHead.parentNode;this.dom.header.parentNode.parentNode.style.position="relative";var c=d('<div class="DTFC_ScrollWrapper" style="position:relative; clear:both;"><div class="DTFC_LeftWrapper" style="position:absolute; top:0; left:0;"><div class="DTFC_LeftHeadWrapper" style="position:relative; top:0; left:0; overflow:hidden;"></div><div class="DTFC_LeftBodyWrapper" style="position:relative; top:0; left:0; overflow:hidden;"><div class="DTFC_LeftBodyLiner" style="position:relative; top:0; left:0; overflow-y:scroll;"></div></div><div class="DTFC_LeftFootWrapper" style="position:relative; top:0; left:0; overflow:hidden;"></div></div><div class="DTFC_RightWrapper" style="position:absolute; top:0; right:0;"><div class="DTFC_RightHeadWrapper" style="position:relative; top:0; left:0;"><div class="DTFC_RightHeadBlocker DTFC_Blocker" style="position:absolute; top:0; bottom:0;"></div></div><div class="DTFC_RightBodyWrapper" style="position:relative; top:0; left:0; overflow:hidden;"><div class="DTFC_RightBodyLiner" style="position:relative; top:0; left:0; overflow-y:scroll;"></div></div><div class="DTFC_RightFootWrapper" style="position:relative; top:0; left:0;"><div class="DTFC_RightFootBlocker DTFC_Blocker" style="position:absolute; top:0; bottom:0;"></div></div></div></div>')[0],
17
+ e=c.childNodes[0],f=c.childNodes[1];this.dom.grid.dt.parentNode.insertBefore(c,this.dom.grid.dt);c.appendChild(this.dom.grid.dt);this.dom.grid.wrapper=c;0<this.s.iLeftColumns&&(this.dom.grid.left.wrapper=e,this.dom.grid.left.head=e.childNodes[0],this.dom.grid.left.body=e.childNodes[1],this.dom.grid.left.liner=d("div.DTFC_LeftBodyLiner",c)[0],c.appendChild(e));0<this.s.iRightColumns&&(this.dom.grid.right.wrapper=f,this.dom.grid.right.head=f.childNodes[0],this.dom.grid.right.body=f.childNodes[1],this.dom.grid.right.liner=
18
+ d("div.DTFC_RightBodyLiner",c)[0],f.style.right=a.bar+"px",b=d("div.DTFC_RightHeadBlocker",c)[0],b.style.width=a.bar+"px",b.style.right=-a.bar+"px",this.dom.grid.right.headBlock=b,b=d("div.DTFC_RightFootBlocker",c)[0],b.style.width=a.bar+"px",b.style.right=-a.bar+"px",this.dom.grid.right.footBlock=b,c.appendChild(f));if(this.s.dt.nTFoot&&(this.dom.footer=this.s.dt.nTFoot.parentNode,0<this.s.iLeftColumns&&(this.dom.grid.left.foot=e.childNodes[2]),0<this.s.iRightColumns))this.dom.grid.right.foot=f.childNodes[2];
19
+ this.s.rtl&&d("div.DTFC_RightHeadBlocker",c).css({left:-a.bar+"px",right:""})},_fnGridLayout:function(){var a=this,b=this.dom.grid;d(b.wrapper).width();var c=d(this.s.dt.nTable.parentNode).outerHeight(),e=d(this.s.dt.nTable.parentNode.parentNode).outerHeight(),f=this._fnDTOverflow(),g=this.s.iLeftWidth,h=this.s.iRightWidth,i="rtl"===d(this.dom.body).css("direction"),j=function(b,c){f.bar?a._firefoxScrollError()?34<d(b).height()&&(b.style.width=c+f.bar+"px"):b.style.width=c+f.bar+"px":(b.style.width=
20
+ c+20+"px",b.style.paddingRight="20px",b.style.boxSizing="border-box")};f.x&&(c-=f.bar);b.wrapper.style.height=e+"px";0<this.s.iLeftColumns&&(e=b.left.wrapper,e.style.width=g+"px",e.style.height="1px",i?(e.style.left="",e.style.right=0):(e.style.left=0,e.style.right=""),b.left.body.style.height=c+"px",b.left.foot&&(b.left.foot.style.top=(f.x?f.bar:0)+"px"),j(b.left.liner,g),b.left.liner.style.height=c+"px");0<this.s.iRightColumns&&(e=b.right.wrapper,e.style.width=h+"px",e.style.height="1px",this.s.rtl?
21
+ (e.style.left=f.y?f.bar+"px":0,e.style.right=""):(e.style.left="",e.style.right=f.y?f.bar+"px":0),b.right.body.style.height=c+"px",b.right.foot&&(b.right.foot.style.top=(f.x?f.bar:0)+"px"),j(b.right.liner,h),b.right.liner.style.height=c+"px",b.right.headBlock.style.display=f.y?"block":"none",b.right.footBlock.style.display=f.y?"block":"none")},_fnDTOverflow:function(){var a=this.s.dt.nTable,b=a.parentNode,c={x:!1,y:!1,bar:this.s.dt.oScroll.iBarWidth};a.offsetWidth>b.clientWidth&&(c.x=!0);a.offsetHeight>
22
+ b.clientHeight&&(c.y=!0);return c},_fnDraw:function(a){this._fnGridLayout();this._fnCloneLeft(a);this._fnCloneRight(a);null!==this.s.fnDrawCallback&&this.s.fnDrawCallback.call(this,this.dom.clone.left,this.dom.clone.right);d(this).trigger("draw.dtfc",{leftClone:this.dom.clone.left,rightClone:this.dom.clone.right})},_fnCloneRight:function(a){if(!(0>=this.s.iRightColumns)){var b,c=[];for(b=this.s.iTableColumns-this.s.iRightColumns;b<this.s.iTableColumns;b++)this.s.dt.aoColumns[b].bVisible&&c.push(b);
23
+ this._fnClone(this.dom.clone.right,this.dom.grid.right,c,a)}},_fnCloneLeft:function(a){if(!(0>=this.s.iLeftColumns)){var b,c=[];for(b=0;b<this.s.iLeftColumns;b++)this.s.dt.aoColumns[b].bVisible&&c.push(b);this._fnClone(this.dom.clone.left,this.dom.grid.left,c,a)}},_fnCopyLayout:function(a,b,c){for(var e=[],f=[],g=[],h=0,i=a.length;h<i;h++){var j=[];j.nTr=d(a[h].nTr).clone(c,!1)[0];for(var l=0,o=this.s.iTableColumns;l<o;l++)if(-1!==d.inArray(l,b)){var p=d.inArray(a[h][l].cell,g);-1===p?(p=d(a[h][l].cell).clone(c,
24
+ !1)[0],f.push(p),g.push(a[h][l].cell),j.push({cell:p,unique:a[h][l].unique})):j.push({cell:f[p],unique:a[h][l].unique})}e.push(j)}return e},_fnClone:function(a,b,c,e){var f=this,g,h,i,j,l,o,p,n,m,k=this.s.dt;if(e){d(a.header).remove();a.header=d(this.dom.header).clone(!0,!1)[0];a.header.className+=" DTFC_Cloned";a.header.style.width="100%";b.head.appendChild(a.header);n=this._fnCopyLayout(k.aoHeader,c,!0);j=d(">thead",a.header);j.empty();g=0;for(h=n.length;g<h;g++)j[0].appendChild(n[g].nTr);k.oApi._fnDrawHead(k,
25
+ n,!0)}else{n=this._fnCopyLayout(k.aoHeader,c,!1);m=[];k.oApi._fnDetectHeader(m,d(">thead",a.header)[0]);g=0;for(h=n.length;g<h;g++){i=0;for(j=n[g].length;i<j;i++)m[g][i].cell.className=n[g][i].cell.className,d("span.DataTables_sort_icon",m[g][i].cell).each(function(){this.className=d("span.DataTables_sort_icon",n[g][i].cell)[0].className})}}this._fnEqualiseHeights("thead",this.dom.header,a.header);"auto"==this.s.sHeightMatch&&d(">tbody>tr",f.dom.body).css("height","auto");null!==a.body&&(d(a.body).remove(),
26
+ a.body=null);a.body=d(this.dom.body).clone(!0)[0];a.body.className+=" DTFC_Cloned";a.body.style.paddingBottom=k.oScroll.iBarWidth+"px";a.body.style.marginBottom=2*k.oScroll.iBarWidth+"px";null!==a.body.getAttribute("id")&&a.body.removeAttribute("id");d(">thead>tr",a.body).empty();d(">tfoot",a.body).remove();var q=d("tbody",a.body)[0];d(q).empty();if(0<k.aiDisplay.length){h=d(">thead>tr",a.body)[0];for(p=0;p<c.length;p++)l=c[p],o=d(k.aoColumns[l].nTh).clone(!0)[0],o.innerHTML="",j=o.style,j.paddingTop=
27
+ "0",j.paddingBottom="0",j.borderTopWidth="0",j.borderBottomWidth="0",j.height=0,j.width=f.s.aiInnerWidths[l]+"px",h.appendChild(o);d(">tbody>tr",f.dom.body).each(function(a){var a=f.s.dt.oFeatures.bServerSide===false?f.s.dt.aiDisplay[f.s.dt._iDisplayStart+a]:a,b=f.s.dt.aoData[a].anCells||d(this).children("td, th"),e=this.cloneNode(false);e.removeAttribute("id");e.setAttribute("data-dt-row",a);for(p=0;p<c.length;p++){l=c[p];if(b.length>0){o=d(b[l]).clone(true,true)[0];o.setAttribute("data-dt-row",
28
+ a);o.setAttribute("data-dt-column",p);e.appendChild(o)}}q.appendChild(e)})}else d(">tbody>tr",f.dom.body).each(function(){o=this.cloneNode(true);o.className=o.className+" DTFC_NoData";d("td",o).html("");q.appendChild(o)});a.body.style.width="100%";a.body.style.margin="0";a.body.style.padding="0";k.oScroller!==t&&(h=k.oScroller.dom.force,b.forcer?b.forcer.style.height=h.style.height:(b.forcer=h.cloneNode(!0),b.liner.appendChild(b.forcer)));b.liner.appendChild(a.body);this._fnEqualiseHeights("tbody",
29
+ f.dom.body,a.body);if(null!==k.nTFoot){if(e){null!==a.footer&&a.footer.parentNode.removeChild(a.footer);a.footer=d(this.dom.footer).clone(!0,!0)[0];a.footer.className+=" DTFC_Cloned";a.footer.style.width="100%";b.foot.appendChild(a.footer);n=this._fnCopyLayout(k.aoFooter,c,!0);b=d(">tfoot",a.footer);b.empty();g=0;for(h=n.length;g<h;g++)b[0].appendChild(n[g].nTr);k.oApi._fnDrawHead(k,n,!0)}else{n=this._fnCopyLayout(k.aoFooter,c,!1);b=[];k.oApi._fnDetectHeader(b,d(">tfoot",a.footer)[0]);g=0;for(h=n.length;g<
30
+ h;g++){i=0;for(j=n[g].length;i<j;i++)b[g][i].cell.className=n[g][i].cell.className}}this._fnEqualiseHeights("tfoot",this.dom.footer,a.footer)}b=k.oApi._fnGetUniqueThs(k,d(">thead",a.header)[0]);d(b).each(function(a){l=c[a];this.style.width=f.s.aiInnerWidths[l]+"px"});null!==f.s.dt.nTFoot&&(b=k.oApi._fnGetUniqueThs(k,d(">tfoot",a.footer)[0]),d(b).each(function(a){l=c[a];this.style.width=f.s.aiInnerWidths[l]+"px"}))},_fnGetTrNodes:function(a){for(var b=[],c=0,d=a.childNodes.length;c<d;c++)"TR"==a.childNodes[c].nodeName.toUpperCase()&&
31
+ b.push(a.childNodes[c]);return b},_fnEqualiseHeights:function(a,b,c){if(!("none"==this.s.sHeightMatch&&"thead"!==a&&"tfoot"!==a)){var e,f,g=b.getElementsByTagName(a)[0],c=c.getElementsByTagName(a)[0],a=d(">"+a+">tr:eq(0)",b).children(":first");a.outerHeight();a.height();for(var g=this._fnGetTrNodes(g),b=this._fnGetTrNodes(c),h=[],c=0,a=b.length;c<a;c++)e=g[c].offsetHeight,f=b[c].offsetHeight,e=f>e?f:e,"semiauto"==this.s.sHeightMatch&&(g[c]._DTTC_iHeight=e),h.push(e);c=0;for(a=b.length;c<a;c++)b[c].style.height=
32
+ h[c]+"px",g[c].style.height=h[c]+"px"}},_firefoxScrollError:function(){if(u===t){var a=d("<div/>").css({position:"absolute",top:0,left:0,height:10,width:50,overflow:"scroll"}).appendTo("body");u=a[0].clientWidth===a[0].offsetWidth&&0!==this._fnDTOverflow().bar;a.remove()}return u}});m.defaults={iLeftColumns:1,iRightColumns:0,fnDrawCallback:null,sHeightMatch:"semiauto"};m.version="3.2.2";s.Api.register("fixedColumns()",function(){return this});s.Api.register("fixedColumns().update()",function(){return this.iterator("table",
33
+ function(a){a._oFixedColumns&&a._oFixedColumns.fnUpdate()})});s.Api.register("fixedColumns().relayout()",function(){return this.iterator("table",function(a){a._oFixedColumns&&a._oFixedColumns.fnRedrawLayout()})});s.Api.register("rows().recalcHeight()",function(){return this.iterator("row",function(a,b){a._oFixedColumns&&a._oFixedColumns.fnRecalculateHeight(this.row(b).node())})});s.Api.register("fixedColumns().rowIndex()",function(a){a=d(a);return a.parents(".DTFC_Cloned").length?this.rows({page:"current"}).indexes()[a.index()]:
34
+ this.row(a).index()});s.Api.register("fixedColumns().cellIndex()",function(a){a=d(a);if(a.parents(".DTFC_Cloned").length){var b=a.parent().index(),b=this.rows({page:"current"}).indexes()[b],a=a.parents(".DTFC_LeftWrapper").length?a.index():this.columns().flatten().length-this.context[0]._oFixedColumns.s.iRightColumns+a.index();return{row:b,column:this.column.index("toData",a),columnVisible:a}}return this.cell(a).index()});d(r).on("init.dt.fixedColumns",function(a,b){if("dt"===a.namespace){var c=b.oInit.fixedColumns,
35
+ e=s.defaults.fixedColumns;if(c||e)e=d.extend({},c,e),!1!==c&&new m(b,e)}});d.fn.dataTable.FixedColumns=m;return d.fn.DataTable.FixedColumns=m});
src/SupsysticTables/Core/assets/js/lib/dataTables.fixedHeader.min.js ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ FixedHeader 3.1.2
3
+ ©2009-2016 SpryMedia Ltd - datatables.net/license
4
+ */
5
+ (function(d){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(g){return d(g,window,document)}):"object"===typeof exports?module.exports=function(g,h){g||(g=window);if(!h||!h.fn.dataTable)h=require("datatables.net")(g,h).$;return d(h,g,g.document)}:d(jQuery,window,document)})(function(d,g,h,k){var j=d.fn.dataTable,l=0,i=function(b,a){if(!(this instanceof i))throw"FixedHeader must be initialised with the 'new' keyword.";!0===a&&(a={});b=new j.Api(b);this.c=d.extend(!0,
6
+ {},i.defaults,a);this.s={dt:b,position:{theadTop:0,tbodyTop:0,tfootTop:0,tfootBottom:0,width:0,left:0,tfootHeight:0,theadHeight:0,windowHeight:d(g).height(),visible:!0},headerMode:null,footerMode:null,autoWidth:b.settings()[0].oFeatures.bAutoWidth,namespace:".dtfc"+l++,scrollLeft:{header:-1,footer:-1},enable:!0};this.dom={floatingHeader:null,thead:d(b.table().header()),tbody:d(b.table().body()),tfoot:d(b.table().footer()),header:{host:null,floating:null,placeholder:null},footer:{host:null,floating:null,
7
+ placeholder:null}};this.dom.header.host=this.dom.thead.parent();this.dom.footer.host=this.dom.tfoot.parent();var e=b.settings()[0];if(e._fixedHeader)throw"FixedHeader already initialised on table "+e.nTable.id;e._fixedHeader=this;this._constructor()};d.extend(i.prototype,{enable:function(b){this.s.enable=b;this.c.header&&this._modeChange("in-place","header",!0);this.c.footer&&this.dom.tfoot.length&&this._modeChange("in-place","footer",!0);this.update()},headerOffset:function(b){b!==k&&(this.c.headerOffset=
8
+ b,this.update());return this.c.headerOffset},footerOffset:function(b){b!==k&&(this.c.footerOffset=b,this.update());return this.c.footerOffset},update:function(){this._positions();this._scroll(!0)},_constructor:function(){var b=this,a=this.s.dt;d(g).on("scroll"+this.s.namespace,function(){b._scroll()}).on("resize"+this.s.namespace,function(){b.s.position.windowHeight=d(g).height();b.update()});var e=d(".fh-fixedHeader");!this.c.headerOffset&&e.length&&(this.c.headerOffset=e.outerHeight());e=d(".fh-fixedFooter");
9
+ !this.c.footerOffset&&e.length&&(this.c.footerOffset=e.outerHeight());a.on("column-reorder.dt.dtfc column-visibility.dt.dtfc draw.dt.dtfc column-sizing.dt.dtfc",function(){b.update()});a.on("destroy.dtfc",function(){a.off(".dtfc");d(g).off(b.s.namespace)});this._positions();this._scroll()},_clone:function(b,a){var e=this.s.dt,c=this.dom[b],f="header"===b?this.dom.thead:this.dom.tfoot;!a&&c.floating?c.floating.removeClass("fixedHeader-floating fixedHeader-locked"):(c.floating&&(c.placeholder.remove(),
10
+ this._unsize(b),c.floating.children().detach(),c.floating.remove()),c.floating=d(e.table().node().cloneNode(!1)).css("table-layout","fixed").removeAttr("id").append(f).appendTo("body"),c.placeholder=f.clone(!1),c.host.prepend(c.placeholder),this._matchWidths(c.placeholder,c.floating))},_matchWidths:function(b,a){var e=function(a){return d(a,b).map(function(){return d(this).width()}).toArray()},c=function(b,c){d(b,a).each(function(a){d(this).css({width:c[a],minWidth:c[a]})})},f=e("th"),e=e("td");c("th",
11
+ f);c("td",e)},_unsize:function(b){var a=this.dom[b].floating;a&&("footer"===b||"header"===b&&!this.s.autoWidth)?d("th, td",a).css({width:"",minWidth:""}):a&&"header"===b&&d("th, td",a).css("min-width","")},_horizontal:function(b,a){var e=this.dom[b],c=this.s.position,d=this.s.scrollLeft;e.floating&&d[b]!==a&&(e.floating.css("left",c.left-a),d[b]=a)},_modeChange:function(b,a,e){var c=this.dom[a],f=this.s.position,g=d.contains(this.dom["footer"===a?"tfoot":"thead"][0],h.activeElement)?h.activeElement:
12
+ null;if("in-place"===b){if(c.placeholder&&(c.placeholder.remove(),c.placeholder=null),this._unsize(a),"header"===a?c.host.prepend(this.dom.thead):c.host.append(this.dom.tfoot),c.floating)c.floating.remove(),c.floating=null}else"in"===b?(this._clone(a,e),c.floating.addClass("fixedHeader-floating").css("header"===a?"top":"bottom",this.c[a+"Offset"]).css("left",f.left+"px").css("width",f.width+"px"),"footer"===a&&c.floating.css("top","")):"below"===b?(this._clone(a,e),c.floating.addClass("fixedHeader-locked").css("top",
13
+ f.tfootTop-f.theadHeight).css("left",f.left+"px").css("width",f.width+"px")):"above"===b&&(this._clone(a,e),c.floating.addClass("fixedHeader-locked").css("top",f.tbodyTop).css("left",f.left+"px").css("width",f.width+"px"));g&&g!==h.activeElement&&g.focus();this.s.scrollLeft.header=-1;this.s.scrollLeft.footer=-1;this.s[a+"Mode"]=b},_positions:function(){var b=this.s.dt.table(),a=this.s.position,e=this.dom,b=d(b.node()),c=b.children("thead"),f=b.children("tfoot"),e=e.tbody;a.visible=b.is(":visible");
14
+ a.width=b.outerWidth();a.left=b.offset().left;a.theadTop=c.offset().top;a.tbodyTop=e.offset().top;a.theadHeight=a.tbodyTop-a.theadTop;f.length?(a.tfootTop=f.offset().top,a.tfootBottom=a.tfootTop+f.outerHeight(),a.tfootHeight=a.tfootBottom-a.tfootTop):(a.tfootTop=a.tbodyTop+e.outerHeight(),a.tfootBottom=a.tfootTop,a.tfootHeight=a.tfootTop)},_scroll:function(b){var a=d(h).scrollTop(),e=d(h).scrollLeft(),c=this.s.position,f;if(this.s.enable&&(this.c.header&&(f=!c.visible||a<=c.theadTop-this.c.headerOffset?
15
+ "in-place":a<=c.tfootTop-c.theadHeight-this.c.headerOffset?"in":"below",(b||f!==this.s.headerMode)&&this._modeChange(f,"header",b),this._horizontal("header",e)),this.c.footer&&this.dom.tfoot.length))a=!c.visible||a+c.windowHeight>=c.tfootBottom+this.c.footerOffset?"in-place":c.windowHeight+a>c.tbodyTop+c.tfootHeight+this.c.footerOffset?"in":"above",(b||a!==this.s.footerMode)&&this._modeChange(a,"footer",b),this._horizontal("footer",e)}});i.version="3.1.2";i.defaults={header:!0,footer:!1,headerOffset:0,
16
+ footerOffset:0};d.fn.dataTable.FixedHeader=i;d.fn.DataTable.FixedHeader=i;d(h).on("init.dt.dtfh",function(b,a){if("dt"===b.namespace){var e=a.oInit.fixedHeader,c=j.defaults.fixedHeader;if((e||c)&&!a._fixedHeader)c=d.extend({},c,e),!1!==e&&new i(a,c)}});j.Api.register("fixedHeader()",function(){});j.Api.register("fixedHeader.adjust()",function(){return this.iterator("table",function(b){(b=b._fixedHeader)&&b.update()})});j.Api.register("fixedHeader.enable()",function(b){return this.iterator("table",
17
+ function(a){(a=a._fixedHeader)&&a.enable(b!==k?b:!0)})});j.Api.register("fixedHeader.disable()",function(){return this.iterator("table",function(b){(b=b._fixedHeader)&&b.enable(!1)})});d.each(["header","footer"],function(b,a){j.Api.register("fixedHeader."+a+"Offset()",function(b){var c=this.context;return b===k?c.length&&c[0]._fixedHeader?c[0]._fixedHeader[a+"Offset"]():k:this.iterator("table",function(c){if(c=c._fixedHeader)c[a+"Offset"](b)})})});return i});
src/SupsysticTables/Core/assets/js/lib/dataTables.responsive.min.js ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ Responsive 2.0.2
3
+ 2014-2016 SpryMedia Ltd - datatables.net/license
4
+ */
5
+ (function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(j){return c(j,window,document)}):"object"===typeof exports?module.exports=function(j,k){j||(j=window);if(!k||!k.fn.dataTable)k=require("datatables.net")(j,k).$;return c(k,j,j.document)}:c(jQuery,window,document)})(function(c,j,k,p){var n=c.fn.dataTable,l=function(a,b){if(!n.versionCheck||!n.versionCheck("1.10.3"))throw"DataTables Responsive requires DataTables 1.10.3 or newer";this.s={dt:new n.Api(a),columns:[],
6
+ current:[]};this.s.dt.settings()[0].responsive||(b&&"string"===typeof b.details?b.details={type:b.details}:b&&!1===b.details?b.details={type:!1}:b&&!0===b.details&&(b.details={type:"inline"}),this.c=c.extend(!0,{},l.defaults,n.defaults.responsive,b),a.responsive=this,this._constructor())};c.extend(l.prototype,{_constructor:function(){var a=this,b=this.s.dt,d=b.settings()[0],e=c(j).width();b.settings()[0]._responsive=this;c(j).on("resize.dtr orientationchange.dtr",n.util.throttle(function(){var b=
7
+ c(j).width();b!==e&&(a._resize(),e=b)}));d.oApi._fnCallbackReg(d,"aoRowCreatedCallback",function(e){-1!==c.inArray(!1,a.s.current)&&c("td, th",e).each(function(e){e=b.column.index("toData",e);!1===a.s.current[e]&&c(this).css("display","none")})});b.on("destroy.dtr",function(){b.off(".dtr");c(b.table().body()).off(".dtr");c(j).off("resize.dtr orientationchange.dtr");c.each(a.s.current,function(b,e){!1===e&&a._setColumnVis(b,!0)})});this.c.breakpoints.sort(function(a,b){return a.width<b.width?1:a.width>
8
+ b.width?-1:0});this._classLogic();this._resizeAuto();d=this.c.details;!1!==d.type&&(a._detailsInit(),b.on("column-visibility.dtr",function(){a._classLogic();a._resizeAuto();a._resize()}),b.on("draw.dtr",function(){a._redrawChildren()}),c(b.table().node()).addClass("dtr-"+d.type));b.on("column-reorder.dtr",function(){a._classLogic();a._resizeAuto();a._resize()});b.on("column-sizing.dtr",function(){a._resize()});b.on("init.dtr",function(){a._resizeAuto();a._resize();c.inArray(false,a.s.current)&&b.columns.adjust()});
9
+ this._resize()},_columnsVisiblity:function(a){var b=this.s.dt,d=this.s.columns,e,f,g=d.map(function(a,b){return{columnIdx:b,priority:a.priority}}).sort(function(a,b){return a.priority!==b.priority?a.priority-b.priority:a.columnIdx-b.columnIdx}),h=c.map(d,function(b){return b.auto&&null===b.minWidth?!1:!0===b.auto?"-":-1!==c.inArray(a,b.includeIn)}),m=0;e=0;for(f=h.length;e<f;e++)!0===h[e]&&(m+=d[e].minWidth);e=b.settings()[0].oScroll;e=e.sY||e.sX?e.iBarWidth:0;b=b.table().container().offsetWidth-
10
+ e-m;e=0;for(f=h.length;e<f;e++)d[e].control&&(b-=d[e].minWidth);m=!1;e=0;for(f=g.length;e<f;e++){var i=g[e].columnIdx;"-"===h[i]&&(!d[i].control&&d[i].minWidth)&&(m||0>b-d[i].minWidth?(m=!0,h[i]=!1):h[i]=!0,b-=d[i].minWidth)}g=!1;e=0;for(f=d.length;e<f;e++)if(!d[e].control&&!d[e].never&&!h[e]){g=!0;break}e=0;for(f=d.length;e<f;e++)d[e].control&&(h[e]=g);-1===c.inArray(!0,h)&&(h[0]=!0);return h},_classLogic:function(){var a=this,b=this.c.breakpoints,d=this.s.dt,e=d.columns().eq(0).map(function(b){var a=
11
+ this.column(b),e=a.header().className,b=d.settings()[0].aoColumns[b].responsivePriority;b===p&&(a=c(a.header()).data("priority"),b=a!==p?1*a:1E4);return{className:e,includeIn:[],auto:!1,control:!1,never:e.match(/\bnever\b/)?!0:!1,priority:b}}),f=function(b,a){var d=e[b].includeIn;-1===c.inArray(a,d)&&d.push(a)},g=function(c,d,i,g){if(i)if("max-"===i){g=a._find(d).width;d=0;for(i=b.length;d<i;d++)b[d].width<=g&&f(c,b[d].name)}else if("min-"===i){g=a._find(d).width;d=0;for(i=b.length;d<i;d++)b[d].width>=
12
+ g&&f(c,b[d].name)}else{if("not-"===i){d=0;for(i=b.length;d<i;d++)-1===b[d].name.indexOf(g)&&f(c,b[d].name)}}else e[c].includeIn.push(d)};e.each(function(a,e){for(var d=a.className.split(" "),f=!1,j=0,l=d.length;j<l;j++){var k=c.trim(d[j]);if("all"===k){f=!0;a.includeIn=c.map(b,function(a){return a.name});return}if("none"===k||a.never){f=!0;return}if("control"===k){f=!0;a.control=!0;return}c.each(b,function(a,b){var d=b.name.split("-"),c=k.match(RegExp("(min\\-|max\\-|not\\-)?("+d[0]+")(\\-[_a-zA-Z0-9])?"));
13
+ c&&(f=!0,c[2]===d[0]&&c[3]==="-"+d[1]?g(e,b.name,c[1],c[2]+c[3]):c[2]===d[0]&&!c[3]&&g(e,b.name,c[1],c[2]))})}f||(a.auto=!0)});this.s.columns=e},_detailsDisplay:function(a,b){var d=this,e=this.s.dt,f=this.c.details;if(f&&f.type){var g=f.display(a,b,function(){return f.renderer(e,a[0],d._detailsObj(a[0]))});(!0===g||!1===g)&&c(e.table().node()).triggerHandler("responsive-display.dt",[e,a,g,b])}},_detailsInit:function(){var a=this,b=this.s.dt,d=this.c.details;"inline"===d.type&&(d.target="td:first-child, th:first-child");
14
+ b.on("draw.dtr",function(){a._tabIndexes()});a._tabIndexes();c(b.table().body()).on("keyup.dtr","td, th",function(a){a.keyCode===13&&c(this).data("dtr-keyboard")&&c(this).click()});var e=d.target;c(b.table().body()).on("click.dtr mousedown.dtr mouseup.dtr","string"===typeof e?e:"td, th",function(d){if(c(b.table().node()).hasClass("collapsed")&&b.row(c(this).closest("tr")).length){if(typeof e==="number"){var g=e<0?b.columns().eq(0).length+e:e;if(b.cell(this).index().column!==g)return}g=b.row(c(this).closest("tr"));
15
+ d.type==="click"?a._detailsDisplay(g,false):d.type==="mousedown"?c(this).css("outline","none"):d.type==="mouseup"&&c(this).blur().css("outline","")}})},_detailsObj:function(a){var b=this,d=this.s.dt;return c.map(this.s.columns,function(e,c){if(!e.never)return{title:d.settings()[0].aoColumns[c].sTitle,data:d.cell(a,c).render(b.c.orthogonal),hidden:d.column(c).visible()&&!b.s.current[c],columnIndex:c,rowIndex:a}})},_find:function(a){for(var b=this.c.breakpoints,d=0,c=b.length;d<c;d++)if(b[d].name===
16
+ a)return b[d]},_redrawChildren:function(){var a=this,b=this.s.dt;b.rows({page:"current"}).iterator("row",function(d,c){b.row(c);a._detailsDisplay(b.row(c),!0)})},_resize:function(){var a=this,b=this.s.dt,d=c(j).width(),e=this.c.breakpoints,f=e[0].name,g=this.s.columns,h,m=this.s.current.slice();for(h=e.length-1;0<=h;h--)if(d<=e[h].width){f=e[h].name;break}var i=this._columnsVisiblity(f);this.s.current=i;e=!1;h=0;for(d=g.length;h<d;h++)if(!1===i[h]&&!g[h].never&&!g[h].control){e=!0;break}c(b.table().node()).toggleClass("collapsed",
17
+ e);var k=!1;b.columns().eq(0).each(function(b,c){i[c]!==m[c]&&(k=!0,a._setColumnVis(b,i[c]))});k&&(this._redrawChildren(),c(b.table().node()).trigger("responsive-resize.dt",[b,this.s.current]))},_resizeAuto:function(){var a=this.s.dt,b=this.s.columns;if(this.c.auto&&-1!==c.inArray(!0,c.map(b,function(a){return a.auto}))){a.table().node();var d=a.table().node().cloneNode(!1),e=c(a.table().header().cloneNode(!1)).appendTo(d),f=c(a.table().body()).clone(!1,!1).empty().appendTo(d),g=a.columns().header().filter(function(b){return a.column(b).visible()}).to$().clone(!1).css("display",
18
+ "table-cell");c(f).append(c(a.rows({page:"current"}).nodes()).clone(!1)).find("th, td").css("display","");if(f=a.table().footer()){var f=c(f.cloneNode(!1)).appendTo(d),h=a.columns().header().filter(function(b){return a.column(b).visible()}).to$().clone(!1).css("display","table-cell");c("<tr/>").append(h).appendTo(f)}c("<tr/>").append(g).appendTo(e);"inline"===this.c.details.type&&c(d).addClass("dtr-inline collapsed");d=c("<div/>").css({width:1,height:1,overflow:"hidden"}).append(d);d.insertBefore(a.table().node());
19
+ g.each(function(c){c=a.column.index("fromVisible",c);b[c].minWidth=this.offsetWidth||0});d.remove()}},_setColumnVis:function(a,b){var d=this.s.dt,e=b?"":"none";c(d.column(a).header()).css("display",e);c(d.column(a).footer()).css("display",e);d.column(a).nodes().to$().css("display",e)},_tabIndexes:function(){var a=this.s.dt,b=a.cells({page:"current"}).nodes().to$(),d=a.settings()[0],e=this.c.details.target;b.filter("[data-dtr-keyboard]").removeData("[data-dtr-keyboard]");c("number"===typeof e?":eq("+
20
+ e+")":e,a.rows({page:"current"}).nodes()).attr("tabIndex",d.iTabIndex).data("dtr-keyboard",1)}});l.breakpoints=[{name:"desktop",width:Infinity},{name:"tablet-l",width:1024},{name:"tablet-p",width:768},{name:"mobile-l",width:480},{name:"mobile-p",width:320}];l.display={childRow:function(a,b,d){if(b){if(c(a.node()).hasClass("parent"))return a.child(d(),"child").show(),!0}else{if(a.child.isShown())return a.child(!1),c(a.node()).removeClass("parent"),!1;a.child(d(),"child").show();c(a.node()).addClass("parent");
21
+ return!0}},childRowImmediate:function(a,b,d){if(!b&&a.child.isShown()||!a.responsive.hasHidden())return a.child(!1),c(a.node()).removeClass("parent"),!1;a.child(d(),"child").show();c(a.node()).addClass("parent");return!0},modal:function(a){return function(b,d,e){if(d)c("div.dtr-modal-content").empty().append(e());else{var f=function(){g.remove();c(k).off("keypress.dtr")},g=c('<div class="dtr-modal"/>').append(c('<div class="dtr-modal-display"/>').append(c('<div class="dtr-modal-content"/>').append(e())).append(c('<div class="dtr-modal-close">&times;</div>').click(function(){f()}))).append(c('<div class="dtr-modal-background"/>').click(function(){f()})).appendTo("body");
22
+ c(k).on("keyup.dtr",function(a){27===a.keyCode&&(a.stopPropagation(),f())})}a&&a.header&&c("div.dtr-modal-content").prepend("<h2>"+a.header(b)+"</h2>")}}};l.defaults={breakpoints:l.breakpoints,auto:!0,details:{display:l.display.childRow,renderer:function(a,b,d){return(a=c.map(d,function(a){return a.hidden?'<li data-dtr-index="'+a.columnIndex+'" data-dt-row="'+a.rowIndex+'" data-dt-column="'+a.columnIndex+'"><span class="dtr-title">'+a.title+'</span> <span class="dtr-data">'+a.data+"</span></li>":
23
+ ""}).join(""))?c('<ul data-dtr-index="'+b+'"/>').append(a):!1},target:0,type:"inline"},orthogonal:"display"};var o=c.fn.dataTable.Api;o.register("responsive()",function(){return this});o.register("responsive.index()",function(a){a=c(a);return{column:a.data("dtr-index"),row:a.parent().data("dtr-index")}});o.register("responsive.rebuild()",function(){return this.iterator("table",function(a){a._responsive&&a._responsive._classLogic()})});o.register("responsive.recalc()",function(){return this.iterator("table",
24
+ function(a){a._responsive&&(a._responsive._resizeAuto(),a._responsive._resize())})});o.register("responsive.hasHidden()",function(){var a=this.context[0];return a._responsive?-1!==c.inArray(!1,a._responsive.s.current):!1});l.version="2.0.2";c.fn.dataTable.Responsive=l;c.fn.DataTable.Responsive=l;c(k).on("preInit.dt.dtr",function(a,b){if("dt"===a.namespace&&(c(b.nTable).hasClass("responsive")||c(b.nTable).hasClass("dt-responsive")||b.oInit.responsive||n.defaults.responsive)){var d=b.oInit.responsive;
25
+ !1!==d&&new l(b,c.isPlainObject(d)?d:{})}});return l});
src/SupsysticTables/Core/assets/js/lib/jquery.dataTables.min.js ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ DataTables 1.10.12
3
+ ©2008-2015 SpryMedia Ltd - datatables.net/license
4
+ */
5
+ (function(h){"function"===typeof define&&define.amd?define(["jquery"],function(D){return h(D,window,document)}):"object"===typeof exports?module.exports=function(D,I){D||(D=window);I||(I="undefined"!==typeof window?require("jquery"):require("jquery")(D));return h(I,D,D.document)}:h(jQuery,window,document)})(function(h,D,I,k){function X(a){var b,c,d={};h.each(a,function(e){if((b=e.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(b[1]+" "))c=e.replace(b[0],b[2].toLowerCase()),
6
+ d[c]=e,"o"===b[1]&&X(a[e])});a._hungarianMap=d}function K(a,b,c){a._hungarianMap||X(a);var d;h.each(b,function(e){d=a._hungarianMap[e];if(d!==k&&(c||b[d]===k))"o"===d.charAt(0)?(b[d]||(b[d]={}),h.extend(!0,b[d],b[e]),K(a[d],b[d],c)):b[d]=b[e]})}function Da(a){var b=m.defaults.oLanguage,c=a.sZeroRecords;!a.sEmptyTable&&(c&&"No data available in table"===b.sEmptyTable)&&E(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&(c&&"Loading..."===b.sLoadingRecords)&&E(a,a,"sZeroRecords","sLoadingRecords");
7
+ a.sInfoThousands&&(a.sThousands=a.sInfoThousands);(a=a.sDecimal)&&db(a)}function eb(a){A(a,"ordering","bSort");A(a,"orderMulti","bSortMulti");A(a,"orderClasses","bSortClasses");A(a,"orderCellsTop","bSortCellsTop");A(a,"order","aaSorting");A(a,"orderFixed","aaSortingFixed");A(a,"paging","bPaginate");A(a,"pagingType","sPaginationType");A(a,"pageLength","iDisplayLength");A(a,"searching","bFilter");"boolean"===typeof a.sScrollX&&(a.sScrollX=a.sScrollX?"100%":"");"boolean"===typeof a.scrollX&&(a.scrollX=
8
+ a.scrollX?"100%":"");if(a=a.aoSearchCols)for(var b=0,c=a.length;b<c;b++)a[b]&&K(m.models.oSearch,a[b])}function fb(a){A(a,"orderable","bSortable");A(a,"orderData","aDataSort");A(a,"orderSequence","asSorting");A(a,"orderDataType","sortDataType");var b=a.aDataSort;b&&!h.isArray(b)&&(a.aDataSort=[b])}function gb(a){if(!m.__browser){var b={};m.__browser=b;var c=h("<div/>").css({position:"fixed",top:0,left:0,height:1,width:1,overflow:"hidden"}).append(h("<div/>").css({position:"absolute",top:1,left:1,
9
+ width:100,overflow:"scroll"}).append(h("<div/>").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}h.extend(a.oBrowser,m.__browser);a.oScroll.iBarWidth=m.__browser.barWidth}function hb(a,b,c,d,e,f){var g,j=!1;c!==k&&(g=c,j=!0);for(;d!==e;)a.hasOwnProperty(d)&&
10
+ (g=j?b(g,a[d],d,a):a[d],j=!0,d+=f);return g}function Ea(a,b){var c=m.defaults.column,d=a.aoColumns.length,c=h.extend({},m.models.oColumn,c,{nTh:b?b:I.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=h.extend({},m.models.oSearch,c[d]);ja(a,d,h(b).data())}function ja(a,b,c){var b=a.aoColumns[b],d=a.oClasses,e=h(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=e.attr("width")||null;var f=
11
+ (e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);f&&(b.sWidthOrig=f[1])}c!==k&&null!==c&&(fb(c),K(m.defaults.column,c),c.mDataProp!==k&&!c.mData&&(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),h.extend(b,c),E(b,c,"sWidth","sWidthOrig"),c.iDataSort!==k&&(b.aDataSort=[c.iDataSort]),E(b,c,"aDataSort"));var g=b.mData,j=Q(g),i=b.mRender?Q(b.mRender):null,c=function(a){return"string"===typeof a&&-1!==a.indexOf("@")};b._bAttrSrc=h.isPlainObject(g)&&
12
+ (c(g.sort)||c(g.type)||c(g.filter));b._setter=null;b.fnGetData=function(a,b,c){var d=j(a,b,k,c);return i&&b?i(d,b,a,c):d};b.fnSetData=function(a,b,c){return R(g)(a,b,c)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==h.inArray("asc",b.asSorting);c=-1!==h.inArray("desc",b.asSorting);!b.bSortable||!a&&!c?(b.sSortingClass=d.sSortableNone,b.sSortingClassJUI=""):a&&!c?(b.sSortingClass=d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed):
13
+ !a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI)}function Y(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Fa(a);for(var c=0,d=b.length;c<d;c++)b[c].nTh.style.width=b[c].sWidth}b=a.oScroll;(""!==b.sY||""!==b.sX)&&ka(a);u(a,null,"column-sizing",[a])}function Z(a,b){var c=la(a,"bVisible");return"number"===typeof c[b]?c[b]:null}function $(a,b){var c=la(a,"bVisible"),c=h.inArray(b,c);return-1!==c?c:null}
14
+ function aa(a){var b=0;h.each(a.aoColumns,function(a,d){d.bVisible&&"none"!==h(d.nTh).css("display")&&b++});return b}function la(a,b){var c=[];h.map(a.aoColumns,function(a,e){a[b]&&c.push(e)});return c}function Ga(a){var b=a.aoColumns,c=a.aoData,d=m.ext.type.detect,e,f,g,j,i,h,l,q,t;e=0;for(f=b.length;e<f;e++)if(l=b[e],t=[],!l.sType&&l._sManualType)l.sType=l._sManualType;else if(!l.sType){g=0;for(j=d.length;g<j;g++){i=0;for(h=c.length;i<h;i++){t[i]===k&&(t[i]=B(a,i,e,"type"));q=d[g](t[i],a);if(!q&&
15
+ g!==d.length-1)break;if("html"===q)break}if(q){l.sType=q;break}}l.sType||(l.sType="string")}}function ib(a,b,c,d){var e,f,g,j,i,n,l=a.aoColumns;if(b)for(e=b.length-1;0<=e;e--){n=b[e];var q=n.targets!==k?n.targets:n.aTargets;h.isArray(q)||(q=[q]);f=0;for(g=q.length;f<g;f++)if("number"===typeof q[f]&&0<=q[f]){for(;l.length<=q[f];)Ea(a);d(q[f],n)}else if("number"===typeof q[f]&&0>q[f])d(l.length+q[f],n);else if("string"===typeof q[f]){j=0;for(i=l.length;j<i;j++)("_all"==q[f]||h(l[j].nTh).hasClass(q[f]))&&
16
+ d(j,n)}}if(c){e=0;for(a=c.length;e<a;e++)d(e,c[e])}}function N(a,b,c,d){var e=a.aoData.length,f=h.extend(!0,{},m.models.oRow,{src:c?"dom":"data",idx:e});f._aData=b;a.aoData.push(f);for(var g=a.aoColumns,j=0,i=g.length;j<i;j++)g[j].sType=null;a.aiDisplayMaster.push(e);b=a.rowIdFn(b);b!==k&&(a.aIds[b]=f);(c||!a.oFeatures.bDeferRender)&&Ha(a,e,c,d);return e}function ma(a,b){var c;b instanceof h||(b=h(b));return b.map(function(b,e){c=Ia(a,e);return N(a,c.data,e,c.cells)})}function B(a,b,c,d){var e=a.iDraw,
17
+ f=a.aoColumns[c],g=a.aoData[b]._aData,j=f.sDefaultContent,i=f.fnGetData(g,d,{settings:a,row:b,col:c});if(i===k)return a.iDrawError!=e&&null===j&&(L(a,0,"Requested unknown parameter "+("function"==typeof f.mData?"{function}":"'"+f.mData+"'")+" for row "+b+", column "+c,4),a.iDrawError=e),j;if((i===g||null===i)&&null!==j&&d!==k)i=j;else if("function"===typeof i)return i.call(g);return null===i&&"display"==d?"":i}function jb(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d,{settings:a,row:b,col:c})}
18
+ function Ja(a){return h.map(a.match(/(\\.|[^\.])+/g)||[""],function(a){return a.replace(/\\./g,".")})}function Q(a){if(h.isPlainObject(a)){var b={};h.each(a,function(a,c){c&&(b[a]=Q(c))});return function(a,c,f,g){var j=b[c]||b._;return j!==k?j(a,c,f,g):a}}if(null===a)return function(a){return a};if("function"===typeof a)return function(b,c,f,g){return a(b,c,f,g)};if("string"===typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("[")||-1!==a.indexOf("("))){var c=function(a,b,f){var g,j;if(""!==f){j=Ja(f);
19
+ for(var i=0,n=j.length;i<n;i++){f=j[i].match(ba);g=j[i].match(U);if(f){j[i]=j[i].replace(ba,"");""!==j[i]&&(a=a[j[i]]);g=[];j.splice(0,i+1);j=j.join(".");if(h.isArray(a)){i=0;for(n=a.length;i<n;i++)g.push(c(a[i],b,j))}a=f[0].substring(1,f[0].length-1);a=""===a?g:g.join(a);break}else if(g){j[i]=j[i].replace(U,"");a=a[j[i]]();continue}if(null===a||a[j[i]]===k)return k;a=a[j[i]]}}return a};return function(b,e){return c(b,e,a)}}return function(b){return b[a]}}function R(a){if(h.isPlainObject(a))return R(a._);
20
+ if(null===a)return function(){};if("function"===typeof a)return function(b,d,e){a(b,"set",d,e)};if("string"===typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("[")||-1!==a.indexOf("("))){var b=function(a,d,e){var e=Ja(e),f;f=e[e.length-1];for(var g,j,i=0,n=e.length-1;i<n;i++){g=e[i].match(ba);j=e[i].match(U);if(g){e[i]=e[i].replace(ba,"");a[e[i]]=[];f=e.slice();f.splice(0,i+1);g=f.join(".");if(h.isArray(d)){j=0;for(n=d.length;j<n;j++)f={},b(f,d[j],g),a[e[i]].push(f)}else a[e[i]]=d;return}j&&(e[i]=e[i].replace(U,
21
+ ""),a=a[e[i]](d));if(null===a[e[i]]||a[e[i]]===k)a[e[i]]={};a=a[e[i]]}if(f.match(U))a[f.replace(U,"")](d);else a[f.replace(ba,"")]=d};return function(c,d){return b(c,d,a)}}return function(b,d){b[a]=d}}function Ka(a){return G(a.aoData,"_aData")}function na(a){a.aoData.length=0;a.aiDisplayMaster.length=0;a.aiDisplay.length=0;a.aIds={}}function oa(a,b,c){for(var d=-1,e=0,f=a.length;e<f;e++)a[e]==b?d=e:a[e]>b&&a[e]--; -1!=d&&c===k&&a.splice(d,1)}function ca(a,b,c,d){var e=a.aoData[b],f,g=function(c,d){for(;c.childNodes.length;)c.removeChild(c.firstChild);
22
+ c.innerHTML=B(a,b,d,"display")};if("dom"===c||(!c||"auto"===c)&&"dom"===e.src)e._aData=Ia(a,e,d,d===k?k:e._aData).data;else{var j=e.anCells;if(j)if(d!==k)g(j[d],d);else{c=0;for(f=j.length;c<f;c++)g(j[c],c)}}e._aSortData=null;e._aFilterData=null;g=a.aoColumns;if(d!==k)g[d].sType=null;else{c=0;for(f=g.length;c<f;c++)g[c].sType=null;La(a,e)}}function Ia(a,b,c,d){var e=[],f=b.firstChild,g,j,i=0,n,l=a.aoColumns,q=a._rowReadObject,d=d!==k?d:q?{}:[],t=function(a,b){if("string"===typeof a){var c=a.indexOf("@");
23
+ -1!==c&&(c=a.substring(c+1),R(a)(d,b.getAttribute(c)))}},S=function(a){if(c===k||c===i)j=l[i],n=h.trim(a.innerHTML),j&&j._bAttrSrc?(R(j.mData._)(d,n),t(j.mData.sort,a),t(j.mData.type,a),t(j.mData.filter,a)):q?(j._setter||(j._setter=R(j.mData)),j._setter(d,n)):d[i]=n;i++};if(f)for(;f;){g=f.nodeName.toUpperCase();if("TD"==g||"TH"==g)S(f),e.push(f);f=f.nextSibling}else{e=b.anCells;f=0;for(g=e.length;f<g;f++)S(e[f])}if(b=b.firstChild?b:b.nTr)(b=b.getAttribute("id"))&&R(a.rowId)(d,b);return{data:d,cells:e}}
24
+ function Ha(a,b,c,d){var e=a.aoData[b],f=e._aData,g=[],j,i,n,l,q;if(null===e.nTr){j=c||I.createElement("tr");e.nTr=j;e.anCells=g;j._DT_RowIndex=b;La(a,e);l=0;for(q=a.aoColumns.length;l<q;l++){n=a.aoColumns[l];i=c?d[l]:I.createElement(n.sCellType);i._DT_CellIndex={row:b,column:l};g.push(i);if((!c||n.mRender||n.mData!==l)&&(!h.isPlainObject(n.mData)||n.mData._!==l+".display"))i.innerHTML=B(a,b,l,"display");n.sClass&&(i.className+=" "+n.sClass);n.bVisible&&!c?j.appendChild(i):!n.bVisible&&c&&i.parentNode.removeChild(i);
25
+ n.fnCreatedCell&&n.fnCreatedCell.call(a.oInstance,i,B(a,b,l),f,b,l)}u(a,"aoRowCreatedCallback",null,[j,f,b])}e.nTr.setAttribute("role","row")}function La(a,b){var c=b.nTr,d=b._aData;if(c){var e=a.rowIdFn(d);e&&(c.id=e);d.DT_RowClass&&(e=d.DT_RowClass.split(" "),b.__rowc=b.__rowc?pa(b.__rowc.concat(e)):e,h(c).removeClass(b.__rowc.join(" ")).addClass(d.DT_RowClass));d.DT_RowAttr&&h(c).attr(d.DT_RowAttr);d.DT_RowData&&h(c).data(d.DT_RowData)}}function kb(a){var b,c,d,e,f,g=a.nTHead,j=a.nTFoot,i=0===
26
+ h("th, td",g).length,n=a.oClasses,l=a.aoColumns;i&&(e=h("<tr/>").appendTo(g));b=0;for(c=l.length;b<c;b++)f=l[b],d=h(f.nTh).addClass(f.sClass),i&&d.appendTo(e),a.oFeatures.bSort&&(d.addClass(f.sSortingClass),!1!==f.bSortable&&(d.attr("tabindex",a.iTabIndex).attr("aria-controls",a.sTableId),Ma(a,f.nTh,b))),f.sTitle!=d[0].innerHTML&&d.html(f.sTitle),Na(a,"header")(a,d,f,n);i&&da(a.aoHeader,g);h(g).find(">tr").attr("role","row");h(g).find(">tr>th, >tr>td").addClass(n.sHeaderTH);h(j).find(">tr>th, >tr>td").addClass(n.sFooterTH);
27
+ if(null!==j){a=a.aoFooter[0];b=0;for(c=a.length;b<c;b++)f=l[b],f.nTf=a[b].cell,f.sClass&&h(f.nTf).addClass(f.sClass)}}function ea(a,b,c){var d,e,f,g=[],j=[],i=a.aoColumns.length,n;if(b){c===k&&(c=!1);d=0;for(e=b.length;d<e;d++){g[d]=b[d].slice();g[d].nTr=b[d].nTr;for(f=i-1;0<=f;f--)!a.aoColumns[f].bVisible&&!c&&g[d].splice(f,1);j.push([])}d=0;for(e=g.length;d<e;d++){if(a=g[d].nTr)for(;f=a.firstChild;)a.removeChild(f);f=0;for(b=g[d].length;f<b;f++)if(n=i=1,j[d][f]===k){a.appendChild(g[d][f].cell);
28
+ for(j[d][f]=1;g[d+i]!==k&&g[d][f].cell==g[d+i][f].cell;)j[d+i][f]=1,i++;for(;g[d][f+n]!==k&&g[d][f].cell==g[d][f+n].cell;){for(c=0;c<i;c++)j[d+c][f+n]=1;n++}h(g[d][f].cell).attr("rowspan",i).attr("colspan",n)}}}}function O(a){var b=u(a,"aoPreDrawCallback","preDraw",[a]);if(-1!==h.inArray(!1,b))C(a,!1);else{var b=[],c=0,d=a.asStripeClasses,e=d.length,f=a.oLanguage,g=a.iInitDisplayStart,j="ssp"==y(a),i=a.aiDisplay;a.bDrawing=!0;g!==k&&-1!==g&&(a._iDisplayStart=j?g:g>=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart=
29
+ -1);var g=a._iDisplayStart,n=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,C(a,!1);else if(j){if(!a.bDestroying&&!lb(a))return}else a.iDraw++;if(0!==i.length){f=j?a.aoData.length:n;for(j=j?0:g;j<f;j++){var l=i[j],q=a.aoData[l];null===q.nTr&&Ha(a,l);l=q.nTr;if(0!==e){var t=d[c%e];q._sRowStripe!=t&&(h(l).removeClass(q._sRowStripe).addClass(t),q._sRowStripe=t)}u(a,"aoRowCallback",null,[l,q._aData,c,j]);b.push(l);c++}}else c=f.sZeroRecords,1==a.iDraw&&"ajax"==y(a)?c=f.sLoadingRecords:
30
+ f.sEmptyTable&&0===a.fnRecordsTotal()&&(c=f.sEmptyTable),b[0]=h("<tr/>",{"class":e?d[0]:""}).append(h("<td />",{valign:"top",colSpan:aa(a),"class":a.oClasses.sRowEmpty}).html(c))[0];u(a,"aoHeaderCallback","header",[h(a.nTHead).children("tr")[0],Ka(a),g,n,i]);u(a,"aoFooterCallback","footer",[h(a.nTFoot).children("tr")[0],Ka(a),g,n,i]);d=h(a.nTBody);d.children().detach();d.append(h(b));u(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function T(a,b){var c=a.oFeatures,d=c.bFilter;
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],
38
+ l=f[g],i="function"==typeof n.mData?"function":n.mData,S.columns.push({data:i,name:n.sName,searchable:n.bSearchable,orderable:n.bSortable,search:{value:l.sSearch,regex:l.bRegex}}),k("mDataProp_"+g,i),d.bFilter&&(k("sSearch_"+g,l.sSearch),k("bRegex_"+g,l.bRegex),k("bSearchable_"+g,n.bSearchable)),d.bSort&&k("bSortable_"+g,n.bSortable);d.bFilter&&(k("sSearch",e.sSearch),k("bRegex",e.bRegex));d.bSort&&(h.each(q,function(a,b){S.order.push({column:b.col,dir:b.dir});k("iSortCol_"+a,b.col);k("sSortDir_"+
39
+ a,b.dir)}),k("iSortingCols",q.length));b=m.ext.legacy.ajax;return null===b?a.sAjaxSource?j:S:b?j:S}function vb(a,b){var c=sa(a,b),d=b.sEcho!==k?b.sEcho:b.draw,e=b.iTotalRecords!==k?b.iTotalRecords:b.recordsTotal,f=b.iTotalDisplayRecords!==k?b.iTotalDisplayRecords:b.recordsFiltered;if(d){if(1*d<a.iDraw)return;a.iDraw=1*d}na(a);a._iRecordsTotal=parseInt(e,10);a._iRecordsDisplay=parseInt(f,10);d=0;for(e=c.length;d<e;d++)N(a,c[d]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;O(a);a._bInitComplete||
40
+ ta(a,b);a.bAjaxDataGet=!0;C(a,!1)}function sa(a,b){var c=h.isPlainObject(a.ajax)&&a.ajax.dataSrc!==k?a.ajax.dataSrc:a.sAjaxDataProp;return"data"===c?b.aaData||b[c]:""!==c?Q(c)(b):b}function pb(a){var b=a.oClasses,c=a.sTableId,d=a.oLanguage,e=a.oPreviousSearch,f=a.aanFeatures,g='<input type="search" class="'+b.sFilterInput+'"/>',j=d.sSearch,j=j.match(/_INPUT_/)?j.replace("_INPUT_",g):j+g,b=h("<div/>",{id:!f.f?c+"_filter":null,"class":b.sFilter}).append(h("<label/>").append(j)),f=function(){var b=!this.value?
41
+ "":this.value;b!=e.sSearch&&(fa(a,{sSearch:b,bRegex:e.bRegex,bSmart:e.bSmart,bCaseInsensitive:e.bCaseInsensitive}),a._iDisplayStart=0,O(a))},g=null!==a.searchDelay?a.searchDelay:"ssp"===y(a)?400:0,i=h("input",b).val(e.sSearch).attr("placeholder",d.sSearchPlaceholder).bind("keyup.DT search.DT input.DT paste.DT cut.DT",g?Oa(f,g):f).bind("keypress.DT",function(a){if(13==a.keyCode)return!1}).attr("aria-controls",c);h(a.nTable).on("search.dt.DT",function(b,c){if(a===c)try{i[0]!==I.activeElement&&i.val(e.sSearch)}catch(d){}});
42
+ return b[0]}function fa(a,b,c){var d=a.oPreviousSearch,e=a.aoPreSearchCols,f=function(a){d.sSearch=a.sSearch;d.bRegex=a.bRegex;d.bSmart=a.bSmart;d.bCaseInsensitive=a.bCaseInsensitive};Ga(a);if("ssp"!=y(a)){wb(a,b.sSearch,c,b.bEscapeRegex!==k?!b.bEscapeRegex:b.bRegex,b.bSmart,b.bCaseInsensitive);f(b);for(b=0;b<e.length;b++)xb(a,e[b].sSearch,b,e[b].bEscapeRegex!==k?!e[b].bEscapeRegex:e[b].bRegex,e[b].bSmart,e[b].bCaseInsensitive);yb(a)}else f(b);a.bFiltered=!0;u(a,null,"search",[a])}function yb(a){for(var b=
43
+ m.ext.search,c=a.aiDisplay,d,e,f=0,g=b.length;f<g;f++){for(var j=[],i=0,n=c.length;i<n;i++)e=c[i],d=a.aoData[e],b[f](a,d._aFilterData,e,d._aData,i)&&j.push(e);c.length=0;h.merge(c,j)}}function xb(a,b,c,d,e,f){if(""!==b)for(var g=a.aiDisplay,d=Pa(b,d,e,f),e=g.length-1;0<=e;e--)b=a.aoData[g[e]]._aFilterData[c],d.test(b)||g.splice(e,1)}function wb(a,b,c,d,e,f){var d=Pa(b,d,e,f),e=a.oPreviousSearch.sSearch,f=a.aiDisplayMaster,g;0!==m.ext.search.length&&(c=!0);g=zb(a);if(0>=b.length)a.aiDisplay=f.slice();
44
+ else{if(g||c||e.length>b.length||0!==b.indexOf(e)||a.bSorted)a.aiDisplay=f.slice();b=a.aiDisplay;for(c=b.length-1;0<=c;c--)d.test(a.aoData[b[c]]._sFilterRow)||b.splice(c,1)}}function Pa(a,b,c,d){a=b?a:Qa(a);c&&(a="^(?=.*?"+h.map(a.match(/"[^"]+"|[^ ]+/g)||[""],function(a){if('"'===a.charAt(0))var b=a.match(/^"(.*)"$/),a=b?b[1]:a;return a.replace('"',"")}).join(")(?=.*?")+").*$");return RegExp(a,d?"i":"")}function zb(a){var b=a.aoColumns,c,d,e,f,g,j,i,h,l=m.ext.type.search;c=!1;d=0;for(f=a.aoData.length;d<
45
+ f;d++)if(h=a.aoData[d],!h._aFilterData){j=[];e=0;for(g=b.length;e<g;e++)c=b[e],c.bSearchable?(i=B(a,d,e,"filter"),l[c.sType]&&(i=l[c.sType](i)),null===i&&(i=""),"string"!==typeof i&&i.toString&&(i=i.toString())):i="",i.indexOf&&-1!==i.indexOf("&")&&(ua.innerHTML=i,i=Zb?ua.textContent:ua.innerText),i.replace&&(i=i.replace(/[\r\n]/g,"")),j.push(i);h._aFilterData=j;h._sFilterRow=j.join(" ");c=!0}return c}function Ab(a){return{search:a.sSearch,smart:a.bSmart,regex:a.bRegex,caseInsensitive:a.bCaseInsensitive}}
46
+ function Bb(a){return{sSearch:a.search,bSmart:a.smart,bRegex:a.regex,bCaseInsensitive:a.caseInsensitive}}function sb(a){var b=a.sTableId,c=a.aanFeatures.i,d=h("<div/>",{"class":a.oClasses.sInfo,id:!c?b+"_info":null});c||(a.aoDrawCallback.push({fn:Cb,sName:"information"}),d.attr("role","status").attr("aria-live","polite"),h(a.nTable).attr("aria-describedby",b+"_info"));return d[0]}function Cb(a){var b=a.aanFeatures.i;if(0!==b.length){var c=a.oLanguage,d=a._iDisplayStart+1,e=a.fnDisplayEnd(),f=a.fnRecordsTotal(),
47
+ g=a.fnRecordsDisplay(),j=g?c.sInfo:c.sInfoEmpty;g!==f&&(j+=" "+c.sInfoFiltered);j+=c.sInfoPostFix;j=Db(a,j);c=c.fnInfoCallback;null!==c&&(j=c.call(a.oInstance,a,d,e,f,g,j));h(b).html(j)}}function Db(a,b){var c=a.fnFormatNumber,d=a._iDisplayStart+1,e=a._iDisplayLength,f=a.fnRecordsDisplay(),g=-1===e;return b.replace(/_START_/g,c.call(a,d)).replace(/_END_/g,c.call(a,a.fnDisplayEnd())).replace(/_MAX_/g,c.call(a,a.fnRecordsTotal())).replace(/_TOTAL_/g,c.call(a,f)).replace(/_PAGE_/g,c.call(a,g?1:Math.ceil(d/
48
+ e))).replace(/_PAGES_/g,c.call(a,g?1:Math.ceil(f/e)))}function ga(a){var b,c,d=a.iInitDisplayStart,e=a.aoColumns,f;c=a.oFeatures;var g=a.bDeferLoading;if(a.bInitialised){nb(a);kb(a);ea(a,a.aoHeader);ea(a,a.aoFooter);C(a,!0);c.bAutoWidth&&Fa(a);b=0;for(c=e.length;b<c;b++)f=e[b],f.sWidth&&(f.nTh.style.width=x(f.sWidth));u(a,null,"preInit",[a]);T(a);e=y(a);if("ssp"!=e||g)"ajax"==e?ra(a,[],function(c){var f=sa(a,c);for(b=0;b<f.length;b++)N(a,f[b]);a.iInitDisplayStart=d;T(a);C(a,!1);ta(a,c)},a):(C(a,!1),
49
+ ta(a))}else setTimeout(function(){ga(a)},200)}function ta(a,b){a._bInitComplete=!0;(b||a.oInit.aaData)&&Y(a);u(a,null,"plugin-init",[a,b]);u(a,"aoInitComplete","init",[a,b])}function Ra(a,b){var c=parseInt(b,10);a._iDisplayLength=c;Sa(a);u(a,null,"length",[a,c])}function ob(a){for(var b=a.oClasses,c=a.sTableId,d=a.aLengthMenu,e=h.isArray(d[0]),f=e?d[0]:d,d=e?d[1]:d,e=h("<select/>",{name:c+"_length","aria-controls":c,"class":b.sLengthSelect}),g=0,j=f.length;g<j;g++)e[0][g]=new Option(d[g],f[g]);var i=
50
+ h("<div><label/></div>").addClass(b.sLength);a.aanFeatures.l||(i[0].id=c+"_length");i.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",e[0].outerHTML));h("select",i).val(a._iDisplayLength).bind("change.DT",function(){Ra(a,h(this).val());O(a)});h(a.nTable).bind("length.dt.DT",function(b,c,d){a===c&&h("select",i).val(d)});return i[0]}function tb(a){var b=a.sPaginationType,c=m.ext.pager[b],d="function"===typeof c,e=function(a){O(a)},b=h("<div/>").addClass(a.oClasses.sPaging+b)[0],f=a.aanFeatures;
51
+ d||c.fnInit(a,b,e);f.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(a){if(d){var b=a._iDisplayStart,i=a._iDisplayLength,h=a.fnRecordsDisplay(),l=-1===i,b=l?0:Math.ceil(b/i),i=l?1:Math.ceil(h/i),h=c(b,i),k,l=0;for(k=f.p.length;l<k;l++)Na(a,"pageButton")(a,f.p[l],l,h,b,i)}else c.fnUpdate(a,e)},sName:"pagination"}));return b}function Ta(a,b,c){var d=a._iDisplayStart,e=a._iDisplayLength,f=a.fnRecordsDisplay();0===f||-1===e?d=0:"number"===typeof b?(d=b*e,d>f&&(d=0)):"first"==b?d=0:
52
+ "previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e<f&&(d+=e):"last"==b?d=Math.floor((f-1)/e)*e:L(a,0,"Unknown paging action: "+b,5);b=a._iDisplayStart!==d;a._iDisplayStart=d;b&&(u(a,null,"page",[a]),c&&O(a));return b}function qb(a){return h("<div/>",{id:!a.aanFeatures.r?a.sTableId+"_processing":null,"class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}function C(a,b){a.oFeatures.bProcessing&&h(a.aanFeatures.r).css("display",b?"block":"none");u(a,null,"processing",
53
+ [a,b])}function rb(a){var b=h(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY,f=a.oClasses,g=b.children("caption"),j=g.length?g[0]._captionSide:null,i=h(b[0].cloneNode(!1)),n=h(b[0].cloneNode(!1)),l=b.children("tfoot");l.length||(l=null);i=h("<div/>",{"class":f.sScrollWrapper}).append(h("<div/>",{"class":f.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?!d?null:x(d):"100%"}).append(h("<div/>",{"class":f.sScrollHeadInner}).css({"box-sizing":"content-box",
54
+ width:c.sXInner||"100%"}).append(i.removeAttr("id").css("margin-left",0).append("top"===j?g:null).append(b.children("thead"))))).append(h("<div/>",{"class":f.sScrollBody}).css({position:"relative",overflow:"auto",width:!d?null:x(d)}).append(b));l&&i.append(h("<div/>",{"class":f.sScrollFoot}).css({overflow:"hidden",border:0,width:d?!d?null:x(d):"100%"}).append(h("<div/>",{"class":f.sScrollFootInner}).append(n.removeAttr("id").css("margin-left",0).append("bottom"===j?g:null).append(b.children("tfoot")))));
55
+ var b=i.children(),k=b[0],f=b[1],t=l?b[2]:null;if(d)h(f).on("scroll.DT",function(){var a=this.scrollLeft;k.scrollLeft=a;l&&(t.scrollLeft=a)});h(f).css(e&&c.bCollapse?"max-height":"height",e);a.nScrollHead=k;a.nScrollBody=f;a.nScrollFoot=t;a.aoDrawCallback.push({fn:ka,sName:"scrolling"});return i[0]}function ka(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY,b=b.iBarWidth,f=h(a.nScrollHead),g=f[0].style,j=f.children("div"),i=j[0].style,n=j.children("table"),j=a.nScrollBody,l=h(j),q=j.style,t=h(a.nScrollFoot).children("div"),
56
+ m=t.children("table"),o=h(a.nTHead),F=h(a.nTable),p=F[0],r=p.style,u=a.nTFoot?h(a.nTFoot):null,Eb=a.oBrowser,Ua=Eb.bScrollOversize,s=G(a.aoColumns,"nTh"),P,v,w,y,z=[],A=[],B=[],C=[],D,E=function(a){a=a.style;a.paddingTop="0";a.paddingBottom="0";a.borderTopWidth="0";a.borderBottomWidth="0";a.height=0};v=j.scrollHeight>j.clientHeight;if(a.scrollBarVis!==v&&a.scrollBarVis!==k)a.scrollBarVis=v,Y(a);else{a.scrollBarVis=v;F.children("thead, tfoot").remove();u&&(w=u.clone().prependTo(F),P=u.find("tr"),w=
57
+ w.find("tr"));y=o.clone().prependTo(F);o=o.find("tr");v=y.find("tr");y.find("th, td").removeAttr("tabindex");c||(q.width="100%",f[0].style.width="100%");h.each(qa(a,y),function(b,c){D=Z(a,b);if(a.aoColumns[D]) {c.style.width=a.aoColumns[D].sWidth;}});u&&J(function(a){a.style.width=""},w);f=F.outerWidth();if(""===c){r.width="100%";if(Ua&&(F.find("tbody").height()>j.offsetHeight||"scroll"==l.css("overflow-y")))r.width=x(F.outerWidth()-b);f=F.outerWidth()}else""!==d&&(r.width=x(d),f=F.outerWidth());J(E,v);J(function(a){B.push(a.innerHTML);
58
+ z.push(x(h(a).css("width")))},v);J(function(a,b){if(h.inArray(a,s)!==-1)a.style.width=z[b]},o);h(v).height(0);u&&(J(E,w),J(function(a){C.push(a.innerHTML);A.push(x(h(a).css("width")))},w),J(function(a,b){a.style.width=A[b]},P),h(w).height(0));J(function(a,b){a.innerHTML='<div class="dataTables_sizing" style="height:0;overflow:hidden;">'+B[b]+"</div>";a.style.width=z[b]},v);u&&J(function(a,b){a.innerHTML='<div class="dataTables_sizing" style="height:0;overflow:hidden;">'+C[b]+"</div>";a.style.width=
59
+ A[b]},w);if(F.outerWidth()<f){P=j.scrollHeight>j.offsetHeight||"scroll"==l.css("overflow-y")?f+b:f;if(Ua&&(j.scrollHeight>j.offsetHeight||"scroll"==l.css("overflow-y")))r.width=x(P-b);(""===c||""!==d)&&L(a,1,"Possible column misalignment",6)}else P="100%";q.width=x(P);g.width=x(P);u&&(a.nScrollFoot.style.width=x(P));!e&&Ua&&(q.height=x(p.offsetHeight+b));c=F.outerWidth();n[0].style.width=x(c);i.width=x(c);d=F.height()>j.clientHeight||"scroll"==l.css("overflow-y");e="padding"+(Eb.bScrollbarLeft?"Left":
60
+ "Right");i[e]=d?b+"px":"0px";u&&(m[0].style.width=x(c),t[0].style.width=x(c),t[0].style[e]=d?b+"px":"0px");F.children("colgroup").insertBefore(F.children("thead"));l.scroll();if((a.bSorted||a.bFiltered)&&!a._drawHold)j.scrollTop=0}}function J(a,b,c){for(var d=0,e=0,f=b.length,g,j;e<f;){g=b[e].firstChild;for(j=c?c[e].firstChild:null;g;)1===g.nodeType&&(c?a(g,j,d):a(g,d),d++),g=g.nextSibling,j=c?j.nextSibling:null;e++}}function Fa(a){var b=a.nTable,c=a.aoColumns,d=a.oScroll,e=d.sY,f=d.sX,g=d.sXInner,
61
+ j=c.length,i=la(a,"bVisible"),n=h("th",a.nTHead),l=b.getAttribute("width"),k=b.parentNode,t=!1,m,o,p=a.oBrowser,d=p.bScrollOversize;(m=b.style.width)&&-1!==m.indexOf("%")&&(l=m);for(m=0;m<i.length;m++)o=c[i[m]],null!==o.sWidth&&(o.sWidth=Fb(o.sWidthOrig,k),t=!0);if(d||!t&&!f&&!e&&j==aa(a)&&j==n.length)for(m=0;m<j;m++)i=Z(a,m),null!==i&&(c[i].sWidth=x(n.eq(m).width()));else{j=h(b).clone().css("visibility","hidden").removeAttr("id");j.find("tbody tr").remove();var r=h("<tr/>").appendTo(j.find("tbody"));
62
+ j.find("thead, tfoot").remove();j.append(h(a.nTHead).clone()).append(h(a.nTFoot).clone());j.find("tfoot th, tfoot td").css("width","");n=qa(a,j.find("thead")[0]);for(m=0;m<i.length;m++)o=c[i[m]],n[m].style.width=null!==o.sWidthOrig&&""!==o.sWidthOrig?x(o.sWidthOrig):"",o.sWidthOrig&&f&&h(n[m]).append(h("<div/>").css({width:o.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(a.aoData.length)for(m=0;m<i.length;m++)t=i[m],o=c[t],h(Gb(a,t)).clone(!1).append(o.sContentPadding).appendTo(r);h("[name]",
63
+ j).removeAttr("name");o=h("<div/>").css(f||e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(j).appendTo(k);f&&g?j.width(g):f?(j.css("width","auto"),j.removeAttr("width"),j.width()<k.clientWidth&&l&&j.width(k.clientWidth)):e?j.width(k.clientWidth):l&&j.width(l);for(m=e=0;m<i.length;m++)k=h(n[m]),g=k.outerWidth()-k.width(),k=p.bBounding?Math.ceil(n[m].getBoundingClientRect().width):k.outerWidth(),e+=k,c[i[m]].sWidth=x(k-g);b.style.width=x(e);o.remove()}l&&(b.style.width=
64
+ x(l));if((l||f)&&!a._reszEvt)b=function(){h(D).bind("resize.DT-"+a.sInstance,Oa(function(){Y(a)}))},d?setTimeout(b,1E3):b(),a._reszEvt=!0}function Fb(a,b){if(!a)return 0;var c=h("<div/>").css("width",x(a)).appendTo(b||I.body),d=c[0].offsetWidth;c.remove();return d}function Gb(a,b){var c=Hb(a,b);if(0>c)return null;var d=a.aoData[c];return!d.nTr?h("<td/>").html(B(a,c,b,"display"))[0]:d.anCells[b]}function Hb(a,b){for(var c,d=-1,e=-1,f=0,g=a.aoData.length;f<g;f++)c=B(a,f,b,"display")+"",c=c.replace($b,
65
+ ""),c=c.replace(/&nbsp;/g," "),c.length>d&&(d=c.length,e=f);return e}function x(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function V(a){var b,c,d=[],e=a.aoColumns,f,g,j,i;b=a.aaSortingFixed;c=h.isPlainObject(b);var n=[];f=function(a){a.length&&!h.isArray(a[0])?n.push(a):h.merge(n,a)};h.isArray(b)&&f(b);c&&b.pre&&f(b.pre);f(a.aaSorting);c&&b.post&&f(b.post);for(a=0;a<n.length;a++){i=n[a][0];f=e[i].aDataSort;b=0;for(c=f.length;b<c;b++)g=f[b],j=e[g].sType||
66
+ "string",n[a]._idx===k&&(n[a]._idx=h.inArray(n[a][1],e[g].asSorting)),d.push({src:i,col:g,dir:n[a][1],index:n[a]._idx,type:j,formatter:m.ext.type.order[j+"-pre"]})}return d}function mb(a){var b,c,d=[],e=m.ext.type.order,f=a.aoData,g=0,j,i=a.aiDisplayMaster,h;Ga(a);h=V(a);b=0;for(c=h.length;b<c;b++)j=h[b],j.formatter&&g++,Ib(a,j.col);if("ssp"!=y(a)&&0!==h.length){b=0;for(c=i.length;b<c;b++)d[i[b]]=b;g===h.length?i.sort(function(a,b){var c,e,g,j,i=h.length,k=f[a]._aSortData,m=f[b]._aSortData;for(g=
67
+ 0;g<i;g++)if(j=h[g],c=k[j.col],e=m[j.col],c=c<e?-1:c>e?1:0,0!==c)return"asc"===j.dir?c:-c;c=d[a];e=d[b];return c<e?-1:c>e?1:0}):i.sort(function(a,b){var c,g,j,i,k=h.length,m=f[a]._aSortData,p=f[b]._aSortData;for(j=0;j<k;j++)if(i=h[j],c=m[i.col],g=p[i.col],i=e[i.type+"-"+i.dir]||e["string-"+i.dir],c=i(c,g),0!==c)return c;c=d[a];g=d[b];return c<g?-1:c>g?1:0})}a.bSorted=!0}function Jb(a){for(var b,c,d=a.aoColumns,e=V(a),a=a.oLanguage.oAria,f=0,g=d.length;f<g;f++){c=d[f];var j=c.asSorting;b=c.sTitle.replace(/<.*?>/g,
68
+ "");var i=c.nTh;i.removeAttribute("aria-sort");c.bSortable&&(0<e.length&&e[0].col==f?(i.setAttribute("aria-sort","asc"==e[0].dir?"ascending":"descending"),c=j[e[0].index+1]||j[0]):c=j[0],b+="asc"===c?a.sSortAscending:a.sSortDescending);i.setAttribute("aria-label",b)}}function Va(a,b,c,d){var e=a.aaSorting,f=a.aoColumns[b].asSorting,g=function(a,b){var c=a._idx;c===k&&(c=h.inArray(a[1],f));return c+1<f.length?c+1:b?null:0};"number"===typeof e[0]&&(e=a.aaSorting=[e]);c&&a.oFeatures.bSortMulti?(c=h.inArray(b,
69
+ G(e,"0")),-1!==c?(b=g(e[c],!0),null===b&&1===e.length&&(b=0),null===b?e.splice(c,1):(e[c][1]=f[b],e[c]._idx=b)):(e.push([b,f[0],0]),e[e.length-1]._idx=0)):e.length&&e[0][0]==b?(b=g(e[0]),e.length=1,e[0][1]=f[b],e[0]._idx=b):(e.length=0,e.push([b,f[0]]),e[0]._idx=0);T(a);"function"==typeof d&&d(a)}function Ma(a,b,c,d){var e=a.aoColumns[c];Wa(b,{},function(b){!1!==e.bSortable&&(a.oFeatures.bProcessing?(C(a,!0),setTimeout(function(){Va(a,c,b.shiftKey,d);"ssp"!==y(a)&&C(a,!1)},0)):Va(a,c,b.shiftKey,d))})}
70
+ function va(a){var b=a.aLastSort,c=a.oClasses.sSortColumn,d=V(a),e=a.oFeatures,f,g;if(e.bSort&&e.bSortClasses){e=0;for(f=b.length;e<f;e++)g=b[e].src,h(G(a.aoData,"anCells",g)).removeClass(c+(2>e?e+1:3));e=0;for(f=d.length;e<f;e++)g=d[e].src,h(G(a.aoData,"anCells",g)).addClass(c+(2>e?e+1:3))}a.aLastSort=d}function Ib(a,b){var c=a.aoColumns[b],d=m.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,$(a,b)));for(var f,g=m.ext.type.order[c.sType+"-pre"],j=0,i=a.aoData.length;j<i;j++)if(c=a.aoData[j],
71
+ c._aSortData||(c._aSortData=[]),!c._aSortData[b]||d)f=d?e[j]:B(a,j,b,"sort"),c._aSortData[b]=g?g(f):f}function wa(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b={time:+new Date,start:a._iDisplayStart,length:a._iDisplayLength,order:h.extend(!0,[],a.aaSorting),search:Ab(a.oPreviousSearch),columns:h.map(a.aoColumns,function(b,d){return{visible:b.bVisible,search:Ab(a.aoPreSearchCols[d])}})};u(a,"aoStateSaveParams","stateSaveParams",[a,b]);a.oSavedState=b;a.fnStateSaveCallback.call(a.oInstance,a,
72
+ b)}}function Kb(a){var b,c,d=a.aoColumns;if(a.oFeatures.bStateSave){var e=a.fnStateLoadCallback.call(a.oInstance,a);if(e&&e.time&&(b=u(a,"aoStateLoadParams","stateLoadParams",[a,e]),-1===h.inArray(!1,b)&&(b=a.iStateDuration,!(0<b&&e.time<+new Date-1E3*b)&&d.length===e.columns.length))){a.oLoadedState=h.extend(!0,{},e);e.start!==k&&(a._iDisplayStart=e.start,a.iInitDisplayStart=e.start);e.length!==k&&(a._iDisplayLength=e.length);e.order!==k&&(a.aaSorting=[],h.each(e.order,function(b,c){a.aaSorting.push(c[0]>=
73
+ d.length?[0,c[1]]:c)}));e.search!==k&&h.extend(a.oPreviousSearch,Bb(e.search));b=0;for(c=e.columns.length;b<c;b++){var f=e.columns[b];f.visible!==k&&(d[b].bVisible=f.visible);f.search!==k&&h.extend(a.aoPreSearchCols[b],Bb(f.search))}u(a,"aoStateLoaded","stateLoaded",[a,e])}}}function xa(a){var b=m.settings,a=h.inArray(a,G(b,"nTable"));return-1!==a?b[a]:null}function L(a,b,c,d){c="DataTables warning: "+(a?"table id="+a.sTableId+" - ":"")+c;d&&(c+=". For more information about this error, please see http://datatables.net/tn/"+
74
+ d);if(b)D.console&&console.log&&console.log(c);else if(b=m.ext,b=b.sErrMode||b.errMode,a&&u(a,null,"error",[a,d,c]),"alert"==b)alert(c);else{if("throw"==b)throw Error(c);"function"==typeof b&&b(a,d,c)}}function E(a,b,c,d){h.isArray(c)?h.each(c,function(c,d){h.isArray(d)?E(a,b,d[0],d[1]):E(a,b,d)}):(d===k&&(d=c),b[c]!==k&&(a[d]=b[c]))}function Lb(a,b,c){var d,e;for(e in b)b.hasOwnProperty(e)&&(d=b[e],h.isPlainObject(d)?(h.isPlainObject(a[e])||(a[e]={}),h.extend(!0,a[e],d)):a[e]=c&&"data"!==e&&"aaData"!==
75
+ e&&h.isArray(d)?d.slice():d);return a}function Wa(a,b,c){h(a).bind("click.DT",b,function(b){a.blur();c(b)}).bind("keypress.DT",b,function(a){13===a.which&&(a.preventDefault(),c(a))}).bind("selectstart.DT",function(){return!1})}function z(a,b,c,d){c&&a[b].push({fn:c,sName:d})}function u(a,b,c,d){var e=[];b&&(e=h.map(a[b].slice().reverse(),function(b){return b.fn.apply(a.oInstance,d)}));null!==c&&(b=h.Event(c+".dt"),h(a.nTable).trigger(b,d),e.push(b.result));return e}function Sa(a){var b=a._iDisplayStart,
76
+ c=a.fnDisplayEnd(),d=a._iDisplayLength;b>=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function Na(a,b){var c=a.renderer,d=m.ext.renderer[b];return h.isPlainObject(c)&&c[b]?d[c[b]]||d._:"string"===typeof c?d[c]||d._:d._}function y(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function ya(a,b){var c=[],c=Mb.numbers_length,d=Math.floor(c/2);b<=c?c=W(0,b):a<=d?(c=W(0,c-2),c.push("ellipsis"),c.push(b-1)):(a>=b-1-d?c=W(b-(c-2),b):(c=W(a-d+2,a+d-1),c.push("ellipsis"),
77
+ c.push(b-1)),c.splice(0,0,"ellipsis"),c.splice(0,0,0));c.DT_el="span";return c}function db(a){h.each({num:function(b){return za(b,a)},"num-fmt":function(b){return za(b,a,Xa)},"html-num":function(b){return za(b,a,Aa)},"html-num-fmt":function(b){return za(b,a,Aa,Xa)}},function(b,c){v.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(v.type.search[b+a]=v.type.search.html)})}function Nb(a){return function(){var b=[xa(this[m.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return m.ext.internal[a].apply(this,
78
+ b)}}var m=function(a){this.$=function(a,b){return this.api(!0).$(a,b)};this._=function(a,b){return this.api(!0).rows(a,b).data()};this.api=function(a){return a?new r(xa(this[v.iApiIndex])):new r(this)};this.fnAddData=function(a,b){var c=this.api(!0),d=h.isArray(a)&&(h.isArray(a[0])||h.isPlainObject(a[0]))?c.rows.add(a):c.row.add(a);(b===k||b)&&c.draw();return d.flatten().toArray()};this.fnAdjustColumnSizing=function(a){var b=this.api(!0).columns.adjust(),c=b.settings()[0],d=c.oScroll;a===k||a?b.draw(!1):
79
+ (""!==d.sX||""!==d.sY)&&ka(c)};this.fnClearTable=function(a){var b=this.api(!0).clear();(a===k||a)&&b.draw()};this.fnClose=function(a){this.api(!0).row(a).child.hide()};this.fnDeleteRow=function(a,b,c){var d=this.api(!0),a=d.rows(a),e=a.settings()[0],h=e.aoData[a[0][0]];a.remove();b&&b.call(this,e,h);(c===k||c)&&d.draw();return h};this.fnDestroy=function(a){this.api(!0).destroy(a)};this.fnDraw=function(a){this.api(!0).draw(a)};this.fnFilter=function(a,b,c,d,e,h){e=this.api(!0);null===b||b===k?e.search(a,
80
+ c,d,h):e.column(b).search(a,c,d,h);e.draw()};this.fnGetData=function(a,b){var c=this.api(!0);if(a!==k){var d=a.nodeName?a.nodeName.toLowerCase():"";return b!==k||"td"==d||"th"==d?c.cell(a,b).data():c.row(a).data()||null}return c.data().toArray()};this.fnGetNodes=function(a){var b=this.api(!0);return a!==k?b.row(a).node():b.rows().nodes().flatten().toArray()};this.fnGetPosition=function(a){var b=this.api(!0),c=a.nodeName.toUpperCase();return"TR"==c?b.row(a).index():"TD"==c||"TH"==c?(a=b.cell(a).index(),
81
+ [a.row,a.columnVisible,a.column]):null};this.fnIsOpen=function(a){return this.api(!0).row(a).child.isShown()};this.fnOpen=function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]};this.fnPageChange=function(a,b){var c=this.api(!0).page(a);(b===k||b)&&c.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===k||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return xa(this[v.iApiIndex])};this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener=
82
+ function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var h=this.api(!0);c===k||null===c?h.row(b).data(a):h.cell(b,c).data(a);(e===k||e)&&h.columns.adjust();(d===k||d)&&h.draw();return 0};this.fnVersionCheck=v.fnVersionCheck;var b=this,c=a===k,d=this.length;c&&(a={});this.oApi=this.internal=v.internal;for(var e in m.ext.internal)e&&(this[e]=Nb(e));this.each(function(){var e={},e=1<d?Lb(e,a,!0):a,g=0,j,i=this.getAttribute("id"),n=!1,l=m.defaults,q=h(this);if("table"!=
83
+ this.nodeName.toLowerCase())L(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{eb(l);fb(l.column);K(l,l,!0);K(l.column,l.column,!0);K(l,h.extend(e,q.data()));var t=m.settings,g=0;for(j=t.length;g<j;g++){var p=t[g];if(p.nTable==this||p.nTHead.parentNode==this||p.nTFoot&&p.nTFoot.parentNode==this){g=e.bRetrieve!==k?e.bRetrieve:l.bRetrieve;if(c||g)return p.oInstance;if(e.bDestroy!==k?e.bDestroy:l.bDestroy){p.oInstance.fnDestroy();break}else{L(p,0,"Cannot reinitialise DataTable",3);
84
+ return}}if(p.sTableId==this.id){t.splice(g,1);break}}if(null===i||""===i)this.id=i="DataTables_Table_"+m.ext._unique++;var o=h.extend(!0,{},m.models.oSettings,{sDestroyWidth:q[0].style.width,sInstance:i,sTableId:i});o.nTable=this;o.oApi=b.internal;o.oInit=e;t.push(o);o.oInstance=1===b.length?b:q.dataTable();eb(e);e.oLanguage&&Da(e.oLanguage);e.aLengthMenu&&!e.iDisplayLength&&(e.iDisplayLength=h.isArray(e.aLengthMenu[0])?e.aLengthMenu[0][0]:e.aLengthMenu[0]);e=Lb(h.extend(!0,{},l),e);E(o.oFeatures,
85
+ e,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));E(o,e,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod","aaSorting","aaSortingFixed","aLengthMenu","sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay","rowId",["iCookieDuration","iStateDuration"],["oSearch","oPreviousSearch"],["aoSearchCols",
86
+ "aoPreSearchCols"],["iDisplayLength","_iDisplayLength"],["bJQueryUI","bJUI"]]);E(o.oScroll,e,[["sScrollX","sX"],["sScrollXInner","sXInner"],["sScrollY","sY"],["bScrollCollapse","bCollapse"]]);E(o.oLanguage,e,"fnInfoCallback");z(o,"aoDrawCallback",e.fnDrawCallback,"user");z(o,"aoServerParams",e.fnServerParams,"user");z(o,"aoStateSaveParams",e.fnStateSaveParams,"user");z(o,"aoStateLoadParams",e.fnStateLoadParams,"user");z(o,"aoStateLoaded",e.fnStateLoaded,"user");z(o,"aoRowCallback",e.fnRowCallback,
87
+ "user");z(o,"aoRowCreatedCallback",e.fnCreatedRow,"user");z(o,"aoHeaderCallback",e.fnHeaderCallback,"user");z(o,"aoFooterCallback",e.fnFooterCallback,"user");z(o,"aoInitComplete",e.fnInitComplete,"user");z(o,"aoPreDrawCallback",e.fnPreDrawCallback,"user");o.rowIdFn=Q(e.rowId);gb(o);i=o.oClasses;e.bJQueryUI?(h.extend(i,m.ext.oJUIClasses,e.oClasses),e.sDom===l.sDom&&"lfrtip"===l.sDom&&(o.sDom='<"H"lfr>t<"F"ip>'),o.renderer)?h.isPlainObject(o.renderer)&&!o.renderer.header&&(o.renderer.header="jqueryui"):
88
+ o.renderer="jqueryui":h.extend(i,m.ext.classes,e.oClasses);q.addClass(i.sTable);o.iInitDisplayStart===k&&(o.iInitDisplayStart=e.iDisplayStart,o._iDisplayStart=e.iDisplayStart);null!==e.iDeferLoading&&(o.bDeferLoading=!0,g=h.isArray(e.iDeferLoading),o._iRecordsDisplay=g?e.iDeferLoading[0]:e.iDeferLoading,o._iRecordsTotal=g?e.iDeferLoading[1]:e.iDeferLoading);var r=o.oLanguage;h.extend(!0,r,e.oLanguage);""!==r.sUrl&&(h.ajax({dataType:"json",url:r.sUrl,success:function(a){Da(a);K(l.oLanguage,a);h.extend(true,
89
+ r,a);ga(o)},error:function(){ga(o)}}),n=!0);null===e.asStripeClasses&&(o.asStripeClasses=[i.sStripeOdd,i.sStripeEven]);var g=o.asStripeClasses,v=q.children("tbody").find("tr").eq(0);-1!==h.inArray(!0,h.map(g,function(a){return v.hasClass(a)}))&&(h("tbody tr",this).removeClass(g.join(" ")),o.asDestroyStripes=g.slice());t=[];g=this.getElementsByTagName("thead");0!==g.length&&(da(o.aoHeader,g[0]),t=qa(o));if(null===e.aoColumns){p=[];g=0;for(j=t.length;g<j;g++)p.push(null)}else p=e.aoColumns;g=0;for(j=
90
+ p.length;g<j;g++)Ea(o,t?t[g]:null);ib(o,e.aoColumnDefs,p,function(a,b){ja(o,a,b)});if(v.length){var s=function(a,b){return a.getAttribute("data-"+b)!==null?b:null};h(v[0]).children("th, td").each(function(a,b){var c=o.aoColumns[a];if(c.mData===a){var d=s(b,"sort")||s(b,"order"),e=s(b,"filter")||s(b,"search");if(d!==null||e!==null){c.mData={_:a+".display",sort:d!==null?a+".@data-"+d:k,type:d!==null?a+".@data-"+d:k,filter:e!==null?a+".@data-"+e:k};ja(o,a)}}})}var w=o.oFeatures;e.bStateSave&&(w.bStateSave=
91
+ !0,Kb(o,e),z(o,"aoDrawCallback",wa,"state_save"));if(e.aaSorting===k){t=o.aaSorting;g=0;for(j=t.length;g<j;g++)t[g][1]=o.aoColumns[g].asSorting[0]}va(o);w.bSort&&z(o,"aoDrawCallback",function(){if(o.bSorted){var a=V(o),b={};h.each(a,function(a,c){b[c.src]=c.dir});u(o,null,"order",[o,a,b]);Jb(o)}});z(o,"aoDrawCallback",function(){(o.bSorted||y(o)==="ssp"||w.bDeferRender)&&va(o)},"sc");g=q.children("caption").each(function(){this._captionSide=q.css("caption-side")});j=q.children("thead");0===j.length&&
92
+ (j=h("<thead/>").appendTo(this));o.nTHead=j[0];j=q.children("tbody");0===j.length&&(j=h("<tbody/>").appendTo(this));o.nTBody=j[0];j=q.children("tfoot");if(0===j.length&&0<g.length&&(""!==o.oScroll.sX||""!==o.oScroll.sY))j=h("<tfoot/>").appendTo(this);0===j.length||0===j.children().length?q.addClass(i.sNoFooter):0<j.length&&(o.nTFoot=j[0],da(o.aoFooter,o.nTFoot));if(e.aaData)for(g=0;g<e.aaData.length;g++)N(o,e.aaData[g]);else(o.bDeferLoading||"dom"==y(o))&&ma(o,h(o.nTBody).children("tr"));o.aiDisplay=
93
+ o.aiDisplayMaster.slice();o.bInitialised=!0;!1===n&&ga(o)}});b=null;return this},v,r,p,s,Ya={},Ob=/[\r\n]/g,Aa=/<.*?>/g,ac=/^[\w\+\-]/,bc=/[\w\+\-]$/,cc=RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)","g"),Xa=/[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfk]/gi,M=function(a){return!a||!0===a||"-"===a?!0:!1},Pb=function(a){var b=parseInt(a,10);return!isNaN(b)&&isFinite(a)?b:null},Qb=function(a,b){Ya[b]||(Ya[b]=RegExp(Qa(b),"g"));return"string"===typeof a&&"."!==b?a.replace(/\./g,
94
+ "").replace(Ya[b],"."):a},Za=function(a,b,c){var d="string"===typeof a;if(M(a))return!0;b&&d&&(a=Qb(a,b));c&&d&&(a=a.replace(Xa,""));return!isNaN(parseFloat(a))&&isFinite(a)},Rb=function(a,b,c){return M(a)?!0:!(M(a)||"string"===typeof a)?null:Za(a.replace(Aa,""),b,c)?!0:null},G=function(a,b,c){var d=[],e=0,f=a.length;if(c!==k)for(;e<f;e++)a[e]&&a[e][b]&&d.push(a[e][b][c]);else for(;e<f;e++)a[e]&&d.push(a[e][b]);return d},ha=function(a,b,c,d){var e=[],f=0,g=b.length;if(d!==k)for(;f<g;f++)a[b[f]][c]&&
95
+ e.push(a[b[f]][c][d]);else for(;f<g;f++)e.push(a[b[f]][c]);return e},W=function(a,b){var c=[],d;b===k?(b=0,d=a):(d=b,b=a);for(var e=b;e<d;e++)c.push(e);return c},Sb=function(a){for(var b=[],c=0,d=a.length;c<d;c++)a[c]&&b.push(a[c]);return b},pa=function(a){var b=[],c,d,e=a.length,f,g=0;d=0;a:for(;d<e;d++){c=a[d];for(f=0;f<g;f++)if(b[f]===c)continue a;b.push(c);g++}return b};m.util={throttle:function(a,b){var c=b!==k?b:200,d,e;return function(){var b=this,g=+new Date,h=arguments;d&&g<d+c?(clearTimeout(e),
96
+ e=setTimeout(function(){d=k;a.apply(b,h)},c)):(d=g,a.apply(b,h))}},escapeRegex:function(a){return a.replace(cc,"\\$1")}};var A=function(a,b,c){a[b]!==k&&(a[c]=a[b])},ba=/\[.*?\]$/,U=/\(\)$/,Qa=m.util.escapeRegex,ua=h("<div>")[0],Zb=ua.textContent!==k,$b=/<.*?>/g,Oa=m.util.throttle,Tb=[],w=Array.prototype,dc=function(a){var b,c,d=m.settings,e=h.map(d,function(a){return a.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase())return b=h.inArray(a,e),-1!==b?[d[b]]:
97
+ null;if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?c=h(a):a instanceof h&&(c=a)}else return[];if(c)return c.map(function(){b=h.inArray(this,e);return-1!==b?d[b]:null}).toArray()};r=function(a,b){if(!(this instanceof r))return new r(a,b);var c=[],d=function(a){(a=dc(a))&&(c=c.concat(a))};if(h.isArray(a))for(var e=0,f=a.length;e<f;e++)d(a[e]);else d(a);this.context=pa(c);b&&h.merge(this,b);this.selector={rows:null,cols:null,opts:null};r.extend(this,this,Tb)};
98
+ m.Api=r;h.extend(r.prototype,{any:function(){return 0!==this.count()},concat:w.concat,context:[],count:function(){return this.flatten().length},each:function(a){for(var b=0,c=this.length;b<c;b++)a.call(this,this[b],b,this);return this},eq:function(a){var b=this.context;return b.length>a?new r(b[a],this[a]):null},filter:function(a){var b=[];if(w.filter)b=w.filter.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)a.call(this,this[c],c,this)&&b.push(this[c]);return new r(this.context,b)},flatten:function(){var a=
99
+ [];return new r(this.context,a.concat.apply(a,this.toArray()))},join:w.join,indexOf:w.indexOf||function(a,b){for(var c=b||0,d=this.length;c<d;c++)if(this[c]===a)return c;return-1},iterator:function(a,b,c,d){var e=[],f,g,h,i,n,l=this.context,m,t,p=this.selector;"string"===typeof a&&(d=c,c=b,b=a,a=!1);g=0;for(h=l.length;g<h;g++){var o=new r(l[g]);if("table"===b)f=c.call(o,l[g],g),f!==k&&e.push(f);else if("columns"===b||"rows"===b)f=c.call(o,l[g],this[g],g),f!==k&&e.push(f);else if("column"===b||"column-rows"===
100
+ b||"row"===b||"cell"===b){t=this[g];"column-rows"===b&&(m=Ba(l[g],p.opts));i=0;for(n=t.length;i<n;i++)f=t[i],f="cell"===b?c.call(o,l[g],f.row,f.column,g,i):c.call(o,l[g],f,g,i,m),f!==k&&e.push(f)}}return e.length||d?(a=new r(l,a?e.concat.apply([],e):e),b=a.selector,b.rows=p.rows,b.cols=p.cols,b.opts=p.opts,a):this},lastIndexOf:w.lastIndexOf||function(a,b){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(a){var b=[];if(w.map)b=w.map.call(this,a,this);else for(var c=
101
+ 0,d=this.length;c<d;c++)b.push(a.call(this,this[c],c));return new r(this.context,b)},pluck:function(a){return this.map(function(b){return b[a]})},pop:w.pop,push:w.push,reduce:w.reduce||function(a,b){return hb(this,a,b,0,this.length,1)},reduceRight:w.reduceRight||function(a,b){return hb(this,a,b,this.length-1,-1,-1)},reverse:w.reverse,selector:null,shift:w.shift,sort:w.sort,splice:w.splice,toArray:function(){return w.slice.call(this)},to$:function(){return h(this)},toJQuery:function(){return h(this)},
102
+ unique:function(){return new r(this.context,pa(this))},unshift:w.unshift});r.extend=function(a,b,c){if(c.length&&b&&(b instanceof r||b.__dt_wrapper)){var d,e,f,g=function(a,b,c){return function(){var d=b.apply(a,arguments);r.extend(d,d,c.methodExt);return d}};d=0;for(e=c.length;d<e;d++)f=c[d],b[f.name]="function"===typeof f.val?g(a,f.val,f):h.isPlainObject(f.val)?{}:f.val,b[f.name].__dt_wrapper=!0,r.extend(a,b[f.name],f.propExt)}};r.register=p=function(a,b){if(h.isArray(a))for(var c=0,d=a.length;c<
103
+ d;c++)r.register(a[c],b);else for(var e=a.split("."),f=Tb,g,j,c=0,d=e.length;c<d;c++){g=(j=-1!==e[c].indexOf("()"))?e[c].replace("()",""):e[c];var i;a:{i=0;for(var n=f.length;i<n;i++)if(f[i].name===g){i=f[i];break a}i=null}i||(i={name:g,val:{},methodExt:[],propExt:[]},f.push(i));c===d-1?i.val=b:f=j?i.methodExt:i.propExt}};r.registerPlural=s=function(a,b,c){r.register(a,c);r.register(b,function(){var a=c.apply(this,arguments);return a===this?this:a instanceof r?a.length?h.isArray(a[0])?new r(a.context,
104
+ a[0]):a[0]:k:a})};p("tables()",function(a){var b;if(a){b=r;var c=this.context;if("number"===typeof a)a=[c[a]];else var d=h.map(c,function(a){return a.nTable}),a=h(d).filter(a).map(function(){var a=h.inArray(this,d);return c[a]}).toArray();b=new b(a)}else b=this;return b});p("table()",function(a){var a=this.tables(a),b=a.context;return b.length?new r(b[0]):a});s("tables().nodes()","table().node()",function(){return this.iterator("table",function(a){return a.nTable},1)});s("tables().body()","table().body()",
105
+ function(){return this.iterator("table",function(a){return a.nTBody},1)});s("tables().header()","table().header()",function(){return this.iterator("table",function(a){return a.nTHead},1)});s("tables().footer()","table().footer()",function(){return this.iterator("table",function(a){return a.nTFoot},1)});s("tables().containers()","table().container()",function(){return this.iterator("table",function(a){return a.nTableWrapper},1)});p("draw()",function(a){return this.iterator("table",function(b){"page"===
106
+ a?O(b):("string"===typeof a&&(a="full-hold"===a?!1:!0),T(b,!1===a))})});p("page()",function(a){return a===k?this.page.info().page:this.iterator("table",function(b){Ta(b,a)})});p("page.info()",function(){if(0===this.context.length)return k;var a=this.context[0],b=a._iDisplayStart,c=a.oFeatures.bPaginate?a._iDisplayLength:-1,d=a.fnRecordsDisplay(),e=-1===c;return{page:e?0:Math.floor(b/c),pages:e?1:Math.ceil(d/c),start:b,end:a.fnDisplayEnd(),length:c,recordsTotal:a.fnRecordsTotal(),recordsDisplay:d,
107
+ serverSide:"ssp"===y(a)}});p("page.len()",function(a){return a===k?0!==this.context.length?this.context[0]._iDisplayLength:k:this.iterator("table",function(b){Ra(b,a)})});var Ub=function(a,b,c){if(c){var d=new r(a);d.one("draw",function(){c(d.ajax.json())})}if("ssp"==y(a))T(a,b);else{C(a,!0);var e=a.jqXHR;e&&4!==e.readyState&&e.abort();ra(a,[],function(c){na(a);for(var c=sa(a,c),d=0,e=c.length;d<e;d++)N(a,c[d]);T(a,b);C(a,!1)})}};p("ajax.json()",function(){var a=this.context;if(0<a.length)return a[0].json});
108
+ p("ajax.params()",function(){var a=this.context;if(0<a.length)return a[0].oAjaxData});p("ajax.reload()",function(a,b){return this.iterator("table",function(c){Ub(c,!1===b,a)})});p("ajax.url()",function(a){var b=this.context;if(a===k){if(0===b.length)return k;b=b[0];return b.ajax?h.isPlainObject(b.ajax)?b.ajax.url:b.ajax:b.sAjaxSource}return this.iterator("table",function(b){h.isPlainObject(b.ajax)?b.ajax.url=a:b.ajax=a})});p("ajax.url().load()",function(a,b){return this.iterator("table",function(c){Ub(c,
109
+ !1===b,a)})});var $a=function(a,b,c,d,e){var f=[],g,j,i,n,l,m;i=typeof b;if(!b||"string"===i||"function"===i||b.length===k)b=[b];i=0;for(n=b.length;i<n;i++){j=b[i]&&b[i].split?b[i].split(","):[b[i]];l=0;for(m=j.length;l<m;l++)(g=c("string"===typeof j[l]?h.trim(j[l]):j[l]))&&g.length&&(f=f.concat(g))}a=v.selector[a];if(a.length){i=0;for(n=a.length;i<n;i++)f=a[i](d,e,f)}return pa(f)},ab=function(a){a||(a={});a.filter&&a.search===k&&(a.search=a.filter);return h.extend({search:"none",order:"current",
110
+ page:"all"},a)},bb=function(a){for(var b=0,c=a.length;b<c;b++)if(0<a[b].length)return a[0]=a[b],a[0].length=1,a.length=1,a.context=[a.context[b]],a;a.length=0;return a},Ba=function(a,b){var c,d,e,f=[],g=a.aiDisplay;c=a.aiDisplayMaster;var j=b.search;d=b.order;e=b.page;if("ssp"==y(a))return"removed"===j?[]:W(0,c.length);if("current"==e){c=a._iDisplayStart;for(d=a.fnDisplayEnd();c<d;c++)f.push(g[c])}else if("current"==d||"applied"==d)f="none"==j?c.slice():"applied"==j?g.slice():h.map(c,function(a){return-1===
111
+ h.inArray(a,g)?a:null});else if("index"==d||"original"==d){c=0;for(d=a.aoData.length;c<d;c++)"none"==j?f.push(c):(e=h.inArray(c,g),(-1===e&&"removed"==j||0<=e&&"applied"==j)&&f.push(c))}return f};p("rows()",function(a,b){a===k?a="":h.isPlainObject(a)&&(b=a,a="");var b=ab(b),c=this.iterator("table",function(c){var e=b;return $a("row",a,function(a){var b=Pb(a);if(b!==null&&!e)return[b];var j=Ba(c,e);if(b!==null&&h.inArray(b,j)!==-1)return[b];if(!a)return j;if(typeof a==="function")return h.map(j,function(b){var e=
112
+ c.aoData[b];return a(b,e._aData,e.nTr)?b:null});b=Sb(ha(c.aoData,j,"nTr"));if(a.nodeName){if(a._DT_RowIndex!==k)return[a._DT_RowIndex];if(a._DT_CellIndex)return[a._DT_CellIndex.row];b=h(a).closest("*[data-dt-row]");return b.length?[b.data("dt-row")]:[]}if(typeof a==="string"&&a.charAt(0)==="#"){j=c.aIds[a.replace(/^#/,"")];if(j!==k)return[j.idx]}return h(b).filter(a).map(function(){return this._DT_RowIndex}).toArray()},c,e)},1);c.selector.rows=a;c.selector.opts=b;return c});p("rows().nodes()",function(){return this.iterator("row",
113
+ function(a,b){return a.aoData[b].nTr||k},1)});p("rows().data()",function(){return this.iterator(!0,"rows",function(a,b){return ha(a.aoData,b,"_aData")},1)});s("rows().cache()","row().cache()",function(a){return this.iterator("row",function(b,c){var d=b.aoData[c];return"search"===a?d._aFilterData:d._aSortData},1)});s("rows().invalidate()","row().invalidate()",function(a){return this.iterator("row",function(b,c){ca(b,c,a)})});s("rows().indexes()","row().index()",function(){return this.iterator("row",
114
+ function(a,b){return b},1)});s("rows().ids()","row().id()",function(a){for(var b=[],c=this.context,d=0,e=c.length;d<e;d++)for(var f=0,g=this[d].length;f<g;f++){var h=c[d].rowIdFn(c[d].aoData[this[d][f]]._aData);b.push((!0===a?"#":"")+h)}return new r(c,b)});s("rows().remove()","row().remove()",function(){var a=this;this.iterator("row",function(b,c,d){var e=b.aoData,f=e[c],g,h,i,n,l;e.splice(c,1);g=0;for(h=e.length;g<h;g++)if(i=e[g],l=i.anCells,null!==i.nTr&&(i.nTr._DT_RowIndex=g),null!==l){i=0;for(n=
115
+ l.length;i<n;i++)l[i]._DT_CellIndex.row=g}oa(b.aiDisplayMaster,c);oa(b.aiDisplay,c);oa(a[d],c,!1);Sa(b);c=b.rowIdFn(f._aData);c!==k&&delete b.aIds[c]});this.iterator("table",function(a){for(var c=0,d=a.aoData.length;c<d;c++)a.aoData[c].idx=c});return this});p("rows.add()",function(a){var b=this.iterator("table",function(b){var c,f,g,h=[];f=0;for(g=a.length;f<g;f++)c=a[f],c.nodeName&&"TR"===c.nodeName.toUpperCase()?h.push(ma(b,c)[0]):h.push(N(b,c));return h},1),c=this.rows(-1);c.pop();h.merge(c,b);
116
+ return c});p("row()",function(a,b){return bb(this.rows(a,b))});p("row().data()",function(a){var b=this.context;if(a===k)return b.length&&this.length?b[0].aoData[this[0]]._aData:k;b[0].aoData[this[0]]._aData=a;ca(b[0],this[0],"data");return this});p("row().node()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]].nTr||null:null});p("row.add()",function(a){a instanceof h&&a.length&&(a=a[0]);var b=this.iterator("table",function(b){return a.nodeName&&"TR"===a.nodeName.toUpperCase()?
117
+ ma(b,a)[0]:N(b,a)});return this.row(b[0])});var cb=function(a,b){var c=a.context;if(c.length&&(c=c[0].aoData[b!==k?b:a[0]])&&c._details)c._details.remove(),c._detailsShow=k,c._details=k},Vb=function(a,b){var c=a.context;if(c.length&&a.length){var d=c[0].aoData[a[0]];if(d._details){(d._detailsShow=b)?d._details.insertAfter(d.nTr):d._details.detach();var e=c[0],f=new r(e),g=e.aoData;f.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");0<G(g,"_details").length&&(f.on("draw.dt.DT_details",
118
+ function(a,b){e===b&&f.rows({page:"current"}).eq(0).each(function(a){a=g[a];a._detailsShow&&a._details.insertAfter(a.nTr)})}),f.on("column-visibility.dt.DT_details",function(a,b){if(e===b)for(var c,d=aa(b),f=0,h=g.length;f<h;f++)c=g[f],c._details&&c._details.children("td[colspan]").attr("colspan",d)}),f.on("destroy.dt.DT_details",function(a,b){if(e===b)for(var c=0,d=g.length;c<d;c++)g[c]._details&&cb(f,c)}))}}};p("row().child()",function(a,b){var c=this.context;if(a===k)return c.length&&this.length?
119
+ c[0].aoData[this[0]]._details:k;if(!0===a)this.child.show();else if(!1===a)cb(this);else if(c.length&&this.length){var d=c[0],c=c[0].aoData[this[0]],e=[],f=function(a,b){if(h.isArray(a)||a instanceof h)for(var c=0,k=a.length;c<k;c++)f(a[c],b);else a.nodeName&&"tr"===a.nodeName.toLowerCase()?e.push(a):(c=h("<tr><td/></tr>").addClass(b),h("td",c).addClass(b).html(a)[0].colSpan=aa(d),e.push(c[0]))};f(a,b);c._details&&c._details.remove();c._details=h(e);c._detailsShow&&c._details.insertAfter(c.nTr)}return this});
120
+ p(["row().child.show()","row().child().show()"],function(){Vb(this,!0);return this});p(["row().child.hide()","row().child().hide()"],function(){Vb(this,!1);return this});p(["row().child.remove()","row().child().remove()"],function(){cb(this);return this});p("row().child.isShown()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]]._detailsShow||!1:!1});var ec=/^(.+):(name|visIdx|visible)$/,Wb=function(a,b,c,d,e){for(var c=[],d=0,f=e.length;d<f;d++)c.push(B(a,e[d],b));
121
+ return c};p("columns()",function(a,b){a===k?a="":h.isPlainObject(a)&&(b=a,a="");var b=ab(b),c=this.iterator("table",function(c){var e=a,f=b,g=c.aoColumns,j=G(g,"sName"),i=G(g,"nTh");return $a("column",e,function(a){var b=Pb(a);if(a==="")return W(g.length);if(b!==null)return[b>=0?b:g.length+b];if(typeof a==="function"){var e=Ba(c,f);return h.map(g,function(b,f){return a(f,Wb(c,f,0,0,e),i[f])?f:null})}var k=typeof a==="string"?a.match(ec):"";if(k)switch(k[2]){case "visIdx":case "visible":b=parseInt(k[1],
122
+ 10);if(b<0){var m=h.map(g,function(a,b){return a.bVisible?b:null});return[m[m.length+b]]}return[Z(c,b)];case "name":return h.map(j,function(a,b){return a===k[1]?b:null});default:return[]}if(a.nodeName&&a._DT_CellIndex)return[a._DT_CellIndex.column];b=h(i).filter(a).map(function(){return h.inArray(this,i)}).toArray();if(b.length||!a.nodeName)return b;b=h(a).closest("*[data-dt-column]");return b.length?[b.data("dt-column")]:[]},c,f)},1);c.selector.cols=a;c.selector.opts=b;return c});s("columns().header()",
123
+ "column().header()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTh},1)});s("columns().footer()","column().footer()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTf},1)});s("columns().data()","column().data()",function(){return this.iterator("column-rows",Wb,1)});s("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData},1)});s("columns().cache()","column().cache()",
124
+ function(a){return this.iterator("column-rows",function(b,c,d,e,f){return ha(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)},1)});s("columns().nodes()","column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return ha(a.aoData,e,"anCells",b)},1)});s("columns().visible()","column().visible()",function(a,b){var c=this.iterator("column",function(b,c){if(a===k)return b.aoColumns[c].bVisible;var f=b.aoColumns,g=f[c],j=b.aoData,i,n,l;if(a!==k&&g.bVisible!==a){if(a){var m=
125
+ h.inArray(!0,G(f,"bVisible"),c+1);i=0;for(n=j.length;i<n;i++)l=j[i].nTr,f=j[i].anCells,l&&l.insertBefore(f[c],f[m]||null)}else h(G(b.aoData,"anCells",c)).detach();g.bVisible=a;ea(b,b.aoHeader);ea(b,b.aoFooter);wa(b)}});a!==k&&(this.iterator("column",function(c,e){u(c,null,"column-visibility",[c,e,a,b])}),(b===k||b)&&this.columns.adjust());return c});s("columns().indexes()","column().index()",function(a){return this.iterator("column",function(b,c){return"visible"===a?$(b,c):c},1)});p("columns.adjust()",
126
+ function(){return this.iterator("table",function(a){Y(a)},1)});p("column.index()",function(a,b){if(0!==this.context.length){var c=this.context[0];if("fromVisible"===a||"toData"===a)return Z(c,b);if("fromData"===a||"toVisible"===a)return $(c,b)}});p("column()",function(a,b){return bb(this.columns(a,b))});p("cells()",function(a,b,c){h.isPlainObject(a)&&(a.row===k?(c=a,a=null):(c=b,b=null));h.isPlainObject(b)&&(c=b,b=null);if(null===b||b===k)return this.iterator("table",function(b){var d=a,e=ab(c),f=
127
+ b.aoData,g=Ba(b,e),j=Sb(ha(f,g,"anCells")),i=h([].concat.apply([],j)),l,n=b.aoColumns.length,m,p,r,u,v,s;return $a("cell",d,function(a){var c=typeof a==="function";if(a===null||a===k||c){m=[];p=0;for(r=g.length;p<r;p++){l=g[p];for(u=0;u<n;u++){v={row:l,column:u};if(c){s=f[l];a(v,B(b,l,u),s.anCells?s.anCells[u]:null)&&m.push(v)}else m.push(v)}}return m}if(h.isPlainObject(a))return[a];c=i.filter(a).map(function(a,b){return{row:b._DT_CellIndex.row,column:b._DT_CellIndex.column}}).toArray();if(c.length||
128
+ !a.nodeName)return c;s=h(a).closest("*[data-dt-row]");return s.length?[{row:s.data("dt-row"),column:s.data("dt-column")}]:[]},b,e)});var d=this.columns(b,c),e=this.rows(a,c),f,g,j,i,n,l=this.iterator("table",function(a,b){f=[];g=0;for(j=e[b].length;g<j;g++){i=0;for(n=d[b].length;i<n;i++)f.push({row:e[b][g],column:d[b][i]})}return f},1);h.extend(l.selector,{cols:b,rows:a,opts:c});return l});s("cells().nodes()","cell().node()",function(){return this.iterator("cell",function(a,b,c){return(a=a.aoData[b])&&
129
+ a.anCells?a.anCells[c]:k},1)});p("cells().data()",function(){return this.iterator("cell",function(a,b,c){return B(a,b,c)},1)});s("cells().cache()","cell().cache()",function(a){a="search"===a?"_aFilterData":"_aSortData";return this.iterator("cell",function(b,c,d){return b.aoData[c][a][d]},1)});s("cells().render()","cell().render()",function(a){return this.iterator("cell",function(b,c,d){return B(b,c,d,a)},1)});s("cells().indexes()","cell().index()",function(){return this.iterator("cell",function(a,
130
+ b,c){return{row:b,column:c,columnVisible:$(a,c)}},1)});s("cells().invalidate()","cell().invalidate()",function(a){return this.iterator("cell",function(b,c,d){ca(b,c,a,d)})});p("cell()",function(a,b,c){return bb(this.cells(a,b,c))});p("cell().data()",function(a){var b=this.context,c=this[0];if(a===k)return b.length&&c.length?B(b[0],c[0].row,c[0].column):k;jb(b[0],c[0].row,c[0].column,a);ca(b[0],c[0].row,"data",c[0].column);return this});p("order()",function(a,b){var c=this.context;if(a===k)return 0!==
131
+ c.length?c[0].aaSorting:k;"number"===typeof a?a=[[a,b]]:a.length&&!h.isArray(a[0])&&(a=Array.prototype.slice.call(arguments));return this.iterator("table",function(b){b.aaSorting=a.slice()})});p("order.listener()",function(a,b,c){return this.iterator("table",function(d){Ma(d,a,b,c)})});p("order.fixed()",function(a){if(!a){var b=this.context,b=b.length?b[0].aaSortingFixed:k;return h.isArray(b)?{pre:b}:b}return this.iterator("table",function(b){b.aaSortingFixed=h.extend(!0,{},a)})});p(["columns().order()",
132
+ "column().order()"],function(a){var b=this;return this.iterator("table",function(c,d){var e=[];h.each(b[d],function(b,c){e.push([c,a])});c.aaSorting=e})});p("search()",function(a,b,c,d){var e=this.context;return a===k?0!==e.length?e[0].oPreviousSearch.sSearch:k:this.iterator("table",function(e){e.oFeatures.bFilter&&fa(e,h.extend({},e.oPreviousSearch,{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),1)})});s("columns().search()","column().search()",function(a,
133
+ b,c,d){return this.iterator("column",function(e,f){var g=e.aoPreSearchCols;if(a===k)return g[f].sSearch;e.oFeatures.bFilter&&(h.extend(g[f],{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),fa(e,e.oPreviousSearch,1))})});p("state()",function(){return this.context.length?this.context[0].oSavedState:null});p("state.clear()",function(){return this.iterator("table",function(a){a.fnStateSaveCallback.call(a.oInstance,a,{})})});p("state.loaded()",function(){return this.context.length?
134
+ this.context[0].oLoadedState:null});p("state.save()",function(){return this.iterator("table",function(a){wa(a)})});m.versionCheck=m.fnVersionCheck=function(a){for(var b=m.version.split("."),a=a.split("."),c,d,e=0,f=a.length;e<f;e++)if(c=parseInt(b[e],10)||0,d=parseInt(a[e],10)||0,c!==d)return c>d;return!0};m.isDataTable=m.fnIsDataTable=function(a){var b=h(a).get(0),c=!1;h.each(m.settings,function(a,e){var f=e.nScrollHead?h("table",e.nScrollHead)[0]:null,g=e.nScrollFoot?h("table",e.nScrollFoot)[0]:
135
+ null;if(e.nTable===b||f===b||g===b)c=!0});return c};m.tables=m.fnTables=function(a){var b=!1;h.isPlainObject(a)&&(b=a.api,a=a.visible);var c=h.map(m.settings,function(b){if(!a||a&&h(b.nTable).is(":visible"))return b.nTable});return b?new r(c):c};m.camelToHungarian=K;p("$()",function(a,b){var c=this.rows(b).nodes(),c=h(c);return h([].concat(c.filter(a).toArray(),c.find(a).toArray()))});h.each(["on","one","off"],function(a,b){p(b+"()",function(){var a=Array.prototype.slice.call(arguments);a[0].match(/\.dt\b/)||
136
+ (a[0]+=".dt");var d=h(this.tables().nodes());d[b].apply(d,a);return this})});p("clear()",function(){return this.iterator("table",function(a){na(a)})});p("settings()",function(){return new r(this.context,this.context)});p("init()",function(){var a=this.context;return a.length?a[0].oInit:null});p("data()",function(){return this.iterator("table",function(a){return G(a.aoData,"_aData")}).flatten()});p("destroy()",function(a){a=a||!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,
137
+ d=b.oClasses,e=b.nTable,f=b.nTBody,g=b.nTHead,j=b.nTFoot,i=h(e),f=h(f),k=h(b.nTableWrapper),l=h.map(b.aoData,function(a){return a.nTr}),p;b.bDestroying=!0;u(b,"aoDestroyCallback","destroy",[b]);a||(new r(b)).columns().visible(!0);k.unbind(".DT").find(":not(tbody *)").unbind(".DT");h(D).unbind(".DT-"+b.sInstance);e!=g.parentNode&&(i.children("thead").detach(),i.append(g));j&&e!=j.parentNode&&(i.children("tfoot").detach(),i.append(j));b.aaSorting=[];b.aaSortingFixed=[];va(b);h(l).removeClass(b.asStripeClasses.join(" "));
138
+ h("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);b.bJUI&&(h("th span."+d.sSortIcon+", td span."+d.sSortIcon,g).detach(),h("th, td",g).each(function(){var a=h("div."+d.sSortJUIWrapper,this);h(this).append(a.contents());a.detach()}));f.children().detach();f.append(l);g=a?"remove":"detach";i[g]();k[g]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),i.css("width",b.sDestroyWidth).removeClass(d.sTable),(p=b.asDestroyStripes.length)&&f.children().each(function(a){h(this).addClass(b.asDestroyStripes[a%
139
+ p])}));c=h.inArray(b,m.settings);-1!==c&&m.settings.splice(c,1)})});h.each(["column","row","cell"],function(a,b){p(b+"s().every()",function(a){var d=this.selector.opts,e=this;return this.iterator(b,function(f,g,h,i,n){a.call(e[b](g,"cell"===b?h:d,"cell"===b?d:k),g,h,i,n)})})});p("i18n()",function(a,b,c){var d=this.context[0],a=Q(a)(d.oLanguage);a===k&&(a=b);c!==k&&h.isPlainObject(a)&&(a=a[c]!==k?a[c]:a._);return a.replace("%d",c)});m.version="1.10.12";m.settings=[];m.models={};m.models.oSearch={bCaseInsensitive:!0,
140
+ sSearch:"",bRegex:!1,bSmart:!0};m.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};m.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,
141
+ sTitle:null,sType:null,sWidth:null,sWidthOrig:null};m.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bJQueryUI:!1,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,
142
+ fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===
143
+ a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",
144
+ sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:h.extend({},m.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",
145
+ renderer:null,rowId:"DT_RowId"};X(m.defaults);m.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};X(m.defaults.column);m.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,
146
+ bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],
147
+ aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:k,oAjaxData:k,
148
+ fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,bJUI:null,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==y(this)?1*this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==y(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=
149
+ this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};m.ext=v={buttons:{},classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},
150
+ header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:m.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:m.version};h.extend(v,{afnFiltering:v.search,aTypes:v.type.detect,ofnSearch:v.type.search,oSort:v.type.order,afnSortData:v.order,aoFeatures:v.feature,oApi:v.internal,oStdClasses:v.classes,oPagination:v.pager});h.extend(m.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",
151
+ sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",
152
+ sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""});var Ca="",Ca="",H=Ca+"ui-state-default",ia=Ca+"css_right ui-icon ui-icon-",Xb=Ca+"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix";h.extend(m.ext.oJUIClasses,
153
+ m.ext.classes,{sPageButton:"fg-button ui-button "+H,sPageButtonActive:"ui-state-disabled",sPageButtonDisabled:"ui-state-disabled",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sSortAsc:H+" sorting_asc",sSortDesc:H+" sorting_desc",sSortable:H+" sorting",sSortableAsc:H+" sorting_asc_disabled",sSortableDesc:H+" sorting_desc_disabled",sSortableNone:H+" sorting_disabled",sSortJUIAsc:ia+"triangle-1-n",sSortJUIDesc:ia+"triangle-1-s",sSortJUI:ia+"carat-2-n-s",
154
+ sSortJUIAscAllowed:ia+"carat-1-n",sSortJUIDescAllowed:ia+"carat-1-s",sSortJUIWrapper:"DataTables_sort_wrapper",sSortIcon:"DataTables_sort_icon",sScrollHead:"dataTables_scrollHead "+H,sScrollFoot:"dataTables_scrollFoot "+H,sHeaderTH:H,sFooterTH:H,sJUIHeader:Xb+" ui-corner-tl ui-corner-tr",sJUIFooter:Xb+" ui-corner-bl ui-corner-br"});var Mb=m.ext.pager;h.extend(Mb,{simple:function(){return["previous","next"]},full:function(){return["first","previous","next","last"]},numbers:function(a,b){return[ya(a,
155
+ b)]},simple_numbers:function(a,b){return["previous",ya(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ya(a,b),"next","last"]},_numbers:ya,numbers_length:7});h.extend(!0,m.ext.renderer,{pageButton:{_:function(a,b,c,d,e,f){var g=a.oClasses,j=a.oLanguage.oPaginate,i=a.oLanguage.oAria.paginate||{},k,l,m=0,p=function(b,d){var o,r,u,s,v=function(b){Ta(a,b.data.action,true)};o=0;for(r=d.length;o<r;o++){s=d[o];if(h.isArray(s)){u=h("<"+(s.DT_el||"div")+"/>").appendTo(b);p(u,s)}else{k=null;
156
+ l="";switch(s){case "ellipsis":b.append('<span class="ellipsis">&#x2026;</span>');break;case "first":k=j.sFirst;l=s+(e>0?"":" "+g.sPageButtonDisabled);break;case "previous":k=j.sPrevious;l=s+(e>0?"":" "+g.sPageButtonDisabled);break;case "next":k=j.sNext;l=s+(e<f-1?"":" "+g.sPageButtonDisabled);break;case "last":k=j.sLast;l=s+(e<f-1?"":" "+g.sPageButtonDisabled);break;default:k=s+1;l=e===s?g.sPageButtonActive:""}if(k!==null){u=h("<a>",{"class":g.sPageButton+" "+l,"aria-controls":a.sTableId,"aria-label":i[s],
157
+ "data-dt-idx":m,tabindex:a.iTabIndex,id:c===0&&typeof s==="string"?a.sTableId+"_"+s:null}).html(k).appendTo(b);Wa(u,{action:s},v);m++}}}},r;try{r=h(b).find(I.activeElement).data("dt-idx")}catch(o){}p(h(b).empty(),d);r&&h(b).find("[data-dt-idx="+r+"]").focus()}}});h.extend(m.ext.type.detect,[function(a,b){var c=b.oLanguage.sDecimal;return Za(a,c)?"num"+c:null},function(a){if(a&&!(a instanceof Date)&&(!ac.test(a)||!bc.test(a)))return null;var b=Date.parse(a);return null!==b&&!isNaN(b)||M(a)?"date":
158
+ null},function(a,b){var c=b.oLanguage.sDecimal;return Za(a,c,!0)?"num-fmt"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Rb(a,c)?"html-num"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Rb(a,c,!0)?"html-num-fmt"+c:null},function(a){return M(a)||"string"===typeof a&&-1!==a.indexOf("<")?"html":null}]);h.extend(m.ext.type.search,{html:function(a){return M(a)?a:"string"===typeof a?a.replace(Ob," ").replace(Aa,""):""},string:function(a){return M(a)?a:"string"===typeof a?a.replace(Ob,
159
+ " "):a}});var za=function(a,b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=Qb(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};h.extend(v.type.order,{"date-pre":function(a){return Date.parse(a)||0},"html-pre":function(a){return M(a)?"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return M(a)?"":"string"===typeof a?a.toLowerCase():!a.toString?"":a.toString()},"string-asc":function(a,b){return a<b?-1:a>b?1:0},"string-desc":function(a,
160
+ b){return a<b?1:a>b?-1:0}});db("");h.extend(!0,m.ext.renderer,{header:{_:function(a,b,c,d){h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(c.sSortingClass+" "+d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass)}})},jqueryui:function(a,b,c,d){h("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(h("<span/>").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);h(a.nTable).on("order.dt.DT",function(e,
161
+ f,g,h){if(a===f){e=c.idx;b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass);b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass(h[e]=="asc"?d.sSortJUIAsc:h[e]=="desc"?d.sSortJUIDesc:c.sSortingClassJUI)}})}}});var Yb=function(a){return"string"===typeof a?a.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"):a};m.render={number:function(a,
162
+ b,c,d,e){return{display:function(f){if("number"!==typeof f&&"string"!==typeof f)return f;var g=0>f?"-":"",h=parseFloat(f);if(isNaN(h))return Yb(f);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2):"";return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g,a)+f+(e||"")}}},text:function(){return{display:Yb}}};h.extend(m.ext.internal,{_fnExternApiFunc:Nb,_fnBuildAjax:ra,_fnAjaxUpdate:lb,_fnAjaxParameters:ub,_fnAjaxUpdateDraw:vb,_fnAjaxDataSrc:sa,_fnAddColumn:Ea,_fnColumnOptions:ja,
163
+ _fnAdjustColumnSizing:Y,_fnVisibleToColumnIndex:Z,_fnColumnIndexToVisible:$,_fnVisbleColumns:aa,_fnGetColumns:la,_fnColumnTypes:Ga,_fnApplyColumnDefs:ib,_fnHungarianMap:X,_fnCamelToHungarian:K,_fnLanguageCompat:Da,_fnBrowserDetect:gb,_fnAddData:N,_fnAddTr:ma,_fnNodeToDataIndex:function(a,b){return b._DT_RowIndex!==k?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return h.inArray(c,a.aoData[b].anCells)},_fnGetCellData:B,_fnSetCellData:jb,_fnSplitObjNotation:Ja,_fnGetObjectDataFn:Q,_fnSetObjectDataFn:R,
164
+ _fnGetDataMaster:Ka,_fnClearTable:na,_fnDeleteIndex:oa,_fnInvalidate:ca,_fnGetRowElements:Ia,_fnCreateTr:Ha,_fnBuildHead:kb,_fnDrawHead:ea,_fnDraw:O,_fnReDraw:T,_fnAddOptionsHtml:nb,_fnDetectHeader:da,_fnGetUniqueThs:qa,_fnFeatureHtmlFilter:pb,_fnFilterComplete:fa,_fnFilterCustom:yb,_fnFilterColumn:xb,_fnFilter:wb,_fnFilterCreateSearch:Pa,_fnEscapeRegex:Qa,_fnFilterData:zb,_fnFeatureHtmlInfo:sb,_fnUpdateInfo:Cb,_fnInfoMacros:Db,_fnInitialise:ga,_fnInitComplete:ta,_fnLengthChange:Ra,_fnFeatureHtmlLength:ob,
165
+ _fnFeatureHtmlPaginate:tb,_fnPageChange:Ta,_fnFeatureHtmlProcessing:qb,_fnProcessingDisplay:C,_fnFeatureHtmlTable:rb,_fnScrollDraw:ka,_fnApplyToChildren:J,_fnCalculateColumnWidths:Fa,_fnThrottle:Oa,_fnConvertToWidth:Fb,_fnGetWidestNode:Gb,_fnGetMaxLenString:Hb,_fnStringToCss:x,_fnSortFlatten:V,_fnSort:mb,_fnSortAria:Jb,_fnSortListener:Va,_fnSortAttachListener:Ma,_fnSortingClasses:va,_fnSortData:Ib,_fnSaveState:wa,_fnLoadState:Kb,_fnSettingsFromNode:xa,_fnLog:L,_fnMap:E,_fnBindAction:Wa,_fnCallbackReg:z,
166
+ _fnCallbackFire:u,_fnLengthOverflow:Sa,_fnRenderer:Na,_fnDataSource:y,_fnRowAttributes:La,_fnCalculateEnd:function(){}});h.fn.dataTable=m;m.$=h;h.fn.dataTableSettings=m.settings;h.fn.dataTableExt=m.ext;h.fn.DataTable=function(a){return h(this).dataTable(a).api()};h.each(m,function(a,b){h.fn.DataTable[a]=b});return h.fn.dataTable});
src/SupsysticTables/Core/assets/js/lib/natural.js ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Data can often be a complicated mix of numbers and letters (file names
3
+ * are a common example) and sorting them in a natural manner is quite a
4
+ * difficult problem.
5
+ *
6
+ * Fortunately a deal of work has already been done in this area by other
7
+ * authors - the following plug-in uses the [naturalSort() function by Jim
8
+ * Palmer](http://www.overset.com/2008/09/01/javascript-natural-sort-algorithm-with-unicode-support) to provide natural sorting in DataTables.
9
+ *
10
+ * @name Natural sorting
11
+ * @summary Sort data with a mix of numbers and letters _naturally_.
12
+ * @author [Jim Palmer](http://www.overset.com/2008/09/01/javascript-natural-sort-algorithm-with-unicode-support)
13
+ * @author [Michael Buehler] (https://github.com/AnimusMachina)
14
+ *
15
+ * @example
16
+ * $('#example').dataTable( {
17
+ * columnDefs: [
18
+ * { type: 'natural', targets: 0 }
19
+ * ]
20
+ * } );
21
+ *
22
+ * Html can be stripped from sorting by using 'natural-nohtml' such as
23
+ *
24
+ * $('#example').dataTable( {
25
+ * columnDefs: [
26
+ * { type: 'natural-nohtml', targets: 0 }
27
+ * ]
28
+ * } );
29
+ *
30
+ */
31
+
32
+ (function() {
33
+
34
+ /*
35
+ * Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license
36
+ * Author: Jim Palmer (based on chunking idea from Dave Koelle)
37
+ * Contributors: Mike Grier (mgrier.com), Clint Priest, Kyle Adams, guillermo
38
+ * See: http://js-naturalsort.googlecode.com/svn/trunk/naturalSort.js
39
+ */
40
+ function naturalSort (a, b, html) {
41
+ var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi,
42
+ sre = /(^[ ]*|[ ]*$)/g,
43
+ dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,
44
+ hre = /^0x[0-9a-f]+$/i,
45
+ ore = /^0/,
46
+ htmre = /(<([^>]+)>)/ig,
47
+ // convert all to strings and trim()
48
+ x = a.toString().replace(sre, '') || '',
49
+ y = b.toString().replace(sre, '') || '';
50
+ // remove html from strings if desired
51
+ if (!html) {
52
+ x = x.replace(htmre, '');
53
+ y = y.replace(htmre, '');
54
+ }
55
+ // chunk/tokenize
56
+ var xN = x.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
57
+ yN = y.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'),
58
+ // numeric, hex or date detection
59
+ xD = parseInt(x.match(hre), 10) || (xN.length !== 1 && x.match(dre) && Date.parse(x)),
60
+ yD = parseInt(y.match(hre), 10) || xD && y.match(dre) && Date.parse(y) || null;
61
+
62
+ // first try and sort Hex codes or Dates
63
+ if (yD) {
64
+ if ( xD < yD ) {
65
+ return -1;
66
+ }
67
+ else if ( xD > yD ) {
68
+ return 1;
69
+ }
70
+ }
71
+
72
+ // natural sorting through split numeric strings and default strings
73
+ for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {
74
+ // find floats not starting with '0', string or 0 if not defined (Clint Priest)
75
+ var oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc], 10) || xN[cLoc] || 0;
76
+ var oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc], 10) || yN[cLoc] || 0;
77
+ // handle numeric vs string comparison - number < string - (Kyle Adams)
78
+ if (isNaN(oFxNcL) !== isNaN(oFyNcL)) {
79
+ return (isNaN(oFxNcL)) ? 1 : -1;
80
+ }
81
+ // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'
82
+ else if (typeof oFxNcL !== typeof oFyNcL) {
83
+ oFxNcL += '';
84
+ oFyNcL += '';
85
+ }
86
+ if (oFxNcL < oFyNcL) {
87
+ return -1;
88
+ }
89
+ if (oFxNcL > oFyNcL) {
90
+ return 1;
91
+ }
92
+ }
93
+ return 0;
94
+ }
95
+
96
+ jQuery.extend( jQuery.fn.dataTableExt.oSort, {
97
+ "natural-asc": function ( a, b ) {
98
+ return naturalSort(a,b,true);
99
+ },
100
+
101
+ "natural-desc": function ( a, b ) {
102
+ return naturalSort(a,b,true) * -1;
103
+ },
104
+
105
+ "natural-nohtml-asc": function( a, b ) {
106
+ return naturalSort(a,b,false);
107
+ },
108
+
109
+ "natural-nohtml-desc": function( a, b ) {
110
+ return naturalSort(a,b,false) * -1;
111
+ }
112
+ } );
113
+
114
+ }());
src/SupsysticTables/Settings/Module.php CHANGED
@@ -15,6 +15,7 @@ class SupsysticTables_Settings_Module extends SupsysticTables_Core_BaseModule
15
 
16
  public function registerAssets() {
17
  $modulePath = untrailingslashit(plugin_dir_url(__FILE__));
 
18
 
19
  wp_register_script(
20
  'supsystic-tables-settings-index-js',
@@ -32,8 +33,8 @@ class SupsysticTables_Settings_Module extends SupsysticTables_Core_BaseModule
32
  );
33
 
34
  wp_register_script(
35
- 'supsystic-settings-chosen',
36
- '//oss.maxcdn.com/chosen/1.1.0/chosen.jquery.min.js',
37
  array(),
38
  $this->config('plugin_version'),
39
  true
15
 
16
  public function registerAssets() {
17
  $modulePath = untrailingslashit(plugin_dir_url(__FILE__));
18
+ $appPath = untrailingslashit(plugin_dir_url(dirname(dirname(dirname(__FILE__)))) . 'app');
19
 
20
  wp_register_script(
21
  'supsystic-tables-settings-index-js',
33
  );
34
 
35
  wp_register_script(
36
+ 'supsystic-settings-chosen',
37
+ $appPath . '/assets/js/plugins/chosen.jquery.min.js',
38
  array(),
39
  $this->config('plugin_version'),
40
  true
src/SupsysticTables/Settings/views/index.twig CHANGED
@@ -21,8 +21,8 @@
21
 
22
  <div class="table-search-option table-option">
23
  <div class="setting-description">
24
- <label>{{ environment.translate('Global Table Data Search') }}</label>
25
- {{ tooltip.icon(environment.translate('If checked - table data will be included in the global site search'), 'top', true) }} </label>
26
  </div>
27
  <div class="setting-control">
28
  <input type="checkbox" name="settings[table_search]" {% if settings.table_search == 'on' %} checked {% endif %}>
@@ -31,7 +31,7 @@
31
  <div class="table-step-option table-option">
32
  <div class="setting-description">
33
  <label>{{ environment.translate('Rows Count per Request') }}</label>
34
- {{ tooltip.icon(environment.translate('Set count of table rows, which will be saved per one request. If you do not know why does this value need for - it\'s better to keep the preferred value: 400.'), 'top', true) }} </label>
35
  </div>
36
  <div class="setting-control">
37
  <input type="text" name="settings[table_step]" value="{{ settings.table_step | default(400) }}">
@@ -40,7 +40,7 @@
40
  <div class="table-roles-option table-option">
41
  <div class="setting-description">
42
  <label>{{ environment.translate('Roles') }}</label>
43
- {{ tooltip.icon(environment.translate('Role for users who can use plugin. Administrator is included by default'), 'top', true) }}
44
 
45
  {% if environment.isPro() == false %}
46
  <a target="_blank" href="{{ build_pro_url({ 'utm_medium': 'manage_roles' }) }}">
21
 
22
  <div class="table-search-option table-option">
23
  <div class="setting-description">
24
+ <label>{{ environment.translate('Include to Global Search') }}</label>
25
+ {{ tooltip.icon(environment.translate('Enable this option if you want to include the tables data to global site search'), 'top', true) }} </label>
26
  </div>
27
  <div class="setting-control">
28
  <input type="checkbox" name="settings[table_search]" {% if settings.table_search == 'on' %} checked {% endif %}>
31
  <div class="table-step-option table-option">
32
  <div class="setting-description">
33
  <label>{{ environment.translate('Rows Count per Request') }}</label>
34
+ {{ tooltip.icon(environment.translate('Set the count of table rows, which will be put into the one saving request. If your table has more rows - as many requests will be sent as need to completely save all table data.<br /><br /> It can be useful if you have a large table and can not improuve your server settings to save the table per single request.<br /><br /> If you do not have problems with saving of tables it is better to left the default value - 400.'), 'top', true) }} </label>
35
  </div>
36
  <div class="setting-control">
37
  <input type="text" name="settings[table_step]" value="{{ settings.table_step | default(400) }}">
40
  <div class="table-roles-option table-option">
41
  <div class="setting-description">
42
  <label>{{ environment.translate('Roles') }}</label>
43
+ {{ tooltip.icon(environment.translate('Set the users roles, to add permission to use the plugin. The Administrator role has set by default.'), 'top', true) }}
44
 
45
  {% if environment.isPro() == false %}
46
  <a target="_blank" href="{{ build_pro_url({ 'utm_medium': 'manage_roles' }) }}">
src/SupsysticTables/Tables/Controller.php CHANGED
@@ -115,6 +115,9 @@ class SupsysticTables_Tables_Controller extends SupsysticTables_Core_BaseControl
115
  {
116
  $this->getEnvironment()->getModule('tables')->setIniLimits();
117
 
 
 
 
118
  try {
119
  wp_enqueue_media();
120
  $id = $request->query->get('id');
@@ -125,9 +128,6 @@ class SupsysticTables_Tables_Controller extends SupsysticTables_Core_BaseControl
125
  if(isset($table->settings['features']['after_table_loaded_script']) && !empty($table->settings['features']['after_table_loaded_script'])) {
126
  $table->settings['features']['after_table_loaded_script'] = base64_decode($table->settings['features']['after_table_loaded_script']);
127
  }
128
- /** @var SupsysticTables_Tables_Model_Languages $languages */
129
- $languages = $this->getModel('languages', 'tables');
130
- $config = $this->getEnvironment()->getConfig();
131
 
132
  return $this->response(
133
  '@tables/view.twig',
@@ -137,10 +137,7 @@ class SupsysticTables_Tables_Controller extends SupsysticTables_Core_BaseControl
137
  'cols' => $request->query->get('cols', 5),
138
  'rows' => $request->query->get('rows', 5)
139
  ),
140
- 'shortcode_name' => $config->get('shortcode_name'),
141
- 'shortcode_value_name' => $config->get('shortcode_value_name'),
142
- 'shortcode_cell_name' => $config->get('shortcode_cell_name'),
143
- 'translations' => $languages->getLanguages(),
144
  )
145
  );
146
  }
115
  {
116
  $this->getEnvironment()->getModule('tables')->setIniLimits();
117
 
118
+ /** @var SupsysticTables_Tables_Model_Languages $languages */
119
+ $languages = $this->getModel('languages', 'tables');
120
+
121
  try {
122
  wp_enqueue_media();
123
  $id = $request->query->get('id');
128
  if(isset($table->settings['features']['after_table_loaded_script']) && !empty($table->settings['features']['after_table_loaded_script'])) {
129
  $table->settings['features']['after_table_loaded_script'] = base64_decode($table->settings['features']['after_table_loaded_script']);
130
  }
 
 
 
131
 
132
  return $this->response(
133
  '@tables/view.twig',
137
  'cols' => $request->query->get('cols', 5),
138
  'rows' => $request->query->get('rows', 5)
139
  ),
140
+ 'translations' => $languages->getTranslations(),
 
 
 
141
  )
142
  );
143
  }
src/SupsysticTables/Tables/Model/History.php ADDED
@@ -0,0 +1,228 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class SupsysticTables_Tables_Model_History extends SupsysticTables_Core_BaseModel
3
+ {
4
+ /**
5
+ * For this model is important to create the mirror functions in SupsysticTables_Tables_Model_Tables
6
+ * @see SupsysticTables_Tables_Model_Tables::getAllTableHistory and ets.
7
+ */
8
+
9
+ public function getAllTableHistory($tableId)
10
+ {
11
+ $query = $this->getQueryBuilder()
12
+ ->select('*')
13
+ ->from($this->getTable('rows_history'))
14
+ ->where('table_id', '=', (int)$tableId);
15
+
16
+ $history = $this->db->get_results($query->build());
17
+
18
+ if ($this->db->last_error) {
19
+ throw new RuntimeException($this->db->last_error);
20
+ }
21
+ for($i = 0; $i < count($history); $i++) {
22
+ $history[$i] = $this->_afterSimpleGet($history[$i]);
23
+ }
24
+
25
+ return $history;
26
+ }
27
+
28
+ public function getUserTableHistory($userId, $tableId, $period = null)
29
+ {
30
+ $query = $this->getQueryBuilder()
31
+ ->select('*')
32
+ ->from($this->getTable('rows_history'))
33
+ ->where('table_id', '=', (int)$tableId)
34
+ ->andWhere('user_id', '=', (int)$userId);
35
+ $history = $this->db->get_results($query->build());
36
+
37
+ if ($this->db->last_error) {
38
+ throw new RuntimeException($this->db->last_error);
39
+ }
40
+ $historyTable = $this->_checkUserTableHistoryByPeriod($tableId, $history, $period);
41
+
42
+ if(!$history || ($history && !$historyTable)) {
43
+ $historyTable = $this->createUserTableHistory($userId, $tableId);
44
+ }
45
+ $historyTable = $this->_afterSimpleGet($historyTable);
46
+
47
+ return $historyTable;
48
+ }
49
+
50
+ public function _checkUserTableHistoryByPeriod($tableId, $history, $period = null)
51
+ {
52
+ $history = array_reverse($history);
53
+ $settings = $this->getHistorySettings($tableId);
54
+ $historyTable = array();
55
+
56
+ if(!empty($settings['history']['period'])) {
57
+ if(!function_exists('date_create')) {
58
+ throw new RuntimeException($this->environment->translate('You should to use PHP v.5.2.0 or greater to use the period feature for history table.'));
59
+ }
60
+ $today = date_create();
61
+ $needCreate = empty($period);
62
+ $period = !empty($period) ? $period : $today;
63
+ $periodFormat = '';
64
+ $include = false;
65
+
66
+ for($i = 0; $i < count($history); $i++) {
67
+ $created = date_create($history[$i]->created);
68
+
69
+ switch($settings['history']['period']) {
70
+ case 'day':
71
+ $format = 'Y-m-d';
72
+ break;
73
+ case 'week':
74
+ $format = 'W';
75
+ break;
76
+ case 'month':
77
+ $format = 'Y-m';
78
+ break;
79
+ case 'year':
80
+ $format = 'Y';
81
+ break;
82
+ default:
83
+ $format = '';
84
+ break;
85
+ }
86
+ $periodFormat = date_format($period, $format);
87
+ $include = $periodFormat == date_format($created, $format);
88
+ $needCreate = date_format($period, $format) == date_format($today, $format);
89
+
90
+ if($include) {
91
+ // It is a table which has included for needed period
92
+ $historyTable = $history[$i];
93
+ break;
94
+ }
95
+ }
96
+ if(!$include && !$needCreate) {
97
+ throw new RuntimeException(sprintf('The table with ID %d not exists for %s period.', $tableId, $periodFormat));
98
+ }
99
+ } else {
100
+ $count = count($history);
101
+ $index = $count > 0 ? $count - 1 : 0;
102
+ $historyTable = $count ? $history[$index] : $historyTable;
103
+ }
104
+
105
+ return $historyTable;
106
+ }
107
+
108
+ public function updateUserTableHistory($userId, $tableId, $data, $period = null)
109
+ {
110
+ for($i = 0; $i < count($data); $i++) {
111
+ $data[$i] = $this->prepareRowsData($data[$i], true);
112
+ }
113
+ $history = array(
114
+ 'data' => serialize($data),
115
+ //'updated' => date('Y-m-d H:i:s'),
116
+ );
117
+ $historyTable = $this->getUserTableHistory($userId, $tableId, $period);
118
+
119
+ if($historyTable) {
120
+ $query = $this->getQueryBuilder()
121
+ ->update($this->getTable('rows_history'))
122
+ ->fields(array_keys($history))
123
+ ->values(array_values($history))
124
+ ->where('id', '=', (int) $historyTable->id);
125
+ $this->db->get_results($query->build());
126
+
127
+ if ($this->db->last_error) {
128
+ throw new RuntimeException($this->db->last_error);
129
+ }
130
+ }
131
+ }
132
+
133
+ public function createUserTableHistory($userId, $tableId)
134
+ {
135
+ $query = $this->getQueryBuilder()
136
+ ->select('data')
137
+ ->from($this->getTable('rows'))
138
+ ->where('table_id', '=', (int)$tableId);
139
+ $rows = $this->db->get_results($query->build());
140
+
141
+ if($this->db->last_error) {
142
+ throw new RuntimeException($this->db->last_error);
143
+ }
144
+ if(!$rows) {
145
+ throw new RuntimeException(sprintf('The table with ID %d not exists.', $tableId));
146
+ }
147
+
148
+ $history = array(
149
+ 'user_id' => $userId,
150
+ 'table_id' => $tableId,
151
+ 'data' => array()
152
+ );
153
+ for($i = 0; $i < count($rows); $i++) {
154
+ array_push($history['data'], unserialize($rows[$i]->data));
155
+ }
156
+ $history['data'] = serialize($history['data']);
157
+
158
+ $query = $this->getQueryBuilder()
159
+ ->insertInto($this->getTable('rows_history'))
160
+ ->fields(array_keys($history))
161
+ ->values(array_values($history));
162
+ $this->db->get_results($query->build());
163
+
164
+ if ($this->db->last_error) {
165
+ throw new RuntimeException($this->db->last_error);
166
+ }
167
+
168
+ $query = $this->getQueryBuilder()
169
+ ->select('*')
170
+ ->from($this->getTable('rows_history'))
171
+ ->where('id', '=', (int)$this->db->insert_id);
172
+ $table = $this->db->get_row($query->build());
173
+
174
+ if ($this->db->last_error) {
175
+ throw new RuntimeException($this->db->last_error);
176
+ }
177
+
178
+ return $table;
179
+ }
180
+
181
+ public function _afterSimpleGet($historyTable) {
182
+ $historyTable->data = unserialize($historyTable->data);
183
+
184
+ for($i = 0; $i < count($historyTable->data); $i++) {
185
+ $historyTable->data[$i] = $this->prepareRowsData($historyTable->data[$i], false);
186
+ }
187
+
188
+ return $historyTable;
189
+ }
190
+
191
+ public function getHistorySettings($id) {
192
+ $query = $this->getQueryBuilder()
193
+ ->select('history_settings')
194
+ ->from($this->getTable('tables'))
195
+ ->where('id', '=', (int)$id);
196
+ $settings = $this->db->get_row($query->build());
197
+
198
+ if ($this->db->last_error) {
199
+ throw new RuntimeException($this->db->last_error);
200
+ }
201
+ if(!$settings) {
202
+ throw new RuntimeException(sprintf('The table with ID %d not exists.', $id));
203
+ }
204
+ $settings->history_settings = unserialize($settings->history_settings);
205
+
206
+ return $settings->history_settings;
207
+ }
208
+
209
+ public function setHistorySettings($id, $settings) {
210
+ $query = $this->getQueryBuilder()
211
+ ->update($this->getTable('tables'))
212
+ ->where('id', '=', (int)$id)
213
+ ->set(array('history_settings' => serialize($settings)));
214
+
215
+ $this->db->query($query->build());
216
+
217
+ if ($this->db->last_error) {
218
+ throw new RuntimeException($this->db->last_error);
219
+ }
220
+ }
221
+
222
+ public function prepareRowsData($data, $compress = true)
223
+ {
224
+ $core = $this->environment->getModule('core');
225
+ $tables = $core->getModelsFactory()->get('tables');
226
+ return $tables->prepareRowsData($data, $compress);
227
+ }
228
+ }
src/SupsysticTables/Tables/Model/Languages.php CHANGED
@@ -3,78 +3,90 @@
3
 
4
  class SupsysticTables_Tables_Model_Languages extends SupsysticTables_Core_BaseModel
5
  {
6
- /**
7
- * Returns an array of the DataTable translations.
8
- * @return array
9
- */
 
 
 
 
10
  public function getDefaultLanguages()
11
  {
12
  return array(
13
- 'default',
14
- 'Afrikaans',
15
- 'Albanian',
16
- 'Arabic',
17
- 'Armenian',
18
- 'Azerbaijan',
19
- 'Bangla',
20
- 'Basque',
21
- 'Belarusian',
22
- 'Bulgarian',
23
- 'Catalan',
24
- 'Chinese-traditional',
25
- 'Chinese',
26
- 'Croatian',
27
- 'Czech',
28
- 'Danish',
29
- 'Dutch',
30
- 'English',
31
- 'Estonian',
32
- 'Filipino',
33
- 'Finnish',
34
- 'French',
35
- 'Galician',
36
- 'Georgian',
37
- 'German',
38
- 'Greek',
39
- 'Gujarati',
40
- 'Hebrew',
41
- 'Hindi',
42
- 'Hungarian',
43
- 'Icelandic',
44
- 'Indonesian-Alternative',
45
- 'Indonesian',
46
- 'Irish',
47
- 'Italian',
48
- 'Japanese',
49
- 'Korean',
50
- 'Kyrgyz',
51
- 'Latvian',
52
- 'Lithuanian',
53
- 'Macedonian',
54
- 'Malay',
55
- 'Mongolian',
56
- 'Nepali',
57
- 'Norwegian',
58
- 'Persian',
59
- 'Polish',
60
- 'Portuguese-Brasil',
61
- 'Portuguese',
62
- 'Romanian',
63
- 'Russian',
64
- 'Serbian',
65
- 'Sinhala',
66
- 'Slovak',
67
- 'Slovenian',
68
- 'Spanish',
69
- 'Swahili',
70
- 'Swedish',
71
- 'Tamil',
72
- 'Thai',
73
- 'Turkish',
74
- 'Ukranian',
75
- 'Urdu',
76
- 'Uzbek',
77
- 'Vietnamese'
 
 
 
 
 
 
 
 
78
  );
79
  }
80
 
@@ -86,23 +98,19 @@ class SupsysticTables_Tables_Model_Languages extends SupsysticTables_Core_BaseMo
86
  {
87
  $url = 'https://api.github.com/repos/DataTables/Plugins/contents/i18n';
88
  $languages = array();
89
-
90
  $response = wp_remote_get($url);
91
 
92
  if (is_wp_error($response)) {
93
  return null;
94
  }
95
-
96
  if (200 !== wp_remote_retrieve_response_code($response)) {
97
  return null;
98
  }
99
-
100
  $files = json_decode($response['body']);
101
 
102
  if (!is_array($files)) {
103
  return null;
104
  }
105
-
106
  foreach ($files as $file) {
107
  $languages[] = str_replace('.lang', '', $file->name);
108
  }
@@ -126,78 +134,24 @@ class SupsysticTables_Tables_Model_Languages extends SupsysticTables_Core_BaseMo
126
  return $languages;
127
  }
128
 
129
- public function getLanguageMap() {
130
- return array(
131
- 'af' => 'Afrikaans',
132
- 'sq' => 'Albanian',
133
- //'am' => 'Amharic',
134
- 'ar' => 'Arabic',
135
- 'hy' => 'Armenian',
136
- 'az'=> 'Azerbaijan',
137
- 'bn'=> 'Bangla',
138
- 'eu'=> 'Basque',
139
- 'be'=> 'Belarusian',
140
- 'bg'=> 'Bulgarian',
141
- 'ca'=> 'Catalan',
142
- 'zh-TW'=> 'Chinese-traditional',
143
- 'zh'=> 'Chinese',
144
- 'hr'=> 'Croatian',
145
- 'cs'=> 'Czech',
146
- 'da'=> 'Danish',
147
- 'nl'=> 'Dutch',
148
- 'en'=> 'default',
149
- 'et'=> 'Estonian',
150
- 'fil'=> 'Filipino',
151
- 'fi'=> 'Finnish',
152
- 'fr'=> 'French',
153
- 'gl'=> 'Galician',
154
- 'ka'=> 'Georgian',
155
- 'de'=> 'German',
156
- 'el'=> 'Greek',
157
- 'gu'=> 'Gujarati',
158
- 'he'=> 'Hebrew',
159
- 'hi'=> 'Hindi',
160
- 'hu'=> 'Hungarian',
161
- 'is'=> 'Icelandic',
162
- //''=> 'Indonesian-Alternative',
163
- 'id'=> 'Indonesian',
164
- 'ga'=> 'Irish',
165
- 'it'=> 'Italian',
166
- 'ja'=> 'Japanese',
167
- 'kk'=> 'Kazakh',
168
- 'ko'=> 'Korean',
169
- 'ky'=> 'Kyrgyz',
170
- 'lv'=> 'Latvian',
171
- 'lt'=> 'Lithuanian',
172
- 'mk'=> 'Macedonian',
173
- 'ms'=> 'Malay',
174
- 'mn'=> 'Mongolian',
175
- 'ne'=> 'Nepali',
176
- 'nb'=> 'Norwegian-Bokmal',
177
- 'nn'=> 'Norwegian-Nynorsk',
178
- 'ps'=> 'Pashto',
179
- 'fa'=> 'Persian',
180
- 'pl'=> 'Polish',
181
- 'pt-BR'=> 'Portuguese-Brasil',
182
- 'pt'=> 'Portuguese',
183
- 'ro'=> 'Romanian',
184
- 'ru'=> 'Russian',
185
- 'sr'=> 'Serbian',
186
- 'si'=> 'Sinhala',
187
- 'sk'=> 'Slovak',
188
- 'sl'=> 'Slovenian',
189
- 'es'=> 'Spanish',
190
- 'sw'=> 'Swahili',
191
- 'sv'=> 'Swedish',
192
- 'ta'=> 'Tamil',
193
- 'th'=> 'Thai',
194
- 'tr'=> 'Turkish',
195
- 'uk'=> 'Ukrainian',
196
- 'ur'=> 'Urdu',
197
- 'uz'=> 'Uzbek',
198
- 'vi'=> 'Vietnamese',
199
- 'cy'=> 'Welsh',
200
- 'te'=> 'telugu',
201
- );
202
  }
203
  }
3
 
4
  class SupsysticTables_Tables_Model_Languages extends SupsysticTables_Core_BaseModel
5
  {
6
+ private $_langData = array();
7
+
8
+ /**
9
+ * Returns an associative array of DataTables translation.
10
+ * The array keys is language name in browser.
11
+ * The array values is name of language for connecting of language data.
12
+ * @return array
13
+ */
14
  public function getDefaultLanguages()
15
  {
16
  return array(
17
+ 'default' => 'default',
18
+ 'browser' => 'browser',
19
+ 'af' => 'Afrikaans',
20
+ 'sq' => 'Albanian',
21
+ 'Amharic',
22
+ 'ar' => 'Arabic',
23
+ 'hy' => 'Armenian',
24
+ 'az' => 'Azerbaijan',
25
+ 'bn' => 'Bangla',
26
+ 'eu' => 'Basque',
27
+ 'be' => 'Belarusian',
28
+ 'bg' => 'Bulgarian',
29
+ 'ca' => 'Catalan',
30
+ 'zh-TW' => 'Chinese-traditional',
31
+ 'zh' => 'Chinese',
32
+ 'hr' => 'Croatian',
33
+ 'cs' => 'Czech',
34
+ 'da' => 'Danish',
35
+ 'nl' => 'Dutch',
36
+ //'English', // it is default language
37
+ 'et' => 'Estonian',
38
+ 'fil' => 'Filipino',
39
+ 'fi' => 'Finnish',
40
+ 'fr' => 'French',
41
+ 'gl' => 'Galician',
42
+ 'ka' => 'Georgian',
43
+ 'de' => 'German',
44
+ 'el' => 'Greek',
45
+ 'gu' => 'Gujarati',
46
+ 'he' => 'Hebrew',
47
+ 'hi' => 'Hindi',
48
+ 'hu' => 'Hungarian',
49
+ 'is' => 'Icelandic',
50
+ 'Indonesian-Alternative',
51
+ 'id' => 'Indonesian',
52
+ 'ga' => 'Irish',
53
+ 'it' => 'Italian',
54
+ 'ja' => 'Japanese',
55
+ 'kk'=> 'Kazakh',
56
+ 'ko' => 'Korean',
57
+ 'ky' => 'Kyrgyz',
58
+ 'lv' => 'Latvian',
59
+ 'lt' => 'Lithuanian',
60
+ 'mk' => 'Macedonian',
61
+ 'ms' => 'Malay',
62
+ 'mn' => 'Mongolian',
63
+ 'ne' => 'Nepali',
64
+ 'nb' => 'Norwegian-Bokmal',
65
+ 'nn' => 'Norwegian-Nynorsk',
66
+ 'ps' => 'Pashto',
67
+ 'fa' => 'Persian',
68
+ 'pl' => 'Polish',
69
+ 'pt-BR' => 'Portuguese-Brasil',
70
+ 'pt' => 'Portuguese',
71
+ 'ro' => 'Romanian',
72
+ 'ru' => 'Russian',
73
+ 'sr' => 'Serbian',
74
+ 'si' => 'Sinhala',
75
+ 'sk' => 'Slovak',
76
+ 'sl' => 'Slovenian',
77
+ 'es' => 'Spanish',
78
+ 'sw' => 'Swahili',
79
+ 'sv' => 'Swedish',
80
+ 'ta' => 'Tamil',
81
+ 'te' => 'telugu',
82
+ 'te-IN' => 'telugu',
83
+ 'th' => 'Thai',
84
+ 'tr' => 'Turkish',
85
+ 'uk' => 'Ukrainian',
86
+ 'ur' => 'Urdu',
87
+ 'uz' => 'Uzbek',
88
+ 'vi' => 'Vietnamese',
89
+ 'cy' => 'Welsh',
90
  );
91
  }
92
 
98
  {
99
  $url = 'https://api.github.com/repos/DataTables/Plugins/contents/i18n';
100
  $languages = array();
 
101
  $response = wp_remote_get($url);
102
 
103
  if (is_wp_error($response)) {
104
  return null;
105
  }
 
106
  if (200 !== wp_remote_retrieve_response_code($response)) {
107
  return null;
108
  }
 
109
  $files = json_decode($response['body']);
110
 
111
  if (!is_array($files)) {
112
  return null;
113
  }
 
114
  foreach ($files as $file) {
115
  $languages[] = str_replace('.lang', '', $file->name);
116
  }
134
  return $languages;
135
  }
136
 
137
+ /**
138
+ * Returns the list of translation data for all available languages.
139
+ * @return array|mixed
140
+ */
141
+ public function getLanguagesData()
142
+ {
143
+ if(empty($this->_langData)) {
144
+ $this->_langData = include_once $this->environment->getModule('tables')->getLocation() . '/assets/languagesData.php';
145
+ }
146
+ return $this->_langData;
147
+ }
148
+
149
+ /**
150
+ * Returns the names list of languages, available for translation.
151
+ * @return array
152
+ */
153
+ public function getTranslations()
154
+ {
155
+ return array_unique(array_values($this->getDefaultLanguages()));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  }
157
  }
src/SupsysticTables/Tables/Model/Tables.php CHANGED
@@ -3,7 +3,9 @@
3
 
4
  class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
5
  {
6
- /**
 
 
7
  * Returns table column by index.
8
  * @param int $id Table id
9
  * @param int $index Column index
@@ -221,10 +223,13 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
221
  $keys = array(
222
  'd' => 'data',
223
  'cv' => 'calculatedValue',
 
224
  'h' => 'hidden',
225
  'hc' => 'hiddenCell',
 
226
  't' => 'type',
227
  'f' => 'format',
 
228
  'ft' => 'formatType',
229
  'do' => 'dateOrder',
230
  'm' => 'meta',
@@ -459,6 +464,20 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
459
  return $table;
460
  }
461
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
462
  /**
463
  * Filter for SupsysticTables_Tables_Model_Tables::getAll()
464
  * @see SupsysticTables_Tables_Model_Tables::getAll()
@@ -520,144 +539,6 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
520
  return $result;
521
  }
522
 
523
- // Hisoty methods for PRO version
524
- public function getAllTableHistory($tableId)
525
- {
526
- $query = $this->getQueryBuilder()
527
- ->select('*')
528
- ->from($this->getTable('rows_history'))
529
- ->where('table_id', '=', (int)$tableId);
530
-
531
- $history = $this->db->get_results($query->build());
532
-
533
- if ($this->db->last_error) {
534
- throw new RuntimeException($this->db->last_error);
535
- }
536
- for($i = 0; $i < count($history); $i++) {
537
- $history[$i] = $this->_afterSimpleGet($history[$i]);
538
- }
539
-
540
- return $history;
541
- }
542
-
543
- public function getUserTableHistory($userId, $tableId)
544
- {
545
- $query = $this->getQueryBuilder()
546
- ->select('data')
547
- ->from($this->getTable('rows_history'))
548
- ->where('table_id', '=', (int)$tableId)
549
- ->andWhere('user_id', '=', (int)$userId);
550
-
551
- $history = $this->db->get_row($query->build());
552
-
553
- if ($this->db->last_error) {
554
- throw new RuntimeException($this->db->last_error);
555
- }
556
- if(!$history) {
557
- $this->createUserTableHistory($userId, $tableId);
558
-
559
- }
560
- $history = $this->db->get_row($query->build());
561
- $history = $this->_afterSimpleGet($history);
562
-
563
- return $history;
564
- }
565
-
566
- public function updateUserTableHistory($userId, $tableId, $data)
567
- {
568
- for($i = 0; $i < count($data); $i++) {
569
- $data[$i] = $this->prepareRowsData($data[$i], true);
570
- }
571
- $history = array(
572
- 'data' => serialize($data),
573
- 'created' => date('Y-m-d H:i:s')
574
- );
575
- $query = $this->getQueryBuilder()
576
- ->update($this->getTable('rows_history'))
577
- ->fields(array_keys($history))
578
- ->values(array_values($history))
579
- ->where('user_id', '=', (int) $userId)
580
- ->andWhere('table_id', '=', (int) $tableId);
581
- $this->db->get_results($query->build());
582
-
583
- if ($this->db->last_error) {
584
- throw new RuntimeException($this->db->last_error);
585
- }
586
- }
587
-
588
- public function createUserTableHistory($userId, $tableId)
589
- {
590
- $history = array(
591
- 'user_id' => $userId,
592
- 'table_id' => $tableId,
593
- 'data' => array()
594
- );
595
- $query = $this->getQueryBuilder()
596
- ->select('data')
597
- ->from($this->getTable('rows'))
598
- ->where('table_id', '=', (int)$tableId);
599
- $rows = $this->db->get_results($query->build());
600
-
601
- if ($this->db->last_error) {
602
- throw new RuntimeException($this->db->last_error);
603
- }
604
- if (!$rows) {
605
- throw new RuntimeException(sprintf('The table with ID %d not exists.', $tableId));
606
- }
607
-
608
- for($i = 0; $i < count($rows); $i++) {
609
- array_push($history['data'], unserialize($rows[$i]->data));
610
- }
611
- $history['data'] = serialize($history['data']);
612
-
613
- $query = $this->getQueryBuilder()
614
- ->insertInto($this->getTable('rows_history'))
615
- ->fields(array_keys($history))
616
- ->values(array_values($history));
617
- $this->db->get_results($query->build());
618
-
619
- if ($this->db->last_error) {
620
- throw new RuntimeException($this->db->last_error);
621
- }
622
- }
623
-
624
- public function _afterSimpleGet($history) {
625
- $history->data = unserialize($history->data);
626
-
627
- for($i = 0; $i < count($history->data); $i++) {
628
- $history->data[$i] = $this->prepareRowsData($history->data[$i], false);
629
- }
630
-
631
- return $history;
632
- }
633
-
634
- public function setHistorySettings($id, $settings) {
635
- $query = $this->getQueryBuilder()
636
- ->update($this->getTable())
637
- ->where('id', '=', (int)$id)
638
- ->set(array('history_settings' => serialize($settings)));
639
-
640
-
641
- $this->db->query($query->build());
642
-
643
- if ($this->db->last_error) {
644
- throw new RuntimeException($this->db->last_error);
645
- }
646
- }
647
- public function onTablesGetPro($table)
648
- {
649
- // This method load twice all rows in backend second call go via ajax.
650
- // Need to fix.
651
- if (null === $table) {
652
- return $table;
653
- }
654
- if(!empty($table->history_settings)) {
655
- $table->historySettings = unserialize(htmlspecialchars_decode($table->history_settings));
656
- }
657
-
658
- return $table;
659
- }
660
-
661
  /**
662
  * @param $tableIds
663
  *
@@ -745,4 +626,53 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
745
  }
746
  return $rows;
747
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
748
  }
3
 
4
  class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
5
  {
6
+ private $tableHistoryModel = null;
7
+
8
+ /**
9
  * Returns table column by index.
10
  * @param int $id Table id
11
  * @param int $index Column index
223
  $keys = array(
224
  'd' => 'data',
225
  'cv' => 'calculatedValue',
226
+ 'fv' => 'formattedValue',
227
  'h' => 'hidden',
228
  'hc' => 'hiddenCell',
229
+ 'ic' => 'invisibleCell',
230
  't' => 'type',
231
  'f' => 'format',
232
+ 'bt' => 'baseType',
233
  'ft' => 'formatType',
234
  'do' => 'dateOrder',
235
  'm' => 'meta',
464
  return $table;
465
  }
466
 
467
+ public function onTablesGetPro($table)
468
+ {
469
+ // This method load twice all rows in backend second call go via ajax.
470
+ // Need to fix.
471
+ if (null === $table) {
472
+ return $table;
473
+ }
474
+ if(!empty($table->history_settings)) {
475
+ $table->historySettings = unserialize(htmlspecialchars_decode($table->history_settings));
476
+ }
477
+
478
+ return $table;
479
+ }
480
+
481
  /**
482
  * Filter for SupsysticTables_Tables_Model_Tables::getAll()
483
  * @see SupsysticTables_Tables_Model_Tables::getAll()
539
  return $result;
540
  }
541
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
542
  /**
543
  * @param $tableIds
544
  *
626
  }
627
  return $rows;
628
  }
629
+
630
+ // Fix for compatibility with old pro versions
631
+ private function getTableHistoryModel() {
632
+ if(!$this->tableHistoryModel) {
633
+ $core = $this->environment->getModule('core');
634
+ $this->tableHistoryModel = $core->getModelsFactory()->get('history', 'tables');
635
+ }
636
+ return $this->tableHistoryModel;
637
+ }
638
+
639
+ public function getAllTableHistory($tableId)
640
+ {
641
+ return $this->getTableHistoryModel()->getAllTableHistory($tableId);
642
+ }
643
+
644
+ public function getUserTableHistory($userId, $tableId, $period = null)
645
+ {
646
+ return $this->getTableHistoryModel()->getUserTableHistory($userId, $tableId, $period = null);
647
+ }
648
+
649
+ public function _checkUserTableHistoryByPeriod($tableId, $history, $period = null)
650
+ {
651
+ return $this->getTableHistoryModel()->_checkUserTableHistoryByPeriod($tableId, $history, $period = null);
652
+ }
653
+
654
+ public function updateUserTableHistory($userId, $tableId, $data, $period = null)
655
+ {
656
+ return $this->getTableHistoryModel()->updateUserTableHistory($userId, $tableId, $data, $period = null);
657
+ }
658
+
659
+ public function createUserTableHistory($userId, $tableId)
660
+ {
661
+ return $this->getTableHistoryModel()->createUserTableHistory($userId, $tableId);
662
+ }
663
+
664
+ public function _afterSimpleGet($historyTable)
665
+ {
666
+ return $this->getTableHistoryModel()->_afterSimpleGet($historyTable);
667
+ }
668
+
669
+ public function getHistorySettings($id)
670
+ {
671
+ return $this->getTableHistoryModel()->getHistorySettings($id);
672
+ }
673
+
674
+ public function setHistorySettings($id, $settings)
675
+ {
676
+ return $this->getTableHistoryModel()->setHistorySettings($id, $settings);
677
+ }
678
  }
src/SupsysticTables/Tables/Module.php CHANGED
@@ -3,13 +3,16 @@
3
  class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
4
  {
5
  /**
6
- * Data for render table with single selected cell
7
  */
8
  protected $isSingleCell = array();
 
 
9
  /**
10
  * Data for loading tables' rows from history
11
  */
12
- protected $isFromHistory = array();
 
13
  /**
14
  * Check for auto import data from Google Spreadsheet
15
  */
@@ -26,9 +29,13 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
26
  {
27
  parent::onInit();
28
 
 
 
 
29
  $this->registerShortcode();
30
  $this->registerValueShortcode();
31
  $this->registerCellShortcode();
 
32
  $this->registerTwigTableRender();
33
  $this->registerMenuItem();
34
  $this->addTwigHighlighter();
@@ -177,7 +184,7 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
177
  $tables = $core->getModelsFactory()->get('tables'); // @var SupsysticTables_Tables_Model_Tables $tables
178
  $table = null;
179
 
180
- if(!$this->isSingleCell) {
181
  foreach($this->_tablesObj as $view_id => $tbl) {
182
  if($tbl->id == $id && !$tbl->isDisplayed) {
183
  $this->_tablesObj[$view_id]->isDisplayed = true;
@@ -196,8 +203,11 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
196
  && isset($table->settings['features']['import']['google']['automatically_update'])
197
  && isset($table->settings['features']['import']['google']['link']);
198
 
199
- if (!$this->isSingleCell && !$this->checkSpreadsheet && !$this->isFromHistory && file_exists($cachePath) && $this->getEnvironment()->isProd()) {
200
- return file_get_contents($cachePath);
 
 
 
201
  }
202
  if ($this->checkSpreadsheet) {
203
  try {
@@ -217,8 +227,8 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
217
  }
218
  }
219
  }
220
- if($this->isSingleCell) {
221
- // Unset unneded elements and features
222
  unset($table->settings['elements']['head']);
223
  unset($table->settings['elements']['foot']);
224
  unset($table->settings['elements']['caption']);
@@ -226,7 +236,8 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
226
  unset($table->settings['features']['paging']);
227
  unset($table->settings['features']['searching']);
228
  unset($table->settings['features']['after_table_loaded_script']);
229
-
 
230
  $table->meta['css'] = $table->meta['css'] .
231
  '#supsystic-table-' . $table->view_id . ' #supsystic-table-' . $id . ' { margin-left: 0; }' .
232
  '#supsystic-table-' . $table->view_id . ' #supsystic-table-' . $id . ',
@@ -236,10 +247,10 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
236
  foreach($table->rows as $key => $row) {
237
  if ($this->isSingleCell['row'] === $key + 1) {
238
  foreach($row['cells'] as $index => $cell) {
239
- if($index == $this->isSingleCell['col'] - 1) {
240
  // For correct work of saving data through editable fields
241
- $table->rows[$key]['cells'][$index]['row'] = $this->isSingleCell['row'];
242
- $table->rows[$key]['cells'][$index]['col'] = $this->isSingleCell['col'] - 1;
243
 
244
  // Because we can not calculate value after removing all unneeded cells
245
  if(!empty($table->rows[$key]['cells'][$index]['calculatedValue'])) {
@@ -254,6 +265,28 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
254
  }
255
  }
256
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
257
  foreach($table->rows as $key => $row) {
258
  if(isset($row['cells']) && !empty($row['cells'])) {
259
  foreach($row['cells'] as $index => $cell) {
@@ -270,18 +303,24 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
270
  }
271
  }
272
  $table->history = (bool) $this->isFromHistory;
 
273
  $table->encoded_title = htmlspecialchars($table->title, ENT_QUOTES);
274
- $renderData = $twig->render($this->getShortcodeTemplate(), array('table' => $table, 'is_feed' => is_feed()));
 
 
 
 
 
275
  $renderData = preg_replace('/\s+/', ' ', trim($renderData));
276
 
277
  if(!in_array($table->view_id, $this->_tablesStyles)) {
278
  $renderData = $this->addDataTableStyles($table) . $renderData;
279
  }
280
- if (!$this->isSingleCell && !$this->checkSpreadsheet && !$this->isFromHistory && isset($this->cacheDirectory)) {
281
  file_put_contents($cachePath, $renderData);
282
  }
283
  // clean variables for correct render of other tables on the page
284
- $this->isSingleCell = $this->isFromHistory = array();
285
  $this->checkSpreadsheet = false;
286
 
287
  return $renderData;
@@ -330,20 +369,6 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
330
  return $value;
331
  }
332
 
333
- /**
334
- * Renders the table with single cell
335
- * @param int $tableId
336
- * @param int $tableRowId
337
- * @param int $tableColId
338
- * @return string
339
- */
340
- public function renderCellSingle($tableId, $tableRowId, $tableColId)
341
- {
342
- $this->isSingleCell = array('row' => $tableRowId, 'col' => $tableColId);
343
-
344
- return $this->render((int) $tableId);
345
- }
346
-
347
  /**
348
  * Returns shortcode template name.
349
  * @return string
@@ -364,15 +389,14 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
364
  $config->get('shortcode_name')
365
  );
366
  }
367
- $ui = $environment->getModule('ui'); /** @var SupsysticTables_Ui_Module $ui */
368
- $assets = array_filter($ui->getAssets(), array($this, 'filterAssets')); /** @var SupsysticTables_Ui_Asset[] $assets */
369
 
370
  if (count($assets) > 0) {
371
  foreach ($assets as $asset) {
372
  add_action('wp_footer', array($asset, 'load'));
373
  }
374
  }
375
-
376
  return $this->render((int)$attributes['id']);
377
  }
378
 
@@ -388,14 +412,10 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
388
  $config = $environment->getConfig();
389
  $shortcode = $config->get('shortcode_value_name');
390
 
391
- if (!array_key_exists('id', $attributes)
392
- || !array_key_exists('row', $attributes)
393
- || !array_key_exists('col', $attributes)
394
- ) {
395
  return $environment->translate('There are not all shortcode\'s attributes specified. Usage example') . ':<br />'
396
  . sprintf('[%s id="{table id}" row="{row number}" col="{column number}"]', $shortcode);
397
  }
398
-
399
  return $this->renderCellValue((int)$attributes['id'], (int)$attributes['row'], (int)$attributes['col']);
400
  }
401
 
@@ -411,17 +431,39 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
411
  $config = $environment->getConfig();
412
  $shortcode = $config->get('shortcode_cell_name');
413
 
414
- if (!array_key_exists('id', $attributes)
415
- || !array_key_exists('row', $attributes)
416
- || !array_key_exists('col', $attributes)
417
- ) {
418
- return $environment->translate('There are not all shortcode\'s attributes specified. Usage example') . ':<br />'
419
  . sprintf('[%s id="{table id}" row="{row number}" col="{column number}"]', $shortcode);
420
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
421
 
422
- /** @var SupsysticTables_Ui_Module $ui */
 
 
 
 
 
 
 
 
423
  $ui = $environment->getModule('ui');
424
- /** @var SupsysticTables_Ui_Asset[] $assets */
425
  $assets = array_filter($ui->getAssets(), array($this, 'filterAssets'));
426
 
427
  if (count($assets) > 0) {
@@ -429,8 +471,12 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
429
  add_action('wp_footer', array($asset, 'load'));
430
  }
431
  }
 
 
 
 
432
 
433
- return $this->renderCellSingle((int)$attributes['id'], (int)$attributes['row'], (int)$attributes['col']);
434
  }
435
 
436
  private function registerShortcode()
@@ -438,10 +484,7 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
438
  $config = $this->getEnvironment()->getConfig();
439
  $callable = array($this, 'doShortcode');
440
 
441
- add_shortcode(
442
- $config->get('shortcode_name'),
443
- $callable
444
- );
445
  }
446
 
447
  public function registerWidget() {
@@ -482,21 +525,18 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
482
  parent::afterUiLoaded($ui);
483
 
484
  $environment = $this->getEnvironment();
485
- $hookName = 'admin_enqueue_scripts';
486
- $dynamicHookName = is_admin() ? $hookName : 'wp_enqueue_scripts';
487
-
488
  $version = $environment->getConfig()->get('plugin_version');
489
  $cachingAllowed = $environment->isProd();
490
-
491
- $ui->add($ui->createScript('jquery')->setHookName($dynamicHookName));
492
 
493
  // Styles
494
  $ui->add(
495
- $ui->createStyle('supsystic-tables-datatables-css')
496
  ->setHookName($dynamicHookName)
497
- ->setExternalSource('//cdn.datatables.net/1.10.12/css/jquery.dataTables.min.css')
498
- ->setVersion('1.10.12')
499
- ->setCachingAllowed(true)
500
  );
501
 
502
  $ui->add(
@@ -507,77 +547,18 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
507
  ->setCachingAllowed($cachingAllowed)
508
  );
509
 
510
- $ui->add(
511
- $ui->createStyle('supsystic-tables-tables-loaders-css')
512
- ->setHookName($dynamicHookName)
513
- ->setModuleSource($this, 'css/loaders.css')
514
- ->setVersion('1.1.0')
515
- ->setCachingAllowed($cachingAllowed)
516
- );
517
 
518
- $ui->add(
519
- $ui->createStyle('supsystic-tables-datatables-responsive-css')
520
- ->setHookName('wp_enqueue_scripts')
521
- ->setExternalSource('//cdn.datatables.net/responsive/2.0.2/css/responsive.dataTables.min.css')
522
- ->setVersion('2.0.2')
523
- ->setCachingAllowed(true)
524
- );
525
 
526
- $ui->add(
527
- $ui->createStyle('supsystic-tables-datatables-fixed-columns-css')
528
- ->setHookName($dynamicHookName)
529
- ->setExternalSource('//cdn.datatables.net/fixedcolumns/3.2.2/css/fixedColumns.dataTables.min.css')
530
- ->setVersion('3.2.2')
531
- ->setCachingAllowed(true)
532
- );
533
 
534
- $ui->add(
535
- $ui->createStyle('supsystic-tables-datatables-fixed-headers-css')
536
- ->setHookName($dynamicHookName)
537
- ->setExternalSource('//cdn.datatables.net/fixedheader/3.1.2/css/fixedHeader.dataTables.min.css')
538
- ->setVersion('3.1.2')
539
- ->setCachingAllowed(true)
540
- );
541
 
542
- // Scripts
543
- $ui->add(
544
- $ui->createScript('supsystic-tables-datatables-js')
545
- ->setHookName($dynamicHookName)
546
- ->setExternalSource('//cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js')
547
- ->setVersion('1.10.12')
548
- ->setCachingAllowed(true)
549
- ->addDependency('jquery')
550
- );
551
 
552
- $ui->add(
553
- $ui->createScript('supsystic-tables-datatables-responsive-js')
554
- ->setHookName('wp_enqueue_scripts')
555
- ->setExternalSource('//cdn.datatables.net/responsive/2.0.2/js/dataTables.responsive.min.js')
556
- ->setVersion('2.0.2')
557
- ->setCachingAllowed(true)
558
- ->addDependency('jquery')
559
- ->addDependency('supsystic-tables-datatables-js')
560
- );
561
-
562
- $ui->add(
563
- $ui->createScript('supsystic-tables-datatables-fixed-columns-js')
564
- ->setHookName($dynamicHookName)
565
- ->setExternalSource('//cdn.datatables.net/fixedcolumns/3.2.2/js/dataTables.fixedColumns.min.js')
566
- ->setVersion('3.2.2')
567
- ->setCachingAllowed(true)
568
- ->addDependency('jquery')
569
- ->addDependency('supsystic-tables-datatables-js')
570
- );
571
-
572
- $ui->add(
573
- $ui->createScript('supsystic-tables-datatables-fixed-headers-js')
574
- ->setHookName($dynamicHookName)
575
- ->setExternalSource('//cdn.datatables.net/fixedheader/3.1.2/js/dataTables.fixedHeader.min.js')
576
- ->setVersion('3.2.2')
577
- ->setCachingAllowed(true)
578
- ->addDependency('jquery')
579
- ->addDependency('supsystic-tables-datatables-js')
580
- );
581
 
582
  $ui->add(
583
  $ui->createScript('supsystic-tables-datatables-numeral')
@@ -590,34 +571,21 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
590
  );
591
 
592
  $ui->add(
593
- $ui->createScript('supsystic-tables-datatables-natural-sort-js')
594
  ->setHookName($dynamicHookName)
595
- ->setExternalSource('//cdn.datatables.net/plug-ins/1.10.11/sorting/natural.js')
596
- ->setVersion('1.10.11')
597
- ->setCachingAllowed(true)
598
  ->addDependency('jquery')
599
  ->addDependency('supsystic-tables-datatables-js')
 
600
  );
601
 
602
- /* RuleJS */
603
- $this->loadRuleJS($ui);
604
-
605
  /* Backend scripts */
606
  if ($environment->isModule('tables')) {
607
- $ui->add(
608
- $ui->createScript('jquery-ui-dialog')
609
- );
610
-
611
  $ui->add(
612
  $ui->createScript('jquery-ui-autocomplete')
613
- );
614
-
615
- $ui->add(
616
- $ui->createScript('supsystic-tables-tables-model')
617
  ->setHookName($hookName)
618
- ->setModuleSource($this, 'js/tables.model.js')
619
- ->setCachingAllowed($cachingAllowed)
620
- ->setVersion($version)
621
  );
622
 
623
  if ($environment->isAction('index')) {
@@ -632,14 +600,7 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
632
  }
633
 
634
  if ($environment->isAction('view')) {
635
-
636
- // DataTables language selector
637
- // $ui->add(
638
- // $ui->createScript('supsystic-tables-dt-lang-selector')
639
- // ->setHookName($hookName)
640
- // ->setModuleSource($this, 'js/dt.lang-selector.js')
641
- // );
642
-
643
  $ui->add(
644
  $ui->createStyle('supsystic-tables-tables-editor-css')
645
  ->setHookName($hookName)
@@ -648,60 +609,29 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
648
  ->setVersion($version)
649
  );
650
 
651
- /* Color Picker */
652
- $ui->add(
653
- $ui->createStyle('supsystic-tables-colorpicker-css')
654
- ->setHookName($hookName)
655
- ->setModuleSource($this, 'libraries/colorpicker/colorpicker.css')
656
- ->setCachingAllowed(true)
657
- );
658
-
659
- $ui->add(
660
- $ui->createScript('supsystic-tables-colorpicker-js')
661
- ->setHookName($hookName)
662
- ->setModuleSource($this, 'libraries/colorpicker/colorpicker.js')
663
- ->setCachingAllowed(true)
664
- );
665
-
666
- /* Toolbar */
667
- $ui->add(
668
- $ui->createStyle('supsystic-tables-toolbar-css')
669
- ->setHookName($hookName)
670
- ->setModuleSource($this, 'libraries/toolbar/jquery.toolbars.css')
671
- ->setCachingAllowed(true)
672
- );
673
-
674
- $ui->add(
675
- $ui->createScript('supsystic-tables-toolbar-js')
676
- ->setHookName($hookName)
677
- ->setModuleSource($this, 'libraries/toolbar/jquery.toolbar.js')
678
- ->setCachingAllowed(true)
679
- );
680
-
681
- /* Handsontable */
682
  $ui->add(
683
- $ui->createStyle('supsystic-tables-handsontable-css')
684
  ->setHookName($hookName)
685
- ->setExternalSource('https://cdnjs.cloudflare.com/ajax/libs/handsontable/0.31.1/handsontable.full.min.css')
686
- ->setCachingAllowed(true)
687
- ->setVersion('0.31.1')
688
  );
689
 
 
690
  $ui->add(
691
- $ui->createScript('supsystic-tables-handsontable-js')
692
  ->setHookName($hookName)
693
- ->setExternalSource('https://cdnjs.cloudflare.com/ajax/libs/handsontable/0.31.1/handsontable.full.min.js')
694
- //->setModuleSource($this, 'libraries/handsontable/handsontable.full.min.js')
695
  ->setCachingAllowed(true)
696
- ->setVersion('0.31.1')
697
  );
698
 
699
  $ui->add(
700
- $ui->createScript('supsystic-tables-moment-duration-js')
701
  ->setHookName($hookName)
702
- ->setModuleSource($this, 'libraries/moment-duration-format.js')
703
- ->setCachingAllowed(true)
704
- ->setVersion('1.3.0')
705
  );
706
 
707
  $ui->add(
@@ -730,14 +660,6 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
730
  ->addDependency('jquery-ui-autocomplete')
731
  );
732
 
733
- $ui->add(
734
- $ui->createStyle('supsystic-tables-tables-view')
735
- ->setHookName($hookName)
736
- ->setModuleSource($this, 'css/tables.view.css')
737
- ->setCachingAllowed($cachingAllowed)
738
- ->setVersion($version)
739
- );
740
-
741
  $ui->add(
742
  $ui->createScript('supsystic-tables-tables-view')
743
  ->setHookName($hookName)
@@ -746,41 +668,289 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
746
  ->setCachingAllowed($cachingAllowed)
747
  ->setVersion($version)
748
  );
 
 
 
749
 
750
- $ui->add(
751
- $ui->createScript('supsystic-tables-ace-editor-js')
752
- ->setHookName($hookName)
753
- ->setModuleSource($this, 'js/ace/ace.js')
754
- );
755
-
756
- $ui->add(
757
- $ui->createScript('supsystic-tables-ace-editor-mode-js')
758
- ->setHookName($hookName)
759
- ->setModuleSource($this, 'js/ace/mode-css.js')
760
- ->addDependency('supsystic-tables-ace-editor-js')
761
- );
762
 
763
- $ui->add(
764
- $ui->createScript('supsystic-tables-ace-editor-theme-js')
765
- ->setHookName($hookName)
766
- ->setModuleSource($this, 'js/ace/theme-monokai.js')
767
- ->addDependency('supsystic-tables-ace-editor-js')
768
- );
769
- }
770
  }
771
 
772
  $ui->add(
773
- $ui->createScript('supsystic-tables-shortcode')
774
  ->setHookName($dynamicHookName)
775
- ->setModuleSource($this, 'js/tables.shortcode.js')
776
- ->setVersion($version)
777
- ->setCachingAllowed($cachingAllowed)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
778
  ->addDependency('jquery')
779
  ->addDependency('supsystic-tables-datatables-js')
780
- ->addDependency('supsystic-tables-datatables-numeral')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
781
  );
782
  }
783
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
784
  public function addFontsData() {
785
  $standardFontsList = array();
786
  if($this->getEnvironment()->isPro()) {
@@ -797,50 +967,6 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
797
  return array("Georgia","Palatino Linotype","Times New Roman","Arial","Helvetica","Arial Black","Gadget","Comic Sans MS","Impact","Charcoal","Lucida Sans Unicode","Lucida Grande","Tahoma","Geneva","Trebuchet MS","Verdana","Geneva","Courier New","Courier","Lucida Console","Monaco");
798
  }
799
 
800
- private function loadRuleJS(SupsysticTables_Ui_Module $ui)
801
- {
802
- $hookName = 'admin_enqueue_scripts';
803
- $dynamicHookName = is_admin() ? $hookName : 'wp_enqueue_scripts';
804
-
805
- if (is_admin() && !$this->getEnvironment()->isModule('tables', 'view')) {
806
- return;
807
- }
808
-
809
- /* External Libraries */
810
- $ui->add(
811
- $ui->createScript('supsystic-tables-rulejs-libs-js')
812
- ->setHookName($dynamicHookName)
813
- ->setModuleSource($this, 'libraries/ruleJS/ruleJS.lib.full.js')
814
- );
815
-
816
- /* RuleJS */
817
- $ui->add(
818
- $ui->createScript('supsystic-tables-rulejs-parser-js')
819
- ->setHookName($dynamicHookName)
820
- ->setModuleSource($this, 'libraries/ruleJS/parser.js')
821
- );
822
-
823
- $ui->add(
824
- $ui->createScript('supsystic-tables-rulejs-js')
825
- ->setHookName($dynamicHookName)
826
- ->setModuleSource($this, 'libraries/ruleJS/ruleJS.js')
827
- );
828
-
829
- /* Handsontable Module */
830
- $ui->add(
831
- $ui->createScript('supsystic-tables-rulejs-hot-js')
832
- ->setHookName($hookName)
833
- ->setModuleSource($this, 'libraries/ruleJS/handsontable.formula.js')
834
- ->addDependency('supsystic-tables-handsontable-js')
835
- );
836
-
837
- $ui->add(
838
- $ui->createStyle('supsystic-tables-rulejs-hot-css')
839
- ->setHookName($hookName)
840
- ->setModuleSource($this, 'libraries/ruleJS/handsontable.formula.css')
841
- );
842
- }
843
-
844
  private function registerMenuItem()
845
  {
846
  $environment = $this->getEnvironment();
@@ -984,6 +1110,44 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
984
  $dispatcher->apply('table_history_tabs_content_data', array(array( 'table' => $table )))
985
  );
986
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
987
  }
988
 
989
  require_once('Model/widget.php');
3
  class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
4
  {
5
  /**
6
+ * Data for render table with single selected cell, rows or columns
7
  */
8
  protected $isSingleCell = array();
9
+ protected $isTablePart = array();
10
+
11
  /**
12
  * Data for loading tables' rows from history
13
  */
14
+ public $isFromHistory = array();
15
+ public $historyData = array();
16
  /**
17
  * Check for auto import data from Google Spreadsheet
18
  */
29
  {
30
  parent::onInit();
31
 
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();
184
  $tables = $core->getModelsFactory()->get('tables'); // @var SupsysticTables_Tables_Model_Tables $tables
185
  $table = null;
186
 
187
+ if(!$this->isSingleCell && !$this->isTablePart) {
188
  foreach($this->_tablesObj as $view_id => $tbl) {
189
  if($tbl->id == $id && !$tbl->isDisplayed) {
190
  $this->_tablesObj[$view_id]->isDisplayed = true;
203
  && isset($table->settings['features']['import']['google']['automatically_update'])
204
  && isset($table->settings['features']['import']['google']['link']);
205
 
206
+ if (!$this->isSingleCell && !$this->isTablePart && !$this->checkSpreadsheet && !$this->isFromHistory && file_exists($cachePath) && $this->getEnvironment()->isProd()) {
207
+ // Connect scripts and styles depending on table settings and table's cells settings for table cache
208
+ $dispatcher = $this->getEnvironment()->getDispatcher();
209
+ $dispatcher->apply('before_table_render', array($table));
210
+ return file_get_contents($cachePath);
211
  }
212
  if ($this->checkSpreadsheet) {
213
  try {
227
  }
228
  }
229
  }
230
+ if($this->isSingleCell || $this->isTablePart) {
231
+ // Unset unneeded elements and features
232
  unset($table->settings['elements']['head']);
233
  unset($table->settings['elements']['foot']);
234
  unset($table->settings['elements']['caption']);
236
  unset($table->settings['features']['paging']);
237
  unset($table->settings['features']['searching']);
238
  unset($table->settings['features']['after_table_loaded_script']);
239
+ }
240
+ if($this->isSingleCell) {
241
  $table->meta['css'] = $table->meta['css'] .
242
  '#supsystic-table-' . $table->view_id . ' #supsystic-table-' . $id . ' { margin-left: 0; }' .
243
  '#supsystic-table-' . $table->view_id . ' #supsystic-table-' . $id . ',
247
  foreach($table->rows as $key => $row) {
248
  if ($this->isSingleCell['row'] === $key + 1) {
249
  foreach($row['cells'] as $index => $cell) {
250
+ if($this->isSingleCell['col'] === $index + 1) {
251
  // For correct work of saving data through editable fields
252
+ $table->rows[$key]['cells'][$index]['row'] = $key + 1;
253
+ $table->rows[$key]['cells'][$index]['col'] = $index;
254
 
255
  // Because we can not calculate value after removing all unneeded cells
256
  if(!empty($table->rows[$key]['cells'][$index]['calculatedValue'])) {
265
  }
266
  }
267
  }
268
+ if($this->isTablePart) {
269
+ foreach($table->rows as $key => $row) {
270
+ if(empty($this->isTablePart['row']) || in_array($key + 1, $this->isTablePart['row'])) {
271
+ foreach($row['cells'] as $index => $cell) {
272
+ if(empty($this->isTablePart['col']) || in_array($index + 1, $this->isTablePart['col'])) {
273
+ // For correct work of saving data through editable fields
274
+ $table->rows[$key]['cells'][$index]['row'] = $key + 1;
275
+ $table->rows[$key]['cells'][$index]['col'] = $index;
276
+
277
+ // Because we can not calculate value after removing all unneeded cells
278
+ if(!empty($table->rows[$key]['cells'][$index]['calculatedValue'])) {
279
+ $table->rows[$key]['cells'][$index]['data'] = $table->rows[$key]['cells'][$index]['calculatedValue'];
280
+ }
281
+ } else if(!empty($this->isTablePart['col'])) {
282
+ unset($table->rows[$key]['cells'][$index]);
283
+ }
284
+ }
285
+ } else if(!empty($this->isTablePart['row'])) {
286
+ unset($table->rows[$key]);
287
+ }
288
+ }
289
+ }
290
  foreach($table->rows as $key => $row) {
291
  if(isset($row['cells']) && !empty($row['cells'])) {
292
  foreach($row['cells'] as $index => $cell) {
303
  }
304
  }
305
  $table->history = (bool) $this->isFromHistory;
306
+ $table->history_data = $this->historyData;
307
  $table->encoded_title = htmlspecialchars($table->title, ENT_QUOTES);
308
+
309
+ // Connect scripts and styles depending on table settings and table's cells settings
310
+ $dispatcher = $this->getEnvironment()->getDispatcher();
311
+ $dispatcher->apply('before_table_render', array($table));
312
+
313
+ $renderData = $twig->render($this->getShortcodeTemplate(), array('table' => $table, 'is_feed' => is_feed()));
314
  $renderData = preg_replace('/\s+/', ' ', trim($renderData));
315
 
316
  if(!in_array($table->view_id, $this->_tablesStyles)) {
317
  $renderData = $this->addDataTableStyles($table) . $renderData;
318
  }
319
+ if (!$this->isSingleCell && !$this->isTablePart && !$this->checkSpreadsheet && !$this->isFromHistory && isset($this->cacheDirectory)) {
320
  file_put_contents($cachePath, $renderData);
321
  }
322
  // clean variables for correct render of other tables on the page
323
+ $this->isSingleCell = $this->isTablePart = $this->isFromHistory = $this->historyData = array();
324
  $this->checkSpreadsheet = false;
325
 
326
  return $renderData;
369
  return $value;
370
  }
371
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
372
  /**
373
  * Returns shortcode template name.
374
  * @return string
389
  $config->get('shortcode_name')
390
  );
391
  }
392
+ $ui = $environment->getModule('ui');
393
+ $assets = array_filter($ui->getAssets(), array($this, 'filterAssets'));
394
 
395
  if (count($assets) > 0) {
396
  foreach ($assets as $asset) {
397
  add_action('wp_footer', array($asset, 'load'));
398
  }
399
  }
 
400
  return $this->render((int)$attributes['id']);
401
  }
402
 
412
  $config = $environment->getConfig();
413
  $shortcode = $config->get('shortcode_value_name');
414
 
415
+ if (!array_key_exists('id', $attributes) || !array_key_exists('row', $attributes) || !array_key_exists('col', $attributes)) {
 
 
 
416
  return $environment->translate('There are not all shortcode\'s attributes specified. Usage example') . ':<br />'
417
  . sprintf('[%s id="{table id}" row="{row number}" col="{column number}"]', $shortcode);
418
  }
 
419
  return $this->renderCellValue((int)$attributes['id'], (int)$attributes['row'], (int)$attributes['col']);
420
  }
421
 
431
  $config = $environment->getConfig();
432
  $shortcode = $config->get('shortcode_cell_name');
433
 
434
+ if (!array_key_exists('id', $attributes) || !array_key_exists('row', $attributes) || !array_key_exists('col', $attributes)) {
435
+ return $environment->translate('There are not all shortcode attributes specified. Usage example') . ':<br />'
 
 
 
436
  . sprintf('[%s id="{table id}" row="{row number}" col="{column number}"]', $shortcode);
437
  }
438
+ $ui = $environment->getModule('ui');
439
+ $assets = array_filter($ui->getAssets(), array($this, 'filterAssets'));
440
+
441
+ if (count($assets) > 0) {
442
+ foreach ($assets as $asset) {
443
+ add_action('wp_footer', array($asset, 'load'));
444
+ }
445
+ }
446
+ $this->isSingleCell = array('row' => (int)$attributes['row'], 'col' => (int)$attributes['col']);
447
+
448
+ return $this->render((int) (int)$attributes['id']);
449
+ }
450
+
451
+ private function registerTablePartShortcode() {
452
+ $config = $this->getEnvironment()->getConfig();
453
+
454
+ add_shortcode($config->get('shortcode_part_name'), array($this, 'doTablePartShortcode'));
455
+ }
456
 
457
+ public function doTablePartShortcode($attributes) {
458
+ $environment = $this->getEnvironment();
459
+ $config = $environment->getConfig();
460
+ $shortcode = $config->get('shortcode_row_name');
461
+
462
+ if (!array_key_exists('id', $attributes) || (!array_key_exists('row', $attributes) && !array_key_exists('col', $attributes))) {
463
+ return $environment->translate('There are not all shortcode attributes specified. Usage example') . ':<br />'
464
+ . sprintf('[%s id="{table id}" row="{row numbers splitted by comma}" col="{column numbers splitted by comma}"]', $shortcode);
465
+ }
466
  $ui = $environment->getModule('ui');
 
467
  $assets = array_filter($ui->getAssets(), array($this, 'filterAssets'));
468
 
469
  if (count($assets) > 0) {
471
  add_action('wp_footer', array($asset, 'load'));
472
  }
473
  }
474
+ $this->isTablePart = array(
475
+ 'row' => array_key_exists('row', $attributes) ? array_filter(explode(',', $attributes['row'])) : array(),
476
+ 'col' => array_key_exists('col', $attributes) ? array_filter(explode(',', $attributes['col'])) : array(),
477
+ );
478
 
479
+ return $this->render((int)$attributes['id']);
480
  }
481
 
482
  private function registerShortcode()
484
  $config = $this->getEnvironment()->getConfig();
485
  $callable = array($this, 'doShortcode');
486
 
487
+ add_shortcode($config->get('shortcode_name'), $callable);
 
 
 
488
  }
489
 
490
  public function registerWidget() {
525
  parent::afterUiLoaded($ui);
526
 
527
  $environment = $this->getEnvironment();
 
 
 
528
  $version = $environment->getConfig()->get('plugin_version');
529
  $cachingAllowed = $environment->isProd();
530
+ $hookName = 'admin_enqueue_scripts';
531
+ $dynamicHookName = is_admin() ? $hookName : 'wp_enqueue_scripts';
532
 
533
  // Styles
534
  $ui->add(
535
+ $ui->createStyle('supsystic-tables-tables-loaders-css')
536
  ->setHookName($dynamicHookName)
537
+ ->setModuleSource($this, 'css/loaders.css')
538
+ ->setVersion('1.1.0')
539
+ ->setCachingAllowed($cachingAllowed)
540
  );
541
 
542
  $ui->add(
547
  ->setCachingAllowed($cachingAllowed)
548
  );
549
 
550
+ // Scripts
551
+ $this->loadRuleJS($ui);
 
 
 
 
 
552
 
553
+ $this->loadHandsontable($ui);
 
 
 
 
 
 
554
 
555
+ $this->loadEyeconColorpicker($ui);
 
 
 
 
 
 
556
 
557
+ $this->loadJqueryToolbar($ui);
 
 
 
 
 
 
558
 
559
+ $this->loadAceCssEditor($ui);
 
 
 
 
 
 
 
 
560
 
561
+ $this->loadDataTables($ui);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
562
 
563
  $ui->add(
564
  $ui->createScript('supsystic-tables-datatables-numeral')
571
  );
572
 
573
  $ui->add(
574
+ $ui->createScript('supsystic-tables-shortcode')
575
  ->setHookName($dynamicHookName)
576
+ ->setModuleSource($this, 'js/tables.shortcode.js')
577
+ ->setVersion($version)
578
+ ->setCachingAllowed($cachingAllowed)
579
  ->addDependency('jquery')
580
  ->addDependency('supsystic-tables-datatables-js')
581
+ ->addDependency('supsystic-tables-datatables-numeral')
582
  );
583
 
 
 
 
584
  /* Backend scripts */
585
  if ($environment->isModule('tables')) {
 
 
 
 
586
  $ui->add(
587
  $ui->createScript('jquery-ui-autocomplete')
 
 
 
 
588
  ->setHookName($hookName)
 
 
 
589
  );
590
 
591
  if ($environment->isAction('index')) {
600
  }
601
 
602
  if ($environment->isAction('view')) {
603
+ // Styles
 
 
 
 
 
 
 
604
  $ui->add(
605
  $ui->createStyle('supsystic-tables-tables-editor-css')
606
  ->setHookName($hookName)
609
  ->setVersion($version)
610
  );
611
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
612
  $ui->add(
613
+ $ui->createStyle('supsystic-tables-tables-view')
614
  ->setHookName($hookName)
615
+ ->setModuleSource($this, 'css/tables.view.css')
616
+ ->setCachingAllowed($cachingAllowed)
617
+ ->setVersion($version)
618
  );
619
 
620
+ // Scripts
621
  $ui->add(
622
+ $ui->createScript('supsystic-tables-moment-duration-js')
623
  ->setHookName($hookName)
624
+ ->setModuleSource($this, 'libraries/moment-duration-format.js')
 
625
  ->setCachingAllowed(true)
626
+ ->setVersion('1.3.0')
627
  );
628
 
629
  $ui->add(
630
+ $ui->createScript('supsystic-tables-tables-model')
631
  ->setHookName($hookName)
632
+ ->setModuleSource($this, 'js/tables.model.js')
633
+ ->setCachingAllowed($cachingAllowed)
634
+ ->setVersion($version)
635
  );
636
 
637
  $ui->add(
660
  ->addDependency('jquery-ui-autocomplete')
661
  );
662
 
 
 
 
 
 
 
 
 
663
  $ui->add(
664
  $ui->createScript('supsystic-tables-tables-view')
665
  ->setHookName($hookName)
668
  ->setCachingAllowed($cachingAllowed)
669
  ->setVersion($version)
670
  );
671
+ }
672
+ }
673
+ }
674
 
675
+ private function loadDataTables(SupsysticTables_Ui_Module $ui)
676
+ {
677
+ $hookName = 'admin_enqueue_scripts';
678
+ $frontendHookName = 'wp_enqueue_scripts';
679
+ $dynamicHookName = is_admin() ? $hookName : $frontendHookName;
680
+ $coreModulePath = untrailingslashit(plugin_dir_url(dirname(__FILE__)) . 'Core');
 
 
 
 
 
 
681
 
682
+ if (is_admin() && !$this->getEnvironment()->isModule('tables')) {
683
+ return;
 
 
 
 
 
684
  }
685
 
686
  $ui->add(
687
+ $ui->createStyle('supsystic-tables-datatables-css')
688
  ->setHookName($dynamicHookName)
689
+ ->setSource($coreModulePath . '/assets/css/lib/jquery.dataTables.min.css')
690
+ ->setVersion('1.10.12')
691
+ ->setCachingAllowed(true)
692
+ );
693
+
694
+ $ui->add(
695
+ $ui->createStyle('supsystic-tables-datatables-responsive-css')
696
+ ->setHookName($frontendHookName)
697
+ ->setSource($coreModulePath . '/assets/css/lib/responsive.dataTables.min.css')
698
+ ->setVersion('2.0.2')
699
+ ->setCachingAllowed(true)
700
+ );
701
+
702
+ $ui->add(
703
+ $ui->createStyle('supsystic-tables-datatables-fixed-columns-css')
704
+ ->setHookName($dynamicHookName)
705
+ ->setSource($coreModulePath . '/assets/css/lib/fixedColumns.dataTables.min.css')
706
+ ->setVersion('3.2.2')
707
+ ->setCachingAllowed(true)
708
+ );
709
+
710
+ $ui->add(
711
+ $ui->createStyle('supsystic-tables-datatables-fixed-headers-css')
712
+ ->setHookName($dynamicHookName)
713
+ ->setSource($coreModulePath . '/assets/css/lib/fixedHeader.dataTables.min.css')
714
+ ->setVersion('3.1.2')
715
+ ->setCachingAllowed(true)
716
+ );
717
+
718
+ $ui->add(
719
+ $ui->createScript('supsystic-tables-datatables-js')
720
+ ->setHookName($dynamicHookName)
721
+ ->setSource($coreModulePath . '/assets/js/lib/jquery.dataTables.min.js')
722
+ ->setVersion('1.10.12')
723
+ ->setCachingAllowed(true)
724
+ ->addDependency('jquery')
725
+ );
726
+
727
+ $ui->add(
728
+ $ui->createScript('supsystic-tables-datatables-responsive-js')
729
+ ->setHookName($frontendHookName)
730
+ ->setSource($coreModulePath . '/assets/js/lib/dataTables.responsive.min.js')
731
+ ->setVersion('2.0.2')
732
+ ->setCachingAllowed(true)
733
  ->addDependency('jquery')
734
  ->addDependency('supsystic-tables-datatables-js')
735
+ );
736
+
737
+ $ui->add(
738
+ $ui->createScript('supsystic-tables-datatables-fixed-columns-js')
739
+ ->setHookName($dynamicHookName)
740
+ ->setSource($coreModulePath . '/assets/js/lib/dataTables.fixedColumns.min.js')
741
+ ->setVersion('3.2.2')
742
+ ->setCachingAllowed(true)
743
+ ->addDependency('jquery')
744
+ ->addDependency('supsystic-tables-datatables-js')
745
+ );
746
+
747
+ $ui->add(
748
+ $ui->createScript('supsystic-tables-datatables-fixed-headers-js')
749
+ ->setHookName($dynamicHookName)
750
+ ->setSource($coreModulePath . '/assets/js/lib/dataTables.fixedHeader.min.js')
751
+ ->setVersion('3.2.2')
752
+ ->setCachingAllowed(true)
753
+ ->addDependency('jquery')
754
+ ->addDependency('supsystic-tables-datatables-js')
755
+ );
756
+
757
+ $ui->add(
758
+ $ui->createScript('supsystic-tables-datatables-extensions-js')
759
+ ->setHookName($dynamicHookName)
760
+ ->setSource($coreModulePath . '/assets/js/lib/dataTables.customExtensions.js')
761
+ ->setVersion('1.10.11')
762
+ ->setCachingAllowed(true)
763
+ ->addDependency('jquery')
764
+ ->addDependency('supsystic-tables-datatables-js')
765
+ );
766
+
767
+ /*$ui->add(
768
+ $ui->createScript('supsystic-tables-datatables-natural-sort-js')
769
+ ->setHookName($dynamicHookName)
770
+ ->setSource($coreModulePath . '/assets/js/lib/natural.js')
771
+ ->setVersion('1.10.11')
772
+ ->setCachingAllowed(true)
773
+ ->addDependency('jquery')
774
+ ->addDependency('supsystic-tables-datatables-js')
775
+ );*/
776
+ }
777
+
778
+ private function loadRuleJS(SupsysticTables_Ui_Module $ui)
779
+ {
780
+ $hookName = 'admin_enqueue_scripts';
781
+ $dynamicHookName = is_admin() ? $hookName : 'wp_enqueue_scripts';
782
+
783
+ if (is_admin() && !$this->getEnvironment()->isModule('tables', 'view')) {
784
+ return;
785
+ }
786
+
787
+ $ui->add(
788
+ $ui->createScript('supsystic-tables-rulejs-libs-js')
789
+ ->setHookName($dynamicHookName)
790
+ ->setModuleSource($this, 'libraries/ruleJS/ruleJS.lib.full.js')
791
+ );
792
+
793
+ $ui->add(
794
+ $ui->createScript('supsystic-tables-rulejs-parser-js')
795
+ ->setHookName($dynamicHookName)
796
+ ->setModuleSource($this, 'libraries/ruleJS/parser.js')
797
+ );
798
+
799
+ $ui->add(
800
+ $ui->createScript('supsystic-tables-rulejs-js')
801
+ ->setHookName($dynamicHookName)
802
+ ->setModuleSource($this, 'libraries/ruleJS/ruleJS.js')
803
  );
804
  }
805
 
806
+ private function loadHandsontable(SupsysticTables_Ui_Module $ui)
807
+ {
808
+ $hookName = 'admin_enqueue_scripts';
809
+
810
+ if (!is_admin() || (is_admin() && !$this->getEnvironment()->isModule('tables', 'view'))) {
811
+ return;
812
+ }
813
+
814
+ // Styles
815
+ $ui->add(
816
+ $ui->createStyle('supsystic-tables-handsontable-css')
817
+ ->setHookName($hookName)
818
+ ->setExternalSource('https://cdnjs.cloudflare.com/ajax/libs/handsontable/0.31.1/handsontable.full.min.css')
819
+ ->setCachingAllowed(true)
820
+ ->setVersion('0.31.1')
821
+ );
822
+
823
+ $ui->add(
824
+ $ui->createStyle('supsystic-tables-rulejs-hot-css')
825
+ ->setHookName($hookName)
826
+ ->setModuleSource($this, 'libraries/ruleJS/handsontable.formula.css')
827
+ );
828
+
829
+ // Scripts
830
+ $ui->add(
831
+ $ui->createScript('supsystic-tables-handsontable-js')
832
+ ->setHookName($hookName)
833
+ ->setExternalSource('https://cdnjs.cloudflare.com/ajax/libs/handsontable/0.31.1/handsontable.full.min.js')
834
+ ->setCachingAllowed(true)
835
+ ->setVersion('0.31.1')
836
+ );
837
+
838
+ $ui->add(
839
+ $ui->createScript('supsystic-tables-rulejs-hot-js')
840
+ ->setHookName($hookName)
841
+ ->setModuleSource($this, 'libraries/ruleJS/handsontable.formula.js')
842
+ ->addDependency('supsystic-tables-handsontable-js')
843
+ );
844
+ }
845
+
846
+ private function loadEyeconColorpicker(SupsysticTables_Ui_Module $ui) {
847
+ $hookName = 'admin_enqueue_scripts';
848
+
849
+ if (!is_admin() || (is_admin() && !$this->getEnvironment()->isModule('tables', 'view'))) {
850
+ return;
851
+ }
852
+
853
+ $ui->add(
854
+ $ui->createStyle('supsystic-tables-colorpicker-css')
855
+ ->setHookName($hookName)
856
+ ->setModuleSource($this, 'libraries/colorpicker/colorpicker.css')
857
+ ->setCachingAllowed(true)
858
+ );
859
+
860
+ $ui->add(
861
+ $ui->createScript('supsystic-tables-colorpicker-js')
862
+ ->setHookName($hookName)
863
+ ->setModuleSource($this, 'libraries/colorpicker/colorpicker.js')
864
+ ->setCachingAllowed(true)
865
+ );
866
+ }
867
+
868
+ private function loadJqueryToolbar(SupsysticTables_Ui_Module $ui) {
869
+ $hookName = 'admin_enqueue_scripts';
870
+
871
+ if (!is_admin() || (is_admin() && !$this->getEnvironment()->isModule('tables', 'view'))) {
872
+ return;
873
+ }
874
+
875
+ $ui->add(
876
+ $ui->createStyle('supsystic-tables-toolbar-css')
877
+ ->setHookName($hookName)
878
+ ->setModuleSource($this, 'libraries/toolbar/jquery.toolbars.css')
879
+ ->setCachingAllowed(true)
880
+ );
881
+
882
+ $ui->add(
883
+ $ui->createScript('supsystic-tables-toolbar-js')
884
+ ->setHookName($hookName)
885
+ ->setModuleSource($this, 'libraries/toolbar/jquery.toolbar.js')
886
+ ->setCachingAllowed(true)
887
+ );
888
+ }
889
+
890
+ private function loadAceCssEditor(SupsysticTables_Ui_Module $ui)
891
+ {
892
+ $hookName = 'admin_enqueue_scripts';
893
+
894
+ if (!is_admin() || (is_admin() && !$this->getEnvironment()->isModule('tables', 'view'))) {
895
+ return;
896
+ }
897
+
898
+ $ui->add(
899
+ $ui->createScript('supsystic-tables-ace-editor-js')
900
+ ->setHookName($hookName)
901
+ ->setModuleSource($this, 'js/ace/ace.js')
902
+ );
903
+
904
+ $ui->add(
905
+ $ui->createScript('supsystic-tables-ace-editor-mode-js')
906
+ ->setHookName($hookName)
907
+ ->setModuleSource($this, 'js/ace/mode-css.js')
908
+ ->addDependency('supsystic-tables-ace-editor-js')
909
+ );
910
+
911
+ $ui->add(
912
+ $ui->createScript('supsystic-tables-ace-editor-theme-js')
913
+ ->setHookName($hookName)
914
+ ->setModuleSource($this, 'js/ace/theme-monokai.js')
915
+ ->addDependency('supsystic-tables-ace-editor-js')
916
+ );
917
+ }
918
+
919
+ public function loadLanguageData($table) {
920
+ if(isset($table->settings['language']['file'])) {
921
+ $tableLang = !empty($table->settings['language']['file']) ? $table->settings['language']['file'] : 'default';
922
+ $langModel = $this->getModule('tables')->getController()->getModel('languages', 'tables');
923
+ $langList = $langModel->getDefaultLanguages();
924
+ $langData = $langModel->getLanguagesData();
925
+
926
+ if ($tableLang == 'browser') {
927
+ $browserLangs = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
928
+
929
+ foreach ($browserLangs as $locale) {
930
+ $lang = substr($locale, 0, 2);
931
+
932
+ if(!empty($langList[$locale])) {
933
+ $tableLang = $langList[$locale];
934
+ break;
935
+ }
936
+ if(!empty($langList[$lang])) {
937
+ $tableLang = $langList[$lang];
938
+ break;
939
+ }
940
+ }
941
+ }
942
+ if(!empty($langData[$tableLang])) {
943
+ if(is_admin()) {
944
+ $table->settings['translation'] = $langData[$tableLang];
945
+ } else {
946
+ wp_localize_script('tables-core', 'g_stbTblLangData', $langData[$tableLang]);
947
+ }
948
+ }
949
+ }
950
+
951
+ return $table;
952
+ }
953
+
954
  public function addFontsData() {
955
  $standardFontsList = array();
956
  if($this->getEnvironment()->isPro()) {
967
  return array("Georgia","Palatino Linotype","Times New Roman","Arial","Helvetica","Arial Black","Gadget","Comic Sans MS","Impact","Charcoal","Lucida Sans Unicode","Lucida Grande","Tahoma","Geneva","Trebuchet MS","Verdana","Geneva","Courier New","Courier","Lucida Console","Monaco");
968
  }
969
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
970
  private function registerMenuItem()
971
  {
972
  $environment = $this->getEnvironment();
1110
  $dispatcher->apply('table_history_tabs_content_data', array(array( 'table' => $table )))
1111
  );
1112
  }
1113
+ public function getShortcodesList()
1114
+ {
1115
+ $environment = $this->getEnvironment();
1116
+ $config = $environment->getConfig();
1117
+ $dispatcher = $environment->getDispatcher();
1118
+
1119
+ return $dispatcher->apply('table-shortcodes-list',
1120
+ array(
1121
+ array(
1122
+ 'shortcode' => array(
1123
+ 'name' => $config->get('shortcode_name'),
1124
+ 'label' => $environment->translate('Table Shortcode'),
1125
+ 'attrs' => '',
1126
+ ),
1127
+ 'part_shortcode' => array(
1128
+ 'name' => $config->get('shortcode_part_name'),
1129
+ 'label' => $environment->translate('Table Part Shortcode'),
1130
+ 'attrs' => 'row=1,2 col=1,2',
1131
+ ),
1132
+ 'cell_shortcode' => array(
1133
+ 'name' => $config->get('shortcode_part_name'),
1134
+ 'label' => $environment->translate('Cell Shortcode'),
1135
+ 'attrs' => 'row=1 col=1',
1136
+ ),
1137
+ 'value_shortcode' => array(
1138
+ 'name' => $config->get('shortcode_value_name'),
1139
+ 'label' => $environment->translate('Value Shortcode'),
1140
+ 'attrs' => 'row=1 col=1',
1141
+ ),
1142
+ 'php_code' => array(
1143
+ 'name' => $config->get('shortcode_name'),
1144
+ 'label' => $environment->translate('PHP code'),
1145
+ 'attrs' => '',
1146
+ ),
1147
+ )
1148
+ )
1149
+ );
1150
+ }
1151
  }
1152
 
1153
  require_once('Model/widget.php');
src/SupsysticTables/Tables/assets/css/tables.editor.css CHANGED
@@ -42,7 +42,7 @@
42
  }
43
  #tableToolbar > ul > li {
44
  margin: 0;
45
- display: inline;
46
  }
47
  #tableToolbar > ul > li .toolbar-content {
48
  display: none;
@@ -56,21 +56,33 @@
56
  font-weight: 100;
57
  }*/
58
  #tableToolbar button, #tableToolbar .toolContainer {
59
- min-width: 35px;
60
- min-height: 38px;
61
- border: none;
62
- background-color: transparent;
63
- border-top: 5px solid transparent;
64
- border-right: 1px solid #cac4c4;
65
- border-bottom: 5px solid transparent;
66
- padding: 4px 7px;
67
- outline: 0;
68
- vertical-align: middle;
 
 
 
 
 
 
 
 
 
 
 
 
69
  }
70
  #tableToolbar button:hover {
71
- -webkit-box-shadow: 0px 0px 1px 2px #beb7b7;
72
- -moz-box-shadow: 0px 0px 1px 2px #beb7b7;
73
- box-shadow: 0px 0px 1px 2px #beb7b7;
74
  }
75
  #tableToolbar .inactive {
76
  color: #8e8d8d;
@@ -140,8 +152,9 @@ i.toolbar-word-wrap.word-wrap-visible {
140
  max-width: 0;
141
  }
142
 
143
- #tableEditor .editable, #tableEditor .selectable, #tableEditor .hiddenCell, #tableEditor .invisibleCell {
144
- position: relative;
 
145
  }
146
 
147
  #tableEditor .editable:after {
@@ -172,6 +185,20 @@ i.toolbar-word-wrap.word-wrap-visible {
172
  border-bottom: 7px solid transparent;
173
  }
174
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
175
  #tableEditor .hiddenCell:before {
176
  content: '';
177
  display: block;
@@ -200,6 +227,57 @@ i.toolbar-word-wrap.word-wrap-visible {
200
  border-bottom: 0 solid transparent;
201
  }
202
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
203
  .tool-container.list {
204
  height: auto!important;
205
  }
42
  }
43
  #tableToolbar > ul > li {
44
  margin: 0;
45
+ display: inline-block;
46
  }
47
  #tableToolbar > ul > li .toolbar-content {
48
  display: none;
56
  font-weight: 100;
57
  }*/
58
  #tableToolbar button, #tableToolbar .toolContainer {
59
+ display: inline-block;
60
+ min-width: 35px;
61
+ min-height: 38px;
62
+ border: none;
63
+ background-color: transparent;
64
+ border-top: 5px solid transparent;
65
+ border-right: 1px solid #cac4c4;
66
+ border-bottom: 5px solid transparent;
67
+ outline: 0;
68
+ vertical-align: middle;
69
+ }
70
+ #tableToolbar button {
71
+ padding: 4px 7px;
72
+ }
73
+ #tableToolbar .toolContainer {
74
+ padding: 0 7px;
75
+ }
76
+ #tableToolbar .toolContainer #fontFamily {
77
+ width: 195px;
78
+ }
79
+ #tableToolbar .toolContainer #fontSize {
80
+ width: 90px;
81
  }
82
  #tableToolbar button:hover {
83
+ -webkit-box-shadow: 0px 0px 1px 2px #beb7b7;
84
+ -moz-box-shadow: 0px 0px 1px 2px #beb7b7;
85
+ box-shadow: 0px 0px 1px 2px #beb7b7;
86
  }
87
  #tableToolbar .inactive {
88
  color: #8e8d8d;
152
  max-width: 0;
153
  }
154
 
155
+ #tableEditor .editable, #tableEditor .selectable, #tableEditor .datefield, #tableEditor .unescapeHTML,
156
+ #tableEditor .hiddenCell, #tableEditor .invisibleCell, #tableEditor .collapsibleCell, #tableEditor .tooltipCell {
157
+ position: relative;
158
  }
159
 
160
  #tableEditor .editable:after {
185
  border-bottom: 7px solid transparent;
186
  }
187
 
188
+ #tableEditor .datefield:after {
189
+ content: '';
190
+ display: block;
191
+ position: absolute;
192
+ top: 0;
193
+ right: 0;
194
+ width: 0;
195
+ height: 0;
196
+ border-top: 0 solid transparent;
197
+ border-left: 0 solid transparent;
198
+ border-right: 7px solid #ff9406;
199
+ border-bottom: 7px solid transparent;
200
+ }
201
+
202
  #tableEditor .hiddenCell:before {
203
  content: '';
204
  display: block;
227
  border-bottom: 0 solid transparent;
228
  }
229
 
230
+ #tableEditor .unescapeHTML:after {
231
+ content: '';
232
+ display: block;
233
+ position: absolute;
234
+ top: 0;
235
+ left: 0;
236
+ width: 0;
237
+ height: 0;
238
+ border-top: 7px solid #95109a;
239
+ border-left: 0 solid transparent;
240
+ border-right: 7px solid transparent;
241
+ border-bottom: 0 solid transparent;
242
+ /*border-top: 0 solid transparent;
243
+ border-left: 7px solid transparent;
244
+ border-right: 0 solid transparent;
245
+ border-bottom: 7px solid #95109a;*/
246
+ }
247
+
248
+ #tableEditor .collapsibleCell:before {
249
+ content: '';
250
+ display: block;
251
+ position: absolute;
252
+ top: 0;
253
+ left: 0;
254
+ width: 0;
255
+ height: 0;
256
+ border-top: 7px solid #f03cf0;
257
+ border-left: 0 solid transparent;
258
+ border-right: 7px solid transparent;
259
+ border-bottom: 0 solid transparent;
260
+ }
261
+
262
+ #tableEditor .tooltipCell:before {
263
+ content: '';
264
+ display: block;
265
+ position: absolute;
266
+ top: 0;
267
+ left: 0;
268
+ width: 0;
269
+ height: 0;
270
+ border-top: 7px solid #50CDFE;
271
+ border-left: 0 solid transparent;
272
+ border-right: 7px solid transparent;
273
+ border-bottom: 0 solid transparent;
274
+ }
275
+
276
+ .handsontableInputHolder .handsontableInput {
277
+ background-color: #ffffff !important;
278
+ color: #000000 !important;
279
+ }
280
+
281
  .tool-container.list {
282
  height: auto!important;
283
  }
src/SupsysticTables/Tables/assets/css/tables.shortcode.css CHANGED
@@ -227,8 +227,5 @@ table.oneColumnWithLabels td:after {
227
 
228
  /* Fix for using autowidth for tables with Fixed Header or Horizontal scroll responsive mode */
229
  .supsystic-tables-wrap .dataTables_scrollHeadInner, .supsystic-tables-wrap .dataTables_scrollFootInner {
230
- width: 100% !important;
231
- }
232
- .supsystic-tables-wrap .dataTables_scrollHeadInner table, .supsystic-tables-wrap .dataTables_scrollFootInner table {
233
- margin-left: auto !important;
234
  }
227
 
228
  /* Fix for using autowidth for tables with Fixed Header or Horizontal scroll responsive mode */
229
  .supsystic-tables-wrap .dataTables_scrollHeadInner, .supsystic-tables-wrap .dataTables_scrollFootInner {
230
+ margin: 0 auto !important;
 
 
 
231
  }
src/SupsysticTables/Tables/assets/css/tables.view.css CHANGED
@@ -199,7 +199,7 @@
199
  .tables-view .row-settings-tab.active {
200
  display: block;
201
  }
202
- .tables-view #settings input, .tables-view #settings select {
203
  width: 100% !important;
204
  }
205
  .tables-view #settings textarea {
@@ -232,6 +232,16 @@
232
  .setting-item + .setting-item {
233
  text-align: right;
234
  }
 
 
 
 
 
 
 
 
 
 
235
  .sub-input, .tables-view #settings .sub-input {
236
  width: 100px !important;
237
  margin-right: 8px;
@@ -262,19 +272,12 @@
262
  .tables-view .row-settings-tab .icheckbox_minimal, .tables-view .row-settings-tab .iradio_minimal {
263
  float: left;
264
  }
 
 
 
265
 
266
  #tableLoaderColorContainer {
267
- display: inline-block;
268
  float: left;
269
- width: 36px;
270
- height: 36px;
271
- padding: 3px;
272
- border: 1px solid;
273
- }
274
- .tableLoaderColorArea {
275
- display: inline-block;
276
- width: 100%;
277
- height: 100%;
278
  }
279
  .selectTableLoaderIcon {
280
  float: left;
@@ -339,6 +342,21 @@
339
  margin-bottom: 5px;
340
  }
341
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
342
  @media (max-width: 810px) {
343
  .wp-core-ui .button {
344
  margin-bottom: 4px;
199
  .tables-view .row-settings-tab.active {
200
  display: block;
201
  }
202
+ .tables-view #settings input, .tables-view #settings select, .history-settings input, .history-settings select {
203
  width: 100% !important;
204
  }
205
  .tables-view #settings textarea {
232
  .setting-item + .setting-item {
233
  text-align: right;
234
  }
235
+ .setting-item label {
236
+ height: 33px;
237
+ line-height: 33px;
238
+ }
239
+ .setting-item select {
240
+ height: 33px;
241
+ }
242
+ .setting-item .fa-question.supsystic-tooltip {
243
+ margin-top: 8px;
244
+ }
245
  .sub-input, .tables-view #settings .sub-input {
246
  width: 100px !important;
247
  margin-right: 8px;
272
  .tables-view .row-settings-tab .icheckbox_minimal, .tables-view .row-settings-tab .iradio_minimal {
273
  float: left;
274
  }
275
+ .tables-view .row-settings-tab .icheckbox_minimal {
276
+ margin-top: 8px;
277
+ }
278
 
279
  #tableLoaderColorContainer {
 
280
  float: left;
 
 
 
 
 
 
 
 
 
281
  }
282
  .selectTableLoaderIcon {
283
  float: left;
342
  margin-bottom: 5px;
343
  }
344
 
345
+ /* styles for colorpicker elements */
346
+ .colorPickerShell {
347
+ display: inline-block;
348
+ width: 36px;
349
+ height: 36px;
350
+ padding: 3px;
351
+ border: 1px solid;
352
+ }
353
+ .colorPickerArea {
354
+ display: inline-block;
355
+ width: 100%;
356
+ height: 100%;
357
+ border: 1px solid;
358
+ }
359
+
360
  @media (max-width: 810px) {
361
  .wp-core-ui .button {
362
  margin-bottom: 4px;
src/SupsysticTables/Tables/assets/img/conditional_formatting_dialog.png ADDED
Binary file
src/SupsysticTables/Tables/assets/js/editor/tables.editor.formula.js CHANGED
@@ -72,6 +72,6 @@
72
  })();
73
 
74
  app.Editor = app.Editor || {};
75
- app.Editor.Formula = Formula;
76
 
77
  }(window.jQuery, window.supsystic.Tables));
72
  })();
73
 
74
  app.Editor = app.Editor || {};
75
+ app.Editor._Formula = Formula;
76
 
77
  }(window.jQuery, window.supsystic.Tables));
src/SupsysticTables/Tables/assets/js/editor/tables.editor.js CHANGED
@@ -4,6 +4,7 @@ g_stbWindowHeight = 0;
4
  g_stbWindowHeight = $(window).width() > 810 ? $(window).height() * 0.7 : $(window).height(); // 810px is mobile responsive width
5
 
6
  var tableId = app.getParameterByName('id'),
 
7
  editor = new Handsontable(document.getElementById('tableEditor'), {
8
  height: g_stbWindowHeight,
9
  renderAllRows: false, // To prevent losing of rows for huge tables (need to check in future is it all right now?)
@@ -18,19 +19,21 @@ g_stbWindowHeight = 0;
18
  /*fillHandle: {
19
  autoInsertRow: false // Disable adding of new row during drag-down cell via right bottom corner
20
  },*/
21
- manualColumnResize: true,
22
  manualRowResize: true,
 
 
 
23
  mergeCells: true,
24
  outsideClickDeselects: false,
25
  undo: true,
26
- renderer: Handsontable.renderers.DefaultRenderer,
27
  startCols: app.getParameterByName('cols') || 5,
28
  startRows: app.getParameterByName('rows') || 5,
29
  currentRowClassName: 'current',
30
  currentColClassName: 'current'
31
  }),
32
  toolbar = new app.Editor.Toolbar('#tableToolbar', editor),
33
- formula = new app.Editor.Formula(editor);
34
 
35
  window.editor = editor;
36
  app.Editor.Hot = editor;
@@ -156,6 +159,12 @@ g_stbWindowHeight = 0;
156
  generateWidthData();
157
  editor.allWidths.splice(column, 1, width);
158
  });
 
 
 
 
 
 
159
  editor.addHook('afterCopy', function (changes, copyCoords) {
160
  collectCellsMetaData(changes, copyCoords);
161
  });
@@ -176,6 +185,28 @@ g_stbWindowHeight = 0;
176
  j = 0;
177
  }
178
  if(g_stbCopyPasteCellsMetaData[j]) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
179
  editor.setCellMetaObject(row, col, g_stbCopyPasteCellsMetaData[j]);
180
  j++;
181
  }
@@ -193,44 +224,47 @@ g_stbWindowHeight = 0;
193
  }
194
  };
195
  Handsontable.renderers.DefaultRenderer = function(instance,td,row,col,prop,value,cellProperties) {
196
- var cellMeta = instance.getCellMeta(row,row);
197
 
198
- if(app.Models.Tables.isFormula(value)) {
199
  Handsontable.TextCell.renderer.apply(this,arguments);
200
- value = app.Models.Tables.getFormulaResult(value,row,col);
201
  }
202
-
203
- if(instance.useNumberFormat && (app.Models.Tables.isNumber(value) || cellMeta.formatType == 'number')) {
 
 
 
204
  Handsontable.renderers.NumberRenderer.call(this,instance,td,row,col,prop,value,cellProperties);
205
  } else {
206
  Handsontable.renderers.CustomHtmlRenderer.call(this,instance,td,row,col,prop,value,cellProperties);
207
  }
208
  };
209
  Handsontable.renderers.NumberRenderer = function(instance,td,row,col,prop,value,cellProperties) {
210
- value = app.Models.Tables.setCellFormat(value,'number');
211
 
212
  Handsontable.renderers.CustomHtmlRenderer.call(this,instance,td,row,col,prop,value,cellProperties);
213
  };
214
  Handsontable.renderers.CurrencyRenderer = function(instance,td,row,col,prop,value,cellProperties) {
215
  if(value) {
216
- if(app.Models.Tables.isFormula(value)) {
217
  Handsontable.TextCell.renderer.apply(this,arguments);
218
- value = app.Models.Tables.getFormulaResult(value,row,col);
219
  }
220
 
221
- value = app.Models.Tables.setCellFormat(value,'currency');
222
  }
223
 
224
  Handsontable.renderers.CustomHtmlRenderer.call(this,instance,td,row,col,prop,value,cellProperties);
225
  };
226
  Handsontable.renderers.PercentRenderer = function(instance,td,row,col,prop,value,cellProperties) {
227
  if(value) {
228
- if(app.Models.Tables.isFormula(value)) {
229
  Handsontable.TextCell.renderer.apply(this,arguments);
230
- value = app.Models.Tables.getFormulaResult(value,row,col);
231
  }
232
 
233
- value = app.Models.Tables.setCellFormat(value,'percent');
234
  }
235
 
236
  Handsontable.renderers.CustomHtmlRenderer.call(this,instance,td,row,col,prop,value,cellProperties);
@@ -242,7 +276,7 @@ g_stbWindowHeight = 0;
242
  // To show percents as is if it is pure number
243
  var formatType = this.cellProperties.formatType || '',value = this.originalValue;
244
 
245
- if(app.Models.Tables.isNumber(value) && !app.Models.Tables.isFormula(value)) {
246
  if(formatType == 'percent') {
247
  value = (value * 100).toString();
248
  }
@@ -256,7 +290,7 @@ g_stbWindowHeight = 0;
256
  // Correct save of percent values
257
  var type = this.cellProperties.type || '',formatType = this.cellProperties.formatType || '',value = val[0][0];
258
 
259
- if(app.Models.Tables.isNumber(value) && !app.Models.Tables.isFormula(value)) {
260
  if(formatType == 'percent' && type != 'dropdown') {
261
  value = (value / 100).toString();
262
  }
@@ -288,7 +322,7 @@ g_stbWindowHeight = 0;
288
  var formatType = this.cellProperties.formatType || '',source = this.cellProperties.source || [];
289
 
290
  for(var i = 0; i < source.length; i++) {
291
- if(app.Models.Tables.isNumber(source[i]) && !app.Models.Tables.isFormula(source[i])) {
292
  if(formatType == 'percent') {
293
  source[i] = (source[i] * 100).toString();
294
  }
@@ -301,13 +335,13 @@ g_stbWindowHeight = 0;
301
  // Correct save of percent values
302
  var type = this.cellProperties.type || '',formatType = this.cellProperties.formatType || '',source = this.cellProperties.source || [],value = val[0][0];
303
 
304
- if(app.Models.Tables.isNumber(value) && !app.Models.Tables.isFormula(value)) {
305
  if(formatType == 'percent') {
306
  value = (value / 100).toString();
307
  }
308
  }
309
  for(var i = 0; i < source.length; i++) {
310
- if(app.Models.Tables.isNumber(source[i]) && !app.Models.Tables.isFormula(source[i])) {
311
  if(formatType == 'percent') {
312
  source[i] = (source[i] / 100).toString();
313
  }
@@ -320,181 +354,10 @@ g_stbWindowHeight = 0;
320
 
321
  // Load table data to editor
322
  $.when(
323
- app.Models.Tables.getMeta(tableId),
324
- app.Models.Tables.getRows(tableId)
325
  ).done(function (metaResponse, rowsResponse) {
326
- var rows = rowsResponse[0].rows,
327
- meta = metaResponse[0].meta,
328
- comments = [];
329
-
330
- // Set merged cells
331
- if (typeof meta === 'object' && 'mergedCells' in meta && meta.mergedCells.length) {
332
- editor.updateSettings({
333
- mergeCells: meta.mergedCells
334
- });
335
- }
336
-
337
- // Set rows data
338
- if (rows.length > 0) {
339
- var data = [],
340
- cellMeta = [],
341
- heights = [],
342
- widths = [],
343
- $style = getAdminCellStylesElem();
344
-
345
- $.each(rows, function (x, row) {
346
- var cells = [];
347
-
348
- heights.push(row.height || undefined);
349
-
350
- $.each(row.cells, function (y, cell) {
351
- var metaData = {};
352
-
353
- if ('meta' in cell && cell.meta !== undefined) {
354
- var classes = classesRegexp(),
355
- color = classes.color.exec(cell.meta),
356
- background = classes.background.exec(cell.meta),
357
- fontFamily = classes.fontFamily.exec(cell.meta),
358
- fontSize = classes.fontSize.exec(cell.meta);
359
-
360
- if (null !== color && $style.html().indexOf(color[0]) == -1) {
361
- $style.html($style.html() + ' .'+color[0]+' {color:#'+color[1]+' !important}');
362
- }
363
- if (null !== background && $style.html().indexOf(background[0]) == -1) {
364
- $style.html($style.html() + ' .'+background[0]+' {background-color:#'+background[1]+' !important}');
365
- }
366
- if (null !== fontFamily && $style.html().indexOf(fontFamily[0]) == -1) {
367
- var family = fontFamily[1].replace(/_/g, ' '),
368
- familyName = fontFamily[1].replace(/_/g, '+'),
369
- url = '';
370
-
371
- if(g_stbStandartFontsList && toeInArray(family, g_stbStandartFontsList) == -1) {
372
- url = '@import url("//fonts.googleapis.com/css?family=' + familyName + '"); ';
373
- }
374
- $style.html(url + $style.html() + ' .'+fontFamily[0]+' {font-family:"'+family+'" !important}');
375
- }
376
- if (null !== fontSize && $style.html().indexOf(fontSize[0]) == -1) {
377
- var lineHeight = +fontSize[1] + 6;
378
- $style.html($style.html() + ' .'+fontSize[0]+' {font-size:'+fontSize[1]+'px !important; line-height:'+lineHeight+'px !important;}');
379
- }
380
- metaData = $.extend(metaData, { row: x, col: y, className: cell.meta.join(' ') });
381
- }
382
- if (cell.formatType) {
383
- metaData = $.extend(metaData, {
384
- type: cell.type == 'numeric' ? 'text' : cell.type, // To remove numeric renderer
385
- format: cell.type == 'numeric' ? '' : cell.format,
386
- formatType: cell.type == 'numeric' ? '' : cell.formatType
387
- });
388
- } else {
389
- if(app.Models.Tables.isNumber(cell.data)) {
390
- metaData = $.extend(metaData, {
391
- type: 'text',
392
- format: '',
393
- formatType: 'number'
394
- });
395
- }
396
- }
397
- // selectable cell data source
398
- if(cell.source && cell.source.length) {
399
- metaData.source = cell.source;
400
- metaData.baseType = cell.baseType;
401
- }
402
- switch(cell.formatType) {
403
- case 'currency':
404
- metaData.renderer = Handsontable.renderers.CurrencyRenderer;
405
- break;
406
- case 'percent':
407
- metaData.renderer = Handsontable.renderers.PercentRenderer;
408
- break;
409
- case 'date':
410
- //one table can contain multiple date formats
411
- metaData.format = cell.format;
412
- metaData.dateFormat = cell.format;
413
- metaData.correctFormat = true;
414
-
415
- if(cell.reformat) {
416
- var newDate = moment(cell.data, cell.format);
417
-
418
- if (newDate.isValid()) {
419
- cell.data = newDate.format($('input[name="dateFormat"]').val());
420
- }
421
- }
422
- break;
423
- case 'time_duration':
424
- if(cell.reformat) {
425
- var cellFormat = $('input[name="timeDurationFormat"]').val(),
426
- newTime = moment(cell.data, cell.format);
427
-
428
- if (newTime.isValid()) {
429
- cell.data = newTime.format(cellFormat);
430
- } else {
431
- var duration = cell.data.match(/.{1,2}/g);
432
-
433
- newTime = moment.duration({
434
- seconds: duration[2] || 0,
435
- minutes: duration[1] || 0,
436
- hours: duration[0] || 0,
437
- days: 0,
438
- weeks: 0,
439
- months: 0,
440
- years: 0
441
- });
442
-
443
- if (newTime._milliseconds || cell.data == 0) {
444
- cell.data = newTime.format(cellFormat);
445
- }
446
- }
447
- }
448
- break;
449
- default:
450
- metaData.renderer = Handsontable.renderers.DefaultRenderer;
451
- break;
452
- }
453
- cellMeta.push(metaData);
454
-
455
- if (x === 0 && meta.columnsWidth) {
456
- widths.push(meta.columnsWidth[y] > 0 ? meta.columnsWidth[y] : 62);
457
- } else if (x === 0 ) {
458
- // Old
459
- widths.push(cell.width === undefined ? 62 : cell.width);
460
- }
461
- g_stbFixedColumnsWidth = meta.columnsFixedWidth || g_stbFixedColumnsWidth;
462
- g_stbMultipleColumnsSorting = meta.columnsSortOrder || g_stbMultipleColumnsSorting;
463
- g_stbDisableColumnsSorting = meta.columnsDisableSorting || g_stbDisableColumnsSorting;
464
-
465
- if (typeof(cell.comment) != 'undefined') {
466
- comments.push({
467
- col: y,
468
- row: x,
469
- comment: cell.comment
470
- });
471
- }
472
- cells.push(cell.data);
473
- });
474
- data.push(cells);
475
- });
476
-
477
- // Height & width
478
- editor.updateSettings({
479
- rowHeights: heights,
480
- colWidths: widths
481
- });
482
-
483
- // Load extracted data
484
- editor.loadData(data);
485
-
486
- // Comments. Note: comments need to be loaded after editor.loadData() call.
487
- if (comments.length) {
488
- editor.updateSettings({
489
- cell: comments
490
- });
491
- }
492
-
493
- // Load extracted metadata
494
- $.each(cellMeta, function (i, meta) {
495
- editor.setCellMetaObject(meta.row, meta.col, meta);
496
- });
497
- }
498
  }).fail(function (error) {
499
  alert('Failed to load table data: ' + error);
500
  }).always(function (response) {
4
  g_stbWindowHeight = $(window).width() > 810 ? $(window).height() * 0.7 : $(window).height(); // 810px is mobile responsive width
5
 
6
  var tableId = app.getParameterByName('id'),
7
+ tablesModel = app.Models.Tables,
8
  editor = new Handsontable(document.getElementById('tableEditor'), {
9
  height: g_stbWindowHeight,
10
  renderAllRows: false, // To prevent losing of rows for huge tables (need to check in future is it all right now?)
19
  /*fillHandle: {
20
  autoInsertRow: false // Disable adding of new row during drag-down cell via right bottom corner
21
  },*/
 
22
  manualRowResize: true,
23
+ manualColumnResize: true,
24
+ manualRowMove: true,
25
+ manualColumnMove: true,
26
  mergeCells: true,
27
  outsideClickDeselects: false,
28
  undo: true,
29
+ renderer: tablesModel.getDefaultRenderer(),
30
  startCols: app.getParameterByName('cols') || 5,
31
  startRows: app.getParameterByName('rows') || 5,
32
  currentRowClassName: 'current',
33
  currentColClassName: 'current'
34
  }),
35
  toolbar = new app.Editor.Toolbar('#tableToolbar', editor),
36
+ formula = new app.Editor._Formula(editor);
37
 
38
  window.editor = editor;
39
  app.Editor.Hot = editor;
159
  generateWidthData();
160
  editor.allWidths.splice(column, 1, width);
161
  });
162
+ editor.addHook('afterRowMove', function (rows, target) {
163
+ editor.render();
164
+ });
165
+ editor.addHook('afterColumnMove', function (columns, target) {
166
+ editor.render();
167
+ });
168
  editor.addHook('afterCopy', function (changes, copyCoords) {
169
  collectCellsMetaData(changes, copyCoords);
170
  });
185
  j = 0;
186
  }
187
  if(g_stbCopyPasteCellsMetaData[j]) {
188
+ var value = editor.getDataAtCell(row, col),
189
+ deltaRow = row - g_stbCopyPasteCellsMetaData[j].row,
190
+ deltaCol = col - g_stbCopyPasteCellsMetaData[j].col,
191
+ direction = '';
192
+
193
+ if(deltaRow) {
194
+ if(deltaRow > 0) {
195
+ direction = 'down';
196
+ } else {
197
+ direction = 'up';
198
+ }
199
+ value = editor.plugin.utils.updateFormula(value, direction, Math.abs(deltaRow));
200
+ }
201
+ if(deltaCol) {
202
+ if(deltaCol > 0) {
203
+ direction = 'right';
204
+ } else {
205
+ direction = 'left';
206
+ }
207
+ value = editor.plugin.utils.updateFormula(value, direction, Math.abs(deltaCol));
208
+ }
209
+ editor.setDataAtCell(row, col, value);
210
  editor.setCellMetaObject(row, col, g_stbCopyPasteCellsMetaData[j]);
211
  j++;
212
  }
224
  }
225
  };
226
  Handsontable.renderers.DefaultRenderer = function(instance,td,row,col,prop,value,cellProperties) {
227
+ var cellMeta = instance.getCellMeta(row, col);
228
 
229
+ if(tablesModel.isFormula(value)) {
230
  Handsontable.TextCell.renderer.apply(this,arguments);
231
+ value = tablesModel.getFormulaResult(value,row,col);
232
  }
233
+ if(cellProperties && cellProperties.formatType == 'currency') {
234
+ Handsontable.renderers.CurrencyRenderer.call(this,instance,td,row,col,prop,value,cellProperties);
235
+ } else if(cellProperties && cellProperties.formatType == 'percent') {
236
+ Handsontable.renderers.PercentRenderer.call(this,instance,td,row,col,prop,value,cellProperties);
237
+ } else if(instance.useNumberFormat && (tablesModel.isNumber(value) || cellMeta.formatType == 'number')) {
238
  Handsontable.renderers.NumberRenderer.call(this,instance,td,row,col,prop,value,cellProperties);
239
  } else {
240
  Handsontable.renderers.CustomHtmlRenderer.call(this,instance,td,row,col,prop,value,cellProperties);
241
  }
242
  };
243
  Handsontable.renderers.NumberRenderer = function(instance,td,row,col,prop,value,cellProperties) {
244
+ value = tablesModel.setCellFormat(value,'number');
245
 
246
  Handsontable.renderers.CustomHtmlRenderer.call(this,instance,td,row,col,prop,value,cellProperties);
247
  };
248
  Handsontable.renderers.CurrencyRenderer = function(instance,td,row,col,prop,value,cellProperties) {
249
  if(value) {
250
+ if(tablesModel.isFormula(value)) {
251
  Handsontable.TextCell.renderer.apply(this,arguments);
252
+ value = tablesModel.getFormulaResult(value,row,col);
253
  }
254
 
255
+ value = tablesModel.setCellFormat(value,'currency');
256
  }
257
 
258
  Handsontable.renderers.CustomHtmlRenderer.call(this,instance,td,row,col,prop,value,cellProperties);
259
  };
260
  Handsontable.renderers.PercentRenderer = function(instance,td,row,col,prop,value,cellProperties) {
261
  if(value) {
262
+ if(tablesModel.isFormula(value)) {
263
  Handsontable.TextCell.renderer.apply(this,arguments);
264
+ value = tablesModel.getFormulaResult(value,row,col);
265
  }
266
 
267
+ value = tablesModel.setCellFormat(value,'percent');
268
  }
269
 
270
  Handsontable.renderers.CustomHtmlRenderer.call(this,instance,td,row,col,prop,value,cellProperties);
276
  // To show percents as is if it is pure number
277
  var formatType = this.cellProperties.formatType || '',value = this.originalValue;
278
 
279
+ if(tablesModel.isNumber(value) && !tablesModel.isFormula(value)) {
280
  if(formatType == 'percent') {
281
  value = (value * 100).toString();
282
  }
290
  // Correct save of percent values
291
  var type = this.cellProperties.type || '',formatType = this.cellProperties.formatType || '',value = val[0][0];
292
 
293
+ if(tablesModel.isNumber(value) && !tablesModel.isFormula(value)) {
294
  if(formatType == 'percent' && type != 'dropdown') {
295
  value = (value / 100).toString();
296
  }
322
  var formatType = this.cellProperties.formatType || '',source = this.cellProperties.source || [];
323
 
324
  for(var i = 0; i < source.length; i++) {
325
+ if(tablesModel.isNumber(source[i]) && !tablesModel.isFormula(source[i])) {
326
  if(formatType == 'percent') {
327
  source[i] = (source[i] * 100).toString();
328
  }
335
  // Correct save of percent values
336
  var type = this.cellProperties.type || '',formatType = this.cellProperties.formatType || '',source = this.cellProperties.source || [],value = val[0][0];
337
 
338
+ if(tablesModel.isNumber(value) && !tablesModel.isFormula(value)) {
339
  if(formatType == 'percent') {
340
  value = (value / 100).toString();
341
  }
342
  }
343
  for(var i = 0; i < source.length; i++) {
344
+ if(tablesModel.isNumber(source[i]) && !tablesModel.isFormula(source[i])) {
345
  if(formatType == 'percent') {
346
  source[i] = (source[i] / 100).toString();
347
  }
354
 
355
  // Load table data to editor
356
  $.when(
357
+ tablesModel.getMeta(tableId),
358
+ tablesModel.getRows(tableId)
359
  ).done(function (metaResponse, rowsResponse) {
360
+ tablesModel.setTableData(metaResponse, rowsResponse);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
361
  }).fail(function (error) {
362
  alert('Failed to load table data: ' + error);
363
  }).always(function (response) {
src/SupsysticTables/Tables/assets/js/editor/tables.editor.toolbar.js CHANGED
@@ -178,7 +178,7 @@ var g_stbCellBgColorTimeoutSet = false,
178
  open: function() {
179
  var textForPopup = selectedText ? selectedText : cellText;
180
 
181
- textForPopup = $('<div>' + textForPopup + '</div>').text();
182
  $(this).find('.link-text').val(textForPopup);
183
  },
184
  close: function() {
@@ -310,13 +310,20 @@ var g_stbCellBgColorTimeoutSet = false,
310
  undo: function() {
311
  this.getEditor().undo();
312
  },
 
 
 
 
 
 
 
 
313
  setColumnWidth: function() {
314
  if(app.Editor.Hot.getSelectedRange()) {
315
  g_stbColumnWidthDialog.dialog('open');
316
  } else {
317
  alert('You must select at least one cell in column.');
318
  }
319
-
320
  },
321
  setMultipleColumnsSorting: function() {
322
  if(app.Editor.Hot.getSelectedRange()) {
@@ -380,7 +387,7 @@ var g_stbCellBgColorTimeoutSet = false,
380
  var cell = editor.getCellMeta(row, col),
381
  newClassName;
382
 
383
- cell.className = cell.className || '';
384
 
385
  if (cell.className.match(classNamePattern)) {
386
  newClassName = cell.className.replace(className, '');
@@ -436,9 +443,7 @@ var g_stbCellBgColorTimeoutSet = false,
436
  for (var row = startRow; row <= endRow; row++) {
437
  for (var col = startCol; col <= endCol; col++) {
438
  var cell = editor.getCellMeta(row, col);
439
-
440
- editor.setCellMeta(row, col, 'className', cell.className.replace(className, ' ')
441
- );
442
  }
443
  }
444
  };
@@ -455,7 +460,8 @@ var g_stbCellBgColorTimeoutSet = false,
455
  return text;
456
  };
457
  Toolbar.prototype.setFormat = function (formatType, format) {
458
- var editor = this.getEditor(),
 
459
  range = this.getValidRange(editor.getSelectedRange());
460
 
461
  if (range === undefined) {
@@ -475,26 +481,26 @@ var g_stbCellBgColorTimeoutSet = false,
475
 
476
  // Fix cell value if we switch cell type from Percent to Another One
477
  if (formatType != 'percent' && cell.formatType == 'percent') {
478
- if (!app.Models.Tables.isFormula(data)) {
479
  data = data * 100;
480
  }
481
  }
482
  switch(formatType) {
483
  case 'currency':
484
- cell.renderer = Handsontable.renderers.CurrencyRenderer;
485
  cellFormat = format.replace(editor.currencySymbol, '$');
486
  break;
487
  case 'percent':
488
- cell.renderer = Handsontable.renderers.PercentRenderer;
489
 
490
- if (!app.Models.Tables.isFormula(data)) {
491
  data = String(data).replace(/[^\d.-]/g, '');
492
  }
493
  break;
494
  case 'percent-convert':
495
- cell.renderer = Handsontable.renderers.PercentRenderer;
496
 
497
- if (!app.Models.Tables.isFormula(data)) {
498
  data = String(data).replace(/[^\d.-]/g, '');
499
 
500
  // Fix cell value for Percent format
@@ -528,7 +534,7 @@ var g_stbCellBgColorTimeoutSet = false,
528
  }
529
  break;
530
  default:
531
- cell.renderer = Handsontable.renderers.DefaultRenderer;
532
  break;
533
  }
534
 
178
  open: function() {
179
  var textForPopup = selectedText ? selectedText : cellText;
180
 
181
+ textForPopup = $('<div>' + textForPopup + '</div>').html();
182
  $(this).find('.link-text').val(textForPopup);
183
  },
184
  close: function() {
310
  undo: function() {
311
  this.getEditor().undo();
312
  },
313
+ addUnescapeHtml: function() {
314
+ this.replaceClass('unescapeHTML', ['unescapeHTML']);
315
+ this.getEditor().render();
316
+ },
317
+ removeUnescapeHtml: function() {
318
+ this.removeClass('unescapeHTML');
319
+ this.getEditor().render();
320
+ },
321
  setColumnWidth: function() {
322
  if(app.Editor.Hot.getSelectedRange()) {
323
  g_stbColumnWidthDialog.dialog('open');
324
  } else {
325
  alert('You must select at least one cell in column.');
326
  }
 
327
  },
328
  setMultipleColumnsSorting: function() {
329
  if(app.Editor.Hot.getSelectedRange()) {
387
  var cell = editor.getCellMeta(row, col),
388
  newClassName;
389
 
390
+ cell.className = typeof cell.className == 'string' ? cell.className : '';
391
 
392
  if (cell.className.match(classNamePattern)) {
393
  newClassName = cell.className.replace(className, '');
443
  for (var row = startRow; row <= endRow; row++) {
444
  for (var col = startCol; col <= endCol; col++) {
445
  var cell = editor.getCellMeta(row, col);
446
+ editor.setCellMeta(row, col, 'className', cell.className.replace(className, ' '));
 
 
447
  }
448
  }
449
  };
460
  return text;
461
  };
462
  Toolbar.prototype.setFormat = function (formatType, format) {
463
+ var tablesModel = app.Models.Tables,
464
+ editor = this.getEditor(),
465
  range = this.getValidRange(editor.getSelectedRange());
466
 
467
  if (range === undefined) {
481
 
482
  // Fix cell value if we switch cell type from Percent to Another One
483
  if (formatType != 'percent' && cell.formatType == 'percent') {
484
+ if (!tablesModel.isFormula(data)) {
485
  data = data * 100;
486
  }
487
  }
488
  switch(formatType) {
489
  case 'currency':
490
+ cell.renderer = tablesModel.getDefaultRenderer();
491
  cellFormat = format.replace(editor.currencySymbol, '$');
492
  break;
493
  case 'percent':
494
+ cell.renderer = tablesModel.getDefaultRenderer();
495
 
496
+ if (!tablesModel.isFormula(data)) {
497
  data = String(data).replace(/[^\d.-]/g, '');
498
  }
499
  break;
500
  case 'percent-convert':
501
+ cell.renderer = tablesModel.getDefaultRenderer();
502
 
503
+ if (!tablesModel.isFormula(data)) {
504
  data = String(data).replace(/[^\d.-]/g, '');
505
 
506
  // Fix cell value for Percent format
534
  }
535
  break;
536
  default:
537
+ cell.renderer = tablesModel.getDefaultRenderer();
538
  break;
539
  }
540
 
src/SupsysticTables/Tables/assets/js/tables.model.js CHANGED
@@ -1,14 +1,16 @@
 
 
1
  (function ($, app) {
2
 
3
  var TablesModel = (function () {
4
- function TablesModel() {}
5
-
6
- /**
7
- * Sends the request to the Tables module.
8
- * @param {string} action
9
- * @param {object} data
10
- * @returns {jQuery.Deferred.promise}
11
- */
12
  TablesModel.prototype.request = function (action, data) {
13
  return app.request({
14
  module: 'tables',
@@ -29,26 +31,7 @@
29
  }, data);
30
  };
31
 
32
- /**
33
- * Removes table by id.
34
- * @param {int} id
35
- * @returns {jQuery.Deferred.promise}
36
- */
37
- TablesModel.prototype.remove = function (id) {
38
- if (isNaN(id = parseInt(id))) {
39
- throw new Error('Invalid table id.');
40
- }
41
-
42
- return this.request('remove', { id: id });
43
- };
44
-
45
- /**
46
- * Renames table.
47
- * @param {int} id
48
- * @param {string} title
49
- * @returns {jQuery.Deferred.promise}
50
- */
51
- TablesModel.prototype.rename = function (id, title) {
52
  if (isNaN(id = parseInt(id))) {
53
  throw new Error('Invalid table id.');
54
  }
@@ -80,10 +63,6 @@
80
  return this.request('getRows', { id: id });
81
  };
82
 
83
- TablesModel.prototype.getTablesSettings = function () {
84
- return this.settingsRequest('getSettings',{});
85
- };
86
-
87
  TablesModel.prototype.setRows = function (id, rows, byPart, preview) {
88
  if (isNaN(id = parseInt(id))) {
89
  throw new Error('Invalid table id.');
@@ -104,7 +83,7 @@
104
  id: id,
105
  step: step,
106
  last: i == rowsChunks.length - 1 ? 1 : 0,
107
- rows: this.prepareData(rowsChunks[i]) })
108
  }
109
 
110
  $.each(rowsData, function (index, data) {
@@ -127,7 +106,7 @@
127
  });
128
  }
129
  } else {
130
- return this.request('updateRows', { id: id, rows: this.prepareData(rows) });
131
  }
132
  };
133
 
@@ -144,7 +123,26 @@
144
  throw new Error('Invalid table id.');
145
  }
146
 
147
- return this.request('updateMeta', { id: id, meta: this.prepareData(meta) })
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  };
149
 
150
  TablesModel.prototype.setHistorySettings = function (id, settings) {
@@ -157,66 +155,402 @@
157
  }
158
  };
159
 
160
- TablesModel.prototype.setSettings = function (id, settings) {
161
- if (isNaN(id = parseInt(id))) {
162
- throw new Error('Invalid table id.');
 
 
 
 
 
 
 
 
 
 
 
 
 
163
  }
164
 
165
- return this.request('saveSettings', { id: id, settings: settings.serialize() })
166
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
 
168
- TablesModel.prototype.getPreview = function (id, preview) {
169
- var container = preview instanceof $ ? preview : $(preview),
170
- table;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
171
 
172
- if(container.length) {
173
- container.html(app.createSpinner());
 
 
 
174
 
175
- return this.render(app.getParameterByName('id')).done(function(response) {
176
- container.empty().append($(response.table));
177
- table = container.find('table');
178
- app.initializeTable(table, app.showTable, function(table) {
179
- afterTablePreview(table);
 
 
180
  });
 
 
 
 
 
181
  });
182
  }
183
  };
184
 
185
- TablesModel.prototype.getPreviewHistoryTable = function (userId, preview) {
186
- var container = preview instanceof $ ? preview : $(preview),
187
- table;
188
 
189
- if(container.length) {
190
- container.html(app.createSpinner());
 
 
 
191
 
192
- return this.renderFormHistory(userId, app.getParameterByName('id')).done(function(response) {
193
- container.empty().append($(response.table));
194
- table = container.find('table');
195
- app.initializeTable(table, app.showTable, function(table) {
196
- afterTablePreview(table);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
197
  });
 
 
 
 
 
198
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
  }
200
  };
201
 
202
- TablesModel.prototype.prepareData = function (data, maxLength) {
203
- maxLength = maxLength ? maxLength : 200000;
204
 
205
- var dataToJson = JSON.stringify(data)
206
- , dataArray = [];
 
 
 
207
 
208
- if(dataToJson.length > maxLength) {
209
- while(dataToJson.length > maxLength) {
210
- var newStr = dataToJson.substr(0, maxLength);
211
 
212
- dataArray.push(newStr);
213
- dataToJson = dataToJson.replace(newStr, '');
 
 
 
 
 
 
 
 
 
 
 
214
  }
215
- dataArray.push(dataToJson);
 
216
 
217
- return dataArray;
218
- } else {
219
- return dataToJson;
 
 
 
 
 
 
 
 
 
 
 
 
220
  }
221
  };
222
 
@@ -228,7 +562,7 @@
228
  return this.request('render', { id: id });
229
  };
230
 
231
- TablesModel.prototype.renderFormHistory = function (userId, tableId) {
232
  if (isNaN(userId = parseInt(userId))) {
233
  throw new Error('Invalid user id.');
234
  }
@@ -236,7 +570,40 @@
236
  throw new Error('Invalid table id.');
237
  }
238
 
239
- return this.request('renderFromHistory', { user_id: userId, table_id: tableId });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
  };
241
 
242
  TablesModel.prototype.isNumber = function (value) {
@@ -248,6 +615,7 @@
248
 
249
  return false;
250
  };
 
251
  TablesModel.prototype.isFormula = function (value) {
252
  if (value) {
253
  if (value[0] === '=') {
@@ -256,22 +624,37 @@
256
  }
257
  return false;
258
  };
 
259
  TablesModel.prototype.getFormulaResult = function (value, row, col) {
260
- var cellId = app.Editor.Hot.plugin.utils.translateCellCoords({row: row, col: col}),
 
261
  formula = value.substr(1).toUpperCase(),
262
- result = false,
263
- newValue;
264
 
265
- app._currentFormula = formula;
266
- newValue = app.Editor.Hot.plugin.parse(formula, {row: row, col: col, id: cellId});
267
 
268
- if(!newValue.error) {
269
- result = newValue.result;
270
- } else {
271
- result = newValue.error;
 
 
 
 
 
 
 
272
  }
273
- return result;
 
 
 
 
 
 
274
  };
 
275
  TablesModel.prototype.setCellFormat = function(value, formatType) {
276
  if(value && this.isNumber(value) && !isNaN(value)) {
277
  var languageData = numeral.languageData(),
@@ -342,40 +725,68 @@
342
  return value;
343
  };
344
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
345
  return TablesModel;
346
  })();
347
 
348
  app.Models = app.Models || {};
 
349
  app.Models.Tables = new TablesModel();
350
- $.when( app.Models.Tables.getTablesSettings() ).then(function( data, textStatus, jqXHR ) {
351
- if(data.success) {
352
- app.Models.Tables.step = data.settings.table_step;
353
- }
354
- });
355
-
356
- function afterTablePreview(table) {
357
- if(SDT_DATA.isPro && typeof(app.createEditableFields) != 'function') { // for compatibility with old pro versions
358
- $.getScript(SDT_DATA.pluginsUrl + '/tables-generator-pro/src/SupsysticTablesPro/Tables/assets/js/frontend.pro.js');
359
- }
360
-
361
- // Fix of conflict with handsontable library - it triggers error if user makes click on link without href attribute
362
- var features = table.data('features');
363
 
364
- if(toeInArray('paging', features) != -1) {
365
- $('.dataTables_paginate .paginate_button').each(function() {
366
- $(this).attr('href', '#');
367
- $(this).attr('onclick', 'return false');
368
- });
369
- table.on('page.dt', function() {
370
- setTimeout(function() {
371
- $('.dataTables_paginate .paginate_button').each(function() {
372
- $(this).attr('href', '#');
373
- $(this).attr('onclick', 'return false');
374
- });
375
- }, 50);
376
-
377
- });
378
  }
379
- }
380
-
381
  }(window.jQuery, window.supsystic.Tables));
1
+ var g_stbDoSaving = false;
2
+ var g_stbPreviewTimeoutSet = false;
3
  (function ($, app) {
4
 
5
  var TablesModel = (function () {
6
+ function TablesModel() {
7
+ this.getEditor = function() {
8
+ return app.Editor.Hot;
9
+ };
10
+ this.getCssEditor = function() {
11
+ return window.ace.edit("css-editor");
12
+ };
13
+ }
14
  TablesModel.prototype.request = function (action, data) {
15
  return app.request({
16
  module: 'tables',
31
  }, data);
32
  };
33
 
34
+ TablesModel.prototype.renameTableRequest = function (id, title) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  if (isNaN(id = parseInt(id))) {
36
  throw new Error('Invalid table id.');
37
  }
63
  return this.request('getRows', { id: id });
64
  };
65
 
 
 
 
 
66
  TablesModel.prototype.setRows = function (id, rows, byPart, preview) {
67
  if (isNaN(id = parseInt(id))) {
68
  throw new Error('Invalid table id.');
83
  id: id,
84
  step: step,
85
  last: i == rowsChunks.length - 1 ? 1 : 0,
86
+ rows: this._prepareData(rowsChunks[i]) })
87
  }
88
 
89
  $.each(rowsData, function (index, data) {
106
  });
107
  }
108
  } else {
109
+ return this.request('updateRows', { id: id, rows: this._prepareData(rows) });
110
  }
111
  };
112
 
123
  throw new Error('Invalid table id.');
124
  }
125
 
126
+ return this.request('updateMeta', { id: id, meta: this._prepareData(meta) })
127
+ };
128
+
129
+ TablesModel.prototype.getSettings = function () {
130
+ return app.request({
131
+ module: 'settings',
132
+ action: 'getSettings'
133
+ }, {});
134
+ };
135
+
136
+ TablesModel.prototype.getTablesSettings = function () {
137
+ return this.settingsRequest('getSettings',{});
138
+ };
139
+
140
+ TablesModel.prototype.setSettings = function (id, settings) {
141
+ if (isNaN(id = parseInt(id))) {
142
+ throw new Error('Invalid table id.');
143
+ }
144
+
145
+ return this.request('saveSettings', { id: id, settings: settings.serialize() })
146
  };
147
 
148
  TablesModel.prototype.setHistorySettings = function (id, settings) {
155
  }
156
  };
157
 
158
+ TablesModel.prototype.getDefaultRenderer = function(preview) {
159
+ return Handsontable.renderers.DefaultRenderer;
160
+ };
161
+
162
+ TablesModel.prototype.setTableData = function(metaResponse, rowsResponse) {
163
+ var self = this,
164
+ editor = self.getEditor(),
165
+ rows = rowsResponse[0].rows,
166
+ meta = metaResponse[0].meta,
167
+ comments = [];
168
+
169
+ // Set merged cells
170
+ if (typeof meta === 'object' && 'mergedCells' in meta && meta.mergedCells.length) {
171
+ editor.updateSettings({
172
+ mergeCells: meta.mergedCells
173
+ });
174
  }
175
 
176
+ // Set rows data
177
+ if (rows.length > 0) {
178
+ var data = [],
179
+ cellsMeta = [],
180
+ heights = [],
181
+ widths = [],
182
+ $style = getAdminCellStylesElem();
183
+
184
+ $.each(rows, function (x, row) {
185
+ var cells = [];
186
+
187
+ heights.push(row.height || undefined);
188
+
189
+ $.each(row.cells, function (y, cell) {
190
+ var metaData = {};
191
+
192
+ if ('meta' in cell && cell.meta !== undefined) {
193
+ var classes = classesRegexp(),
194
+ color = classes.color.exec(cell.meta),
195
+ background = classes.background.exec(cell.meta),
196
+ fontFamily = classes.fontFamily.exec(cell.meta),
197
+ fontSize = classes.fontSize.exec(cell.meta);
198
+
199
+ if (null !== color && $style.html().indexOf(color[0]) == -1) {
200
+ $style.html($style.html() + ' .'+color[0]+' {color:#'+color[1]+' !important}');
201
+ }
202
+ if (null !== background && $style.html().indexOf(background[0]) == -1) {
203
+ $style.html($style.html() + ' .'+background[0]+' {background-color:#'+background[1]+' !important}');
204
+ }
205
+ if (null !== fontFamily && $style.html().indexOf(fontFamily[0]) == -1) {
206
+ var family = fontFamily[1].replace(/_/g, ' '),
207
+ familyName = fontFamily[1].replace(/_/g, '+'),
208
+ url = '';
209
+
210
+ if(g_stbStandartFontsList && toeInArray(family, g_stbStandartFontsList) == -1) {
211
+ url = '@import url("//fonts.googleapis.com/css?family=' + familyName + '"); ';
212
+ }
213
+ $style.html(url + $style.html() + ' .'+fontFamily[0]+' {font-family:"'+family+'" !important}');
214
+ }
215
+ if (null !== fontSize && $style.html().indexOf(fontSize[0]) == -1) {
216
+ var lineHeight = +fontSize[1] + 6;
217
+ $style.html($style.html() + ' .'+fontSize[0]+' {font-size:'+fontSize[1]+'px !important; line-height:'+lineHeight+'px !important;}');
218
+ }
219
+ metaData = $.extend(metaData, { row: x, col: y, className: cell.meta.join(' ') });
220
+ }
221
+ if (cell.formatType) {
222
+ metaData = $.extend(metaData, {
223
+ type: cell.type == 'numeric' ? 'text' : cell.type, // To remove numeric renderer
224
+ format: cell.type == 'numeric' ? '' : cell.format,
225
+ formatType: cell.type == 'numeric' ? '' : cell.formatType
226
+ });
227
+ } else {
228
+ if(app.Models.Tables.isNumber(cell.data)) {
229
+ metaData = $.extend(metaData, {
230
+ type: 'text',
231
+ format: '',
232
+ formatType: 'number'
233
+ });
234
+ }
235
+ }
236
+ // selectable cell data source
237
+ if(cell.source && cell.source.length) {
238
+ metaData.type = cell.type;
239
+ metaData.source = cell.source;
240
+ metaData.baseType = cell.baseType;
241
+ }
242
+ switch(cell.formatType) {
243
+ /*case 'currency':
244
+ metaData.renderer = Handsontable.renderers.CurrencyRenderer;
245
+ break;
246
+ case 'percent':
247
+ metaData.renderer = Handsontable.renderers.PercentRenderer;
248
+ break;*/
249
+ case 'date':
250
+ //one table can contain multiple date formats
251
+ metaData.format = cell.format;
252
+ metaData.dateFormat = cell.format;
253
+ metaData.correctFormat = true;
254
+
255
+ if(cell.reformat) {
256
+ var newDate = moment(cell.data, cell.format);
257
+
258
+ if (newDate.isValid()) {
259
+ cell.data = newDate.format($('input[name="dateFormat"]').val());
260
+ }
261
+ }
262
+ break;
263
+ case 'time_duration':
264
+ if(cell.reformat) {
265
+ var cellFormat = $('input[name="timeDurationFormat"]').val(),
266
+ newTime = moment(cell.data, cell.format);
267
+
268
+ if (newTime.isValid()) {
269
+ cell.data = newTime.format(cellFormat);
270
+ } else {
271
+ var duration = cell.data.match(/.{1,2}/g);
272
+
273
+ newTime = moment.duration({
274
+ seconds: duration[2] || 0,
275
+ minutes: duration[1] || 0,
276
+ hours: duration[0] || 0,
277
+ days: 0,
278
+ weeks: 0,
279
+ months: 0,
280
+ years: 0
281
+ });
282
+
283
+ if (newTime._milliseconds || cell.data == 0) {
284
+ cell.data = newTime.format(cellFormat);
285
+ }
286
+ }
287
+ }
288
+ break;
289
+ default:
290
+ metaData.renderer = self.getDefaultRenderer();
291
+ break;
292
+ }
293
+ cellsMeta.push(metaData);
294
 
295
+ if (x === 0 && meta.columnsWidth) {
296
+ widths.push(meta.columnsWidth[y] > 0 ? meta.columnsWidth[y] : 62);
297
+ } else if (x === 0 ) {
298
+ // Old
299
+ widths.push(cell.width === undefined ? 62 : cell.width);
300
+ }
301
+ g_stbFixedColumnsWidth = meta.columnsFixedWidth || g_stbFixedColumnsWidth;
302
+ g_stbMultipleColumnsSorting = meta.columnsSortOrder || g_stbMultipleColumnsSorting;
303
+ g_stbDisableColumnsSorting = meta.columnsDisableSorting || g_stbDisableColumnsSorting;
304
+
305
+ if (typeof(cell.comment) != 'undefined') {
306
+ comments.push({
307
+ col: y,
308
+ row: x,
309
+ comment: cell.comment
310
+ });
311
+ }
312
+ cells.push(cell.data);
313
+ });
314
+ data.push(cells);
315
+ });
316
 
317
+ // Height & width
318
+ editor.updateSettings({
319
+ rowHeights: heights,
320
+ colWidths: widths
321
+ });
322
 
323
+ // Load extracted data
324
+ editor.loadData(data);
325
+
326
+ // Comments. Note: comments need to be loaded after editor.loadData() call.
327
+ if (comments.length) {
328
+ editor.updateSettings({
329
+ cell: comments
330
  });
331
+ }
332
+
333
+ // Load extracted metadata
334
+ $.each(cellsMeta, function (i, meta) {
335
+ editor.setCellMetaObject(meta.row, meta.col, meta);
336
  });
337
  }
338
  };
339
 
340
+ TablesModel.prototype.saveTable = function(preview) {
341
+ this._saveTable(preview);
342
+ };
343
 
344
+ TablesModel.prototype._saveTable = function(preview) {
345
+ preview = typeof(preview) != 'undefined' ? preview : false;
346
+ var self = this,
347
+ editor = self.getEditor(),
348
+ id = app.getParameterByName('id');
349
 
350
+ if(!g_stbDoSaving) {
351
+ g_stbDoSaving = true;
352
+ app.createSpinner($('#buttonSave'));
353
+
354
+ var formData = $('form#settings'),
355
+ byPart = true,
356
+ metaData = [],
357
+ mergeData = [],
358
+ rowsData = [],
359
+ columnsWidth = [];
360
+
361
+ // Put textareas data into the hidden fields before the saving of table settings
362
+ formData.find('input[name="elements[descriptionText]"]').val( formData.find('#descriptionText').val() );
363
+ formData.find('input[name="elements[signatureText]"]').val( formData.find('#signatureText').val() );
364
+ formData.find('input[name="features[after_table_loaded_script]"]').val(this._b64EncodeUnicode(formData.find('#after-table-loaded-script-text').val()));
365
+
366
+ if(preview) {
367
+ var tableInstance = app.getTableInstanceById(id);
368
+
369
+ if(tableInstance) {
370
+ tableInstance.api().destroy();
371
+ $(preview).empty();
372
+ }
373
+ }
374
+ $.each(editor.getData(), function (x, row) {
375
+ var currentRow = { cells: [] };
376
+
377
+ $.each(row, function (y, cell) {
378
+ var meta = editor.getCellMeta(x, y),
379
+ cellHtml = $(editor.getCell(x, y)),
380
+ classes = [],
381
+ rowData = {
382
+ data: cell,
383
+ calculatedValue: null,
384
+ hidden: false,
385
+ hiddenCell: meta.className && meta.className.match('hiddenCell') !== null,
386
+ invisibleCell: meta.className && meta.className.match('invisibleCell') !== null
387
+ },
388
+ mergeCell = editor.mergeCells.mergedCellInfoCollection.getInfo(x, y);
389
+
390
+ // set merged params
391
+ if(mergeCell !== undefined) {
392
+ mergeData.push(mergeCell);
393
+ rowData.hidden = true;
394
+ }
395
+ // set formatted value
396
+ cellHtml = cellHtml.clone();
397
+ cellHtml.find('.htAutocompleteArrow').remove();
398
+ rowData.formattedValue = cellHtml.text();
399
+
400
+ // selectable cell data source
401
+ if(meta.source && meta.source.length) {
402
+ meta.type = 'dropdown';
403
+ rowData.source = meta.source;
404
+ }
405
+
406
+ // Set cell format
407
+ rowData.type = meta.type ? meta.type : 'text';
408
+ rowData.baseType = meta.baseType ? meta.baseType : 'text';
409
+ rowData.formatType = meta.formatType ? meta.formatType : '';
410
+
411
+ switch(rowData.formatType) {
412
+ case 'currency':
413
+ rowData.format = formData.find('[name="currencyFormat"]').val();
414
+ break;
415
+ case 'percent':
416
+ rowData.format = formData.find('[name="percentFormat"]').val();
417
+ break;
418
+ case 'date':
419
+ //one table can contain multiple date formats
420
+ rowData.format = meta.format != 'undefined'
421
+ ? meta.format
422
+ : formData.find('[name="dateFormat"]').val();
423
+
424
+ var date = moment(rowData.data, rowData.format);
425
+
426
+ if (date.isValid()) {
427
+ rowData.dateOrder = date.format('x');
428
+ }
429
+ break;
430
+ default:
431
+ rowData.format = meta.format;
432
+ break;
433
+ }
434
+
435
+ // Set calculated value for cells with formulas
436
+ if (self.isFormula(cell)) {
437
+ var value = self.getFormulaResult(cell, x, y);
438
+
439
+ if (value !== undefined) {
440
+ if (!isNaN(value) && value !== '0' && value !== 0 && value % 1 !== 0) { // round float
441
+ var floatValue = parseFloat(value);
442
+
443
+ if (floatValue.toString().indexOf('.') !== -1) {
444
+ var afterPointSybolsLength = floatValue.toString().split('.')[1].length;
445
+
446
+ if (afterPointSybolsLength > 4) {
447
+ value = floatValue.toFixed(4);
448
+ }
449
+ }
450
+ }
451
+ rowData.calculatedValue = value;
452
+ }
453
+ }
454
+
455
+ // Set classes for cell
456
+ if (meta.className !== undefined) {
457
+ $.each(meta.className.split(' '), function (index, element) {
458
+ if (element.length) {
459
+ classes.push($.trim(element));
460
+ }
461
+ });
462
+ }
463
+ rowData.meta = classes;
464
+
465
+ // Set comments for cell
466
+ if (typeof(meta.comment) != 'undefined') {
467
+ rowData.comment = meta.comment;
468
+ }
469
+
470
+ // Set column width by cells of first table row
471
+ if (x == 0) {
472
+ columnsWidth.push(editor.getColWidth(y));
473
+ }
474
+
475
+ currentRow.cells.push(rowData);
476
  });
477
+
478
+ // Row height
479
+ currentRow.height = editor.getRowHeight(x);
480
+
481
+ rowsData.push(currentRow);
482
  });
483
+
484
+ metaData = {
485
+ mergedCells: mergeData,
486
+ columnsWidth: columnsWidth,
487
+ columnsFixedWidth: g_stbFixedColumnsWidth,
488
+ columnsSortOrder: g_stbMultipleColumnsSorting,
489
+ columnsDisableSorting: g_stbDisableColumnsSorting,
490
+ css: this.getCssEditor().getValue()
491
+ };
492
+
493
+ // Request to save settings, meta and rows
494
+ $.when(
495
+ self.setSettings(id, formData),
496
+ self.setHistorySettings(id, $('form#history-settings')),
497
+ self.setMeta(id, metaData)
498
+ ).then(
499
+ function() {
500
+ self.setRows(id, rowsData, byPart, preview);
501
+ }
502
+ );
503
+ } else {
504
+ if(preview && !g_stbPreviewTimeoutSet) {
505
+ this.getPreview(id, preview);
506
+ }
507
  }
508
  };
509
 
510
+ TablesModel.prototype.getPreview = function (id, preview) {
511
+ var self = this;
512
 
513
+ if(g_stbDoSaving) {
514
+ g_stbPreviewTimeoutSet = true;
515
+ setTimeout(function() {
516
+ self.getPreview(id, preview);
517
+ }, 50);
518
 
519
+ } else {
520
+ g_stbPreviewTimeoutSet = false;
 
521
 
522
+ var container = preview instanceof $ ? preview : $(preview),
523
+ table;
524
+
525
+ if(container.length) {
526
+ container.html(app.createSpinner());
527
+
528
+ return this.render(app.getParameterByName('id')).done(function(response) {
529
+ container.empty().append($(response.table));
530
+ table = container.find('table');
531
+ app.initializeTable(table, app.showTable, function(table) {
532
+ self._afterTablePreview(table);
533
+ });
534
+ });
535
  }
536
+ }
537
+ };
538
 
539
+ TablesModel.prototype.getPreviewHistoryTable = function (userId, preview, period) {
540
+ var self = this,
541
+ container = preview instanceof $ ? preview : $(preview),
542
+ table;
543
+
544
+ if(container.length) {
545
+ container.html(app.createSpinner());
546
+
547
+ return this.renderFromHistory(userId, app.getParameterByName('id'), period).done(function(response) {
548
+ container.empty().append($(response.table));
549
+ table = container.find('table');
550
+ app.initializeTable(table, app.showTable, function(table) {
551
+ self._afterTablePreview(table);
552
+ });
553
+ });
554
  }
555
  };
556
 
562
  return this.request('render', { id: id });
563
  };
564
 
565
+ TablesModel.prototype.renderFromHistory = function (userId, tableId, period) {
566
  if (isNaN(userId = parseInt(userId))) {
567
  throw new Error('Invalid user id.');
568
  }
570
  throw new Error('Invalid table id.');
571
  }
572
 
573
+ return this.request('renderFromHistory', { user_id: userId, table_id: tableId, period: period });
574
+ };
575
+
576
+ TablesModel.prototype.renameTable = function (id, title) {
577
+ var $labelShell = $('#stbTableTitleShell'),
578
+ $labelHtml = $('#stbTableTitleLabel'),
579
+ $labelTxt = $('#stbTableTitleTxt');
580
+
581
+ if($labelShell.data('sending')) return;
582
+ if(!$labelTxt.data('ready')) return;
583
+ $labelShell.data('sending', 1);
584
+ app.createSpinner($labelShell);
585
+ this.renameTableRequest(app.getParameterByName('id'), $labelTxt.val())
586
+ .done(function (res) {
587
+ if(!res.error) {
588
+ $labelHtml.html( $.trim($labelTxt.val()) );
589
+ $labelTxt.hide( g_stbAnimationSpeed ).data('ready', 0);
590
+ $labelHtml.show( g_stbAnimationSpeed );
591
+ $labelShell.data('edit-on', 0);
592
+ }
593
+ $labelShell.data('sending', 0);
594
+ app.deleteSpinner($labelShell);
595
+ })
596
+ .fail(function (error) {
597
+ $('#stbTableTitleEditMsg').html('Failed to rename table: ' + error);
598
+ });
599
+ };
600
+
601
+ TablesModel.prototype.remove = function (id) {
602
+ if (isNaN(id = parseInt(id))) {
603
+ throw new Error('Invalid table id.');
604
+ }
605
+
606
+ return this.request('remove', { id: id });
607
  };
608
 
609
  TablesModel.prototype.isNumber = function (value) {
615
 
616
  return false;
617
  };
618
+
619
  TablesModel.prototype.isFormula = function (value) {
620
  if (value) {
621
  if (value[0] === '=') {
624
  }
625
  return false;
626
  };
627
+
628
  TablesModel.prototype.getFormulaResult = function (value, row, col) {
629
+ var plugin = app.Editor.Hot.plugin,
630
+ cellId = plugin.utils.translateCellCoords({row: row, col: col}),
631
  formula = value.substr(1).toUpperCase(),
632
+ newValue = plugin.parse(formula, {row: row, col: col, id: cellId});
 
633
 
634
+ // check if update needed
635
+ var needUpdate = (newValue.error === '#NEED_UPDATE');
636
 
637
+ if (newValue.error && formula.indexOf('IFERROR') > -1) {
638
+ var matches = formula.match(/\((\(*.*\)*),(\(*.*\)*)\)$/);
639
+
640
+ if (matches) {
641
+ var secondParse = plugin.parse(matches[2], {row: row, col: col, id: cellId});
642
+
643
+ if (!secondParse.error) {
644
+ newValue.error = null;
645
+ newValue.result = secondParse.result;
646
+ }
647
+ }
648
  }
649
+ // update item value and error
650
+ plugin.matrix.updateItem(
651
+ plugin.matrix.addItem({ id: cellId, formula: formula }),
652
+ { value: newValue.result, error: newValue.error, needUpdate: needUpdate }
653
+ );
654
+ // update cell value in hot
655
+ return newValue.error ? newValue.error : newValue.result;
656
  };
657
+
658
  TablesModel.prototype.setCellFormat = function(value, formatType) {
659
  if(value && this.isNumber(value) && !isNaN(value)) {
660
  var languageData = numeral.languageData(),
725
  return value;
726
  };
727
 
728
+ TablesModel.prototype._prepareData = function (data, maxLength) {
729
+ maxLength = maxLength ? maxLength : 200000;
730
+
731
+ var dataToJson = JSON.stringify(data)
732
+ , dataArray = [];
733
+
734
+ if(dataToJson.length > maxLength) {
735
+ while(dataToJson.length > maxLength) {
736
+ var newStr = dataToJson.substr(0, maxLength);
737
+
738
+ dataArray.push(newStr);
739
+ dataToJson = dataToJson.replace(newStr, '');
740
+ }
741
+ dataArray.push(dataToJson);
742
+
743
+ return dataArray;
744
+ } else {
745
+ return dataToJson;
746
+ }
747
+ };
748
+
749
+ TablesModel.prototype._afterTablePreview = function(table) {
750
+ if(SDT_DATA.isPro && typeof(app.createEditableFields) != 'function') { // for compatibility with old pro versions
751
+ $.getScript(SDT_DATA.pluginsUrl + '/tables-generator-pro/src/SupsysticTablesPro/Tables/assets/js/frontend.pro.js');
752
+ }
753
+
754
+ // Fix of conflict with handsontable library - it triggers error if user makes click on link without href attribute
755
+ var features = table.data('features');
756
+
757
+ if(toeInArray('paging', features) != -1) {
758
+ $('.dataTables_paginate .paginate_button').each(function() {
759
+ $(this).attr('href', '#');
760
+ $(this).attr('onclick', 'return false');
761
+ });
762
+ table.on('page.dt', function() {
763
+ setTimeout(function() {
764
+ $('.dataTables_paginate .paginate_button').each(function() {
765
+ $(this).attr('href', '#');
766
+ $(this).attr('onclick', 'return false');
767
+ });
768
+ }, 50);
769
+
770
+ });
771
+ }
772
+ };
773
+
774
+ TablesModel.prototype._b64EncodeUnicode = function(str) {
775
+ return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
776
+ return String.fromCharCode('0x' + p1);
777
+ }));
778
+ };
779
+
780
  return TablesModel;
781
  })();
782
 
783
  app.Models = app.Models || {};
784
+ app.Models._Tables = TablesModel;
785
  app.Models.Tables = new TablesModel();
 
 
 
 
 
 
 
 
 
 
 
 
 
786
 
787
+ $.when( app.Models.Tables.getTablesSettings() ).then(function( data, textStatus, jqXHR ) {
788
+ if(data.success) {
789
+ app.Models.Tables.step = data.settings.table_step;
 
 
 
 
 
 
 
 
 
 
 
790
  }
791
+ });
 
792
  }(window.jQuery, window.supsystic.Tables));
src/SupsysticTables/Tables/assets/js/tables.shortcode.js CHANGED
@@ -49,9 +49,15 @@
49
  });
50
  }
51
  }
 
 
 
 
 
52
  });
53
  });
54
  });
 
55
  function getOriginalImageSizes(img) {
56
  var tempImage = new Image(),
57
  width,
49
  });
50
  }
51
  }
52
+ if(typeof app.getTableInstanceById(table.data('id')).fnAdjustColumnSizing == 'function' ) {
53
+ setTimeout(function(){
54
+ app.getTableInstanceById(table.data('id')).fnAdjustColumnSizing();
55
+ }, 350);
56
+ }
57
  });
58
  });
59
  });
60
+
61
  function getOriginalImageSizes(img) {
62
  var tempImage = new Image(),
63
  width,
src/SupsysticTables/Tables/assets/js/tables.view.js CHANGED
@@ -1,22 +1,27 @@
1
- var g_stbDoSaving = false;
2
- var g_stbPreviewTimeoutSet = false;
3
  var g_stbAnimationSpeed = 300;
 
 
 
4
  var g_stbFixedColumnsWidth = [];
 
 
5
  var g_stbMultipleColumnsSorting = [];
6
  var g_stbDisableColumnsSorting = [];
7
- var g_stbTableLoaderBgColorTimeoutSet = false;
8
- var g_stbTableLoaderBgColorLast = '';
9
- var g_stbColumnWidthDialog;
10
  var g_stbMultipleColumnsSortingDialog;
 
11
  var g_stbTableLoaderIconDialog;
12
- var g_stbCloneDialog;
 
 
 
13
  var g_stbCopyPasteCellsMetaData = [];
14
  var g_stbCopyPasteRowsCount = [];
15
  var g_stbCopyPasteColsCount = [];
16
  (function ($, app, undefined) {
17
  $(document).ready(function () {
18
- var ace = window.ace.edit("css-editor"),
19
- editor = window.editor;
 
20
 
21
  // Initialize Main Tabs
22
  var $mainTabsContent = $('.row-tab'),
@@ -24,7 +29,6 @@ var g_stbCopyPasteColsCount = [];
24
  $currentTab = $mainTabs.filter('.current').attr('href');
25
 
26
  $mainTabsContent.filter($currentTab).addClass('active');
27
-
28
  $mainTabs.on('click', function (e) {
29
  e.preventDefault();
30
 
@@ -41,7 +45,7 @@ var g_stbCopyPasteColsCount = [];
41
  editor.render();
42
  break;
43
  case '#row-tab-preview':
44
- saveTable('#table-preview');
45
  break;
46
  default:
47
  break;
@@ -76,8 +80,8 @@ var g_stbCopyPasteColsCount = [];
76
  });
77
 
78
  // Configure CSS Editor
79
- ace.setTheme("ace/theme/monokai");
80
- ace.getSession().setMode("ace/mode/css");
81
 
82
  // Make editors responsive for window height
83
  $('#tableEditor, #css-editor').css({
@@ -114,10 +118,10 @@ var g_stbCopyPasteColsCount = [];
114
  }
115
  });
116
  $('#stbTableTitleTxt').blur(function(){
117
- stbRenameTable( $(this).val() );
118
  }).keydown(function(e){
119
  if(e.keyCode == 13) { // Enter pressed
120
- stbRenameTable( $(this).val() );
121
  }
122
  });
123
 
@@ -148,7 +152,7 @@ var g_stbCopyPasteColsCount = [];
148
  $this.find('input[name="columnWidth"]').val('');
149
  },
150
  buttons: {
151
- Apply: function (event) {
152
  var $this = $(this),
153
  editor = window.editor,
154
  selection = editor.getSelectedRange(),
@@ -161,7 +165,7 @@ var g_stbCopyPasteColsCount = [];
161
  }
162
  $(this).dialog('close');
163
  },
164
- 'Clear Fixed Width': function (event) {
165
  if (confirm('Are you sure you want to clear wixed width for all columns?')) {
166
  g_stbFixedColumnsWidth = [];
167
  $(this).dialog('close');
@@ -207,7 +211,7 @@ var g_stbCopyPasteColsCount = [];
207
  $this.find('#disableSortOrderData').html(disableSortOrder);
208
  },
209
  buttons: {
210
- Apply: function (event) {
211
  var $this = $(this),
212
  editor = window.editor,
213
  selection = editor.getSelectedRange(),
@@ -233,13 +237,13 @@ var g_stbCopyPasteColsCount = [];
233
 
234
  $(this).dialog('close');
235
  },
236
- 'Clear Multiple Sorting': function (event) {
237
  if (confirm('Are you sure you want to clear multiple sorting for all columns?')) {
238
  g_stbMultipleColumnsSorting = [];
239
  $(this).dialog('close');
240
  }
241
  },
242
- 'Clear Disable Sorting': function (event) {
243
  if (confirm('Are you sure you want to clear disable sorting for all columns?')) {
244
  g_stbDisableColumnsSorting = [];
245
  $(this).dialog('close');
@@ -278,18 +282,18 @@ var g_stbCopyPasteColsCount = [];
278
  dialog.next().find('button:first-of-type').html('Clone').show();
279
  },
280
  buttons: {
281
- Clone: function (event) {
282
  var $dialog = $(this),
283
- $button = $(event.target).closest('button');
284
 
285
  $button.attr('disabled', true);
286
  $button.html(app.createSpinner());
287
- app.Models.Tables.request('cloneTable', {
288
  id: app.getParameterByName('id'),
289
  title: $(this).find('input').val()
290
  }).done(function(response) {
291
  if (response.success) {
292
- var html = '<a href="' + app.replaceParameterByName(window.location.href, 'id', response.id) + '" class="ui-button" style="padding-top: 8px !important; padding-bottom: 8px !important; text-decoration: none !important;">Open cloned table</a><div style="float: right; margin-top: 5px;">Done!</div>';
293
 
294
  $button.hide();
295
  $dialog.find('.input-group').hide();
@@ -308,7 +312,7 @@ var g_stbCopyPasteColsCount = [];
308
  g_stbCloneDialog.dialog('open');
309
  });
310
  $('#buttonSave').on('click', function () {
311
- saveTable();
312
  });
313
  $('#buttonDelete').on('click', function () {
314
  var $button = $(this);
@@ -317,7 +321,7 @@ var g_stbCopyPasteColsCount = [];
317
  return;
318
  }
319
  app.createSpinner($button);
320
- app.Models.Tables.remove(app.getParameterByName('id'))
321
  .done(function () {
322
  window.location.href = $('#menuItem_tables').attr('href');
323
  })
@@ -345,49 +349,43 @@ var g_stbCopyPasteColsCount = [];
345
  // Set numbers
346
  formSettings.find('[name="useNumberFormat"]').on('change ifChanged', function() {
347
  if($(this).is(':checked')) {
348
- app.Editor.Hot.useNumberFormat = true;
349
  $('.use-number-format-options').show();
350
  } else {
351
- app.Editor.Hot.useNumberFormat = false;
352
  $('.use-number-format-options').hide();
353
  }
354
  editor.render();
355
  }).trigger('change');
356
- formSettings.find('[name="numberFormat"]').on('change', function(event) {
357
- event.preventDefault();
358
- var value = $.trim($(this).val());
359
- setFormatToDiagramsAxis(value, 'number');
360
  editor.render();
361
  });
362
 
363
  // Set currency
364
- formSettings.find('[name="currencyFormat"]').on('change', function(event) {
365
- event.preventDefault();
366
- var value = $.trim($(this).val());
367
- $('.currency-format').attr('data-format', value);
368
- setFormatToDiagramsAxis(value, 'currency');
369
  editor.render();
370
  });
371
 
372
  // Set percent
373
- formSettings.find('[name="percentFormat"]').on('change', function(event) {
374
- event.preventDefault();
375
  var value = $.trim($(this).val());
376
  $('.percent-format').attr('data-format', value);
377
  $('.percent-convert-format').attr('data-format', value);
378
- setFormatToDiagramsAxis(value, 'percent');
379
  editor.render();
380
  });
381
 
382
  // Set date
383
- formSettings.find('[name="dateFormat"]').on('change', function(event) {
384
- event.preventDefault();
385
  $('.date-format').attr('data-format', $.trim($(this).val()));
386
  });
387
 
388
  // Set time / duration
389
- formSettings.find('[name="timeDurationFormat"]').on('change', function(event) {
390
- event.preventDefault();
391
  $('.time_duration-format').attr('data-format', $.trim($(this).val()));
392
  });
393
 
@@ -508,65 +506,29 @@ var g_stbCopyPasteColsCount = [];
508
  });
509
 
510
  // Pro Notifications and Dialog Windows
511
- var $notification = $('#proPopup').dialog({
512
- autoOpen: false,
513
- width: 480,
514
- modal: true,
515
- buttons: {
516
- Close: function () {
517
- $(this).dialog('close');
518
- }
519
- }
520
- }),
521
- $editableFieldProFeatureDialog = $('#editableFieldProFeatureDialog').dialog({
522
- autoOpen: false,
523
- width: 480,
524
- modal: true,
525
- buttons: {
526
- Close: function () {
527
- $(this).dialog('close');
528
- }
529
- }
530
- }),
531
- $selectableFieldProFeatureDialog = $('#selectableFieldProFeatureDialog').dialog({
532
- autoOpen: false,
533
- width: 480,
534
- modal: true,
535
- buttons: {
536
- Close: function () {
537
- $(this).dialog('close');
538
- }
539
- }
540
- }),
541
- $addDiagramProFeatureDialog = $('#addDiagramProFeatureDialog').dialog({
542
- autoOpen: false,
543
- width: 913,
544
- height: 'auto',
545
- modal: true,
546
- buttons: {
547
- Close: function () {
548
- $(this).dialog('close');
549
  }
550
- }
551
  });
552
-
553
- $('.pro-notify').on('click', function () {
554
- $notification.dialog('open');
555
- });
556
- $('#editableFieldProFeature').on('click', function(event) {
557
- event.preventDefault();
558
- $editableFieldProFeatureDialog.dialog('open');
559
- });
560
- $('#selectableFieldProFeature').on('click', function(event) {
561
- event.preventDefault();
562
- $selectableFieldProFeatureDialog.dialog('open');
563
- });
564
- $('#addDiagramProFeature').on('click', function(event) {
565
- event.preventDefault();
566
- $addDiagramProFeatureDialog.dialog('open');
567
  });
568
- $('#previewDiagramProFeature [data-tabs] a').on('click', function(event) {
569
- event.preventDefault();
570
 
571
  var dialog = $('#previewDiagramProFeature');
572
 
@@ -576,219 +538,5 @@ var g_stbCopyPasteColsCount = [];
576
  $(this).addClass('active');
577
  dialog.find('[data-tab="' + $(this).attr('href') + '"]').addClass('active');
578
  });
579
-
580
- // Functions
581
- function saveTable(preview) {
582
- preview = typeof(preview) != 'undefined' ? preview : false;
583
- var id = app.getParameterByName('id');
584
-
585
- if(!g_stbDoSaving) {
586
- g_stbDoSaving = true;
587
-
588
- var byPart = true,
589
- formData = $('form#settings'),
590
- metaData = [],
591
- mergeData = [],
592
- rowsData = [],
593
- columnsWidth = [],
594
- afterTableLoadedScript = b64EncodeUnicode(formData.find('input[name="features[after_table_loaded_script]"]').val());
595
-
596
- if(preview) {
597
- var tableInstance = app.getTableInstanceById(id);
598
-
599
- if(tableInstance) {
600
- tableInstance.api().destroy();
601
- $(preview).empty();
602
- }
603
- }
604
- app.createSpinner($('#buttonSave'));
605
-
606
- // Put textareas data into the hidden fields before the saving of table settings
607
- formData.find('input[name="elements[descriptionText]"]').val( formData.find('#descriptionText').val() );
608
- formData.find('input[name="elements[signatureText]"]').val( formData.find('#signatureText').val() );
609
- formData.find('input[name="features[after_table_loaded_script]"]').val(afterTableLoadedScript);
610
-
611
- $.each(editor.getData(), function (x, row) {
612
- var currentRow = { cells: [] };
613
-
614
- $.each(row, function (y, cell) {
615
- var meta = editor.getCellMeta(x, y),
616
- cellHtml = $(editor.getCell(x, y)),
617
- classes = [],
618
- rowData = {
619
- data: cell,
620
- calculatedValue: null,
621
- hidden: false,
622
- hiddenCell: meta.className && meta.className.match('hiddenCell') !== null,
623
- invisibleCell: meta.className && meta.className.match('invisibleCell') !== null
624
- },
625
- mergeCell = editor.mergeCells.mergedCellInfoCollection.getInfo(x, y);
626
-
627
- // set merged params
628
- if(mergeCell !== undefined) {
629
- mergeData.push(mergeCell);
630
- rowData.hidden = true;
631
- }
632
- // set formatted value
633
- cellHtml = cellHtml.clone();
634
- cellHtml.find('.htAutocompleteArrow').remove();
635
- rowData.formattedValue = cellHtml.text();
636
-
637
- // selectable cell data source
638
- if(meta.source && meta.source.length) {
639
- meta.type = 'dropdown';
640
- rowData.source = meta.source;
641
- }
642
-
643
- // Set cell format
644
- rowData.type = meta.type ? meta.type : 'text';
645
- rowData.baseType = meta.baseType ? meta.baseType : 'text';
646
- rowData.formatType = meta.formatType ? meta.formatType : '';
647
-
648
- switch(rowData.formatType) {
649
- case 'currency':
650
- rowData.format = formData.find('[name="currencyFormat"]').val();
651
- break;
652
- case 'percent':
653
- rowData.format = formData.find('[name="percentFormat"]').val();
654
- break;
655
- case 'date':
656
- //one table can contain multiple date formats
657
- rowData.format = meta.format != 'undefined'
658
- ? meta.format
659
- : formData.find('[name="dateFormat"]').val();
660
-
661
- var date = moment(rowData.data, rowData.format);
662
-
663
- if (date.isValid()) {
664
- rowData.dateOrder = date.format('x');
665
- }
666
- break;
667
- default:
668
- rowData.format = meta.format;
669
- break;
670
- }
671
-
672
- // Set calculated value for cells with formulas
673
- if (app.Models.Tables.isFormula(cell)) {
674
- var value = app.Models.Tables.getFormulaResult(cell, x, y);
675
-
676
- if (value !== undefined) {
677
- if (!isNaN(value) && value !== '0' && value !== 0 && value % 1 !== 0) { // round float
678
- var floatValue = parseFloat(value);
679
-
680
- if (floatValue.toString().indexOf('.') !== -1) {
681
- var afterPointSybolsLength = floatValue.toString().split('.')[1].length;
682
-
683
- if (afterPointSybolsLength > 4) {
684
- value = floatValue.toFixed(4);
685
- }
686
- }
687
- }
688
- rowData.calculatedValue = value;
689
- }
690
- }
691
-
692
- // Set classes for cell
693
- if (meta.className !== undefined) {
694
- $.each(meta.className.split(' '), function (index, element) {
695
- if (element.length) {
696
- classes.push($.trim(element));
697
- }
698
- });
699
- }
700
- rowData.meta = classes;
701
-
702
- // Set comments for cell
703
- if (typeof(meta.comment) != 'undefined') {
704
- rowData.comment = meta.comment;
705
- }
706
-
707
- // Set column width by cells of first table row
708
- if (x == 0) {
709
- columnsWidth.push(editor.getColWidth(y));
710
- }
711
-
712
- currentRow.cells.push(rowData);
713
- });
714
-
715
- // Row height
716
- currentRow.height = editor.getRowHeight(x);
717
-
718
- rowsData.push(currentRow);
719
- });
720
-
721
- metaData = {
722
- mergedCells: mergeData,
723
- columnsWidth: columnsWidth,
724
- columnsFixedWidth: g_stbFixedColumnsWidth,
725
- columnsSortOrder: g_stbMultipleColumnsSorting,
726
- columnsDisableSorting: g_stbDisableColumnsSorting,
727
- css: ace.getValue()
728
- };
729
-
730
- // Request to save settings, meta and rows
731
- $.when(
732
- app.Models.Tables.setSettings(id, formData),
733
- app.Models.Tables.setHistorySettings(id, $('form#history-settings')),
734
- app.Models.Tables.setMeta(id, metaData)
735
- ).then(
736
- function() {
737
- app.Models.Tables.setRows(id, rowsData, byPart, preview);
738
- }
739
- );
740
- } else {
741
- if(preview && !g_stbPreviewTimeoutSet) {
742
- getPreview(id, preview);
743
- }
744
- }
745
- }
746
- function getPreview(id, preview) {
747
- if(g_stbDoSaving) {
748
- setTimeout(function() {
749
- getPreview(id, preview);
750
- }, 50);
751
- g_stbPreviewTimeoutSet = true;
752
- } else {
753
- app.Models.Tables.getPreview(id, preview);
754
- g_stbPreviewTimeoutSet = false;
755
- }
756
- }
757
- function b64EncodeUnicode(str) {
758
- return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
759
- return String.fromCharCode('0x' + p1);
760
- }));
761
- }
762
- function stbRenameTable(label) {
763
- var $labelShell = $('#stbTableTitleShell'),
764
- $labelHtml = $('#stbTableTitleLabel'),
765
- $labelTxt = $('#stbTableTitleTxt');
766
-
767
- if($labelShell.data('sending')) return;
768
- if(!$labelTxt.data('ready')) return;
769
- $labelShell.data('sending', 1);
770
- app.createSpinner($labelShell);
771
- app.Models.Tables.rename(app.getParameterByName('id'), $labelTxt.val())
772
- .done(function (res) {
773
- if(!res.error) {
774
- $labelHtml.html( $.trim($labelTxt.val()) );
775
- $labelTxt.hide( g_stbAnimationSpeed ).data('ready', 0);
776
- $labelHtml.show( g_stbAnimationSpeed );
777
- $labelShell.data('edit-on', 0);
778
- }
779
- $labelShell.data('sending', 0);
780
- app.deleteSpinner($labelShell);
781
- })
782
- .fail(function (error) {
783
- $('#stbTableTitleEditMsg').html('Failed to rename table: ' + error);
784
- });
785
- }
786
- function setFormatToDiagramsAxis(value, type) {
787
- if(SDT_DATA.isPro) {
788
- value = value.replace(/[0-9]{1}/g, '#').replace(/\s+/g, '');
789
- $('select[name="hAxis[format]"] option[data-type="' + type + '"]').attr('value', value);
790
- $('select[name="vAxis[format]"] option[data-type="' + type + '"]').attr('value', value);
791
- }
792
- }
793
  });
794
  }(window.jQuery, window.supsystic.Tables));
 
 
1
  var g_stbAnimationSpeed = 300;
2
+
3
+ var g_stbCloneDialog;
4
+
5
  var g_stbFixedColumnsWidth = [];
6
+ var g_stbColumnWidthDialog;
7
+
8
  var g_stbMultipleColumnsSorting = [];
9
  var g_stbDisableColumnsSorting = [];
 
 
 
10
  var g_stbMultipleColumnsSortingDialog;
11
+
12
  var g_stbTableLoaderIconDialog;
13
+
14
+ var g_stbTableLoaderBgColorTimeoutSet = false;
15
+ var g_stbTableLoaderBgColorLast = '';
16
+
17
  var g_stbCopyPasteCellsMetaData = [];
18
  var g_stbCopyPasteRowsCount = [];
19
  var g_stbCopyPasteColsCount = [];
20
  (function ($, app, undefined) {
21
  $(document).ready(function () {
22
+ var tablesModel = app.Models.Tables,
23
+ editor = app.Editor.Hot,
24
+ cssEditor = tablesModel.getCssEditor();
25
 
26
  // Initialize Main Tabs
27
  var $mainTabsContent = $('.row-tab'),
29
  $currentTab = $mainTabs.filter('.current').attr('href');
30
 
31
  $mainTabsContent.filter($currentTab).addClass('active');
 
32
  $mainTabs.on('click', function (e) {
33
  e.preventDefault();
34
 
45
  editor.render();
46
  break;
47
  case '#row-tab-preview':
48
+ tablesModel.saveTable('#table-preview');
49
  break;
50
  default:
51
  break;
80
  });
81
 
82
  // Configure CSS Editor
83
+ cssEditor.setTheme("ace/theme/monokai");
84
+ cssEditor.getSession().setMode("ace/mode/css");
85
 
86
  // Make editors responsive for window height
87
  $('#tableEditor, #css-editor').css({
118
  }
119
  });
120
  $('#stbTableTitleTxt').blur(function(){
121
+ tablesModel.renameTable( $(this).val() );
122
  }).keydown(function(e){
123
  if(e.keyCode == 13) { // Enter pressed
124
+ tablesModel.renameTable( $(this).val() );
125
  }
126
  });
127
 
152
  $this.find('input[name="columnWidth"]').val('');
153
  },
154
  buttons: {
155
+ Apply: function () {
156
  var $this = $(this),
157
  editor = window.editor,
158
  selection = editor.getSelectedRange(),
165
  }
166
  $(this).dialog('close');
167
  },
168
+ 'Clear Fixed Width': function () {
169
  if (confirm('Are you sure you want to clear wixed width for all columns?')) {
170
  g_stbFixedColumnsWidth = [];
171
  $(this).dialog('close');
211
  $this.find('#disableSortOrderData').html(disableSortOrder);
212
  },
213
  buttons: {
214
+ Apply: function () {
215
  var $this = $(this),
216
  editor = window.editor,
217
  selection = editor.getSelectedRange(),
237
 
238
  $(this).dialog('close');
239
  },
240
+ 'Clear Multiple Sorting': function () {
241
  if (confirm('Are you sure you want to clear multiple sorting for all columns?')) {
242
  g_stbMultipleColumnsSorting = [];
243
  $(this).dialog('close');
244
  }
245
  },
246
+ 'Clear Disable Sorting': function () {
247
  if (confirm('Are you sure you want to clear disable sorting for all columns?')) {
248
  g_stbDisableColumnsSorting = [];
249
  $(this).dialog('close');
282
  dialog.next().find('button:first-of-type').html('Clone').show();
283
  },
284
  buttons: {
285
+ Clone: function (e) {
286
  var $dialog = $(this),
287
+ $button = $(e.target).closest('button');
288
 
289
  $button.attr('disabled', true);
290
  $button.html(app.createSpinner());
291
+ tablesModel.request('cloneTable', {
292
  id: app.getParameterByName('id'),
293
  title: $(this).find('input').val()
294
  }).done(function(response) {
295
  if (response.success) {
296
+ var html = '<a href="' + app.replaceParameterByName(window.location.href, 'id', response.id) + '" class="ui-button" style="text-decoration: none !important;">Open cloned table</a><div style="float: right; margin-top: 5px;">Done!</div>';
297
 
298
  $button.hide();
299
  $dialog.find('.input-group').hide();
312
  g_stbCloneDialog.dialog('open');
313
  });
314
  $('#buttonSave').on('click', function () {
315
+ tablesModel.saveTable();
316
  });
317
  $('#buttonDelete').on('click', function () {
318
  var $button = $(this);
321
  return;
322
  }
323
  app.createSpinner($button);
324
+ tablesModel.remove(app.getParameterByName('id'))
325
  .done(function () {
326
  window.location.href = $('#menuItem_tables').attr('href');
327
  })
349
  // Set numbers
350
  formSettings.find('[name="useNumberFormat"]').on('change ifChanged', function() {
351
  if($(this).is(':checked')) {
352
+ editor.useNumberFormat = true;
353
  $('.use-number-format-options').show();
354
  } else {
355
+ editor.useNumberFormat = false;
356
  $('.use-number-format-options').hide();
357
  }
358
  editor.render();
359
  }).trigger('change');
360
+ formSettings.find('[name="numberFormat"]').on('change', function(e) {
361
+ e.preventDefault();
 
 
362
  editor.render();
363
  });
364
 
365
  // Set currency
366
+ formSettings.find('[name="currencyFormat"]').on('change', function(e) {
367
+ e.preventDefault();
 
 
 
368
  editor.render();
369
  });
370
 
371
  // Set percent
372
+ formSettings.find('[name="percentFormat"]').on('change', function(e) {
373
+ e.preventDefault();
374
  var value = $.trim($(this).val());
375
  $('.percent-format').attr('data-format', value);
376
  $('.percent-convert-format').attr('data-format', value);
 
377
  editor.render();
378
  });
379
 
380
  // Set date
381
+ formSettings.find('[name="dateFormat"]').on('change', function(e) {
382
+ e.preventDefault();
383
  $('.date-format').attr('data-format', $.trim($(this).val()));
384
  });
385
 
386
  // Set time / duration
387
+ formSettings.find('[name="timeDurationFormat"]').on('change', function(e) {
388
+ e.preventDefault();
389
  $('.time_duration-format').attr('data-format', $.trim($(this).val()));
390
  });
391
 
506
  });
507
 
508
  // Pro Notifications and Dialog Windows
509
+ var $proNotify = $('.pro-notify');
510
+
511
+ $proNotify.each(function() {
512
+ var $this = $(this);
513
+
514
+ $($this.data('dialog')).dialog({
515
+ autoOpen: false,
516
+ title: $this.data('dtitle'),
517
+ width: $this.data('dwidth'),
518
+ modal: true,
519
+ buttons: {
520
+ Close: function () {
521
+ $(this).dialog('close');
522
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
523
  }
524
+ })
525
  });
526
+ $proNotify.on('click', function (e) {
527
+ e.preventDefault();
528
+ $($(this).data('dialog')).dialog('open');
 
 
 
 
 
 
 
 
 
 
 
 
529
  });
530
+ $('#previewDiagramProFeature [data-tabs] a').on('click', function(e) {
531
+ e.preventDefault();
532
 
533
  var dialog = $('#previewDiagramProFeature');
534
 
538
  $(this).addClass('active');
539
  dialog.find('[data-tab="' + $(this).attr('href') + '"]').addClass('active');
540
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
541
  });
542
  }(window.jQuery, window.supsystic.Tables));
src/SupsysticTables/Tables/assets/languagesData.php ADDED
@@ -0,0 +1,1502 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ return array(
3
+ 'Afrikaans' => '{
4
+ "sEmptyTable": "Geen data beskikbaar in tabel",
5
+ "sInfo": "uitstalling _START_ to _END_ of _TOTAL_ inskrywings",
6
+ "sInfoEmpty": "uitstalling 0 to 0 of 0 inskrywings",
7
+ "sInfoFiltered": "(gefiltreer uit _MAX_ totaal inskrywings)",
8
+ "sInfoPostFix": "",
9
+ "sInfoThousands": ",",
10
+ "sLengthMenu": "uitstal _MENU_ inskrywings",
11
+ "sLoadingRecords": "laai...",
12
+ "sProcessing": "verwerking...",
13
+ "sSearch": "soektog:",
14
+ "sZeroRecords": "Geen treffers gevind",
15
+ "oPaginate": {
16
+ "sFirst": "eerste",
17
+ "sLast": "laaste",
18
+ "sNext": "volgende",
19
+ "sPrevious": "vorige"
20
+ },
21
+ "oAria": {
22
+ "sSortAscending": ": aktiveer kolom stygende te sorteer",
23
+ "sSortDescending": ": aktiveer kolom orde te sorteer"
24
+ }
25
+ }',
26
+ 'Albanian' => '{
27
+ "sEmptyTable": "Nuk ka asnjë të dhënë në tabele",
28
+ "sInfo": "Duke treguar _START_ deri _END_ prej _TOTAL_ reshtave",
29
+ "sInfoEmpty": "Duke treguar 0 deri 0 prej 0 reshtave",
30
+ "sInfoFiltered": "(të filtruara nga gjithësej _MAX_ reshtave)",
31
+ "sInfoPostFix": "",
32
+ "sInfoThousands": ",",
33
+ "sLengthMenu": "Shiko _MENU_ reshta",
34
+ "sLoadingRecords": "Duke punuar...",
35
+ "sProcessing": "Duke procesuar...",
36
+ "sSearch": "Kërkoni:",
37
+ "sZeroRecords": "Asnjë e dhënë nuk u gjet",
38
+ "oPaginate": {
39
+ "sFirst": "E para",
40
+ "sLast": "E Fundit",
41
+ "sNext": "Tjetra",
42
+ "sPrevious": "E Kaluara"
43
+ },
44
+ "oAria": {
45
+ "sSortAscending": ": aktivizo për të sortuar kolumnin me vlera në ngritje",
46
+ "sSortDescending": ": aktivizo për të sortuar kolumnin me vlera në zbritje"
47
+ }
48
+ }',
49
+ 'Amharic' => '
50
+ {
51
+ "sEmptyTable": "ባዶ ሰንጠረዥ",
52
+ "sInfo": "ከጠቅላላው _TOTAL_ ዝርዝሮች ውስጥ ከ _START_ እስከ _END_ ያሉት ዝርዝር",
53
+ "sInfoEmpty": "ከጠቅላላው 0 ዝርዝሮች ውስጥ ከ 0 እስከ 0 ያሉት ዝርዝር",
54
+ "sInfoFiltered": "(ከጠቅላላው _MAX_ የተመረጡ ዝርዝሮች)",
55
+ "sInfoPostFix": "",
56
+ "sInfoThousands": ",",
57
+ "sLengthMenu": "የዝርዝሮች ብዛት _MENU_",
58
+ "sLoadingRecords": "በማቅረብ ላይ...",
59
+ "sProcessing": "በማቀናበር ላይ...",
60
+ "sSearch": "ፈልግ:",
61
+ "sZeroRecords": "ከሚፈለገው ጋር የሚሚሳሰል ዝርዝር አልተገኘም",
62
+ "oPaginate": {
63
+ "sFirst": "መጀመሪያ",
64
+ "sLast": "መጨረሻ",
65
+ "sNext": "ቀጣዩ",
66
+ "sPrevious": "የበፊቱ"
67
+ },
68
+ "oAria": {
69
+ "sSortAscending": ": ከመጀመሪያ ወደ መጨረሻ(ወጪ) አደራደር",
70
+ "sSortDescending": ": ከመጨረሻ ወደ መጀመሪያ(ወራጅ) አደራደር"
71
+ }
72
+ }',
73
+ 'Arabic' => '{
74
+ "sProcessing": "جارٍ التحميل...",
75
+ "sLengthMenu": "أظهر _MENU_ مدخلات",
76
+ "sZeroRecords": "لم يعثر على أية سجلات",
77
+ "sInfo": "إظهار _START_ إلى _END_ من أصل _TOTAL_ مدخل",
78
+ "sInfoEmpty": "يعرض 0 إلى 0 من أصل 0 سجل",
79
+ "sInfoFiltered": "(منتقاة من مجموع _MAX_ مُدخل)",
80
+ "sInfoPostFix": "",
81
+ "sSearch": "ابحث:",
82
+ "sUrl": "",
83
+ "oPaginate": {
84
+ "sFirst": "الأول",
85
+ "sPrevious": "السابق",
86
+ "sNext": "التالي",
87
+ "sLast": "الأخير"
88
+ }
89
+ }',
90
+ 'Armenian' => '{
91
+ "sEmptyTable": "Տվյալները բացակայում են",
92
+ "sProcessing": "Կատարվում է...",
93
+ "sInfoThousands": ",",
94
+ "sLengthMenu": "Ցուցադրել _MENU_ արդյունքներ մեկ էջում",
95
+ "sLoadingRecords": "Բեռնվում է ...",
96
+ "sZeroRecords": "Հարցմանը համապատասխանող արդյունքներ չկան",
97
+ "sInfo": "Ցուցադրված են _START_-ից _END_ արդյունքները ընդհանուր _TOTAL_-ից",
98
+ "sInfoEmpty": "Արդյունքներ գտնված չեն",
99
+ "sInfoFiltered": "(ֆիլտրվել է ընդհանուր _MAX_ արդյունքներից)",
100
+ "sInfoPostFix": "",
101
+ "sSearch": "Փնտրել",
102
+ "oPaginate": {
103
+ "sFirst": "Առաջին էջ",
104
+ "sPrevious": "Նախորդ էջ",
105
+ "sNext": "Հաջորդ էջ",
106
+ "sLast": "Վերջին էջ"
107
+ },
108
+ "oAria": {
109
+ "sSortAscending": ": ակտիվացրեք աճման կարգով դասավորելու համար",
110
+ "sSortDescending": ": ակտիվացրեք նվազման կարգով դասավորելու համար"
111
+ }
112
+ }',
113
+ 'Azerbaijan' => '{
114
+ "sEmptyTable": "Cədvəldə heç bir məlumat yoxdur",
115
+ "sInfo": " _TOTAL_ Nəticədən _START_ - _END_ Arası Nəticələr",
116
+ "sInfoEmpty": "Nəticə Yoxdur",
117
+ "sInfoFiltered": "( _MAX_ Nəticə İçindən Tapılanlar)",
118
+ "sInfoPostFix": "",
119
+ "sInfoThousands": ",",
120
+ "sLengthMenu": "Səhifədə _MENU_ Nəticə Göstər",
121
+ "sLoadingRecords": "Yüklənir...",
122
+ "sProcessing": "Gözləyin...",
123
+ "sSearch": "Axtarış:",
124
+ "sZeroRecords": "Nəticə Tapılmadı.",
125
+ "oPaginate": {
126
+ "sFirst": "İlk",
127
+ "sLast": "Axırıncı",
128
+ "sNext": "Sonraki",
129
+ "sPrevious": "Öncəki"
130
+ },
131
+ "oAria": {
132
+ "sSortAscending": ": sütunu artma sırası üzərə aktiv etmək",
133
+ "sSortDescending": ": sütunu azalma sırası üzərə aktiv etmək"
134
+ }
135
+ }',
136
+ 'Bangla' => '{
137
+ "sProcessing": "প্রসেসিং হচ্ছে...",
138
+ "sLengthMenu": "_MENU_ টা এন্ট্রি দেখাও",
139
+ "sZeroRecords": "আপনি যা অনুসন্ধান করেছেন তার সাথে মিলে যাওয়া কোন রেকর্ড খুঁজে পাওয়া যায় নাই",
140
+ "sInfo": "_TOTAL_ টা এন্ট্রির মধ্যে _START_ থেকে _END_ পর্যন্ত দেখানো হচ্ছে",
141
+ "sInfoEmpty": "কোন এন্ট্রি খুঁজে পাওয়া যায় নাই",
142
+ "sInfoFiltered": "(মোট _MAX_ টা এন্ট্রির মধ্যে থেকে বাছাইকৃত)",
143
+ "sInfoPostFix": "",
144
+ "sSearch": "অনুসন্ধান:",
145
+ "sUrl": "",
146
+ "oPaginate": {
147
+ "sFirst": "প্রথমটা",
148
+ "sPrevious": "আগেরটা",
149
+ "sNext": "পরবর্তীটা",
150
+ "sLast": "শেষেরটা"
151
+ }
152
+ }',
153
+ 'Basque' => '{
154
+ "sProcessing": "Prozesatzen...",
155
+ "sLengthMenu": "Erakutsi _MENU_ erregistro",
156
+ "sZeroRecords": "Ez da emaitzarik aurkitu",
157
+ "sEmptyTable": "Taula hontan ez dago inongo datu erabilgarririk",
158
+ "sInfo": "_START_ -etik _END_ -erako erregistroak erakusten, guztira _TOTAL_ erregistro",
159
+ "sInfoEmpty": "0tik 0rako erregistroak erakusten, guztira 0 erregistro",
160
+ "sInfoFiltered": "(guztira _MAX_ erregistro iragazten)",
161
+ "sInfoPostFix": "",
162
+ "sSearch": "Aurkitu:",
163
+ "sUrl": "",
164
+ "sInfoThousands": ",",
165
+ "sLoadingRecords": "Abiarazten...",
166
+ "oPaginate": {
167
+ "sFirst": "Lehena",
168
+ "sLast": "Azkena",
169
+ "sNext": "Hurrengoa",
170
+ "sPrevious": "Aurrekoa"
171
+ },
172
+ "oAria": {
173
+ "sSortAscending": ": Zutabea goranzko eran ordenatzeko aktibatu ",
174
+ "sSortDescending": ": Zutabea beheranzko eran ordenatzeko aktibatu"
175
+ }
176
+ }',
177
+ 'Belarusian' => '{
178
+ "sProcessing": "Пачакайце...",
179
+ "sLengthMenu": "Паказваць _MENU_ запісаў",
180
+ "sZeroRecords": "Запісы адсутнічаюць.",
181
+ "sInfo": "Запісы з _START_ па _END_ з _TOTAL_ запісаў",
182
+ "sInfoEmpty": "Запісы з 0 па 0 з 0 запісаў",
183
+ "sInfoFiltered": "(адфільтравана з _MAX_ запісаў)",
184
+ "sInfoPostFix": "",
185
+ "sSearch": "Пошук:",
186
+ "sUrl": "",
187
+ "oPaginate": {
188
+ "sFirst": "Першая",
189
+ "sPrevious": "Папярэдняя",
190
+ "sNext": "Наступная",
191
+ "sLast": "Апошняя"
192
+ },
193
+ "oAria": {
194
+ "sSortAscending": ": актываваць для сартавання слупка па ўзрастанні",
195
+ "sSortDescending": ": актываваць для сартавання слупка па змяншэнні"
196
+ }
197
+ }',
198
+ 'Bulgarian' => '{
199
+ "sProcessing": "Обработка на резултатите...",
200
+ "sLengthMenu": "Показване на _MENU_ резултата",
201
+ "sZeroRecords": "Няма намерени резултати",
202
+ "sInfo": "Показване на резултати от _START_ до _END_ от общо _TOTAL_",
203
+ "sInfoEmpty": "Показване на резултати от 0 до 0 от общо 0",
204
+ "sInfoFiltered": "(филтрирани от общо _MAX_ резултата)",
205
+ "sInfoPostFix": "",
206
+ "sSearch": "Търсене във всички колони:",
207
+ "sUrl": "",
208
+ "oPaginate": {
209
+ "sFirst": "Първа",
210
+ "sPrevious": "Предишна",
211
+ "sNext": "Следваща",
212
+ "sLast": "Последна"
213
+ }
214
+ }',
215
+ 'Catalan' => '{
216
+ "sProcessing": "Processant...",
217
+ "sLengthMenu": "Mostra _MENU_ registres",
218
+ "sZeroRecords": "No s\'han trobat registres.",
219
+ "sInfo": "Mostrant de _START_ a _END_ de _TOTAL_ registres",
220
+ "sInfoEmpty": "Mostrant de 0 a 0 de 0 registres",
221
+ "sInfoFiltered": "(filtrat de _MAX_ total registres)",
222
+ "sInfoPostFix": "",
223
+ "sSearch": "Filtrar:",
224
+ "sUrl": "",
225
+ "oPaginate": {
226
+ "sFirst": "Primer",
227
+ "sPrevious": "Anterior",
228
+ "sNext": "Següent",
229
+ "sLast": "Últim"
230
+ }
231
+ }',
232
+ 'Chinese-traditional' => '{
233
+ "processing": "處理中...",
234
+ "loadingRecords": "載入中...",
235
+ "lengthMenu": "顯示 _MENU_ 項結果",
236
+ "zeroRecords": "沒有符合的結果",
237
+ "info": "顯示第 _START_ 至 _END_ 項結果,共 _TOTAL_ 項",
238
+ "infoEmpty": "顯示第 0 至 0 項結果,共 0 項",
239
+ "infoFiltered": "(從 _MAX_ 項結果中過濾)",
240
+ "infoPostFix": "",
241
+ "search": "搜尋:",
242
+ "paginate": {
243
+ "first": "第一頁",
244
+ "previous": "上一頁",
245
+ "next": "下一頁",
246
+ "last": "最後一頁"
247
+ },
248
+ "aria": {
249
+ "sortAscending": ": 升冪排列",
250
+ "sortDescending": ": 降冪排列"
251
+ }
252
+ }',
253
+ 'Chinese' => '{
254
+ "sProcessing": "处理中...",
255
+ "sLengthMenu": "显示 _MENU_ 项结果",
256
+ "sZeroRecords": "没有匹配结果",
257
+ "sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
258
+ "sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
259
+ "sInfoFiltered": "(由 _MAX_ 项结果过滤)",
260
+ "sInfoPostFix": "",
261
+ "sSearch": "搜索:",
262
+ "sUrl": "",
263
+ "sEmptyTable": "表中数据为空",
264
+ "sLoadingRecords": "载入中...",
265
+ "sInfoThousands": ",",
266
+ "oPaginate": {
267
+ "sFirst": "首页",
268
+ "sPrevious": "上页",
269
+ "sNext": "下页",
270
+ "sLast": "末页"
271
+ },
272
+ "oAria": {
273
+ "sSortAscending": ": 以升序排列此列",
274
+ "sSortDescending": ": 以降序排列此列"
275
+ }
276
+ }',
277
+ 'Croatian' => '{
278
+ "sEmptyTable": "Nema podataka u tablici",
279
+ "sInfo": "Prikazano _START_ do _END_ od _TOTAL_ rezultata",
280
+ "sInfoEmpty": "Prikazano 0 do 0 od 0 rezultata",
281
+ "sInfoFiltered": "(filtrirano iz _MAX_ ukupnih rezultata)",
282
+ "sInfoPostFix": "",
283
+ "sInfoThousands": ",",
284
+ "sLengthMenu": "Prikaži _MENU_ rezultata po stranici",
285
+ "sLoadingRecords": "Dohvaćam...",
286
+ "sProcessing": "Obrađujem...",
287
+ "sSearch": "Pretraži:",
288
+ "sZeroRecords": "Ništa nije pronađeno",
289
+ "oPaginate": {
290
+ "sFirst": "Prva",
291
+ "sPrevious": "Nazad",
292
+ "sNext": "Naprijed",
293
+ "sLast": "Zadnja"
294
+ },
295
+ "oAria": {
296
+ "sSortAscending": ": aktiviraj za rastući poredak",
297
+ "sSortDescending": ": aktiviraj za padajući poredak"
298
+ }
299
+ }',
300
+ 'Czech' => '{
301
+ "sEmptyTable": "Tabulka neobsahuje žádná data",
302
+ "sInfo": "Zobrazuji _START_ až _END_ z celkem _TOTAL_ záznamů",
303
+ "sInfoEmpty": "Zobrazuji 0 až 0 z 0 záznamů",
304
+ "sInfoFiltered": "(filtrováno z celkem _MAX_ záznamů)",
305
+ "sInfoPostFix": "",
306
+ "sInfoThousands": " ",
307
+ "sLengthMenu": "Zobraz záznamů _MENU_",
308
+ "sLoadingRecords": "Načítám...",
309
+ "sProcessing": "Provádím...",
310
+ "sSearch": "Hledat:",
311
+ "sZeroRecords": "Žádné záznamy nebyly nalezeny",
312
+ "oPaginate": {
313
+ "sFirst": "První",
314
+ "sLast": "Poslední",
315
+ "sNext": "Další",
316
+ "sPrevious": "Předchozí"
317
+ },
318
+ "oAria": {
319
+ "sSortAscending": ": aktivujte pro řazení sloupce vzestupně",
320
+ "sSortDescending": ": aktivujte pro řazení sloupce sestupně"
321
+ }
322
+ }',
323
+ 'Danish' => '{
324
+ "sProcessing": "Henter...",
325
+ "sLengthMenu": "Vis _MENU_ linjer",
326
+ "sZeroRecords": "Ingen linjer matcher s&oslash;gningen",
327
+ "sInfo": "Viser _START_ til _END_ af _TOTAL_ linjer",
328
+ "sInfoEmpty": "Viser 0 til 0 af 0 linjer",
329
+ "sInfoFiltered": "(filtreret fra _MAX_ linjer)",
330
+ "sInfoPostFix": "",
331
+ "sSearch": "S&oslash;g:",
332
+ "sUrl": "",
333
+ "oPaginate": {
334
+ "sFirst": "F&oslash;rste",
335
+ "sPrevious": "Forrige",
336
+ "sNext": "N&aelig;ste",
337
+ "sLast": "Sidste"
338
+ }
339
+ }',
340
+ 'Dutch' => '{
341
+ "sProcessing": "Bezig...",
342
+ "sLengthMenu": "_MENU_ resultaten weergeven",
343
+ "sZeroRecords": "Geen resultaten gevonden",
344
+ "sInfo": "_START_ tot _END_ van _TOTAL_ resultaten",
345
+ "sInfoEmpty": "Geen resultaten om weer te geven",
346
+ "sInfoFiltered": " (gefilterd uit _MAX_ resultaten)",
347
+ "sInfoPostFix": "",
348
+ "sSearch": "Zoeken:",
349
+ "sEmptyTable": "Geen resultaten aanwezig in de tabel",
350
+ "sInfoThousands": ".",
351
+ "sLoadingRecords": "Een moment geduld aub - bezig met laden...",
352
+ "oPaginate": {
353
+ "sFirst": "Eerste",
354
+ "sLast": "Laatste",
355
+ "sNext": "Volgende",
356
+ "sPrevious": "Vorige"
357
+ },
358
+ "oAria": {
359
+ "sSortAscending": ": activeer om kolom oplopend te sorteren",
360
+ "sSortDescending": ": activeer om kolom aflopend te sorteren"
361
+ }
362
+ }',
363
+ 'Estonian' => '{
364
+ "sProcessing": "Palun oodake, koostan kuvamiseks nimekirja!",
365
+ "sLengthMenu": "N&auml;ita kirjeid _MENU_ kaupa",
366
+ "sZeroRecords": "Otsitavat vastet ei leitud.",
367
+ "sInfo": "Kuvatud: _TOTAL_ kirjet (_START_-_END_)",
368
+ "sInfoEmpty": "Otsinguvasteid ei leitud",
369
+ "sInfoFiltered": " - filteeritud _MAX_ kirje seast.",
370
+ "sInfoPostFix": "K&otilde;ik kuvatud kirjed p&otilde;hinevad reaalsetel tulemustel.",
371
+ "sSearch": "Otsi k&otilde;ikide tulemuste seast:",
372
+ "oPaginate": {
373
+ "sFirst": "Algus",
374
+ "sPrevious": "Eelmine",
375
+ "sNext": "J&auml;rgmine",
376
+ "sLast": "Viimane"
377
+ }
378
+ }',
379
+ 'Filipino' => '{
380
+ "sProcessing": "Pagproseso...",
381
+ "sLengthMenu": "Ipakita _MENU_ entries",
382
+ "sZeroRecords": "Walang katugmang mga talaan na natagpuan",
383
+ "sInfo": "Ipinapakita ang _START_ sa _END_ ng _TOTAL_ entries",
384
+ "sInfoEmpty": "Ipinapakita ang 0-0 ng 0 entries",
385
+ "sInfoFiltered": "(na-filter mula _MAX_ kabuuang entries)",
386
+ "sInfoPostFix": "",
387
+ "sSearch": "Paghahanap:",
388
+ "sUrl": "",
389
+ "oPaginate": {
390
+ "sFirst": "Unang",
391
+ "sPrevious": "Nakaraan",
392
+ "sNext": "Susunod",
393
+ "sLast": "Huli"
394
+ }
395
+ }',
396
+ 'Finnish' => '{
397
+ "sEmptyTable": "Ei näytettäviä tuloksia.",
398
+ "sInfo": "Näytetään rivit _START_ - _END_ (yhteensä _TOTAL_ )",
399
+ "sInfoEmpty": "Näytetään 0 - 0 (yhteensä 0)",
400
+ "sInfoFiltered": "(suodatettu _MAX_ tuloksen joukosta)",
401
+ "sInfoPostFix": "",
402
+ "sLengthMenu": "Näytä kerralla _MENU_ riviä",
403
+ "sLoadingRecords": "Ladataan...",
404
+ "sProcessing": "Hetkinen...",
405
+ "sSearch": "Etsi:",
406
+ "sZeroRecords": "Tietoja ei löytynyt",
407
+ "oPaginate": {
408
+ "sFirst": "Ensimmäinen",
409
+ "sLast": "Viimeinen",
410
+ "sNext": "Seuraava",
411
+ "sPrevious": "Edellinen"
412
+ },
413
+ "oAria": {
414
+ "sSortAscending": ": lajittele sarake nousevasti",
415
+ "sSortDescending": ": lajittele sarake laskevasti"
416
+ },
417
+ "select": {
418
+ "rows": {
419
+ "_": "Valittuna %d riviä",
420
+ "0": "Klikkaa riviä valitaksesi sen",
421
+ "1": "Valittuna vain yksi rivi"
422
+ }
423
+ },
424
+ "buttons": {
425
+ "copy": "Kopioi",
426
+ "copySuccess": {
427
+ "1": "Yksi rivi kopioitu leikepöydälle",
428
+ "_": "%d riviä kopioitu leikepöydälle"
429
+ },
430
+ "copyTitle": "Kopioi leikepöydälle",
431
+ "copyKeys": "Paina <i>ctrl</i> tai <i>\u2318</i> + <i>C</i> kopioidaksesi taulukon arvot<br>järjestelmäsi leikepöydälle. <br><br>Peruuttaaksesi paina tätä viestiä tai Esc."
432
+ }
433
+ }',
434
+ 'French' => '{
435
+ "sProcessing": "Traitement en cours...",
436
+ "sSearch": "Rechercher&nbsp;:",
437
+ "sLengthMenu": "Afficher _MENU_ &eacute;l&eacute;ments",
438
+ "sInfo": "Affichage de l\'&eacute;l&eacute;ment _START_ &agrave; _END_ sur _TOTAL_ &eacute;l&eacute;ments",
439
+ "sInfoEmpty": "Affichage de l\'&eacute;l&eacute;ment 0 &agrave; 0 sur 0 &eacute;l&eacute;ment",
440
+ "sInfoFiltered": "(filtr&eacute; de _MAX_ &eacute;l&eacute;ments au total)",
441
+ "sInfoPostFix": "",
442
+ "sLoadingRecords": "Chargement en cours...",
443
+ "sZeroRecords": "Aucun &eacute;l&eacute;ment &agrave; afficher",
444
+ "sEmptyTable": "Aucune donn&eacute;e disponible dans le tableau",
445
+ "oPaginate": {
446
+ "sFirst": "Premier",
447
+ "sPrevious": "Pr&eacute;c&eacute;dent",
448
+ "sNext": "Suivant",
449
+ "sLast": "Dernier"
450
+ },
451
+ "oAria": {
452
+ "sSortAscending": ": activer pour trier la colonne par ordre croissant",
453
+ "sSortDescending": ": activer pour trier la colonne par ordre d&eacute;croissant"
454
+ }
455
+ }',
456
+ 'Galician' => '{
457
+ "sProcessing": "Procesando...",
458
+ "sLengthMenu": "Mostrar _MENU_ rexistros",
459
+ "sZeroRecords": "Non se atoparon resultados",
460
+ "sEmptyTable": "Ningún dato dispoñible nesta táboa",
461
+ "sInfo": "Mostrando rexistros do _START_ ao _END_ dun total de _TOTAL_ rexistros",
462
+ "sInfoEmpty": "Mostrando rexistros do 0 ao 0 dun total de 0 rexistros",
463
+ "sInfoFiltered": "(filtrado dun total de _MAX_ rexistros)",
464
+ "sInfoPostFix": "",
465
+ "sSearch": "Buscar:",
466
+ "sUrl": "",
467
+ "sInfoThousands": ",",
468
+ "sLoadingRecords": "Cargando...",
469
+ "oPaginate": {
470
+ "sFirst": "Primeiro",
471
+ "sLast": "Último",
472
+ "sNext": "Seguinte",
473
+ "sPrevious": "Anterior"
474
+ },
475
+ "oAria": {
476
+ "sSortAscending": ": Activar para ordenar a columna de maneira ascendente",
477
+ "sSortDescending": ": Activar para ordenar a columna de maneira descendente"
478
+ }
479
+ }',
480
+ 'Georgian' => '{
481
+ "sEmptyTable": "ცხრილში არ არის მონაცემები",
482
+ "sInfo": "ნაჩვენებია ჩანაწერები _START_–დან _END_–მდე, _TOTAL_ ჩანაწერიდან",
483
+ "sInfoEmpty": "ნაჩვენებია ჩანაწერები 0–დან 0–მდე, 0 ჩანაწერიდან",
484
+ "sInfoFiltered": "(გაფილტრული შედეგი _MAX_ ჩანაწერიდან)",
485
+ "sInfoPostFix": "",
486
+ "sInfoThousands": ".",
487
+ "sLengthMenu": "აჩვენე _MENU_ ჩანაწერი",
488
+ "sLoadingRecords": "იტვირთება...",
489
+ "sProcessing": "მუშავდება...",
490
+ "sSearch": "ძიება:",
491
+ "sZeroRecords": "არაფერი მოიძებნა",
492
+ "oPaginate": {
493
+ "sFirst": "პირველი",
494
+ "sLast": "ბოლო",
495
+ "sNext": "შემდეგი",
496
+ "sPrevious": "წინა"
497
+ },
498
+ "oAria": {
499
+ "sSortAscending": ": სვეტის დალაგება ზრდის მიხედვით",
500
+ "sSortDescending": ": სვეტის დალაგება კლების მიხედვით"
501
+ }
502
+ }',
503
+ 'German' => '{
504
+ "sEmptyTable": "Keine Daten in der Tabelle vorhanden",
505
+ "sInfo": "_START_ bis _END_ von _TOTAL_ Einträgen",
506
+ "sInfoEmpty": "0 bis 0 von 0 Einträgen",
507
+ "sInfoFiltered": "(gefiltert von _MAX_ Einträgen)",
508
+ "sInfoPostFix": "",
509
+ "sInfoThousands": ".",
510
+ "sLengthMenu": "_MENU_ Einträge anzeigen",
511
+ "sLoadingRecords": "Wird geladen...",
512
+ "sProcessing": "Bitte warten...",
513
+ "sSearch": "Suchen",
514
+ "sZeroRecords": "Keine Einträge vorhanden.",
515
+ "oPaginate": {
516
+ "sFirst": "Erste",
517
+ "sPrevious": "Zurück",
518
+ "sNext": "Nächste",
519
+ "sLast": "Letzte"
520
+ },
521
+ "oAria": {
522
+ "sSortAscending": ": aktivieren, um Spalte aufsteigend zu sortieren",
523
+ "sSortDescending": ": aktivieren, um Spalte absteigend zu sortieren"
524
+ },
525
+ "select": {
526
+ "rows": {
527
+ "_": "%d Zeilen ausgewählt",
528
+ "0": "Zum Auswählen auf eine Zeile klicken",
529
+ "1": "1 Zeile ausgewählt"
530
+ }
531
+ }
532
+ }',
533
+ 'Greek' => '{
534
+ "sDecimal": ",",
535
+ "sEmptyTable": "Δεν υπάρχουν δεδομένα στον πίνακα",
536
+ "sInfo": "Εμφανίζονται _START_ έως _END_ από _TOTAL_ εγγραφές",
537
+ "sInfoEmpty": "Εμφανίζονται 0 έως 0 από 0 εγγραφές",
538
+ "sInfoFiltered": "(φιλτραρισμένες από _MAX_ συνολικά εγγραφές)",
539
+ "sInfoPostFix": "",
540
+ "sInfoThousands": ".",
541
+ "sLengthMenu": "Δείξε _MENU_ εγγραφές",
542
+ "sLoadingRecords": "Φόρτωση...",
543
+ "sProcessing": "Επεξεργασία...",
544
+ "sSearch": "Αναζήτηση:",
545
+ "sSearchPlaceholder": "Αναζήτηση",
546
+ "sThousands": ".",
547
+ "sUrl": "",
548
+ "sZeroRecords": "Δεν βρέθηκαν εγγραφές που να ταιριάζουν",
549
+ "oPaginate": {
550
+ "sFirst": "Πρώτη",
551
+ "sPrevious": "Προηγούμενη",
552
+ "sNext": "Επόμενη",
553
+ "sLast": "Τελευταία"
554
+ },
555
+ "oAria": {
556
+ "sSortAscending": ": ενεργοποιήστε για αύξουσα ταξινόμηση της στήλης",
557
+ "sSortDescending": ": ενεργοποιήστε για φθίνουσα ταξινόμηση της στήλης"
558
+ }
559
+ }',
560
+ 'Gujarati' => '{
561
+ "sEmptyTable": "કોષ્ટકમાં કોઈ ડેટા ઉપલબ્ધ નથી",
562
+ "sInfo": "કુલ_પ્રવેશો_અંત_પ્રારંભ_દર્શાવે_છે",
563
+ "sInfoEmpty": "0 પ્રવેશો 0 0 બતાવી રહ્યું છે",
564
+ "sInfoFiltered": "(_MAX_ કુલ પ્રવેશો માંથી ફિલ્ટર)",
565
+ "sInfoPostFix": "",
566
+ "sInfoThousands": ",",
567
+ "sLengthMenu": "બતાવો _MENU_ પ્રવેશો",
568
+ "sLoadingRecords": "લોડ કરી રહ્યું છે ...",
569
+ "sProcessing": "પ્રક્રિયા ...",
570
+ "sSearch": "શોધો:",
571
+ "sZeroRecords": "કોઈ મેળ ખાતા રેકોર્ડ મળી",
572
+ "oPaginate": {
573
+ "sFirst": "પ્રથમ",
574
+ "sLast": "અંતિમ",
575
+ "sNext": "આગામી",
576
+ "sPrevious": "ગત"
577
+ },
578
+ "oAria": {
579
+ "sSortAscending": ": સ્તંભ ચડતા ક્રમમાં ગોઠવવા માટે સક્રિય",
580
+ "sSortDescending": ": કૉલમ ઉતરતા ક્રમમાં ગોઠવવા માટે સક્રિય"
581
+ }
582
+ }',
583
+ 'Hebrew' => '{
584
+ "processing": "מעבד...",
585
+ "lengthMenu": "הצג _MENU_ פריטים",
586
+ "zeroRecords": "לא נמצאו רשומות מתאימות",
587
+ "emptyTable": "לא נמצאו רשומות מתאימות",
588
+ "info": "_START_ עד _END_ מתוך _TOTAL_ רשומות" ,
589
+ "infoEmpty": "0 עד 0 מתוך 0 רשומות",
590
+ "infoFiltered": "(מסונן מסך _MAX_ רשומות)",
591
+ "infoPostFix": "",
592
+ "search": "חפש:",
593
+ "url": "",
594
+ "paginate": {
595
+ "first": "ראשון",
596
+ "previous": "קודם",
597
+ "next": "הבא",
598
+ "last": "אחרון"
599
+ }
600
+ }',
601
+ 'Hindi' => '{
602
+ "sProcessing": "प्रगति पे हैं ...",
603
+ "sLengthMenu": " _MENU_ प्रविष्टियां दिखाएं ",
604
+ "sZeroRecords": "रिकॉर्ड्स का मेल नहीं मिला",
605
+ "sInfo": "_START_ to _END_ of _TOTAL_ प्रविष्टियां दिखा रहे हैं",
606
+ "sInfoEmpty": "0 में से 0 से 0 प्रविष्टियां दिखा रहे हैं",
607
+ "sInfoFiltered": "(_MAX_ कुल प्रविष्टियों में से छठा हुआ)",
608
+ "sInfoPostFix": "",
609
+ "sSearch": "खोजें:",
610
+ "sUrl": "",
611
+ "oPaginate": {
612
+ "sFirst": "प्रथम",
613
+ "sPrevious": "पिछला",
614
+ "sNext": "अगला",
615
+ "sLast": "अंतिम"
616
+ }
617
+ }',
618
+ 'Hungarian' => '{
619
+ "sEmptyTable": "Nincs rendelkezésre álló adat",
620
+ "sInfo": "Találatok: _START_ - _END_ Összesen: _TOTAL_",
621
+ "sInfoEmpty": "Nulla találat",
622
+ "sInfoFiltered": "(_MAX_ összes rekord közül szűrve)",
623
+ "sInfoPostFix": "",
624
+ "sInfoThousands": " ",
625
+ "sLengthMenu": "_MENU_ találat oldalanként",
626
+ "sLoadingRecords": "Betöltés...",
627
+ "sProcessing": "Feldolgozás...",
628
+ "sSearch": "Keresés:",
629
+ "sZeroRecords": "Nincs a keresésnek megfelelő találat",
630
+ "oPaginate": {
631
+ "sFirst": "Első",
632
+ "sPrevious": "Előző",
633
+ "sNext": "Következő",
634
+ "sLast": "Utolsó"
635
+ },
636
+ "oAria": {
637
+ "sSortAscending": ": aktiválja a növekvő rendezéshez",
638
+ "sSortDescending": ": aktiválja a csökkenő rendezéshez"
639
+ }
640
+ }',
641
+ 'Icelandic' => '{
642
+ "sEmptyTable": "Engin gögn eru í þessari töflu",
643
+ "sInfo": "Sýni _START_ til _END_ af _TOTAL_ færslum",
644
+ "sInfoEmpty": "Sýni 0 til 0 af 0 færslum",
645
+ "sInfoFiltered": "(síað út frá _MAX_ færslum)",
646
+ "sInfoPostFix": "",
647
+ "sInfoThousands": ".",
648
+ "sLengthMenu": "Sýna _MENU_ færslur",
649
+ "sLoadingRecords": "Hleð...",
650
+ "sProcessing": "Úrvinnsla...",
651
+ "sSearch": "Leita:",
652
+ "sZeroRecords": "Engar færslur fundust",
653
+ "oPaginate": {
654
+ "sFirst": "Fyrsta",
655
+ "sLast": "Síðasta",
656
+ "sNext": "Næsta",
657
+ "sPrevious": "Fyrri"
658
+ },
659
+ "oAria": {
660
+ "sSortAscending": ": virkja til að raða dálki í hækkandi röð",
661
+ "sSortDescending": ": virkja til að raða dálki lækkandi í röð"
662
+ }
663
+ }',
664
+ 'Indonesian-Alternative' => '{
665
+ "sProcessing": "Sedang proses...",
666
+ "sLengthMenu": "Tampilan _MENU_ entri",
667
+ "sZeroRecords": "Tidak ditemukan data yang sesuai",
668
+ "sInfo": "Tampilan _START_ sampai _END_ dari _TOTAL_ entri",
669
+ "sInfoEmpty": "Tampilan 0 hingga 0 dari 0 entri",
670
+ "sInfoFiltered": "(disaring dari _MAX_ entri keseluruhan)",
671
+ "sInfoPostFix": "",
672
+ "sSearch": "Cari:",
673
+ "sUrl": "",
674
+ "oPaginate": {
675
+ "sFirst": "Awal",
676
+ "sPrevious": "Balik",
677
+ "sNext": "Lanjut",
678
+ "sLast": "Akhir"
679
+ }
680
+ }',
681
+ 'Indonesian' => '{
682
+ "sProcessing": "Sedang memproses...",
683
+ "sLengthMenu": "Tampilkan _MENU_ entri",
684
+ "sZeroRecords": "Tidak ditemukan data yang sesuai",
685
+ "sInfo": "Menampilkan _START_ sampai _END_ dari _TOTAL_ entri",
686
+ "sInfoEmpty": "Menampilkan 0 sampai 0 dari 0 entri",
687
+ "sInfoFiltered": "(disaring dari _MAX_ entri keseluruhan)",
688
+ "sInfoPostFix": "",
689
+ "sSearch": "Cari:",
690
+ "sUrl": "",
691
+ "oPaginate": {
692
+ "sFirst": "Pertama",
693
+ "sPrevious": "Sebelumnya",
694
+ "sNext": "Selanjutnya",
695
+ "sLast": "Terakhir"
696
+ }
697
+ }',
698
+ 'Irish' => '{
699
+ "sProcessing": "Próiseáil...",
700
+ "sLengthMenu": "Taispeáin iontrálacha _MENU_",
701
+ "sZeroRecords": "Gan aon taifead meaitseáil aimsithe",
702
+ "sInfo": "_START_ Showing a _END_ na n-iontrálacha _TOTAL_",
703
+ "sInfoEmpty": "Showing 0-0 na n-iontrálacha 0",
704
+ "sInfoFiltered": "(scagtha ó _MAX_ iontrálacha iomlán)",
705
+ "sInfoPostFix": "",
706
+ "sSearch": "Cuardaigh:",
707
+ "sUrl": "",
708
+ "oPaginate": {
709
+ "sFirst": "An Chéad",
710
+ "sPrevious": "Roimhe Seo",
711
+ "sNext": "Ar Aghaidh",
712
+ "sLast": "Last"
713
+ }
714
+ }',
715
+ 'Italian' => '{
716
+ "sEmptyTable": "Nessun dato presente nella tabella",
717
+ "sInfo": "Vista da _START_ a _END_ di _TOTAL_ elementi",
718
+ "sInfoEmpty": "Vista da 0 a 0 di 0 elementi",
719
+ "sInfoFiltered": "(filtrati da _MAX_ elementi totali)",
720
+ "sInfoPostFix": "",
721
+ "sInfoThousands": ".",
722
+ "sLengthMenu": "Visualizza _MENU_ elementi",
723
+ "sLoadingRecords": "Caricamento...",
724
+ "sProcessing": "Elaborazione...",
725
+ "sSearch": "Cerca:",
726
+ "sZeroRecords": "La ricerca non ha portato alcun risultato.",
727
+ "oPaginate": {
728
+ "sFirst": "Inizio",
729
+ "sPrevious": "Precedente",
730
+ "sNext": "Successivo",
731
+ "sLast": "Fine"
732
+ },
733
+ "oAria": {
734
+ "sSortAscending": ": attiva per ordinare la colonna in ordine crescente",
735
+ "sSortDescending": ": attiva per ordinare la colonna in ordine decrescente"
736
+ }
737
+ }',
738
+ 'Japanese' => '{
739
+ "sEmptyTable": "テーブルにデータがありません",
740
+ "sInfo": " _TOTAL_ 件中 _START_ から _END_ まで表示",
741
+ "sInfoEmpty": " 0 件中 0 から 0 まで表示",
742
+ "sInfoFiltered": "(全 _MAX_ 件より抽出)",
743
+ "sInfoPostFix": "",
744
+ "sInfoThousands": ",",
745
+ "sLengthMenu": "_MENU_ 件表示",
746
+ "sLoadingRecords": "読み込み中...",
747
+ "sProcessing": "処理中...",
748
+ "sSearch": "検索:",
749
+ "sZeroRecords": "一致するレコードがありません",
750
+ "oPaginate": {
751
+ "sFirst": "先頭",
752
+ "sLast": "最終",
753
+ "sNext": "次",
754
+ "sPrevious": "前"
755
+ },
756
+ "oAria": {
757
+ "sSortAscending": ": 列を昇順に並べ替えるにはアクティブにする",
758
+ "sSortDescending": ": 列を降順に並べ替えるにはアクティブにする"
759
+ }
760
+ }',
761
+ 'Kazakh' => '{
762
+ "processing": "Күте тұрыңыз...",
763
+ "search": "Іздеу:",
764
+ "lengthMenu": "Жазбалар _MENU_ көрсету",
765
+ "info": "_TOTAL_ жазбалары бойынша _START_ бастап _END_ дейінгі жазбалар",
766
+ "infoEmpty": "0 жазбалары бойынша 0 бастап 0 дейінгі жазбалар",
767
+ "infoFiltered": "(_MAX_ жазбасынан сұрыпталды)",
768
+ "infoPostFix": "",
769
+ "loadingRecords": "Жазбалар жүктемесі...",
770
+ "zeroRecords": "Жазбалар жоқ",
771
+ "emptyTable": "Кестеде деректер жоқ",
772
+ "paginate": {
773
+ "first": "Бірінші",
774
+ "previous": "Алдыңғысы",
775
+ "next": "Келесі",
776
+ "last": "Соңғы"
777
+ },
778
+ "aria": {
779
+ "sortAscending": ": өсімі бойынша бағанды сұрыптау үшін активациялау",
780
+ "sortDescending": ": кемуі бойынша бағанды сұрыптау үшін активациялау"
781
+ }
782
+ }',
783
+ 'Korean' => '{
784
+ "sEmptyTable": "데이터가 없습니다",
785
+ "sInfo": "_START_ - _END_ / _TOTAL_",
786
+ "sInfoEmpty": "0 - 0 / 0",
787
+ "sInfoFiltered": "(총 _MAX_ 개)",
788
+ "sInfoPostFix": "",
789
+ "sInfoThousands": ",",
790
+ "sLengthMenu": "페이지당 줄수 _MENU_",
791
+ "sLoadingRecords": "읽는중...",
792
+ "sProcessing": "처리중...",
793
+ "sSearch": "검색:",
794
+ "sZeroRecords": "검색 결과가 없습니다",
795
+ "oPaginate": {
796
+ "sFirst": "처음",
797
+ "sLast": "마지막",
798
+ "sNext": "다음",
799
+ "sPrevious": "이전"
800
+ },
801
+ "oAria": {
802
+ "sSortAscending": ": 오름차순 정렬",
803
+ "sSortDescending": ": 내림차순 정렬"
804
+ }
805
+ }',
806
+ 'Kyrgyz' => '{
807
+ "sEmptyTable": "Таблицада эч кандай берилиш жок",
808
+ "sInfo": "Жалпы _TOTAL_ саптын ичинен _START_-саптан _END_-сапка чейинкилер",
809
+ "sInfoEmpty": "Жалпы 0 саптын ичинен 0-саптан 0-сапка чейинкилер",
810
+ "sInfoFiltered": "(жалпы _MAX_ саптан фильтрленди)",
811
+ "sInfoPostFix": "",
812
+ "sInfoThousands": " ",
813
+ "sLengthMenu": "_MENU_ саптан көрсөт",
814
+ "sLoadingRecords": "Жүктөлүүдө...",
815
+ "sProcessing": "Иштеп жатат...",
816
+ "sSearch": "Издөө:",
817
+ "sZeroRecords": "Туура келген бир да сап жок",
818
+ "oPaginate": {
819
+ "sFirst": "Биринчи",
820
+ "sLast": "Акыркы",
821
+ "sNext": "Кийинки",
822
+ "sPrevious": "Мурунку"
823
+ },
824
+ "oAria": {
825
+ "sSortAscending": ": иретте",
826
+ "sSortDescending": ": тескери иретте"
827
+ }
828
+ }',
829
+ 'Latvian' => '{
830
+ "processing": "Uzgaidiet...",
831
+ "search": "Meklēt:",
832
+ "lengthMenu": "Rādīt _MENU_ ierakstus",
833
+ "info": "Parādīti _START_. līdz _END_. no _TOTAL_ ierakstiem",
834
+ "infoEmpty": "Nav ierakstu",
835
+ "infoFiltered": "(atlasīts no pavisam _MAX_ ierakstiem)",
836
+ "infoPostFix": "",
837
+ "loadingRecords": "Iekraušanas ieraksti ...",
838
+ "zeroRecords": "Nav atrasti vaicājumam atbilstoši ieraksti",
839
+ "emptyTable:": "Tabula nav datu",
840
+ "paginate": {
841
+ "first": "Pirmā",
842
+ "previous": "Iepriekšējā",
843
+ "next": "Nākošā",
844
+ "last": "Pēdējā"
845
+ },
846
+ "aria": {
847
+ "sortAscending": ": aktivizēt kolonnu, lai kārtotu augošā",
848
+ "sortDescending": ": aktivizēt kolonnu, lai kārtotu dilstošā"
849
+ }
850
+ }',
851
+ 'Lithuanian' => '{
852
+ "sEmptyTable": "No data in the table",
853
+ "sInfo": "Showing entries from _START_ to _END_ of _TOTAL_ entries",
854
+ "sInfoEmpty": "Showing entries 0 to 0 of 0",
855
+ "sInfoFiltered": "(selected from _MAX_ records)",
856
+ "sInfoPostFix": "",
857
+ "sInfoThousands": "",
858
+ "sLengthMenu": "Show _MENU_ entries",
859
+ "sLoadingRecords": "Loading ...",
860
+ "sProcessing": "Processing ...",
861
+ "sSearch": "Search for:",
862
+ "sThousands": "",
863
+ "sUrl": "",
864
+ "sZeroRecords": "No Records Found",
865
+
866
+ "oPaginate": {
867
+ "sFirst": "First",
868
+ "sPrevious": "Previous",
869
+ "sNext": "Next",
870
+ "sLast": "Last"
871
+ }
872
+ }',
873
+ 'Macedonian' => '{
874
+ "sProcessing": "Процесирање...",
875
+ "sLengthMenu": "Прикажи _MENU_ записи",
876
+ "sZeroRecords": "Не се пронајдени записи",
877
+ "sEmptyTable": "Нема податоци во табелата",
878
+ "sLoadingRecords": "Вчитување...",
879
+ "sInfo": "Прикажани _START_ до _END_ од _TOTAL_ записи",
880
+ "sInfoEmpty": "Прикажани 0 до 0 од 0 записи",
881
+ "sInfoFiltered": "(филтрирано од вкупно _MAX_ записи)",
882
+ "sInfoPostFix": "",
883
+ "sSearch": "Барај",
884
+ "sUrl": "",
885
+ "oPaginate": {
886
+ "sFirst": "Почетна",
887
+ "sPrevious": "Претходна",
888
+ "sNext": "Следна",
889
+ "sLast": "Последна"
890
+ }
891
+ }',
892
+ 'Malay' => '{
893
+ "sEmptyTable": "Tiada data",
894
+ "sInfo": "Paparan dari _START_ hingga _END_ dari _TOTAL_ rekod",
895
+ "sInfoEmpty": "Paparan 0 hingga 0 dari 0 rekod",
896
+ "sInfoFiltered": "(Ditapis dari jumlah _MAX_ rekod)",
897
+ "sInfoPostFix": "",
898
+ "sInfoThousands": ",",
899
+ "sLengthMenu": "Papar _MENU_ rekod",
900
+ "sLoadingRecords": "Diproses...",
901
+ "sProcessing": "Sedang diproses...",
902
+ "sSearch": "Carian:",
903
+ "sZeroRecords": "Tiada padanan rekod yang dijumpai.",
904
+ "oPaginate": {
905
+ "sFirst": "Pertama",
906
+ "sPrevious": "Sebelum",
907
+ "sNext": "Kemudian",
908
+ "sLast": "Akhir"
909
+ },
910
+ "oAria": {
911
+ "sSortAscending": ": diaktifkan kepada susunan lajur menaik",
912
+ "sSortDescending": ": diaktifkan kepada susunan lajur menurun"
913
+ }
914
+ }',
915
+ 'Mongolian' => '{
916
+ "sEmptyTable": "Хүснэгт хоосон байна",
917
+ "sInfo": "Нийт _TOTAL_ бичлэгээс _START_ - _END_ харуулж байна",
918
+ "sInfoEmpty": "Тохирох үр дүн алга",
919
+ "sInfoFiltered": "(нийт _MAX_ бичлэгээс шүүв)",
920
+ "sInfoPostFix": "",
921
+ "sInfoThousands": ",",
922
+ "sLengthMenu": "Дэлгэцэд _MENU_ бичлэг харуулна",
923
+ "sLoadingRecords": "Ачааллаж байна...",
924
+ "sProcessing": "Боловсруулж байна...",
925
+ "sSearch": "Хайлт:",
926
+ "sZeroRecords": "Тохирох бичлэг олдсонгүй",
927
+ "oPaginate": {
928
+ "sFirst": "Эхнийх",
929
+ "sLast": "Сүүлийнх",
930
+ "sNext": "Өмнөх",
931
+ "sPrevious": "Дараах"
932
+ },
933
+ "oAria": {
934
+ "sSortAscending": ": цагаан толгойн дарааллаар эрэмбэлэх",
935
+ "sSortDescending": ": цагаан толгойн эсрэг дарааллаар эрэмбэлэх"
936
+ }
937
+ }',
938
+ 'Nepali' => '{
939
+ "sEmptyTable": "टेबलमा डाटा उपलब्ध भएन",
940
+ "sInfo": "_TOTAL_ रेकर्ड मध्य _START_ देखि _END_ रेकर्ड देखाउंदै",
941
+ "sInfoEmpty": "0 मध्य 0 देखि 0 रेकर्ड देखाउंदै",
942
+ "sInfoFiltered": "(_MAX_ कुल रेकर्डबाट छनौट गरिएको)",
943
+ "sInfoPostFix": "",
944
+ "sInfoThousands": ",",
945
+ "sLengthMenu": " _MENU_ रेकर्ड देखाउने ",
946
+ "sLoadingRecords": "लोड हुँदैछ...",
947
+ "sProcessing": "प्रगति हुदैंछ ...",
948
+ "sSearch": "खोजी:",
949
+ "sUrl": "",
950
+ "sZeroRecords": "कुनै मिल्ने रेकर्ड फेला परेन",
951
+ "oPaginate": {
952
+ "sFirst": "प्रथम",
953
+ "sPrevious": "पछिल्लो",
954
+ "sNext": "अघिल्लो",
955
+ "sLast": "अन्तिम"
956
+ },
957
+ "oAria": {
958
+ "sSortAscending": ": अगाडिबाट अक्षरात्मक रूपमा क्रमबद्ध गराउने",
959
+ "sSortDescending": ": पछाडिबाट अक्षरात्मक रूपमा क्रमबद्ध गराउने"
960
+ }
961
+ }',
962
+ 'Norwegian-Bokmal' => '{
963
+ "sEmptyTable": "Ingen data tilgjengelig i tabellen",
964
+ "sInfo": "Viser _START_ til _END_ av _TOTAL_ linjer",
965
+ "sInfoEmpty": "Viser 0 til 0 av 0 linjer",
966
+ "sInfoFiltered": "(filtrert fra _MAX_ totalt antall linjer)",
967
+ "sInfoPostFix": "",
968
+ "sInfoThousands": " ",
969
+ "sLoadingRecords": "Laster...",
970
+ "sLengthMenu": "Vis _MENU_ linjer",
971
+ "sLoadingRecords": "Laster...",
972
+ "sProcessing": "Laster...",
973
+ "sSearch": "S&oslash;k:",
974
+ "sUrl": "",
975
+ "sZeroRecords": "Ingen linjer matcher s&oslash;ket",
976
+ "oPaginate": {
977
+ "sFirst": "F&oslash;rste",
978
+ "sPrevious": "Forrige",
979
+ "sNext": "Neste",
980
+ "sLast": "Siste"
981
+ },
982
+ "oAria": {
983
+ "sSortAscending": ": aktiver for å sortere kolonnen stigende",
984
+ "sSortDescending": ": aktiver for å sortere kolonnen synkende"
985
+ }
986
+ }',
987
+ 'Norwegian-Nynorsk' => '{
988
+ "sEmptyTable": "Inga data tilgjengeleg i tabellen",
989
+ "sInfo": "Syner _START_ til _END_ av _TOTAL_ linjer",
990
+ "sInfoEmpty": "Syner 0 til 0 av 0 linjer",
991
+ "sInfoFiltered": "(filtrert frå _MAX_ totalt antal linjer)",
992
+ "sInfoPostFix": "",
993
+ "sInfoThousands": " ",
994
+ "sLoadingRecords": "Lastar...",
995
+ "sLengthMenu": "Syn _MENU_ linjer",
996
+ "sLoadingRecords": "Lastar...",
997
+ "sProcessing": "Lastar...",
998
+ "sSearch": "S&oslash;k:",
999
+ "sUrl": "",
1000
+ "sZeroRecords": "Inga linjer treff p&aring; s&oslash;ket",
1001
+ "oPaginate": {
1002
+ "sFirst": "Fyrste",
1003
+ "sPrevious": "Forrige",
1004
+ "sNext": "Neste",
1005
+ "sLast": "Siste"
1006
+ },
1007
+ "oAria": {
1008
+ "sSortAscending": ": aktiver for å sortere kolonna stigande",
1009
+ "sSortDescending": ": aktiver for å sortere kolonna synkande"
1010
+ }
1011
+ }',
1012
+ 'Pashto' => '{
1013
+ "sEmptyTable": "جدول خالي دی",
1014
+ "sInfo": "د _START_ څخه تر _END_ پوري، له ټولو _TOTAL_ څخه",
1015
+ "sInfoEmpty": "د 0 څخه تر 0 پوري، له ټولو 0 څخه",
1016
+ "sInfoFiltered": "(لټول سوي له ټولو _MAX_ څخه)",
1017
+ "sInfoPostFix": "",
1018
+ "sInfoThousands": ",",
1019
+ "sLengthMenu": "_MENU_ کتاره وښايه",
1020
+ "sLoadingRecords": "منتظر اوسئ...",
1021
+ "sProcessing": "منتظر اوسئ...",
1022
+ "sSearch": "لټون:",
1023
+ "sZeroRecords": "د لټون مطابق معلومات و نه موندل سول",
1024
+ "oPaginate": {
1025
+ "sFirst": "لومړۍ",
1026
+ "sLast": "وروستۍ",
1027
+ "sNext": "بله",
1028
+ "sPrevious": "شاته"
1029
+ },
1030
+ "oAria": {
1031
+ "sSortAscending": ": په صعودي ډول مرتبول",
1032
+ "sSortDescending": ": په نزولي ډول مرتبول"
1033
+ }
1034
+ }',
1035
+ 'Persian' => '{
1036
+ "sEmptyTable": "هیچ داده ای در جدول وجود ندارد",
1037
+ "sInfo": "نمایش _START_ تا _END_ از _TOTAL_ رکورد",
1038
+ "sInfoEmpty": "نمایش 0 تا 0 از 0 رکورد",
1039
+ "sInfoFiltered": "(فیلتر شده از _MAX_ رکورد)",
1040
+ "sInfoPostFix": "",
1041
+ "sInfoThousands": ",",
1042
+ "sLengthMenu": "نمایش _MENU_ رکورد",
1043
+ "sLoadingRecords": "در حال بارگزاری...",
1044
+ "sProcessing": "در حال پردازش...",
1045
+ "sSearch": "جستجو:",
1046
+ "sZeroRecords": "رکوردی با این مشخصات پیدا نشد",
1047
+ "oPaginate": {
1048
+ "sFirst": "ابتدا",
1049
+ "sLast": "انتها",
1050
+ "sNext": "بعدی",
1051
+ "sPrevious": "قبلی"
1052
+ },
1053
+ "oAria": {
1054
+ "sSortAscending": ": فعال سازی نمایش به صورت صعودی",
1055
+ "sSortDescending": ": فعال سازی نمایش به صورت نزولی"
1056
+ }
1057
+ }',
1058
+ 'Polish' => '{
1059
+ "processing": "Przetwarzanie...",
1060
+ "search": "Szukaj:",
1061
+ "lengthMenu": "Pokaż _MENU_ pozycji",
1062
+ "info": "Pozycje od _START_ do _END_ z _TOTAL_ łącznie",
1063
+ "infoEmpty": "Pozycji 0 z 0 dostępnych",
1064
+ "infoFiltered": "(filtrowanie spośród _MAX_ dostępnych pozycji)",
1065
+ "infoPostFix": "",
1066
+ "loadingRecords": "Wczytywanie...",
1067
+ "zeroRecords": "Nie znaleziono pasujących pozycji",
1068
+ "emptyTable": "Brak danych",
1069
+ "paginate": {
1070
+ "first": "Pierwsza",
1071
+ "previous": "Poprzednia",
1072
+ "next": "Następna",
1073
+ "last": "Ostatnia"
1074
+ },
1075
+ "aria": {
1076
+ "sortAscending": ": aktywuj, by posortować kolumnę rosnąco",
1077
+ "sortDescending": ": aktywuj, by posortować kolumnę malejąco"
1078
+ }
1079
+ }',
1080
+ 'Portuguese-Brasil' => '{
1081
+ "sEmptyTable": "Nenhum registro encontrado",
1082
+ "sInfo": "Mostrando de _START_ até _END_ de _TOTAL_ registros",
1083
+ "sInfoEmpty": "Mostrando 0 até 0 de 0 registros",
1084
+ "sInfoFiltered": "(Filtrados de _MAX_ registros)",
1085
+ "sInfoPostFix": "",
1086
+ "sInfoThousands": ".",
1087
+ "sLengthMenu": "_MENU_ resultados por página",
1088
+ "sLoadingRecords": "Carregando...",
1089
+ "sProcessing": "Processando...",
1090
+ "sZeroRecords": "Nenhum registro encontrado",
1091
+ "sSearch": "Pesquisar",
1092
+ "oPaginate": {
1093
+ "sNext": "Próximo",
1094
+ "sPrevious": "Anterior",
1095
+ "sFirst": "Primeiro",
1096
+ "sLast": "Último"
1097
+ },
1098
+ "oAria": {
1099
+ "sSortAscending": ": Ordenar colunas de forma ascendente",
1100
+ "sSortDescending": ": Ordenar colunas de forma descendente"
1101
+ }
1102
+ }',
1103
+ 'Portuguese' => '{
1104
+ "sProcessing": "A processar...",
1105
+ "sLengthMenu": "Mostrar _MENU_ registos",
1106
+ "sZeroRecords": "Não foram encontrados resultados",
1107
+ "sInfo": "Mostrando de _START_ até _END_ de _TOTAL_ registos",
1108
+ "sInfoEmpty": "Mostrando de 0 até 0 de 0 registos",
1109
+ "sInfoFiltered": "(filtrado de _MAX_ registos no total)",
1110
+ "sInfoPostFix": "",
1111
+ "sSearch": "Procurar:",
1112
+ "sUrl": "",
1113
+ "oPaginate": {
1114
+ "sFirst": "Primeiro",
1115
+ "sPrevious": "Anterior",
1116
+ "sNext": "Seguinte",
1117
+ "sLast": "Último"
1118
+ }
1119
+ }',
1120
+ 'Romanian' => '{
1121
+ "sProcessing": "Procesează...",
1122
+ "sLengthMenu": "Afișează _MENU_ înregistrări pe pagină",
1123
+ "sZeroRecords": "Nu am găsit nimic - ne pare rău",
1124
+ "sInfo": "Afișate de la _START_ la _END_ din _TOTAL_ înregistrări",
1125
+ "sInfoEmpty": "Afișate de la 0 la 0 din 0 înregistrări",
1126
+ "sInfoFiltered": "(filtrate dintr-un total de _MAX_ înregistrări)",
1127
+ "sInfoPostFix": "",
1128
+ "sSearch": "Caută:",
1129
+ "sUrl": "",
1130
+ "oPaginate": {
1131
+ "sFirst": "Prima",
1132
+ "sPrevious": "Precedenta",
1133
+ "sNext": "Următoarea",
1134
+ "sLast": "Ultima"
1135
+ }
1136
+ }',
1137
+ 'Russian' => '{
1138
+ "processing": "Подождите...",
1139
+ "search": "Поиск:",
1140
+ "lengthMenu": "Показать _MENU_ записей",
1141
+ "info": "Записи с _START_ до _END_ из _TOTAL_ записей",
1142
+ "infoEmpty": "Записи с 0 до 0 из 0 записей",
1143
+ "infoFiltered": "(отфильтровано из _MAX_ записей)",
1144
+ "infoPostFix": "",
1145
+ "loadingRecords": "Загрузка записей...",
1146
+ "zeroRecords": "Записи отсутствуют.",
1147
+ "emptyTable": "В таблице отсутствуют данные",
1148
+ "paginate": {
1149
+ "first": "Первая",
1150
+ "previous": "Предыдущая",
1151
+ "next": "Следующая",
1152
+ "last": "Последняя"
1153
+ },
1154
+ "aria": {
1155
+ "sortAscending": ": активировать для сортировки столбца по возрастанию",
1156
+ "sortDescending": ": активировать для сортировки столбца по убыванию"
1157
+ }
1158
+ }',
1159
+ 'Serbian' => '{
1160
+ "sProcessing": "Procesiranje u toku...",
1161
+ "sLengthMenu": "Prikaži _MENU_ elemenata",
1162
+ "sZeroRecords": "Nije pronađen nijedan rezultat",
1163
+ "sInfo": "Prikaz _START_ do _END_ od ukupno _TOTAL_ elemenata",
1164
+ "sInfoEmpty": "Prikaz 0 do 0 od ukupno 0 elemenata",
1165
+ "sInfoFiltered": "(filtrirano od ukupno _MAX_ elemenata)",
1166
+ "sInfoPostFix": "",
1167
+ "sSearch": "Pretraga:",
1168
+ "sUrl": "",
1169
+ "oPaginate": {
1170
+ "sFirst": "Početna",
1171
+ "sPrevious": "Prethodna",
1172
+ "sNext": "Sledeća",
1173
+ "sLast": "Poslednja"
1174
+ }
1175
+ }',
1176
+ 'Sinhala' => '{
1177
+ "sEmptyTable": "වගුවේ දත්ත කිසිවක් නොමැත",
1178
+ "sInfo": "_TOTAL_ න් _START_ සිට _END_ දක්වා",
1179
+ "sInfoEmpty": "0 න් 0 සිට 0 දක්වා",
1180
+ "sInfoFiltered": "(_MAX_ න් තෝරාගත් )",
1181
+ "sInfoPostFix": "",
1182
+ "sInfoThousands": ",",
1183
+ "sLengthMenu": "_MENU_ ක් පෙන්වන්න",
1184
+ "sLoadingRecords": "පූරණය වෙමින් පවතී...",
1185
+ "sProcessing": "සැකසෙමින් පවතී...",
1186
+ "sSearch": "සොයන්න :",
1187
+ "sZeroRecords": "ගැලපෙන වාර්තා නොමැත.",
1188
+ "oPaginate": {
1189
+ "sFirst": "පළමු",
1190
+ "sLast": "අන්තිම",
1191
+ "sNext": "ඊළග",
1192
+ "sPrevious": "පසුගිය"
1193
+ },
1194
+ "oAria": {
1195
+ "sSortAscending": ": තීරුව ආරෝහනව තෝරන්න",
1196
+ "sSortDescending": ": තීරුව අවරෝහනව තෝරන්න"
1197
+ }
1198
+ }',
1199
+ 'Slovak' => '{
1200
+ "sEmptyTable": "Nie sú k dispozícii žiadne dáta",
1201
+ "sInfo": "Záznamy _START_ až _END_ z celkom _TOTAL_",
1202
+ "sInfoEmpty": "Záznamy 0 až 0 z celkom 0 ",
1203
+ "sInfoFiltered": "(vyfiltrované spomedzi _MAX_ záznamov)",
1204
+ "sInfoPostFix": "",
1205
+ "sInfoThousands": ",",
1206
+ "sLengthMenu": "Zobraz _MENU_ záznamov",
1207
+ "sLoadingRecords": "Načítavam...",
1208
+ "sProcessing": "Spracúvam...",
1209
+ "sSearch": "Hľadať:",
1210
+ "sZeroRecords": "Nenašli sa žiadne vyhovujúce záznamy",
1211
+ "oPaginate": {
1212
+ "sFirst": "Prvá",
1213
+ "sLast": "Posledná",
1214
+ "sNext": "Nasledujúca",
1215
+ "sPrevious": "Predchádzajúca"
1216
+ },
1217
+ "oAria": {
1218
+ "sSortAscending": ": aktivujte na zoradenie stĺpca vzostupne",
1219
+ "sSortDescending": ": aktivujte na zoradenie stĺpca zostupne"
1220
+ }
1221
+ }',
1222
+ 'Slovenian' => '{
1223
+ "sEmptyTable": "Nobenih podatkov ni na voljo",
1224
+ "sInfo": "Prikazujem _START_ do _END_ od _TOTAL_ zapisov",
1225
+ "sInfoEmpty": "Prikazujem 0 do 0 od 0 zapisov",
1226
+ "sInfoFiltered": "(filtrirano od _MAX_ vseh zapisov)",
1227
+ "sInfoPostFix": "",
1228
+ "sInfoThousands": ",",
1229
+ "sLengthMenu": "Prikaži _MENU_ zapisov",
1230
+ "sLoadingRecords": "Nalagam...",
1231
+ "sProcessing": "Obdelujem...",
1232
+ "sSearch": "Išči:",
1233
+ "sZeroRecords": "Nobeden zapis ne ustreza",
1234
+ "oPaginate": {
1235
+ "sFirst": "Prvi",
1236
+ "sLast": "Zadnji",
1237
+ "sNext": "Nasl.",
1238
+ "sPrevious": "Pred."
1239
+ },
1240
+ "oAria": {
1241
+ "sSortAscending": ": vključite za naraščujoči sort",
1242
+ "sSortDescending": ": vključite za padajoči sort"
1243
+ }
1244
+ }',
1245
+ 'Spanish' => '{
1246
+ "sProcessing": "Procesando...",
1247
+ "sLengthMenu": "Mostrar _MENU_ registros",
1248
+ "sZeroRecords": "No se encontraron resultados",
1249
+ "sEmptyTable": "Ningún dato disponible en esta tabla",
1250
+ "sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_ registros",
1251
+ "sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0 registros",
1252
+ "sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
1253
+ "sInfoPostFix": "",
1254
+ "sSearch": "Buscar:",
1255
+ "sUrl": "",
1256
+ "sInfoThousands": ",",
1257
+ "sLoadingRecords": "Cargando...",
1258
+ "oPaginate": {
1259
+ "sFirst": "Primero",
1260
+ "sLast": "Último",
1261
+ "sNext": "Siguiente",
1262
+ "sPrevious": "Anterior"
1263
+ },
1264
+ "oAria": {
1265
+ "sSortAscending": ": Activar para ordenar la columna de manera ascendente",
1266
+ "sSortDescending": ": Activar para ordenar la columna de manera descendente"
1267
+ }
1268
+ }',
1269
+ 'Swahili' => '{
1270
+ "sEmptyTable": "Hakuna data iliyo patikana",
1271
+ "sInfo": "Inaonyesha _START_ mpaka _END_ ya matokeo _TOTAL_",
1272
+ "sInfoEmpty": "Inaonyesha 0 hadi 0 ya matokeo 0",
1273
+ "sInfoFiltered": "(uschujo kutoka matokeo idadi _MAX_)",
1274
+ "sInfoPostFix": "",
1275
+ "sInfoThousands": ",",
1276
+ "sLengthMenu": "Onyesha _MENU_ matokeo",
1277
+ "sLoadingRecords": "Inapakia...",
1278
+ "sProcessing": "Processing...",
1279
+ "sSearch": "Tafuta:",
1280
+ "sZeroRecords": "Rekodi vinavyolingana haziku patikana",
1281
+ "oPaginate": {
1282
+ "sFirst": "Mwanzo",
1283
+ "sLast": "Mwisho",
1284
+ "sNext": "Ijayo",
1285
+ "sPrevious": "Kabla"
1286
+ },
1287
+ "oAria": {
1288
+ "sSortAscending": ": seti kulainisha sanjari kwa mtindo wa upandaji",
1289
+ "sSortDescending": ": seti kulainisha sanjari kwa mtindo wa mteremko"
1290
+ }
1291
+ }',
1292
+ 'Swedish' => '{
1293
+ "sEmptyTable": "Tabellen innehåller ingen data",
1294
+ "sInfo": "Visar _START_ till _END_ av totalt _TOTAL_ rader",
1295
+ "sInfoEmpty": "Visar 0 till 0 av totalt 0 rader",
1296
+ "sInfoFiltered": "(filtrerade från totalt _MAX_ rader)",
1297
+ "sInfoPostFix": "",
1298
+ "sInfoThousands": " ",
1299
+ "sLengthMenu": "Visa _MENU_ rader",
1300
+ "sLoadingRecords": "Laddar...",
1301
+ "sProcessing": "Bearbetar...",
1302
+ "sSearch": "Sök:",
1303
+ "sZeroRecords": "Hittade inga matchande resultat",
1304
+ "oPaginate": {
1305
+ "sFirst": "Första",
1306
+ "sLast": "Sista",
1307
+ "sNext": "Nästa",
1308
+ "sPrevious": "Föregående"
1309
+ },
1310
+ "oAria": {
1311
+ "sSortAscending": ": aktivera för att sortera kolumnen i stigande ordning",
1312
+ "sSortDescending": ": aktivera för att sortera kolumnen i fallande ordning"
1313
+ }
1314
+ }',
1315
+ 'Tamil' => '{
1316
+ "sEmptyTable": "அட்டவணையில் தரவு கிடைக்கவில்லை",
1317
+ "sInfo": "உள்ளீடுகளை் _START_ முதல _END_ உள்ள _TOTAL_ காட்டும்",
1318
+ "sInfoEmpty": "0 உள்ளீடுகளை 0 0 காட்டும்",
1319
+ "sInfoFiltered": "(_MAX_ மொத்த உள்ளீடுகளை இருந்து வடிகட்டி)",
1320
+ "sInfoPostFix": "",
1321
+ "sInfoThousands": ",",
1322
+ "sLengthMenu": "_MENU_ காண்பி",
1323
+ "sLoadingRecords": "ஏற்றுகிறது ...",
1324
+ "sProcessing": "செயலாக்க ...",
1325
+ "sSearch": "தேடல்:",
1326
+ "sZeroRecords": "பொருத்தமான பதிவுகள் இல்லை",
1327
+ "oPaginate": {
1328
+ "sFirst": "முதல்",
1329
+ "sLast": "இறுதி",
1330
+ "sNext": "அடுத்து",
1331
+ "sPrevious": "முந்தைய"
1332
+ },
1333
+ "oAria": {
1334
+ "sSortAscending": ": நிரலை ஏறுவரிசையில் வரிசைப்படுத்த செயல்படுத்த",
1335
+ "sSortDescending": ": நிரலை இறங்கு வரிசைப்படுத்த செயல்படுத்த"
1336
+ }
1337
+ }',
1338
+ 'telugu' => '{
1339
+ "sEmptyTable": "పట్టికలో డేటా లేదు.",
1340
+ "sInfo": "మొత్తం _TOTAL_ ఎంట్రీలులో _START_ నుండి _END_ వరకు చూపిస్తున్నాం",
1341
+ "sInfoEmpty": "చూపిస్తున్నాం 0 నుండి 0 వరకు 0 ఎంట్రీలు లో",
1342
+ "sInfoFiltered": "( _MAX_ ఎంట్రీలులో నుండి వడపోయాబడినవి)",
1343
+ "sInfoPostFix": "",
1344
+ "sInfoThousands": ",",
1345
+ "sLengthMenu": " _MENU_ ఎంట్రీలు చూపించు",
1346
+ "sLoadingRecords": "లోడ్ అవుతుంది ...",
1347
+ "sProcessing": "ప్రాసెస్ చేయబడుతుంది...",
1348
+ "sSearch": "వెతుకు:",
1349
+ "sZeroRecords": "మ్యాచింగ్ రికార్డులు లేవు",
1350
+ "oPaginate": {
1351
+ "sFirst": "మొదటి",
1352
+ "sLast": "చివరి",
1353
+ "sNext": "తర్వాత",
1354
+ "sPrevious": "మునుపటి"
1355
+ },
1356
+ "oAria": {
1357
+ "sSortAscending": ": నిలువరుసను ఆరోహణ క్రమం అమర్చండి",
1358
+ "sSortDescending": ": నిలువరుసను అవరోహణ క్రమం అమర్చండి"
1359
+ }
1360
+ }',
1361
+ 'Thai' => '{
1362
+ "sProcessing": "กำลังดำเนินการ...",
1363
+ "sLengthMenu": "แสดง _MENU_ แถว",
1364
+ "sZeroRecords": "ไม่พบข้อมูล",
1365
+ "sInfo": "แสดง _START_ ถึง _END_ จาก _TOTAL_ แถว",
1366
+ "sInfoEmpty": "แสดง 0 ถึง 0 จาก 0 แถว",
1367
+ "sInfoFiltered": "(กรองข้อมูล _MAX_ ทุกแถว)",
1368
+ "sInfoPostFix": "",
1369
+ "sSearch": "ค้นหา: ",
1370
+ "sUrl": "",
1371
+ "oPaginate": {
1372
+ "sFirst": "หน้าแรก",
1373
+ "sPrevious": "ก่อนหน้า",
1374
+ "sNext": "ถัดไป",
1375
+ "sLast": "หน้าสุดท้าย"
1376
+ }
1377
+ }',
1378
+ 'Turkish' => '{
1379
+ "sDecimal": ",",
1380
+ "sEmptyTable": "Tabloda herhangi bir veri mevcut değil",
1381
+ "sInfo": "_TOTAL_ kayıttan _START_ - _END_ arasındaki kayıtlar gösteriliyor",
1382
+ "sInfoEmpty": "Kayıt yok",
1383
+ "sInfoFiltered": "(_MAX_ kayıt içerisinden bulunan)",
1384
+ "sInfoPostFix": "",
1385
+ "sInfoThousands": ".",
1386
+ "sLengthMenu": "Sayfada _MENU_ kayıt göster",
1387
+ "sLoadingRecords": "Yükleniyor...",
1388
+ "sProcessing": "İşleniyor...",
1389
+ "sSearch": "Ara:",
1390
+ "sZeroRecords": "Eşleşen kayıt bulunamadı",
1391
+ "oPaginate": {
1392
+ "sFirst": "İlk",
1393
+ "sLast": "Son",
1394
+ "sNext": "Sonraki",
1395
+ "sPrevious": "Önceki"
1396
+ },
1397
+ "oAria": {
1398
+ "sSortAscending": ": artan sütun sıralamasını aktifleştir",
1399
+ "sSortDescending": ": azalan sütun sıralamasını aktifleştir"
1400
+ }
1401
+ }',
1402
+ 'Ukrainian' => '{
1403
+ "sProcessing": "Зачекайте...",
1404
+ "sLengthMenu": "Показати _MENU_ записів",
1405
+ "sZeroRecords": "Записи відсутні.",
1406
+ "sInfo": "Записи з _START_ по _END_ із _TOTAL_ записів",
1407
+ "sInfoEmpty": "Записи з 0 по 0 із 0 записів",
1408
+ "sInfoFiltered": "(відфільтровано з _MAX_ записів)",
1409
+ "sInfoPostFix": "",
1410
+ "sSearch": "Пошук:",
1411
+ "sUrl": "",
1412
+ "oPaginate": {
1413
+ "sFirst": "Перша",
1414
+ "sPrevious": "Попередня",
1415
+ "sNext": "Наступна",
1416
+ "sLast": "Остання"
1417
+ },
1418
+ "oAria": {
1419
+ "sSortAscending": ": активувати для сортування стовпців за зростанням",
1420
+ "sSortDescending": ": активувати для сортування стовпців за спаданням"
1421
+ }
1422
+ }',
1423
+ 'Urdu' => '{
1424
+ "sProcessing": "ہے جاري عملدرامد...",
1425
+ "sLengthMenu": "دکہائين شقيں کي (_MENU_) فہرست",
1426
+ "sZeroRecords": "ملے نہيں مفروضات جلتے ملتے کوئ",
1427
+ "sInfo": "فہرست کي تک _END_ سے _START_ سے ميں _TOTAL_ فہرست پوري ہے نظر پيش",
1428
+ "sInfoEmpty": "فہرست کي تک 0 سے 0 سے ميں 0 قل ہے نظر پيشّ",
1429
+ "sInfoFiltered": "(فہرست ہوئ چھني سے ميں _MAX_ قل)",
1430
+ "sInfoPostFix": "",
1431
+ "sSearch": "کرو تلاش:",
1432
+ "sUrl": "",
1433
+ "oPaginate": {
1434
+ "sFirst": "پہلا",
1435
+ "sPrevious": "پچہلا",
1436
+ "sNext": "اگلا",
1437
+ "sLast": "آخري"
1438
+ }
1439
+ }',
1440
+ 'Uzbek' => '{
1441
+ "sEmptyTable": "Ma\'lumot yo\'q",
1442
+ "sInfo": "Umumiy _TOTAL_ yozuvlarlardan _START_ dan _END_ gachasi ko\'rsatilmoqda",
1443
+ "sInfoEmpty": "Umumiy 0 yozuvlardan 0 dan 0 gachasi ko\'rsatilmoqda",
1444
+ "sInfoFiltered": "(_MAX_ yozuvlardan filtrlandi)",
1445
+ "sInfoPostFix": "",
1446
+ "sLengthMenu": "_MENU_ ta yozuvlarni ko\'rsat",
1447
+ "sLoadingRecords": "Yozuvlar yuklanmoqda...",
1448
+ "sProcessing": "Ishlayapman...",
1449
+ "sSearch": "Izlash:",
1450
+ "sZeroRecords": "Ma\'lumot yo\'q.",
1451
+ "oPaginate": {
1452
+ "sFirst": "Birinchi",
1453
+ "sPrevious": "Avvalgi",
1454
+ "sNext": "Keyingi",
1455
+ "sLast": "Son\'ggi"
1456
+ },
1457
+ "oAria": {
1458
+ "sSortAscending": ": to\'g\'ri tartiblash",
1459
+ "sSortDescending": ": teskari tartiblash"
1460
+ }
1461
+ }',
1462
+ 'Vietnamese' => '{
1463
+ "sProcessing": "Đang xử lý...",
1464
+ "sLengthMenu": "Xem _MENU_ mục",
1465
+ "sZeroRecords": "Không tìm thấy dòng nào phù hợp",
1466
+ "sInfo": "Đang xem _START_ đến _END_ trong tổng số _TOTAL_ mục",
1467
+ "sInfoEmpty": "Đang xem 0 đến 0 trong tổng số 0 mục",
1468
+ "sInfoFiltered": "(được lọc từ _MAX_ mục)",
1469
+ "sInfoPostFix": "",
1470
+ "sSearch": "Tìm:",
1471
+ "sUrl": "",
1472
+ "oPaginate": {
1473
+ "sFirst": "Đầu",
1474
+ "sPrevious": "Trước",
1475
+ "sNext": "Tiếp",
1476
+ "sLast": "Cuối"
1477
+ }
1478
+ }',
1479
+ 'Welsh' => '{
1480
+ "sEmptyTable": "Dim data ar gael yn y tabl",
1481
+ "sInfo": "Dangos _START_ i _END_ o _TOTAL_ cofnod",
1482
+ "sInfoEmpty": "Dangos 0 i 0 o 0 cofnod",
1483
+ "sInfoFiltered": "(wedi hidlo o gyfanswm o _MAX_ cofnod)",
1484
+ "sInfoPostFix": "",
1485
+ "sInfoThousands": ",",
1486
+ "sLengthMenu": "Dangos _MENU_ cofnod",
1487
+ "sLoadingRecords": "Wrthi\'n llwytho...",
1488
+ "sProcessing": "Wrthi\'n prosesu...",
1489
+ "sSearch": "Chwilio:",
1490
+ "sZeroRecords": "Heb ddod o hyd i gofnodion sy\'n cyfateb",
1491
+ "oPaginate": {
1492
+ "sFirst": "Cyntaf",
1493
+ "sLast": "Olaf",
1494
+ "sNext": "Nesaf",
1495
+ "sPrevious": "Blaenorol"
1496
+ },
1497
+ "oAria": {
1498
+ "sSortAscending": ": rhoi ar waith i drefnu colofnau o\'r lleiaf i\'r mwyaf",
1499
+ "sSortDescending": ": rhoi ar waith i drefnu colofnau o\'r mwyaf i\'r lleiaf"
1500
+ }
1501
+ }',
1502
+ );
src/SupsysticTables/Tables/assets/libraries/ruleJS/handsontable.formula.js CHANGED
@@ -186,102 +186,166 @@
186
  };
187
 
188
  var beforeAutofillInsidePopulate = function (index, direction, data, deltas, iterators, selected) {
189
- var instance = this;
190
-
191
- var r = index.row,
192
- c = index.col,
193
- value = data[r][c],
194
- delta = 0,
195
- rlength = data.length, // rows
196
- clength = data ? data[0].length : 0; //cols
197
-
198
- if (value[0] === '=') { // formula
199
-
200
- if (['down', 'up'].indexOf(direction) !== -1) {
201
- delta = rlength * iterators.row;
202
- } else if (['right', 'left'].indexOf(direction) !== -1) {
203
- delta = clength * iterators.col;
204
- }
205
-
206
- return {
207
- value: instance.plugin.utils.updateFormula(value, direction, delta),
208
- iterators: iterators
209
- }
210
-
211
- } else { // other value
212
-
213
- // increment or decrement values for more than 2 selected cells
214
- if (rlength >= 2 || clength >= 2) {
215
-
216
- var newValue = instance.plugin.helper.number(value),
217
- ii,
218
- start;
219
-
220
- if (instance.plugin.utils.isNumber(newValue)) {
221
-
222
- if (['down', 'up'].indexOf(direction) !== -1) {
223
-
224
- delta = deltas[0][c];
225
-
226
- if (direction === 'down') {
227
- newValue += (delta * rlength * iterators.row);
228
- } else {
229
-
230
- ii = (selected.row - r) % rlength;
231
- start = ii > 0 ? rlength - ii : 0;
232
-
233
- newValue = instance.plugin.helper.number(data[start][c]);
234
-
235
- newValue += (delta * rlength * iterators.row);
236
-
237
- // last element in array -> decrement iterator
238
- // iterator cannot be less than 1
239
- if (iterators.row > 1 && (start + 1) === rlength) {
240
- iterators.row--;
241
- }
242
- }
243
-
244
- } else if (['right', 'left'].indexOf(direction) !== -1) {
245
- delta = deltas[r][0];
246
-
247
- if (direction === 'right') {
248
- newValue += (delta * clength * iterators.col);
249
- } else {
250
-
251
- ii = (selected.col - c) % clength;
252
- start = ii > 0 ? clength - ii : 0;
253
-
254
- newValue = instance.plugin.helper.number(data[r][start]);
255
-
256
- newValue += (delta * clength * (iterators.col || 1));
257
-
258
- // last element in array -> decrement iterator
259
- // iterator cannot be less than 1
260
- if (iterators.col > 1 && (start + 1) === clength) {
261
- iterators.col--;
262
- }
263
- }
264
- }
265
-
266
- return {
267
- value: newValue,
268
- iterators: iterators
269
- }
270
- }
271
- }
272
-
273
- }
274
-
275
- return {
276
- value: value,
277
- iterators: iterators
278
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
279
  };
280
 
281
  var afterCreateRow = function (row, amount, auto) {
282
- if (auto) {
283
- return;
284
- }
 
 
 
285
 
286
  var instance = this;
287
 
@@ -293,13 +357,13 @@
293
 
294
  var direction = (selectedRow >= row) ? 'before' : 'after',
295
  items = instance.plugin.matrix.getRefItemsToRow(row),
296
- counter = 1,
297
  changes = [];
298
 
299
  items.forEach(function (id) {
300
 
301
  var item = instance.plugin.matrix.getItem(id),
302
- formula = instance.plugin.utils.changeFormula(item.formula, 1, {row: row}), // update formula if needed
303
  newId = id;
304
 
305
  if (formula !== item.formula) { // formula updated
@@ -331,7 +395,8 @@
331
  }
332
  };
333
 
334
- var afterCreateCol = function (col) {
 
335
  var instance = this;
336
 
337
  var selectedCol = instance.plugin.utils.isArray(instance.getSelected()) ? instance.getSelected()[1] : undefined;
@@ -341,14 +406,14 @@
341
  }
342
 
343
  var items = instance.plugin.matrix.getRefItemsToColumn(col),
344
- counter = 1,
345
  direction = (selectedCol >= col) ? 'before' : 'after',
346
  changes = [];
347
 
348
  items.forEach(function (id) {
349
 
350
  var item = instance.plugin.matrix.getItem(id),
351
- formula = instance.plugin.utils.changeFormula(item.formula, 1, {col: col}), // update formula if needed
352
  newId = id;
353
 
354
  if (formula !== item.formula) { // formula updated
@@ -379,6 +444,108 @@
379
  }
380
  };
381
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
382
  var formulaCell = {
383
  renderer: formulaRenderer,
384
  editor: Handsontable.editors.TextEditor,
@@ -415,17 +582,26 @@
415
  Handsontable.NumericCell.renderer = formulaRenderer;
416
 
417
  instance.addHook('afterChange', afterChange);
418
- //instance.addHook('beforeAutofillInsidePopulate', beforeAutofillInsidePopulate);
419
 
420
  instance.addHook('afterCreateRow', afterCreateRow);
421
  instance.addHook('afterCreateCol', afterCreateCol);
422
 
 
 
 
 
423
  } else {
424
  instance.removeHook('afterChange', afterChange);
425
- //instance.removeHook('beforeAutofillInsidePopulate', beforeAutofillInsidePopulate);
426
 
427
  instance.removeHook('afterCreateRow', afterCreateRow);
428
  instance.removeHook('afterCreateCol', afterCreateCol);
 
 
 
 
 
429
  }
430
  };
431
  }
186
  };
187
 
188
  var beforeAutofillInsidePopulate = function (index, direction, data, deltas, iterators, selected) {
189
+ var instance = this,
190
+ r = index.row,
191
+ c = index.col,
192
+ value = 0,
193
+ delta = 0,
194
+ rlength = selected.row, // rows
195
+ clength = selected.col; //cols
196
+
197
+ if (['down', 'up'].indexOf(direction) !== -1) {
198
+ value = data[data.length - 1][c];
199
+ } else if (['right', 'left'].indexOf(direction) !== -1) {
200
+ value = data[r][data[r].length - 1];
201
+ }
202
+ if (value[0] === '=') { // formula
203
+ switch(direction) {
204
+ case 'up':
205
+ delta = rlength - r;
206
+ break;
207
+ case 'down':
208
+ delta = r + 1;
209
+ break;
210
+ case 'right':
211
+ delta = c + 1;
212
+ break;
213
+ case 'left':
214
+ delta = clength - c;
215
+ break;
216
+ default:
217
+ break;
218
+ }
219
+ value = instance.plugin.utils.updateFormula(value, direction, delta);
220
+ } else { // other value
221
+ if (rlength >= 2 || clength >= 2) { // increment or decrement values for more than 2 selected cells
222
+ value = instance.plugin.helper.number(value);
223
+
224
+ if (instance.plugin.utils.isNumber(value)) {
225
+ if (['down', 'up'].indexOf(direction) !== -1) {
226
+ delta = deltas[0][c];
227
+
228
+ if (direction === 'up') {
229
+ value = instance.plugin.helper.number(data[0][c]);
230
+ value += delta * (rlength - r);
231
+ } else {
232
+ value += delta * (r + 1);
233
+ }
234
+ } else if (['right', 'left'].indexOf(direction) !== -1) {
235
+ delta = deltas[r][0];
236
+
237
+ if (direction === 'left') {
238
+ value = instance.plugin.helper.number(data[r][0]);
239
+ value += delta * (clength - c);
240
+ } else {
241
+ value += delta * (c + 1);
242
+ }
243
+ }
244
+ }
245
+ }
246
+ }
247
+ return {
248
+ value: value
249
+ }
250
+ /*var instance = this;
251
+
252
+ var r = index.row,
253
+ c = index.col,
254
+ value = data[r][c],
255
+ delta = 0,
256
+ rlength = data.length, // rows
257
+ clength = data ? data[0].length : 0; //cols
258
+
259
+ if (value[0] === '=') { // formula
260
+
261
+ if (['down', 'up'].indexOf(direction) !== -1) {
262
+ delta = rlength * iterators.row;
263
+ } else if (['right', 'left'].indexOf(direction) !== -1) {
264
+ delta = clength * iterators.col;
265
+ }
266
+
267
+ return {
268
+ value: instance.plugin.utils.updateFormula(value, direction, delta),
269
+ iterators: iterators
270
+ }
271
+
272
+ } else { // other value
273
+
274
+ // increment or decrement values for more than 2 selected cells
275
+ if (rlength >= 2 || clength >= 2) {
276
+
277
+ var newValue = instance.plugin.helper.number(value),
278
+ ii,
279
+ start;
280
+
281
+ if (instance.plugin.utils.isNumber(newValue)) {
282
+
283
+ if (['down', 'up'].indexOf(direction) !== -1) {
284
+
285
+ delta = deltas[0][c];
286
+
287
+ if (direction === 'down') {
288
+ newValue += (delta * rlength * iterators.row);
289
+ } else {
290
+
291
+ ii = (selected.row - r) % rlength;
292
+ start = ii > 0 ? rlength - ii : 0;
293
+
294
+ newValue = instance.plugin.helper.number(data[start][c]);
295
+
296
+ newValue += (delta * rlength * iterators.row);
297
+
298
+ // last element in array -> decrement iterator
299
+ // iterator cannot be less than 1
300
+ if (iterators.row > 1 && (start + 1) === rlength) {
301
+ iterators.row--;
302
+ }
303
+ }
304
+
305
+ } else if (['right', 'left'].indexOf(direction) !== -1) {
306
+ delta = deltas[r][0];
307
+
308
+ if (direction === 'right') {
309
+ newValue += (delta * clength * iterators.col);
310
+ } else {
311
+
312
+ ii = (selected.col - c) % clength;
313
+ start = ii > 0 ? clength - ii : 0;
314
+
315
+ newValue = instance.plugin.helper.number(data[r][start]);
316
+
317
+ newValue += (delta * clength * (iterators.col || 1));
318
+
319
+ // last element in array -> decrement iterator
320
+ // iterator cannot be less than 1
321
+ if (iterators.col > 1 && (start + 1) === clength) {
322
+ iterators.col--;
323
+ }
324
+ }
325
+ }
326
+
327
+ return {
328
+ value: newValue,
329
+ iterators: iterators
330
+ }
331
+ }
332
+ }
333
+
334
+ }
335
+
336
+ return {
337
+ value: value,
338
+ iterators: iterators
339
+ };*/
340
  };
341
 
342
  var afterCreateRow = function (row, amount, auto) {
343
+ //console.log(row, amount, auto);
344
+ /*supsystic*/
345
+ //if (auto) {
346
+ // return;
347
+ //}
348
+ /*****/
349
 
350
  var instance = this;
351
 
357
 
358
  var direction = (selectedRow >= row) ? 'before' : 'after',
359
  items = instance.plugin.matrix.getRefItemsToRow(row),
360
+ counter = amount,
361
  changes = [];
362
 
363
  items.forEach(function (id) {
364
 
365
  var item = instance.plugin.matrix.getItem(id),
366
+ formula = instance.plugin.utils.changeFormula(item.formula, counter, {row: row}), // update formula if needed
367
  newId = id;
368
 
369
  if (formula !== item.formula) { // formula updated
395
  }
396
  };
397
 
398
+ var afterCreateCol = function (col, amount) {
399
+ //console.log(col, amount);
400
  var instance = this;
401
 
402
  var selectedCol = instance.plugin.utils.isArray(instance.getSelected()) ? instance.getSelected()[1] : undefined;
406
  }
407
 
408
  var items = instance.plugin.matrix.getRefItemsToColumn(col),
409
+ counter = amount,
410
  direction = (selectedCol >= col) ? 'before' : 'after',
411
  changes = [];
412
 
413
  items.forEach(function (id) {
414
 
415
  var item = instance.plugin.matrix.getItem(id),
416
+ formula = instance.plugin.utils.changeFormula(item.formula, counter, {col: col}), // update formula if needed
417
  newId = id;
418
 
419
  if (formula !== item.formula) { // formula updated
444
  }
445
  };
446
 
447
+ // custom supsystic functions
448
+ /*supsystic*/
449
+ var afterRemoveRow = function (row, amount, auto) {
450
+ //console.log(row, amount, auto);
451
+ var instance = this;
452
+
453
+ var selectedRow = instance.plugin.utils.isArray(instance.getSelected()) ? instance.getSelected()[0] : undefined;
454
+
455
+ if (instance.plugin.utils.isUndefined(selectedRow)) {
456
+ return;
457
+ }
458
+
459
+ var direction = (selectedRow >= row) ? 'before' : 'after',
460
+ items = instance.plugin.matrix.getRefItemsToRow(row),
461
+ counter = -amount,
462
+ changes = [];
463
+
464
+ items.forEach(function (id) {
465
+
466
+ var item = instance.plugin.matrix.getItem(id),
467
+ formula = instance.plugin.utils.changeFormula(item.formula, counter, {row: row}), // update formula if needed
468
+ newId = id;
469
+
470
+ if (formula !== item.formula) { // formula updated
471
+
472
+ // change row index and get new coordinates
473
+ if ((direction === 'before' && selectedRow <= item.row) || (direction === 'after' && selectedRow < item.row)) {
474
+ newId = instance.plugin.utils.changeRowIndex(id, counter);
475
+ }
476
+
477
+ var cellCoords = instance.plugin.utils.cellCoords(newId);
478
+
479
+ if (newId !== id) {
480
+ // remove current item from matrix
481
+ instance.plugin.matrix.removeItem(id);
482
+ }
483
+
484
+ // set updated formula in new cell
485
+ changes.push([cellCoords.row, cellCoords.col, '=' + formula]);
486
+
487
+ }
488
+ });
489
+
490
+ if (items) {
491
+ instance.plugin.matrix.removeItemsBelowRow(row);
492
+ }
493
+
494
+ if (changes) {
495
+ instance.setDataAtCell(changes);
496
+ }
497
+ };
498
+
499
+ var afterRemoveCol = function (col, amount) {
500
+ //console.log(col, amount);
501
+ var instance = this;
502
+
503
+ var selectedCol = instance.plugin.utils.isArray(instance.getSelected()) ? instance.getSelected()[1] : undefined;
504
+
505
+ if (instance.plugin.utils.isUndefined(selectedCol)) {
506
+ return;
507
+ }
508
+
509
+ var items = instance.plugin.matrix.getRefItemsToColumn(col),
510
+ counter = -amount,
511
+ direction = (selectedCol <= col) ? 'before' : 'after',
512
+ changes = [];
513
+
514
+ items.forEach(function (id) {
515
+
516
+ var item = instance.plugin.matrix.getItem(id),
517
+ formula = instance.plugin.utils.changeFormula(item.formula, counter, {col: col}), // update formula if needed
518
+ newId = id;
519
+
520
+ if (formula !== item.formula) { // formula updated
521
+
522
+ // change col index and get new coordinates
523
+ if ((direction === 'before' && selectedCol <= item.col) || (direction === 'after' && selectedCol < item.col)) {
524
+ newId = instance.plugin.utils.changeColIndex(id, counter);
525
+ }
526
+
527
+ var cellCoords = instance.plugin.utils.cellCoords(newId);
528
+
529
+ if (newId !== id) {
530
+ // remove current item from matrix if id changed
531
+ instance.plugin.matrix.removeItem(id);
532
+ }
533
+
534
+ // set updated formula in new cell
535
+ changes.push([cellCoords.row, cellCoords.col, '=' + formula]);
536
+ }
537
+ });
538
+
539
+ if (items) {
540
+ instance.plugin.matrix.removeItemsBelowCol(col);
541
+ }
542
+
543
+ if (changes) {
544
+ instance.setDataAtCell(changes);
545
+ }
546
+ };
547
+ /*****/
548
+
549
  var formulaCell = {
550
  renderer: formulaRenderer,
551
  editor: Handsontable.editors.TextEditor,
582
  Handsontable.NumericCell.renderer = formulaRenderer;
583
 
584
  instance.addHook('afterChange', afterChange);
585
+ instance.addHook('beforeAutofillInsidePopulate', beforeAutofillInsidePopulate);
586
 
587
  instance.addHook('afterCreateRow', afterCreateRow);
588
  instance.addHook('afterCreateCol', afterCreateCol);
589
 
590
+ /*supsystic*/
591
+ instance.addHook('afterRemoveRow', afterRemoveRow);
592
+ instance.addHook('afterRemoveCol', afterRemoveCol);
593
+ /*****/
594
  } else {
595
  instance.removeHook('afterChange', afterChange);
596
+ instance.removeHook('beforeAutofillInsidePopulate', beforeAutofillInsidePopulate);
597
 
598
  instance.removeHook('afterCreateRow', afterCreateRow);
599
  instance.removeHook('afterCreateCol', afterCreateCol);
600
+
601
+ /*supsystic*/
602
+ instance.removeHook('afterRemoveRow', afterRemoveRow);
603
+ instance.removeHook('afterRemoveCol', afterRemoveCol);
604
+ /*****/
605
  }
606
  };
607
  }
src/SupsysticTables/Tables/assets/libraries/ruleJS/ruleJS.js CHANGED
@@ -399,7 +399,6 @@ var ruleJS = (function (root) {
399
  * @returns {Object}
400
  */
401
  var calculateElementFormula = function (formula, element) {
402
- window.supsystic.Tables._currentFormula = jQuery(element).data('formula'); // to calculate custom supsystic formulas on frontend
403
  // to avoid double translate formulas, update item data in parser
404
  var parsed = parse(formula, element),
405
  value = parsed.result,
@@ -1065,6 +1064,9 @@ var ruleJS = (function (root) {
1065
  if (!isNaN(num)) {
1066
  return num.indexOf('.') > -1 ? parseFloat(num) : parseInt(num, 10);
1067
  }
 
 
 
1068
  }
1069
 
1070
  return num;
@@ -1158,6 +1160,8 @@ var ruleJS = (function (root) {
1158
  */
1159
  mathMatch: function (type, number1, number2) {
1160
  var result;
 
 
1161
 
1162
  number1 = helper.number(number1);
1163
  number2 = helper.number(number2);
@@ -1166,35 +1170,74 @@ var ruleJS = (function (root) {
1166
  if (number1[0] === '=' || number2[0] === '=') {
1167
  throw Error('NEED_UPDATE');
1168
  }
1169
-
1170
- if (isNaN(number1)) {
1171
- number1 = 0;
 
 
 
 
1172
  }
1173
  if (isNaN(number2)) {
1174
- number2 = 0;
 
 
 
 
1175
  }
1176
  }
1177
-
1178
  switch (type) {
1179
  case '+':
1180
- result = number1 + number2;
 
 
 
 
 
 
 
 
 
 
1181
  break;
1182
  case '-':
1183
- result = number1 - number2;
 
 
 
 
 
 
 
 
 
 
1184
  break;
1185
  case '/':
1186
- result = number1 / number2;
1187
- if (result == Infinity) {
1188
- throw Error('DIV_ZERO');
1189
- } else if (isNaN(result)) {
1190
- throw Error('VALUE');
1191
- }
 
 
 
 
1192
  break;
1193
  case '*':
1194
- result = number1 * number2;
 
 
 
 
1195
  break;
1196
  case '^':
1197
- result = Math.pow(number1, number2);
 
 
 
 
1198
  break;
1199
  }
1200
 
@@ -1372,7 +1415,21 @@ var ruleJS = (function (root) {
1372
  end = end.replace(/\$/g, '');
1373
 
1374
  return instance.helper.cellRangeValue.call(this, start, end);
1375
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1376
  };
1377
 
1378
  /**
@@ -1382,6 +1439,26 @@ var ruleJS = (function (root) {
1382
  * @param element
1383
  */
1384
  var parse = function (formula, element) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1385
  var result = null,
1386
  error = null;
1387
 
@@ -1414,7 +1491,8 @@ var ruleJS = (function (root) {
1414
  }
1415
 
1416
  } catch (ex) {
1417
- var message = Exception.get(ex.message);
 
1418
 
1419
  if (message) {
1420
  error = message;
@@ -1569,6 +1647,7 @@ var ruleJS = (function (root) {
1569
 
1570
  if (rootElement) {
1571
  instance.matrix.scan();
 
1572
  }
1573
  };
1574
 
399
  * @returns {Object}
400
  */
401
  var calculateElementFormula = function (formula, element) {
 
402
  // to avoid double translate formulas, update item data in parser
403
  var parsed = parse(formula, element),
404
  value = parsed.result,
1064
  if (!isNaN(num)) {
1065
  return num.indexOf('.') > -1 ? parseFloat(num) : parseInt(num, 10);
1066
  }
1067
+ if (!num) {
1068
+ return 0;
1069
+ }
1070
  }
1071
 
1072
  return num;
1160
  */
1161
  mathMatch: function (type, number1, number2) {
1162
  var result;
1163
+ var moment1 = null;
1164
+ var moment2 = null;
1165
 
1166
  number1 = helper.number(number1);
1167
  number2 = helper.number(number2);
1170
  if (number1[0] === '=' || number2[0] === '=') {
1171
  throw Error('NEED_UPDATE');
1172
  }
1173
+
1174
+ if (isNaN(number1)) {
1175
+ moment1 = moment(number1, window.supsystic.Tables._dateFormat);
1176
+ if(moment1 && moment1._pf && moment1._pf.empty) {
1177
+ moment1 = null;
1178
+ number1 = 0;
1179
+ }
1180
  }
1181
  if (isNaN(number2)) {
1182
+ moment2 = moment(number2, window.supsystic.Tables._dateFormat);
1183
+ if(moment2 && moment2._pf && moment2._pf.empty) {
1184
+ moment2 = null;
1185
+ number2 = 0;
1186
+ }
1187
  }
1188
  }
 
1189
  switch (type) {
1190
  case '+':
1191
+ if(moment1 || moment2) {
1192
+ if(moment1 && moment2) {
1193
+ throw Error('VALUE');
1194
+ } else if(moment1 && !moment2) {
1195
+ result = moment1.add(number2, 'days').format(window.supsystic.Tables._dateFormat);
1196
+ } else if(!moment1 && moment2) {
1197
+ result = moment2.add(number1, 'days').format(window.supsystic.Tables._dateFormat);
1198
+ }
1199
+ } else {
1200
+ result = number1 + number2;
1201
+ }
1202
  break;
1203
  case '-':
1204
+ if(moment1 || moment2) {
1205
+ if(moment1 && moment2) {
1206
+ result = moment1.diff(moment2, 'days');
1207
+ } else if(moment1 && !moment2) {
1208
+ result = moment1.add(-number2, 'days').format(window.supsystic.Tables._dateFormat);
1209
+ } else if(!moment1 && moment2) {
1210
+ throw Error('VALUE');
1211
+ }
1212
+ } else {
1213
+ result = number1 - number2;
1214
+ }
1215
  break;
1216
  case '/':
1217
+ if(moment1 || moment2) {
1218
+ throw Error('VALUE');
1219
+ } else {
1220
+ result = number1 / number2;
1221
+ if (result == Infinity) {
1222
+ throw Error('DIV_ZERO');
1223
+ } else if (isNaN(result)) {
1224
+ throw Error('VALUE');
1225
+ }
1226
+ }
1227
  break;
1228
  case '*':
1229
+ if(moment1 || moment2) {
1230
+ throw Error('VALUE');
1231
+ } else {
1232
+ result = number1 * number2;
1233
+ }
1234
  break;
1235
  case '^':
1236
+ if(moment1 || moment2) {
1237
+ throw Error('VALUE');
1238
+ } else {
1239
+ result = Math.pow(number1, number2);
1240
+ }
1241
  break;
1242
  }
1243
 
1415
  end = end.replace(/\$/g, '');
1416
 
1417
  return instance.helper.cellRangeValue.call(this, start, end);
1418
+ },
1419
+
1420
+ /**
1421
+ * Unescape HTML in the selectsd cells for formulas result.
1422
+ * @param $table
1423
+ */
1424
+ unescapeHTML: function($table) {
1425
+ $table = $table instanceof jQuery ? $table : jQuery($table);
1426
+ $table.find('.unescapeHTML').each(function() {
1427
+ var cell = jQuery(this),
1428
+ cellContent = cell.html().replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/g, '"');
1429
+
1430
+ cell.html(cellContent);
1431
+ });
1432
+ }
1433
  };
1434
 
1435
  /**
1439
  * @param element
1440
  */
1441
  var parse = function (formula, element) {
1442
+ window.supsystic.Tables._currentFormula = formula; // to calculate custom supsystic formulas
1443
+ window.supsystic.Tables._dateFormat = '';
1444
+ window.supsystic.Tables._timeFormat = '';
1445
+
1446
+ if(SDT_DATA && SDT_DATA.isAdmin && typeof element.row != 'undefined' && typeof element.col != 'undefined') {
1447
+ var cellMeta = window.editor.getCellMeta(element.row, element.col);
1448
+
1449
+ window.supsystic.Tables._dateFormat = cellMeta && cellMeta.dateFormat
1450
+ ? cellMeta.dateFormat
1451
+ : jQuery('#editor-set-date-format').val();
1452
+ window.supsystic.Tables._timeFormat = cellMeta && cellMeta.formatType == "time_duration"
1453
+ ? cellMeta.format
1454
+ : jQuery('#editor-set-time-duration-format').val();
1455
+ } else {
1456
+ var elem = jQuery(element);
1457
+
1458
+ window.supsystic.Tables._dateFormat = elem.data('cell-format') || elem.parents('.supsystic-table:first').data('date-format');
1459
+ window.supsystic.Tables._timeFormat = elem.data('cell-format') || elem.parents('.supsystic-table:first').data('time-format');
1460
+ }
1461
+
1462
  var result = null,
1463
  error = null;
1464
 
1491
  }
1492
 
1493
  } catch (ex) {
1494
+ // Formulas errors!!!
1495
+ var message = Exception.get(ex.message);
1496
 
1497
  if (message) {
1498
  error = message;
1647
 
1648
  if (rootElement) {
1649
  instance.matrix.scan();
1650
+ helper.unescapeHTML(rootElement);
1651
  }
1652
  };
1653
 
src/SupsysticTables/Tables/assets/libraries/ruleJS/ruleJS.lib.full.js CHANGED
@@ -15426,7 +15426,17 @@ this.j$ = this.jStat = (function(Math, undefined) {
15426
 
15427
  // Date functions
15428
  Formula.DATE = function () {
15429
- if (!arguments.length) {
 
 
 
 
 
 
 
 
 
 
15430
  return new Date();
15431
  }
15432
 
@@ -15437,24 +15447,29 @@ this.j$ = this.jStat = (function(Math, undefined) {
15437
  var args = arguments;
15438
  args[1] = args[1] - 1; // Monthes are between 0 and 11.
15439
 
15440
- return new (Date.bind.apply(Date, [Date].concat([].splice.call(args, 0))))();
15441
  };
15442
 
15443
  Formula.DATEVALUE = function (date_text) {
15444
- return Math.ceil((moment(date_text) - moment('1900-01-01')) / 86400000) + 2;
 
15445
  };
15446
 
15447
  Formula.DAY = function (date) {
15448
- return new Date(date).getDate();
 
15449
  };
15450
 
15451
  Formula.DAYS = function (end_date, start_date) {
15452
- return moment(new Date(end_date)).diff(moment(new Date(start_date)), 'days');
 
15453
  };
15454
 
15455
  Formula.DAYS360 = function (start_date, end_date, method) {
15456
- var start = moment(new Date(start_date));
15457
- var end = moment(new Date(end_date));
 
 
15458
  var smd = 31;
15459
  var emd = 31;
15460
  var sd = start.date();
@@ -15479,12 +15494,17 @@ this.j$ = this.jStat = (function(Math, undefined) {
15479
  };
15480
 
15481
  Formula.EDATE = function (start_date, months) {
15482
- return moment(new Date(start_date)).add('months', months).toDate();
 
15483
  };
15484
 
15485
  Formula.EOMONTH = function (start_date, months) {
15486
- var edate = moment(new Date(start_date)).add('months', months);
15487
- return new Date(edate.year(), edate.month(), edate.daysInMonth());
 
 
 
 
15488
  };
15489
 
15490
  Formula.FROMNOW = function (timestamp, nosuffix) {
@@ -15492,19 +15512,35 @@ this.j$ = this.jStat = (function(Math, undefined) {
15492
  };
15493
 
15494
  Formula.HOUR = function (timestamp) {
15495
- return (timestamp <= 1) ? Math.floor(24 * timestamp) : new Date(timestamp).getHours();
 
 
 
 
 
15496
  };
15497
 
15498
  Formula.MINUTE = function (timestamp) {
15499
- return (timestamp <= 1) ? Math.floor(24 * 60 * timestamp) - 60 * Math.floor(24 * timestamp) : new Date(timestamp).getMinutes();
 
 
 
 
 
15500
  };
15501
 
15502
  Formula.ISOWEEKNUM = function (date) {
15503
- return moment(new Date(date)).format('w');
 
15504
  };
15505
 
15506
  Formula.MONTH = function (timestamp) {
15507
- return new Date(timestamp).getMonth() + 1;
 
 
 
 
 
15508
  };
15509
 
15510
  Formula.NETWORKDAYS = function (start_date, end_date, holidays) {
@@ -15544,7 +15580,7 @@ this.j$ = this.jStat = (function(Math, undefined) {
15544
  };
15545
 
15546
  Formula.NOW = function () {
15547
- return new Date();
15548
  };
15549
 
15550
  Formula.SECOND = function (timestamp) {
@@ -19142,7 +19178,85 @@ this.j$ = this.jStat = (function(Math, undefined) {
19142
  };
19143
 
19144
  Formula.SUBTOTAL = function (function_code) {
19145
- var result = [];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19146
  for (var i = 1; i < arguments.length; i++) {
19147
  switch (function_code) {
19148
  case 1:
@@ -19180,7 +19294,7 @@ this.j$ = this.jStat = (function(Math, undefined) {
19180
  break;
19181
  }
19182
  }
19183
- return result;
19184
  };
19185
 
19186
  Formula.SUM = function () {
@@ -20712,7 +20826,7 @@ this.j$ = this.jStat = (function(Math, undefined) {
20712
 
20713
  var chunkArr = Formula._CHUNK(arrayValues); // it is transposed array - array of arrays of columns values, not rows
20714
 
20715
- if(!Formula.ISERROR(chunkArr)) {
20716
  var chunkArrColsCount = chunkArr.length,
20717
  chunkArrRowsCount = typeof chunkArr[0] != 'undefined' ? chunkArr[0].length : 0;
20718
  if (rowNum > chunkArrRowsCount || colNum > chunkArrColsCount) {
@@ -20788,16 +20902,20 @@ this.j$ = this.jStat = (function(Math, undefined) {
20788
 
20789
  // Additional formulas (not for users)
20790
  Formula._CHUNK = function(array) {
20791
- var formula = window.supsystic.Tables._currentFormula,
20792
- regexp = new RegExp(/([a-z]+([0-9]+)):?([a-z]+([0-9]+))?/, 'gi'),
20793
- rangeData = regexp.exec(formula),
20794
- start = typeof rangeData[2] != 'undefined' ? rangeData[2] : '',
20795
- end = typeof rangeData[4] != 'undefined' ? rangeData[4] : start,
20796
- chunkStep = end - start + 1;
20797
- if(chunkStep < 1) {
20798
- return '#REF!';
 
 
 
 
20799
  }
20800
- return Formula._GETCHUNKARRAY(array, chunkStep);
20801
  };
20802
  Formula._GETCHUNKARRAY = function(arr, len) {
20803
  var chunks = [],
15426
 
15427
  // Date functions
15428
  Formula.DATE = function () {
15429
+ var args = arguments;
15430
+
15431
+ if (!args.length) {
15432
+ return moment().format(window.supsystic.Tables._dateFormat);
15433
+ }
15434
+ if (args.length === 3) {
15435
+ args[1] = args[1] - 1; // Monthes are between 0 and 11.
15436
+ return moment(new Date(args[0], args[1], args[2])).format(window.supsystic.Tables._dateFormat);
15437
+ }
15438
+ return 'N/A';
15439
+ /*if (!arguments.length) {
15440
  return new Date();
15441
  }
15442
 
15447
  var args = arguments;
15448
  args[1] = args[1] - 1; // Monthes are between 0 and 11.
15449
 
15450
+ return new (Date.bind.apply(Date, [Date].concat([].splice.call(args, 0))))();*/
15451
  };
15452
 
15453
  Formula.DATEVALUE = function (date_text) {
15454
+ return Math.ceil((moment(date_text, window.supsystic.Tables._dateFormat) - moment('1900-01-01', 'YYYY-MM-DD')) / 86400000) + 2;
15455
+ //return Math.ceil((moment(date_text) - moment('1900-01-01')) / 86400000) + 2;
15456
  };
15457
 
15458
  Formula.DAY = function (date) {
15459
+ return moment(date, window.supsystic.Tables._dateFormat).date();
15460
+ //return new Date(date).getDate();
15461
  };
15462
 
15463
  Formula.DAYS = function (end_date, start_date) {
15464
+ return moment(end_date, window.supsystic.Tables._dateFormat).diff(moment(start_date, window.supsystic.Tables._dateFormat), 'days');
15465
+ //return moment(new Date(end_date)).diff(moment(new Date(start_date)), 'days');
15466
  };
15467
 
15468
  Formula.DAYS360 = function (start_date, end_date, method) {
15469
+ //var start = moment(new Date(start_date));
15470
+ //var end = moment(new Date(end_date));
15471
+ var start = moment(start_date, window.supsystic.Tables._dateFormat);
15472
+ var end = moment(end_date, window.supsystic.Tables._dateFormat);
15473
  var smd = 31;
15474
  var emd = 31;
15475
  var sd = start.date();
15494
  };
15495
 
15496
  Formula.EDATE = function (start_date, months) {
15497
+ return moment(start_date, window.supsystic.Tables._dateFormat).add(months, 'months').format(window.supsystic.Tables._dateFormat);
15498
+ //return moment(new Date(start_date)).add('months', months).toDate();
15499
  };
15500
 
15501
  Formula.EOMONTH = function (start_date, months) {
15502
+ var edate = moment(start_date, window.supsystic.Tables._dateFormat).add(months, 'months').toDate(),
15503
+ ndate = new Date(edate.getFullYear(), edate.getMonth(), new Date(edate.getFullYear(), edate.getMonth() + 1, 0).getDate());
15504
+
15505
+ return moment(ndate).format(window.supsystic.Tables._dateFormat);
15506
+ //var edate = moment(new Date(start_date)).add('months', months);
15507
+ //return new Date(edate.year(), edate.month(), edate.daysInMonth());
15508
  };
15509
 
15510
  Formula.FROMNOW = function (timestamp, nosuffix) {
15512
  };
15513
 
15514
  Formula.HOUR = function (timestamp) {
15515
+ if(isNaN(timestamp)) {
15516
+ return moment(timestamp, window.supsystic.Tables._timeFormat).hours();
15517
+ } else {
15518
+ return (timestamp <= 1) ? Math.floor(24 * timestamp) : new Date(timestamp).getHours();
15519
+ }
15520
+ //return (timestamp <= 1) ? Math.floor(24 * timestamp) : new Date(timestamp).getHours();
15521
  };
15522
 
15523
  Formula.MINUTE = function (timestamp) {
15524
+ if(isNaN(timestamp)) {
15525
+ return moment(timestamp, window.supsystic.Tables._timeFormat).minutes();
15526
+ } else {
15527
+ return (timestamp <= 1) ? Math.floor(24 * 60 * timestamp) - 60 * Math.floor(24 * timestamp) : new Date(timestamp).getMinutes();
15528
+ }
15529
+ //return (timestamp <= 1) ? Math.floor(24 * 60 * timestamp) - 60 * Math.floor(24 * timestamp) : new Date(timestamp).getMinutes();
15530
  };
15531
 
15532
  Formula.ISOWEEKNUM = function (date) {
15533
+ return moment(date, window.supsystic.Tables._dateFormat).isoWeek();
15534
+ //return moment(new Date(date)).format('w');
15535
  };
15536
 
15537
  Formula.MONTH = function (timestamp) {
15538
+ if(isNaN(timestamp)) {
15539
+ return moment(timestamp, window.supsystic.Tables._dateFormat).month() + 1;
15540
+ } else {
15541
+ return new Date(timestamp).getMonth() + 1;
15542
+ }
15543
+ //return new Date(timestamp).getMonth() + 1;
15544
  };
15545
 
15546
  Formula.NETWORKDAYS = function (start_date, end_date, holidays) {
15580
  };
15581
 
15582
  Formula.NOW = function () {
15583
+ return moment().format(window.supsystic.Tables._dateFormat);
15584
  };
15585
 
15586
  Formula.SECOND = function (timestamp) {
19178
  };
19179
 
19180
  Formula.SUBTOTAL = function (function_code) {
19181
+ var result = [];
19182
+ for (var i = 1; i < arguments.length; i++) {
19183
+ switch (function_code) {
19184
+ case 1:case 101:
19185
+ result[i - 1] = Formula.AVERAGE(arguments[i]);
19186
+ break;
19187
+ case 2:case 102:
19188
+ result[i - 1] = Formula.COUNT(arguments[i]);
19189
+ break;
19190
+ case 3:case 103:
19191
+ result[i - 1] = Formula.COUNTA(arguments[i]);
19192
+ break;
19193
+ case 4:case 104:
19194
+ result[i - 1] = Formula.MAX(arguments[i]);
19195
+ break;
19196
+ case 5:case 105:
19197
+ result[i - 1] = Formula.MIN(arguments[i]);
19198
+ break;
19199
+ case 6:case 106:
19200
+ result[i - 1] = Formula.PRODUCT(arguments[i]);
19201
+ break;
19202
+ case 7:case 107:
19203
+ result[i - 1] = Formula.STDEV(arguments[i]);
19204
+ break;
19205
+ case 8:case 108:
19206
+ result[i - 1] = Formula.STDEVP(arguments[i]);
19207
+ break;
19208
+ case 9:case 109:
19209
+ result[i - 1] = Formula.SUM(arguments[i]);
19210
+ break;
19211
+ case 10:case 110:
19212
+ result[i - 1] = Formula.VAR(arguments[i]);
19213
+ break;
19214
+ case 11:case 111:
19215
+ result[i - 1] = Formula.VARP(arguments[i]);
19216
+ break;
19217
+ default:
19218
+ break;
19219
+ }
19220
+ }
19221
+ switch (function_code) {
19222
+ case 1:case 101:
19223
+ return Formula.AVERAGE(result);
19224
+ break;
19225
+ case 2:case 102:
19226
+ return Formula.COUNT(result);
19227
+ break;
19228
+ case 3:case 103:
19229
+ return Formula.COUNTA(result);
19230
+ break;
19231
+ case 4:case 104:
19232
+ return Formula.MAX(result);
19233
+ break;
19234
+ case 5:case 105:
19235
+ return Formula.MIN(result);
19236
+ break;
19237
+ case 6:case 106:
19238
+ return Formula.PRODUCT(result);
19239
+ break;
19240
+ case 7:case 107:
19241
+ return Formula.STDEV(result);
19242
+ break;
19243
+ case 8:case 108:
19244
+ return Formula.STDEVP(result);
19245
+ break;
19246
+ case 9:case 109:
19247
+ return Formula.SUM(result);
19248
+ break;
19249
+ case 10:case 110:
19250
+ return Formula.VAR(result);
19251
+ break;
19252
+ case 11:case 111:
19253
+ return Formula.VARP(result);
19254
+ break;
19255
+ default:
19256
+ break;
19257
+ }
19258
+ return '#VALUE!';
19259
+ /*var result = [];
19260
  for (var i = 1; i < arguments.length; i++) {
19261
  switch (function_code) {
19262
  case 1:
19294
  break;
19295
  }
19296
  }
19297
+ return result;*/
19298
  };
19299
 
19300
  Formula.SUM = function () {
20826
 
20827
  var chunkArr = Formula._CHUNK(arrayValues); // it is transposed array - array of arrays of columns values, not rows
20828
 
20829
+ if(chunkArr && !Formula.ISERROR(chunkArr)) {
20830
  var chunkArrColsCount = chunkArr.length,
20831
  chunkArrRowsCount = typeof chunkArr[0] != 'undefined' ? chunkArr[0].length : 0;
20832
  if (rowNum > chunkArrRowsCount || colNum > chunkArrColsCount) {
20902
 
20903
  // Additional formulas (not for users)
20904
  Formula._CHUNK = function(array) {
20905
+ var formula = window.supsystic.Tables._currentFormula;
20906
+
20907
+ if(formula) {
20908
+ var regexp = new RegExp(/([a-z]+([0-9]+)):?([a-z]+([0-9]+))?/, 'gi'),
20909
+ rangeData = regexp.exec(formula),
20910
+ start = rangeData && typeof rangeData[2] != 'undefined' ? rangeData[2] : 0,
20911
+ end = rangeData && typeof rangeData[4] != 'undefined' ? rangeData[4] : start,
20912
+ chunkStep = end - start + 1;
20913
+ if(chunkStep < 1) {
20914
+ return '#REF!';
20915
+ }
20916
+ return Formula._GETCHUNKARRAY(array, chunkStep);
20917
  }
20918
+ return array;
20919
  };
20920
  Formula._GETCHUNKARRAY = function(arr, len) {
20921
  var chunks = [],
src/SupsysticTables/Tables/views/shortcode.twig CHANGED
@@ -56,7 +56,7 @@
56
 
57
  data-original-value="{{ data | e }}"
58
 
59
- {% if cell.source | length %}
60
  data-source="{{ cell.source | json_encode | e }}"
61
  {% endif %}
62
 
@@ -67,13 +67,13 @@
67
  {% endif %}
68
 
69
  {% if 'auto_width' not in context.table.settings.features | keys
70
- and (context.table.settings.styling.compact is not defined
71
- or (context.table.settings.styling.compact is defined and context.table.settings.tableWidthType != 'auto'))
72
- and rowIndex == '1'
73
  %}
74
  {% if context.table.meta.columnsFixedWidth is defined
75
- and context.table.meta.columnsFixedWidth[cellIndex] is defined
76
- and context.table.meta.columnsFixedWidth[cellIndex] is not empty
77
  %}
78
  style="min-width: {{ context.table.meta.columnsFixedWidth[cellIndex] }}; width: {{ context.table.meta.columnsFixedWidth[cellIndex] }};"
79
  {% elseif context.table.meta.columnsWidth is defined %}
@@ -130,20 +130,20 @@
130
  disable-responsive
131
  {% endif %}"
132
  style="
133
- {% if tableWidth is defined %}
134
- {% if tableWidth == 'auto' %}
135
- display: inline-block;
136
- {% endif %}
137
- width: {{ tableWidth }};
138
  {% endif %}
 
 
139
  {% if is_feed == false %}
140
- visibility: hidden;
141
  {% endif %}
142
- ">
143
 
144
- {% block before_table %}{% endblock %}
145
 
146
- <table
147
  id="supsystic-table-{{ table.id }}"
148
  class="supsystic-table {{ table.settings.styling | keys | join(' ') }}
149
  {% if 'border' in table.settings.styling | keys %}
@@ -152,44 +152,23 @@
152
  data-id="{{ table.id }}"
153
  data-view-id="{{ table.view_id }}"
154
  data-title="{{ table.encoded_title }}"
155
- data-merged="{{ table.meta.mergedCells | json_encode | e }}"
156
- data-features="{{ table.settings.features | keys | json_encode | e }}"
157
- data-pagination-length="{{ table.settings.paginationMenuLength }}"
158
- {% if 'auto_width' not in table.settings.features | keys %}
159
- data-align-by-first-table="{{ table.settings.alignByFirstTable | default('') }}"
160
- {% endif %}
161
- data-lang="{{ table.settings.language.file }}"
162
- data-override="{{ table.settings.language | json_encode | e }}"
163
- data-auto-index="{{ table.settings.autoIndex }}"
164
- data-searching-settings="{{ table.settings.searching | json_encode | e }}"
165
- {% if 'useNumberFormat' in table.settings | keys %}
166
- data-number-format="{{ table.settings.numberFormat | default('1,0.00') }}"
167
- {% endif %}
168
  data-currency-format="{{ table.settings.currencyFormat | default('$1,0.00') }}"
169
  data-percent-format="{{ table.settings.percentFormat | default('1.00%') }}"
170
  data-date-format="{{ table.settings.dateFormat | default('DD.MM.YYYY') }}"
171
  data-time-format="{{ table.settings.timeFormat | default('HH:mm') }}"
172
- data-use-comma-as-delimiter="{{ table.settings.useCommaAsDelimiter }}"
173
- {% if 'ordering' in table.settings.features | keys %}
174
- data-sort-column="{{ table.settings.sortingOrderColumn }}"
175
- data-sort-order="{{ table.settings.sortingOrder }}"
176
- data-multiple-sorting="{{ table.meta.columnsSortOrder | json_encode | e }}"
177
- data-disable-sorting="{{ table.meta.columnsDisableSorting | json_encode | e }}"
178
- {% endif %}
179
- {% if 'after_table_loaded_script' in table.settings.features | keys
180
- and 'enable_after_table_loaded_script' in table.settings.features | keys
181
- and table.settings.features.enable_after_table_loaded_script == 'on'
182
- %}
183
- data-after-table-loaded-script="{{ table.settings.features.after_table_loaded_script | json_encode | e }}"
184
  {% endif %}
185
- data-head="{{ table.settings.elements.head }}"
186
  {% if 'headerRowsCount' in table.settings | keys %}
187
  data-head-rows-count="{{ table.settings.headerRowsCount | default(1) }}"
188
  {% endif %}
189
  {% if 'fixedHeader' in table.settings | keys %}
190
  data-fixed-head="{{ table.settings.fixedHeader }}"
191
  {% endif %}
192
- data-foot="{{ table.settings.elements.foot }}"
 
 
193
  {% if 'fixedFooter' in table.settings | keys %}
194
  data-fixed-foot="{{ table.settings.fixedFooter }}"
195
  {% endif %}
@@ -201,188 +180,231 @@
201
  data-fixed-left="{{ table.settings.fixedLeftColumnsCount }}"
202
  data-fixed-right="{{ table.settings.fixedRightColumnsCount }}"
203
  {% endif %}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
204
  data-responsive-mode="{{ table.settings.responsiveMode|default(1) }}"
205
  data-from-history="{{ table.history|default(0) }}"
 
 
 
206
  {% block table_attributes %}{% endblock %}
207
  {% if tableWidth is defined and tableWidth == 'auto' %}
208
  style="width: {{ tableWidth }};"
209
  {% endif %}
210
- >
211
 
212
- {% block caption %}
213
- {% if table.settings.elements.caption is defined or (table.settings.elements.description is defined and table.settings.elements.descriptionText is defined) %}
214
- <caption>
215
- {% if table.settings.elements.caption is defined %}
216
- <div class="table-title">{{ table.title }}</div>
217
- {% endif %}
218
- {% if table.settings.elements.description is defined and table.settings.elements.descriptionText is defined %}
219
- <div class="table-desc">{{ table.settings.elements.descriptionText | raw }}</div>
220
- {% endif %}
221
- </caption>
222
  {% endif %}
223
- {% endblock %}
224
-
225
- {% set head = false %}
226
- {% set headRowsCount = 0 %}
227
- {% set headRows = table.rows | slice(0, 1) %} {# there is must be at least one header row #}
228
- {% if table.settings.elements.head is defined %}
229
- {% set head = true %}
230
- {% set headRowsCount = table.settings.headerRowsCount | default(1) %}
231
- {% set headRows = table.rows | slice(0, headRowsCount) %}
232
- {% endif %}
233
-
234
- {% set foot = false %}
235
- {% set footRowsCount = 0 %}
236
- {% if table.settings.elements.foot is defined %}
237
- {% set foot = true %}
238
- {% if table.settings.customFooter is defined %}
239
- {% set footRowsCount = table.settings.footerRowsCount | default(1) %}
240
- {% set footRows = table.rows | slice('-' ~ footRowsCount, footRowsCount) %}
241
- {% else %}
242
- {% set footRows = headRows | reverse %}
243
  {% endif %}
244
- {% endif %}
 
 
 
 
 
 
 
 
 
 
 
245
 
246
- {% set bodyRows = table.rows | slice(head ? headRowsCount : 0) %}
247
- {% if foot %}
248
- {% set bodyRows = bodyRows | slice(0, bodyRows | length - footRowsCount) %}
249
- {% endif %}
 
 
 
 
 
 
 
250
 
251
- {% block thead %}
252
- <thead> {# header must be always to set columns width #}
253
- {% set addHeaderAutoIndex = true %}
254
- {% for row in headRows %}
255
- {% set headRowNumber = loop.index %}
256
- {% set existHeaderRow = false %}
257
 
258
- {% for cellIndex, cell in row.cells %}
259
- {% if cell.hiddenCell == false %}
260
- {% set existHeaderRow = true %}
261
- {% endif %}
262
- {% endfor %}
 
263
 
264
- {% if existHeaderRow == true %}
265
- <tr>
266
- {% if table.settings.autoIndex == 'new' and addHeaderAutoIndex == true %}
267
- <th width="0" rowspan="{{ headRowsCount }}"></th>
268
- {% set addHeaderAutoIndex = false %}
269
- {% endif %}
270
-
271
- {% for cellIndex, cell in row.cells %}
272
- {% if head %}
273
- {{ m.cell(cell, headRowNumber, cellIndex, 'th', _context) }}
274
- {% if cols[cellIndex] == 'Z' %}
275
- {% set countIter = countIter + 1 %}
276
- {% set cellIter = -1 %} {# set 0 because next step is cellIter = cellIter + 1 #}
277
- {% endif %}
278
- {% set cellIter = cellIter + 1 %}
279
- {% else %}
280
- {% if cell.hiddenCell != true%}
281
- <th style="width:{{ table.meta.columnsWidth[cellIndex] }}%; padding: 0 !important;"></th>
282
- {% endif %}
283
- {% endif %}
284
- {% endfor %}
285
- {% set countIter = -1 %}
286
- {% set cellIter = 0 %}
287
- </tr>
288
- {% endif %}
289
- {% endfor %}
290
- </thead>
291
- {% endblock %}
292
 
293
- {% block tbody %}
294
- <tbody>
295
- {% for row in bodyRows %}
296
- {% set rowNumber = loop.index + (head ? headRowsCount : 0) %}
297
- {% set existBodyRow = false %}
 
298
 
299
  {% for cellIndex, cell in row.cells %}
300
- {% if cell.hiddenCell == false %}
301
- {% set existBodyRow = true %}
 
 
 
 
 
 
 
 
 
302
  {% endif %}
303
  {% endfor %}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
304
 
305
- {% if existBodyRow == true %}
306
- <tr
307
- {% if row.height != 'NaN' and row.height | length > 1 %}
308
- style="height: {{ row.height }}px"
309
- {% endif %}
310
  >
311
- {% if table.settings.autoIndex == 'new' %}
312
- <td></td>
313
- {% endif %}
314
 
315
- {% for cellIndex, cell in row.cells %}
316
- {% if cell.row is not empty %}
317
- {% set rowNumber = cell.row %}
318
- {% endif %}
319
- {% if cell.col is not empty %}
320
- {% set cellIndex = cell.col %}
321
- {% endif %}
322
- {{ m.cell(cell, rowNumber, cellIndex, 'td', _context) }}
323
- {% if cols[cellIndex] == 'Z' %}
324
- {% set countIter = countIter + 1 %}
325
- {% set cellIter = -1 %} {# set 0 because next step is cellIter = cellIter + 1 #}
326
- {% endif %}
327
- {% set cellIter = cellIter + 1 %}
328
- {% endfor %}
329
- {% set countIter = -1 %}
330
- {% set cellIter = 0 %}
331
- </tr>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
332
  {% endif %}
333
  {% endfor %}
334
- </tbody>
335
- {% endblock %}
336
-
337
- {% block tfoot %}
338
- {% if foot %}
339
- <tfoot>
340
- {% set addFooterAutoIndex = true %}
341
- {% for row in footRows %}
342
- {% set footRowNumber = table.settings.customFooter is defined
343
- ? headRowsCount + bodyRows | length + loop.index
344
- : footRows | length + 1 - loop.index %}
345
- {% set existFooterRow = false %}
346
-
347
- {% for cellIndex, cell in row.cells %}
348
- {% if cell.hiddenCell == false %}
349
- {% set existFooterRow = true %}
350
- {% endif %}
351
- {% endfor %}
352
-
353
- {% if existFooterRow == true %}
354
- <tr>
355
- {% if table.settings.autoIndex == 'new' and addFooterAutoIndex == true %}
356
- <th width="0" rowspan="{{ footRowsCount }}"></th>
357
- {% set addFooterAutoIndex = false %}
358
- {% endif %}
359
-
360
- {% for cellIndex, cell in row.cells %}
361
- {{ m.cell(cell, footRowNumber, cellIndex, 'th', _context) }}
362
- {% if cols[cellIndex] == 'Z' %}
363
- {% set countIter = countIter + 1 %}
364
- {% set cellIter = -1 %} {# set 0 because next step is cellIter = cellIter + 1 #}
365
- {% endif %}
366
- {% set cellIter = cellIter + 1 %}
367
- {% endfor %}
368
- {% set countIter = -1 %}
369
- {% set cellIter = 0 %}
370
- </tr>
371
- {% endif %}
372
  {% endfor %}
373
- </tfoot>
 
 
374
  {% endif %}
375
- {% endblock %}
376
- </table>
377
- <!-- /#supsystic-table-{{ table.id }}.supsystic-table -->
 
 
 
378
 
379
- {% block signature %}
380
- {% if table.settings.elements.signature is defined and table.settings.elements.signatureText is defined %}
381
- <div class="table-signature">{{ table.settings.elements.signatureText | raw }}</div>
382
- {% endif %}
383
- {% endblock %}
384
 
385
- {% block after_table %}{% endblock %}
386
  </div>
387
  <!-- /.supsystic-tables-wrap -->
388
 
56
 
57
  data-original-value="{{ data | e }}"
58
 
59
+ {% if cell.source is iterable %}
60
  data-source="{{ cell.source | json_encode | e }}"
61
  {% endif %}
62
 
67
  {% endif %}
68
 
69
  {% if 'auto_width' not in context.table.settings.features | keys
70
+ and (context.table.settings.styling.compact is not defined
71
+ or (context.table.settings.styling.compact is defined and context.table.settings.tableWidthType != 'auto'))
72
+ and rowIndex == '1'
73
  %}
74
  {% if context.table.meta.columnsFixedWidth is defined
75
+ and context.table.meta.columnsFixedWidth[cellIndex] is defined
76
+ and context.table.meta.columnsFixedWidth[cellIndex] is not empty
77
  %}
78
  style="min-width: {{ context.table.meta.columnsFixedWidth[cellIndex] }}; width: {{ context.table.meta.columnsFixedWidth[cellIndex] }};"
79
  {% elseif context.table.meta.columnsWidth is defined %}
130
  disable-responsive
131
  {% endif %}"
132
  style="
133
+ {% if tableWidth is defined %}
134
+ {% if tableWidth == 'auto' %}
135
+ display: inline-block;
 
 
136
  {% endif %}
137
+ width: {{ tableWidth }};
138
+ {% endif %}
139
  {% if is_feed == false %}
140
+ visibility: hidden;
141
  {% endif %}
142
+ ">
143
 
144
+ {% block before_table %}{% endblock %}
145
 
146
+ <table
147
  id="supsystic-table-{{ table.id }}"
148
  class="supsystic-table {{ table.settings.styling | keys | join(' ') }}
149
  {% if 'border' in table.settings.styling | keys %}
152
  data-id="{{ table.id }}"
153
  data-view-id="{{ table.view_id }}"
154
  data-title="{{ table.encoded_title }}"
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  data-currency-format="{{ table.settings.currencyFormat | default('$1,0.00') }}"
156
  data-percent-format="{{ table.settings.percentFormat | default('1.00%') }}"
157
  data-date-format="{{ table.settings.dateFormat | default('DD.MM.YYYY') }}"
158
  data-time-format="{{ table.settings.timeFormat | default('HH:mm') }}"
159
+ data-features="{{ table.settings.features | keys | json_encode | e }}"
160
+ {% if 'head' in table.settings.elements | keys %}
161
+ data-head="{{ table.settings.elements.head }}"
 
 
 
 
 
 
 
 
 
162
  {% endif %}
 
163
  {% if 'headerRowsCount' in table.settings | keys %}
164
  data-head-rows-count="{{ table.settings.headerRowsCount | default(1) }}"
165
  {% endif %}
166
  {% if 'fixedHeader' in table.settings | keys %}
167
  data-fixed-head="{{ table.settings.fixedHeader }}"
168
  {% endif %}
169
+ {% if 'foot' in table.settings.elements | keys %}
170
+ data-foot="{{ table.settings.elements.foot }}"
171
+ {% endif %}
172
  {% if 'fixedFooter' in table.settings | keys %}
173
  data-fixed-foot="{{ table.settings.fixedFooter }}"
174
  {% endif %}
180
  data-fixed-left="{{ table.settings.fixedLeftColumnsCount }}"
181
  data-fixed-right="{{ table.settings.fixedRightColumnsCount }}"
182
  {% endif %}
183
+ {% if 'paginationMenuLength' in table.settings | keys %}
184
+ data-pagination-length="{{ table.settings.paginationMenuLength | default('') }}"
185
+ {% endif %}
186
+ {% if 'alignByFirstTable' in table.settings | keys and 'auto_width' not in table.settings.features | keys %}
187
+ data-align-by-first-table="{{ table.settings.alignByFirstTable | default('') }}"
188
+ {% endif %}
189
+ {% if 'autoIndex' in table.settings | keys %}
190
+ data-auto-index="{{ table.settings.autoIndex }}"
191
+ {% endif %}
192
+ {% if 'searching' in table.settings | keys %}
193
+ data-searching-settings="{{ table.settings.searching | json_encode | e }}"
194
+ {% endif %}
195
+ {% if 'useNumberFormat' in table.settings | keys %}
196
+ data-number-format="{{ table.settings.numberFormat | default('1,0.00') }}"
197
+ {% endif %}
198
+ {% if 'useCommaAsDelimiter' in table.settings | keys %}
199
+ data-use-comma-as-delimiter="{{ table.settings.useCommaAsDelimiter | default('') }}"
200
+ {% endif %}
201
+ {% if 'ordering' in table.settings.features | keys %}
202
+ data-sort-column="{{ table.settings.sortingOrderColumn }}"
203
+ data-sort-order="{{ table.settings.sortingOrder }}"
204
+ data-multiple-sorting="{{ table.meta.columnsSortOrder | json_encode | e }}"
205
+ data-disable-sorting="{{ table.meta.columnsDisableSorting | json_encode | e }}"
206
+ {% endif %}
207
+ {% if 'after_table_loaded_script' in table.settings.features | keys
208
+ and 'enable_after_table_loaded_script' in table.settings.features | keys
209
+ and table.settings.features.enable_after_table_loaded_script == 'on'
210
+ %}
211
+ data-after-table-loaded-script="{{ table.settings.features.after_table_loaded_script | json_encode | e }}"
212
+ {% endif %}
213
+ data-lang="{{ table.settings.language.file | default('default') }}"
214
+ {% if 'language' in table.settings | keys %}
215
+ data-override="{{ table.settings.language | json_encode | e }}"
216
+ {% endif %}
217
+ {% if 'translation' in table.settings | keys %}
218
+ data-translation="{{ table.settings.translation | e }}" {# it is already json string #}
219
+ {% endif %}
220
+ {% if 'mergedCells' in table.meta | keys %}
221
+ data-merged="{{ table.meta.mergedCells | json_encode | e }}"
222
+ {% endif %}
223
  data-responsive-mode="{{ table.settings.responsiveMode|default(1) }}"
224
  data-from-history="{{ table.history|default(0) }}"
225
+ {% if 'attr_period' in table.history_data | keys %}
226
+ data-history-period="{{ table.history_data.attr_period }}"
227
+ {% endif %}
228
  {% block table_attributes %}{% endblock %}
229
  {% if tableWidth is defined and tableWidth == 'auto' %}
230
  style="width: {{ tableWidth }};"
231
  {% endif %}
232
+ >
233
 
234
+ {% block caption %}
235
+ {% if table.settings.elements.caption is defined or (table.settings.elements.description is defined and table.settings.elements.descriptionText is defined) %}
236
+ <caption>
237
+ {% if table.settings.elements.caption is defined %}
238
+ <div class="table-title">{{ table.title }}</div>
 
 
 
 
 
239
  {% endif %}
240
+ {% if table.settings.elements.description is defined and table.settings.elements.descriptionText is defined %}
241
+ <div class="table-desc">{{ table.settings.elements.descriptionText | raw }}</div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
242
  {% endif %}
243
+ </caption>
244
+ {% endif %}
245
+ {% endblock %}
246
+
247
+ {% set head = false %}
248
+ {% set headRowsCount = 0 %}
249
+ {% set headRows = table.rows | slice(0, 1) %} {# there is must be at least one header row #}
250
+ {% if table.settings.elements.head is defined %}
251
+ {% set head = true %}
252
+ {% set headRowsCount = table.settings.headerRowsCount | default(1) %}
253
+ {% set headRows = table.rows | slice(0, headRowsCount) %}
254
+ {% endif %}
255
 
256
+ {% set foot = false %}
257
+ {% set footRowsCount = 0 %}
258
+ {% if table.settings.elements.foot is defined %}
259
+ {% set foot = true %}
260
+ {% if table.settings.customFooter is defined %}
261
+ {% set footRowsCount = table.settings.footerRowsCount | default(1) %}
262
+ {% set footRows = table.rows | slice('-' ~ footRowsCount, footRowsCount) %}
263
+ {% else %}
264
+ {% set footRows = headRows | reverse %}
265
+ {% endif %}
266
+ {% endif %}
267
 
268
+ {% set bodyRows = table.rows | slice(head ? headRowsCount : 0) %}
269
+ {% if foot %}
270
+ {% set bodyRows = bodyRows | slice(0, bodyRows | length - footRowsCount) %}
271
+ {% endif %}
 
 
272
 
273
+ {% block thead %}
274
+ <thead> {# header must be always to set columns width #}
275
+ {% set addHeaderAutoIndex = true %}
276
+ {% for row in headRows %}
277
+ {% set headRowNumber = loop.index %}
278
+ {% set existHeaderRow = false %}
279
 
280
+ {% for cellIndex, cell in row.cells %}
281
+ {% if cell.hiddenCell == false %}
282
+ {% set existHeaderRow = true %}
283
+ {% endif %}
284
+ {% endfor %}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
285
 
286
+ {% if existHeaderRow == true %}
287
+ <tr>
288
+ {% if table.settings.autoIndex == 'new' and addHeaderAutoIndex == true %}
289
+ <th width="0" rowspan="{{ headRowsCount }}"></th>
290
+ {% set addHeaderAutoIndex = false %}
291
+ {% endif %}
292
 
293
  {% for cellIndex, cell in row.cells %}
294
+ {% if head %}
295
+ {{ m.cell(cell, headRowNumber, cellIndex, 'th', _context) }}
296
+ {% if cols[cellIndex] == 'Z' %}
297
+ {% set countIter = countIter + 1 %}
298
+ {% set cellIter = -1 %} {# set 0 because next step is cellIter = cellIter + 1 #}
299
+ {% endif %}
300
+ {% set cellIter = cellIter + 1 %}
301
+ {% else %}
302
+ {% if cell.hiddenCell != true%}
303
+ <th style="width:{{ table.meta.columnsWidth[cellIndex] }}%; padding: 0 !important;"></th>
304
+ {% endif %}
305
  {% endif %}
306
  {% endfor %}
307
+ {% set countIter = -1 %}
308
+ {% set cellIter = 0 %}
309
+ </tr>
310
+ {% endif %}
311
+ {% endfor %}
312
+ </thead>
313
+ {% endblock %}
314
+
315
+ {% block tbody %}
316
+ <tbody>
317
+ {% for row in bodyRows %}
318
+ {% set rowNumber = loop.index + (head ? headRowsCount : 0) %}
319
+ {% set existBodyRow = false %}
320
+
321
+ {% for cellIndex, cell in row.cells %}
322
+ {% if cell.hiddenCell == false %}
323
+ {% set existBodyRow = true %}
324
+ {% endif %}
325
+ {% endfor %}
326
 
327
+ {% if existBodyRow == true %}
328
+ <tr
329
+ {% if row.height != 'NaN' and row.height matches '/^[0-9]*\\.?[0-9]+$/' %}
330
+ style="height: {{ row.height }}px"
331
+ {% endif %}
332
  >
333
+ {% if table.settings.autoIndex == 'new' %}
334
+ <td></td>
335
+ {% endif %}
336
 
337
+ {% for cellIndex, cell in row.cells %}
338
+ {% if cell.row is not empty %}
339
+ {% set rowNumber = cell.row %}
340
+ {% endif %}
341
+ {% if cell.col is not empty %}
342
+ {% set cellIndex = cell.col %}
343
+ {% endif %}
344
+ {{ m.cell(cell, rowNumber, cellIndex, 'td', _context) }}
345
+ {% if cols[cellIndex] == 'Z' %}
346
+ {% set countIter = countIter + 1 %}
347
+ {% set cellIter = -1 %} {# set 0 because next step is cellIter = cellIter + 1 #}
348
+ {% endif %}
349
+ {% set cellIter = cellIter + 1 %}
350
+ {% endfor %}
351
+ {% set countIter = -1 %}
352
+ {% set cellIter = 0 %}
353
+ </tr>
354
+ {% endif %}
355
+ {% endfor %}
356
+ </tbody>
357
+ {% endblock %}
358
+
359
+ {% block tfoot %}
360
+ {% if foot %}
361
+ <tfoot>
362
+ {% set addFooterAutoIndex = true %}
363
+ {% for row in footRows %}
364
+ {% set footRowNumber = table.settings.customFooter is defined
365
+ ? headRowsCount + bodyRows | length + loop.index
366
+ : footRows | length + 1 - loop.index %}
367
+ {% set existFooterRow = false %}
368
+
369
+ {% for cellIndex, cell in row.cells %}
370
+ {% if cell.hiddenCell == false %}
371
+ {% set existFooterRow = true %}
372
  {% endif %}
373
  {% endfor %}
374
+
375
+ {% if existFooterRow == true %}
376
+ <tr>
377
+ {% if table.settings.autoIndex == 'new' and addFooterAutoIndex == true %}
378
+ <th width="0" rowspan="{{ footRowsCount }}"></th>
379
+ {% set addFooterAutoIndex = false %}
380
+ {% endif %}
381
+
382
+ {% for cellIndex, cell in row.cells %}
383
+ {{ m.cell(cell, footRowNumber, cellIndex, 'th', _context) }}
384
+ {% if cols[cellIndex] == 'Z' %}
385
+ {% set countIter = countIter + 1 %}
386
+ {% set cellIter = -1 %} {# set 0 because next step is cellIter = cellIter + 1 #}
387
+ {% endif %}
388
+ {% set cellIter = cellIter + 1 %}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
389
  {% endfor %}
390
+ {% set countIter = -1 %}
391
+ {% set cellIter = 0 %}
392
+ </tr>
393
  {% endif %}
394
+ {% endfor %}
395
+ </tfoot>
396
+ {% endif %}
397
+ {% endblock %}
398
+ </table>
399
+ <!-- /#supsystic-table-{{ table.id }}.supsystic-table -->
400
 
401
+ {% block signature %}
402
+ {% if table.settings.elements.signature is defined and table.settings.elements.signatureText is defined %}
403
+ <div class="table-signature">{{ table.settings.elements.signatureText | raw }}</div>
404
+ {% endif %}
405
+ {% endblock %}
406
 
407
+ {% block after_table %}{% endblock %}
408
  </div>
409
  <!-- /.supsystic-tables-wrap -->
410
 
src/SupsysticTables/Tables/views/view.twig CHANGED
@@ -17,6 +17,7 @@
17
 
18
  {% import _self as checkbox %}
19
  {% import '@ui/tooltip.twig' as tooltip %}
 
20
 
21
  <div class="supsystic-item tables-view">
22
  <div class="container-fluid">
@@ -25,16 +26,8 @@
25
  <div class="row">
26
  <div class="col-md-3 col-sm-5 col-xs-10">
27
  <select name="shortcode_example" id="stbCopyTextCodeExamples">
28
- {% for value, option in {
29
- 'shortcode': 'Table Shortcode',
30
- 'value_shortcode': 'Value Shortcode',
31
- 'cell_shortcode': 'Cell Shortcode',
32
- 'history_shortcode': 'History Shortcode',
33
- 'php_code': 'Table PHP code',
34
- } %}
35
- <option value="{{ value }}">
36
- {{ option }}
37
- </option>
38
  {% endfor %}
39
  </select>
40
  </div>
@@ -47,31 +40,20 @@
47
  <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)
48
  }}
49
  </div>
50
- <div class="col-md-8 col-sm-6 col-xs-10 stbCopyTextCodeShowBlock ShortCodeFirstBlock" data-for="shortcode" style="display: none;">
51
- {% set shortcode = '[' ~ shortcode_name ~ ' id=' ~ table.id ~ ']' %}
52
- <input type="text" name="stbCopyTextCode" value="{{ shortcode }}"
53
- class="stbCopyTextCode supsystic-tooltip-right tooltipstered" readonly="readonly">
54
- </div>
55
- <div class="col-md-8 col-sm-6 col-xs-10 stbCopyTextCodeShowBlock shortCodeSecondBlock" data-for="value_shortcode" style="display: none;">
56
- {% set shortcode_value = '[' ~ shortcode_value_name ~ ' id=' ~ table.id ~ ' row=1 col=1]' %}
57
- <input type="text" name="stbCopyTextCode" value="{{ shortcode_value }}"
58
- class="stbCopyTextCode supsystic-tooltip-right tooltipstered" readonly="readonly">
59
- </div>
60
- <div class="col-md-8 col-sm-6 col-xs-10 stbCopyTextCodeShowBlock" data-for="cell_shortcode" style="display: none;">
61
- {% set shortcode_cell = '[' ~ shortcode_cell_name ~ ' id=' ~ table.id ~ ' row=1 col=1]' %}
62
- <input type="text" name="stbCopyTextCode" value="{{ shortcode_cell }}"
63
- class="stbCopyTextCode supsystic-tooltip-right tooltipstered" readonly="readonly">
64
- </div>
65
- <div class="col-md-8 col-sm-6 col-xs-10 stbCopyTextCodeShowBlock" data-for="history_shortcode" style="display: none;">
66
- {% set shortcode_history = '[' ~ shortcode_name ~ ' id=' ~ table.id ~ ' use_history=1]' %}
67
- <input type="text" name="stbCopyTextCode" value="{{ shortcode_history }}"
68
- class="stbCopyTextCode supsystic-tooltip-right tooltipstered" readonly="readonly">
69
- </div>
70
- <div class="col-md-8 col-sm-6 col-xs-10 stbCopyTextCodeShowBlock" data-for="php_code" style="display: none;">
71
- {% set php_code = '<?php echo do_shortcode("[' ~ shortcode_name ~ ' id=' ~ table.id ~ ']"); ?>' %}
72
- <input type="text" name="stbCopyTextCode" value="{{ php_code }}"
73
- class="stbCopyTextCode supsystic-tooltip-right tooltipstered" readonly="readonly">
74
- </div>
75
  <div class="clear"></div>
76
  </div>
77
  </div>
@@ -91,13 +73,23 @@
91
  </li>
92
  {{ environment.getDispatcher().dispatch('tables-view-buttons-left') }}
93
  <li>
94
- <button id="export" class="button {% if environment.isPro() == false %}pro-notify{% endif %}" data-message="{{ environment.translate('Export available only in PRO version.') }}">
 
 
 
 
 
95
  <i class="fa fa-fw fa-upload"></i>
96
  <span>{{ environment.translate('Export') }}</span>
97
  </button>
98
  </li>
99
  <li>
100
- <button id="import" class="button {% if environment.isPro() == false %}pro-notify{% endif %}" data-message="{{ environment.translate('Import available only in PRO version.') }}">
 
 
 
 
 
101
  <i class="fa fa-fw fa-download"></i>
102
  <span>{{ environment.translate('Import') }}</span>
103
  </button>
@@ -969,8 +961,8 @@
969
  (toolbar on Editor tab) or calculated depending on the columns width in the table editor.<br /><br />
970
  If you do not want to apply columns width at all - you should uncheck "Auto Table Width" option, set "Fixed Table Width"
971
  option to "auto" and check "Compact Table" option.')) }}
972
- </label>
973
- </div>
974
  <div class="setting-item col-md-6 col-sm-6 col-xs-12">
975
  <input type="checkbox" name="features[auto_width]"
976
  {{ checkbox.checked(table.settings.features.auto_width) }}
@@ -1199,8 +1191,8 @@
1199
  </label>
1200
  </div>
1201
  <div class="setting-item sub-options col-md-6 col-sm-6 col-xs-12">
1202
- <div id="tableLoaderColorContainer">
1203
- <div class="tableLoaderColorArea" style="background-color: {{ tblLoaderColor }};"></div>
1204
  <input type="hidden" name="tableLoader[color]" value="{{ tblLoaderColor }}" />
1205
  </div>
1206
  </div>
@@ -1221,6 +1213,7 @@
1221
  'info': {
1222
  'default': translate('Showing _START_ to _END_ of _TOTAL_ entries'),
1223
  'label': translate('Table info text'),
 
1224
  },
1225
  'infoEmpty': {
1226
  'default': translate('Showing 0 to 0 of 0 entries'),
@@ -1229,10 +1222,12 @@
1229
  'infoFiltered': {
1230
  'default': translate('(filtered from _MAX_ total entries)'),
1231
  'label': translate('Filtered info text'),
 
1232
  },
1233
  'lengthMenu': {
1234
  'default': translate('Show _MENU_ entries'),
1235
  'label': translate('Length text'),
 
1236
  },
1237
  'search': {
1238
  'default': translate('Search:'),
@@ -1272,24 +1267,18 @@
1272
  <div class="setting-item col-md-6 col-sm-6 col-xs-12">
1273
  <label for="language-file">
1274
  {{ environment.translate('Table Language') }}
1275
- {{ tooltip.icon(environment.translate('Allows to choose language for the table\'s labels (pagination, search ets.)')) }}
1276
  </label>
1277
  </div>
1278
  <div class="setting-item col-md-6 col-sm-6 col-xs-12">
1279
  <select name="language[file]" id="language-file">
1280
- <option value="browser" {% if table.settings.language.file == 'browser' %} selected="selected"{% endif %}>
1281
- {{ environment.translate('Get Browser Language') }}
1282
- </option>
1283
- <option value="default"
1284
- {% if table.settings.language.file is not defined or table.settings.language.file == 'default' or translations | length < 1 %}
1285
- selected="selected"
1286
- {% endif %}>
1287
- English
1288
- </option>
1289
  {% for supportedLanguage in translations %}
1290
- <option value="{{ supportedLanguage }}"
1291
- {% if table.settings.language.file == supportedLanguage %}selected="selected"{% endif %}>
1292
- {{ supportedLanguage }}
 
 
 
1293
  </option>
1294
  {% endfor %}
1295
  </select>
@@ -1386,26 +1375,6 @@
1386
  <i class="fa-fw background-fill-icon"></i>
1387
  </button>
1388
  </li>
1389
- {% if environment.isPro() == false %}
1390
- <li>
1391
- <span class="toolContainer" {{ tooltip.attr(environment.translate('Font family changing available only in PRO version.')) }}>
1392
- <select disabled="disabled">
1393
- <option value="">{{ environment.translate('Font Family') }}</option>
1394
- </select>
1395
- </span>
1396
- </li>
1397
- {% endif %}
1398
- {{ environment.getDispatcher().dispatch('toolbar_fonts_list', [table]) }}
1399
- <li>
1400
- <span class="toolContainer">
1401
- <select id="fontSize" class="tool" data-method="size" data-event="change" {{ tooltip.attr(environment.translate('Font Size')) }}>
1402
- <option value="default">{{ environment.translate('Default') }}</option>
1403
- {% for i in 6..100 %}
1404
- <option value="{{ i }}">{{ i }}</option>
1405
- {% endfor %}
1406
- </select>
1407
- </span>
1408
- </li>
1409
  <li>
1410
  <button {{ tooltip.attr(environment.translate('Alignment')) }} data-toolbar="#toolbar-alignment">
1411
  <i class="fa fa-fw fa-align-left"></i>
@@ -1455,6 +1424,41 @@
1455
  </a>
1456
  </div>
1457
  </li>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1458
  <li>
1459
  <button {{ tooltip.attr(environment.translate('Insert link')) }} data-method="link">
1460
  <i class="fa fa-fw fa-link"></i>
@@ -1478,47 +1482,69 @@
1478
  </a>
1479
  </div>
1480
  </li>
1481
- <li>
1482
- <button {{ tooltip.attr(environment.translate('Formats for cells value. All formats convert cell values to appropriate format types.
1483
- <b>Percent with Convert</b> format sets percent format and convert cells value to percentage by division by 100.
1484
- ')) }} data-toolbar="#toolbar-formats-list" id="toolbar-formats" data-style="list">
1485
- <i class="fa fa-eur" aria-hidden="true"></i>
1486
- </button>
1487
- <div id="toolbar-formats-list" class="toolbar-content">
1488
- <a href="#" class="cell-format text-format" data-method="setFormat" data-type="text" data-format="">{{ environment.translate('Plain') }}</a>
1489
- <a href="#" class="cell-format currency-format" data-method="setFormat" data-type="currency" data-format="{{ table.settings.currencyFormat | default('$1,0.00') }}">{{ environment.translate('Currency') }} ($1,000.00)</a>
1490
- <a href="#" class="cell-format percent-format" data-method="setFormat" data-type="percent" data-format="{{ table.settings.percentFormat | default('0.00%') }}">{{ environment.translate('Percent') }} (10.02%)</a>
1491
- <a href="#" class="cell-format percent-convert-format" data-method="setFormat" data-type="percent-convert" data-format="{{ table.settings.percentFormat | default('0.00%') }}">{{ environment.translate('Percent with Convert') }} (10.02%)</a>
1492
- <a href="#" class="cell-format date-format" data-method="setFormat" data-type="date" data-format="{{ table.settings.dateFormat | default('DD.MM.YYYY') }}">{{ environment.translate('Date') }} (25.10.2016)</a>
1493
- <a href="#" class="cell-format time_duration-format" data-method="setFormat" data-type="time_duration" data-format="{{ table.settings.timeDurationFormat | default('hh:mm') }}">{{ environment.translate('Time / Duration') }} (18:05 / 34:18)</a>
1494
- </div>
1495
- </li>
1496
  </ul>
1497
- {% if environment.isPro() == false %}
1498
- <ul>
 
 
1499
  <li>
1500
- <button {{ tooltip.attr(environment.translate('Add diagram')) }} id="addDiagramProFeature">
1501
  <i class="fa fa-fw fa-bar-chart"></i>
1502
  </button>
1503
  </li>
1504
  <li>
1505
- <button {{ tooltip.attr(environment.translate('Add <a href="%s" target="_blank">editable field</a> for selected cells to edit cell value on frontend. Enjoy the <a href="%s" target="_blank">practical example</a>.') | format('//supsystic.com/documentation/editable-fields/', '//supsystic.com/blog/growing-your-business-with-data-table-plugin/')) }} id="editableFieldProFeature">
1506
- <i class="fa fa-fw fa-pencil-square-o"></i>
1507
  </button>
1508
  </li>
1509
  <li>
1510
- <button {{ tooltip.attr(environment.translate('Add dropdown list for highlighted cell to change cell value on frontend.')) }} id="selectableFieldProFeature">
1511
- <i class="fa fa-fw fa-share-square-o"></i>
 
 
 
1512
  </button>
1513
  </li>
1514
- </ul>
1515
- {% endif %}
1516
- {{ environment.getDispatcher().dispatch('toolbar_rendered', [table]) }}
1517
- {# when this button is the last - toolbar looks more pretty #}
1518
- <ul>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1519
  <li>
1520
- <button {{ tooltip.attr(environment.translate('Mark selected cells as invisible and hide them on frontend. Can be useful for placing intermediate calculations. <br /><br />To display the table correctly, please, add this property for the whole row or the whole column of table.')) }} data-toolbar="#toolbar-invisibleCell">
1521
- <i class="fa fa-low-vision" aria-hidden="true"></i>
 
 
 
1522
  </button>
1523
  <div id="toolbar-invisibleCell" class="toolbar-content">
1524
  <a href="#" data-method="addInvisibleCell"><i class="fa fa-fw fa-plus"></i></a>
@@ -1526,14 +1552,29 @@
1526
  </div>
1527
  </li>
1528
  <li>
1529
- <button {{ tooltip.attr(environment.translate('Mark selected cells as hidden and remove them from frontend. Can be useful for placing information in the table for admins only. <br /><br />Importanr! To display the table correctly, please, add this property for the whole row or the whole column of table.')) }} data-toolbar="#toolbar-hiddenCell">
1530
- <i class="fa fa-ban" aria-hidden="true"></i>
 
 
 
1531
  </button>
1532
  <div id="toolbar-hiddenCell" class="toolbar-content">
1533
  <a href="#" data-method="addHiddenCell"><i class="fa fa-fw fa-plus"></i></a>
1534
  <a href="#" data-method="removeHiddenCell"><i class="fa fa-fw fa-trash-o"></i></a>
1535
  </div>
1536
  </li>
 
 
 
 
 
 
 
 
 
 
 
 
1537
  </ul>
1538
  </div>
1539
  <!-- /#tableToolbar -->
@@ -1575,15 +1616,6 @@ for example:
1575
  <!-- /.container-fluid -->
1576
  {{ environment.getDispatcher().dispatch('tables-view-footer', [table]) }}
1577
 
1578
- <div id="proPopup" style="display: none;" title="{{ environment.translate('Get PRO version') }}">
1579
- <p>
1580
- Please be advised that this option is available only in
1581
- <a target="_blank" href="{{ build_pro_url({ 'utm_medium': 'import_export' }) }}" style="color: #000;">PRO
1582
- version</a>. You can
1583
- <a target="_blank" href="{{ build_pro_url({ 'utm_medium': 'import_export' }) }}" class="button supsystic-button"><span class="ui-button-text">Get PRO</span></a> today and get this and other PRO option for your tables!
1584
- </p>
1585
- </div>
1586
-
1587
  <div id="cloneDialog" style="display: none;" title="Clone Table">
1588
  <div class="input-group">
1589
  <label>{{ environment.translate('Name of Cloned Table') }}</label>
@@ -1607,6 +1639,7 @@ for example:
1607
  <h3 class="fixedColumnWidthDataLabel">{{ environment.translate('List of width sizes, set for table columns:') }}</h3>
1608
  <div id="fixedColumnWidthData" class="dataContainer"></div>
1609
  </div>
 
1610
  <div id="setMultipleColumnsSortingDialog" style="display: none;" title="Multiple Columns Sorting">
1611
  <p style="margin-top: 0;">{{ environment.translate('Set multiple column sorting for selected columns. Press "Clear Multiple Sorting" to clear multiple sorting for all table columns. All changes will be applied after table saving.') }}</p>
1612
  <p style="margin-top: 0;">{{ environment.translate('If multiple sorting for columns is not set - the table will be sorted in the specified order by the column set in the table settings: Settings-> Features-> Sorting Order / Sorting Column. Otherwise - table will be sorted by the specified custom columns in sequense, in which they are listed.') }}</p>
@@ -1631,47 +1664,6 @@ for example:
1631
  <div id="disableSortOrderData" class="dataContainer"></div>
1632
  </div>
1633
 
1634
- <div id="editableFieldProFeatureDialog" style="display: none;" title="{{ environment.translate('Editable fields') }}">
1635
- {% set url = '<a target="_blank" href="' ~ build_pro_url({ 'utm_medium': 'editable_fields' }) ~ '" style="color: #000;">' ~ environment.translate('PRO version') ~ '</a>' %}
1636
- {% set url2 = '<a target="_blank" href="' ~ build_pro_url({ 'utm_medium': 'editable_fields' }) ~ '" style="color: #000;" class="button supsystic-button"><span class="ui-button-text">' ~ environment.translate('Get PRO') ~ '</span></a>' %}
1637
- <p>
1638
- {{ environment.translate('Please be advised that this option is available only in %s. You can %s today and get this and other PRO option for your tables!')|format(url, url2)|raw }}
1639
- </p>
1640
- </div>
1641
-
1642
- <div id="selectableFieldProFeatureDialog" style="display: none;" title="{{ environment.translate('Selectable fields') }}">
1643
- {% set url = '<a target="_blank" href="' ~ build_pro_url({ 'utm_medium': 'selectable_fields' }) ~ '" style="color: #000;">' ~ environment.translate('PRO version') ~ '</a>' %}
1644
- {% set url2 = '<a target="_blank" href="' ~ build_pro_url({ 'utm_medium': 'selectable_fields' }) ~ '" style="color: #000;" class="button supsystic-button"><span class="ui-button-text">' ~ environment.translate('Get PRO') ~ '</span></a>' %}
1645
- <p>
1646
- {{ environment.translate('Please be advised that this option is available only in %s. You can %s today and get this and other PRO option for your tables!')|format(url, url2)|raw }}
1647
- </p>
1648
- </div>
1649
-
1650
- <div id="addDiagramProFeatureDialog" class="supsystic-plugin" style="display: none;" title="{{ environment.translate('Diagram') }}">
1651
- {% set url = build_pro_url({ 'utm_medium': 'diagrams' }) %}
1652
- <a href="{{ url }}" class="button button-hero" style="position: absolute; top: 63px; right: 20px; padding-top: 1px !important;" target="_blank">
1653
- {{ environment.translate('Get PRO') }}
1654
- </a>
1655
- <div id="previewDiagramProFeature" style="z-index: 10;" title="{{ environment.translate('Diagram') }}">
1656
- <div class="tab-switch" data-tabs>
1657
- <a class="active" href="#typeProFeature">{{ environment.translate('Type') }}</a>
1658
- <a href="#settingsProFeature">{{ environment.translate('Settings') }}</a>
1659
- </div>
1660
- <div class="tabs">
1661
- <div id="typeTabProFeature" class="tab active" data-tab="#typeProFeature">
1662
- <a href="{{ url }}" target="_blank">
1663
- <img src="{{ environment.getModule('diagram').getLocationUrl() }}/assets/img/diagrams_dialog_type_tab.png" alt="Diagrams" title="diagrams_dialog_tab_1 Tab Content" style="width: 100%; height: auto;"/>
1664
- </a>
1665
- </div>
1666
- <div id="settingsTabProFeature" class="tab" data-tab="#settingsProFeature">
1667
- <a href="{{ url }}" target="_blank">
1668
- <img src="{{ environment.getModule('diagram').getLocationUrl() }}/assets/img/diagrams_dialog_settings_tab.png" alt="Diagrams" title="Settings Tab Content" style="width: 100%; height: auto;"/>
1669
- </a>
1670
- </div>
1671
- </div>
1672
- </div>
1673
- </div>
1674
-
1675
  <div id="insertUrlDialog" style="display: none;" title="{{ environment.translate('Insert Link') }}">
1676
  <div class="input-group">
1677
  <label>{{ environment.translate('Url') }}</label>
@@ -1741,6 +1733,51 @@ for example:
1741
  </div>
1742
  </div>
1743
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1744
  </div>
1745
  <!-- /.supsystic-item -->
1746
  <div style="clear: both;"></div>
17
 
18
  {% import _self as checkbox %}
19
  {% import '@ui/tooltip.twig' as tooltip %}
20
+ {% set shortcodeOptions = environment.getModule('tables').getShortcodesList() %}
21
 
22
  <div class="supsystic-item tables-view">
23
  <div class="container-fluid">
26
  <div class="row">
27
  <div class="col-md-3 col-sm-5 col-xs-10">
28
  <select name="shortcode_example" id="stbCopyTextCodeExamples">
29
+ {% for index, option in shortcodeOptions %}
30
+ <option value="{{ index }}">{{ option.label }}</option>
 
 
 
 
 
 
 
 
31
  {% endfor %}
32
  </select>
33
  </div>
40
  <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)
41
  }}
42
  </div>
43
+ {% for index, option in shortcodeOptions %}
44
+ <div class="col-md-8 col-sm-6 col-xs-10 stbCopyTextCodeShowBlock ShortCodeFirstBlock" data-for="{{ index }}" style="display: none;">
45
+ {% set attrs = ' id=' ~ table.id %}
46
+ {% if option.attrs is not empty %}
47
+ {% set attrs = attrs ~ ' ' ~ option.attrs %}
48
+ {% endif %}
49
+ {% set shortcode = '[' ~ option.name ~ attrs ~ ']' %}
50
+ {% if index == 'php_code' %}
51
+ {% set shortcode = '<?php echo do_shortcode("[' ~ option.name ~ ' id=' ~ table.id ~ ']"); ?>' %}
52
+ {% endif %}
53
+ <input type="text" name="stbCopyTextCode" value="{{ shortcode }}"
54
+ class="stbCopyTextCode supsystic-tooltip-right tooltipstered" readonly="readonly">
55
+ </div>
56
+ {% endfor %}
 
 
 
 
 
 
 
 
 
 
 
57
  <div class="clear"></div>
58
  </div>
59
  </div>
73
  </li>
74
  {{ environment.getDispatcher().dispatch('tables-view-buttons-left') }}
75
  <li>
76
+ <button id="export"
77
+ class="button {% if environment.isPro() == false %}pro-notify{% endif %}"
78
+ data-dialog="#import_exportProFeatureDialog"
79
+ data-dtitle="{{ environment.translate('Import / Export') }}"
80
+ data-dwidth="480"
81
+ >
82
  <i class="fa fa-fw fa-upload"></i>
83
  <span>{{ environment.translate('Export') }}</span>
84
  </button>
85
  </li>
86
  <li>
87
+ <button id="import"
88
+ class="button {% if environment.isPro() == false %}pro-notify{% endif %}"
89
+ data-dialog="#import_exportProFeatureDialog"
90
+ data-dtitle="{{ environment.translate('Import / Export') }}"
91
+ data-dwidth="480"
92
+ >
93
  <i class="fa fa-fw fa-download"></i>
94
  <span>{{ environment.translate('Import') }}</span>
95
  </button>
961
  (toolbar on Editor tab) or calculated depending on the columns width in the table editor.<br /><br />
962
  If you do not want to apply columns width at all - you should uncheck "Auto Table Width" option, set "Fixed Table Width"
963
  option to "auto" and check "Compact Table" option.')) }}
964
+ </label>
965
+ </div>
966
  <div class="setting-item col-md-6 col-sm-6 col-xs-12">
967
  <input type="checkbox" name="features[auto_width]"
968
  {{ checkbox.checked(table.settings.features.auto_width) }}
1191
  </label>
1192
  </div>
1193
  <div class="setting-item sub-options col-md-6 col-sm-6 col-xs-12">
1194
+ <div id="tableLoaderColorContainer" class="colorPickerShell">
1195
+ <div class="tableLoaderColorArea colorPickerArea" style="background-color: {{ tblLoaderColor }};"></div>
1196
  <input type="hidden" name="tableLoader[color]" value="{{ tblLoaderColor }}" />
1197
  </div>
1198
  </div>
1213
  'info': {
1214
  'default': translate('Showing _START_ to _END_ of _TOTAL_ entries'),
1215
  'label': translate('Table info text'),
1216
+ 'info': translate('Variables: _START_, _END_, _TOTAL_<br />Example: Showing _START_ to _END_ of _TOTAL_ entries'),
1217
  },
1218
  'infoEmpty': {
1219
  'default': translate('Showing 0 to 0 of 0 entries'),
1222
  'infoFiltered': {
1223
  'default': translate('(filtered from _MAX_ total entries)'),
1224
  'label': translate('Filtered info text'),
1225
+ 'info': translate('Variables: _MAX_<br />Example: (filtered from _MAX_ total entries)'),
1226
  },
1227
  'lengthMenu': {
1228
  'default': translate('Show _MENU_ entries'),
1229
  'label': translate('Length text'),
1230
+ 'info': translate('Variables: _MENU_<br />Example: Show _MENU_ entries'),
1231
  },
1232
  'search': {
1233
  'default': translate('Search:'),
1267
  <div class="setting-item col-md-6 col-sm-6 col-xs-12">
1268
  <label for="language-file">
1269
  {{ environment.translate('Table Language') }}
1270
+ {{ tooltip.icon(environment.translate('Allows to choose language for the table\'s labels (pagination, search ets.). The dafault language is English.')) }}
1271
  </label>
1272
  </div>
1273
  <div class="setting-item col-md-6 col-sm-6 col-xs-12">
1274
  <select name="language[file]" id="language-file">
 
 
 
 
 
 
 
 
 
1275
  {% for supportedLanguage in translations %}
1276
+ <option value="{{ supportedLanguage }}" {% if table.settings.language.file == supportedLanguage %}selected="selected"{% endif %}>
1277
+ {% if supportedLanguage == 'browser' %}
1278
+ {{ environment.translate('Get Browser Language') }}
1279
+ {% else %}
1280
+ {{ supportedLanguage }}
1281
+ {% endif %}
1282
  </option>
1283
  {% endfor %}
1284
  </select>
1375
  <i class="fa-fw background-fill-icon"></i>
1376
  </button>
1377
  </li>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1378
  <li>
1379
  <button {{ tooltip.attr(environment.translate('Alignment')) }} data-toolbar="#toolbar-alignment">
1380
  <i class="fa fa-fw fa-align-left"></i>
1424
  </a>
1425
  </div>
1426
  </li>
1427
+ <li>
1428
+ <button {{ tooltip.attr(environment.translate('Formats for cells value. All formats convert cell values to appropriate format types.
1429
+ <b>Percent with Convert</b> format sets percent format and convert cells value to percentage by division by 100.
1430
+ ')) }} data-toolbar="#toolbar-formats-list" id="toolbar-formats" data-style="list">
1431
+ <i class="fa fa-eur" aria-hidden="true"></i>
1432
+ </button>
1433
+ <div id="toolbar-formats-list" class="toolbar-content">
1434
+ <a href="#" class="cell-format text-format" data-method="setFormat" data-type="text" data-format="">{{ environment.translate('Plain') }}</a>
1435
+ <a href="#" class="cell-format currency-format" data-method="setFormat" data-type="currency" data-format="{{ table.settings.currencyFormat | default('$1,0.00') }}">{{ environment.translate('Currency') }} ($1,000.00)</a>
1436
+ <a href="#" class="cell-format percent-format" data-method="setFormat" data-type="percent" data-format="{{ table.settings.percentFormat | default('0.00%') }}">{{ environment.translate('Percent') }} (10.02%)</a>
1437
+ <a href="#" class="cell-format percent-convert-format" data-method="setFormat" data-type="percent-convert" data-format="{{ table.settings.percentFormat | default('0.00%') }}">{{ environment.translate('Percent with Convert') }} (10.02%)</a>
1438
+ <a href="#" class="cell-format date-format" data-method="setFormat" data-type="date" data-format="{{ table.settings.dateFormat | default('DD.MM.YYYY') }}">{{ environment.translate('Date') }} (25.10.2016)</a>
1439
+ <a href="#" class="cell-format time_duration-format" data-method="setFormat" data-type="time_duration" data-format="{{ table.settings.timeDurationFormat | default('hh:mm') }}">{{ environment.translate('Time / Duration') }} (18:05 / 34:18)</a>
1440
+ </div>
1441
+ </li>
1442
+ {% if environment.isPro() == false %}
1443
+ <li>
1444
+ <span class="toolContainer" {{ tooltip.attr(environment.translate('Font family changing available only in PRO version.')) }}>
1445
+ <select id="fontFamily" disabled="disabled">
1446
+ <option value="">{{ environment.translate('Font Family') }}</option>
1447
+ </select>
1448
+ </span>
1449
+ </li>
1450
+ {% endif %}
1451
+ {{ environment.getDispatcher().dispatch('toolbar_fonts_list', [table]) }}
1452
+ <li>
1453
+ <span class="toolContainer">
1454
+ <select id="fontSize" class="tool" data-method="size" data-event="change" {{ tooltip.attr(environment.translate('Font Size')) }}>
1455
+ <option value="default">{{ environment.translate('Default') }}</option>
1456
+ {% for i in 6..100 %}
1457
+ <option value="{{ i }}">{{ i }}</option>
1458
+ {% endfor %}
1459
+ </select>
1460
+ </span>
1461
+ </li>
1462
  <li>
1463
  <button {{ tooltip.attr(environment.translate('Insert link')) }} data-method="link">
1464
  <i class="fa fa-fw fa-link"></i>
1482
  </a>
1483
  </div>
1484
  </li>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1485
  </ul>
1486
+ {{ environment.getDispatcher().dispatch('toolbar_rendered', [table]) }}
1487
+ <br />
1488
+ <ul>
1489
+ {% if environment.isPro() == false %}
1490
  <li>
1491
+ <button class="pro-notify" data-dialog="#diagramsProFeatureDialog" data-dtitle="{{ environment.translate('Diagram') }}" data-dwidth="913" {{ tooltip.attr(environment.translate('Add diagram')) }}>
1492
  <i class="fa fa-fw fa-bar-chart"></i>
1493
  </button>
1494
  </li>
1495
  <li>
1496
+ <button class="pro-notify" data-dialog="#сonditional_formattingProFeatureDialog" data-dtitle="{{ environment.translate('Conditional Formatting') }}" data-dwidth="615" {{ tooltip.attr(environment.translate('Add conditional formatting to cells.')) }}>
1497
+ <i class="fa fa-fw fa-balance-scale"></i>
1498
  </button>
1499
  </li>
1500
  <li>
1501
+ <button class="pro-notify" data-dialog="#editable_fieldsProFeatureDialog" data-dtitle="{{ environment.translate('Editable Fields') }}" data-dwidth="480" {{ tooltip.attr(environment.translate('Add <a href="%s" target="_blank">editable field</a> for selected cells to edit cell value on frontend. Enjoy the <a href="%s" target="_blank">practical example</a>.') | format('//supsystic.com/documentation/editable-fields/', '//supsystic.com/blog/growing-your-business-with-data-table-plugin/')) }}>
1502
+ <span class="fa-stack">
1503
+ <i class="fa fa-fw fa-square-o fa-stack-2x"></i>
1504
+ <i class="fa fa-fw fa-pencil fa-stack-1x"></i>
1505
+ </span>
1506
  </button>
1507
  </li>
1508
+ <li>
1509
+ <button class="pro-notify" data-dialog="#selectable_fieldsProFeatureDialog" data-dtitle="{{ environment.translate('Selectable Fields') }}" data-dwidth="480" {{ tooltip.attr(environment.translate('Add dropdown list for highlighted cell to change cell value on frontend.')) }}>
1510
+ <span class="fa-stack">
1511
+ <i class="fa fa-fw fa-square-o fa-stack-2x"></i>
1512
+ <i class="fa fa-fw fa-list-ul fa-stack-1x"></i>
1513
+ </span>
1514
+ </button>
1515
+ </li>
1516
+ <li>
1517
+ <button class="pro-notify" data-dialog="#datepicker_fieldsProFeatureDialog" data-dtitle="{{ environment.translate('Datepicker Fields') }}" data-dwidth="480" {{ tooltip.attr(environment.translate('Add datepicker for selected cells to edit their values on frontend.')) }}>
1518
+ <span class="fa-stack">
1519
+ <i class="fa fa-fw fa-square-o fa-stack-2x"></i>
1520
+ <i class="fa fa-fw fa-calendar fa-stack-1x"></i>
1521
+ </span>
1522
+ </button>
1523
+ </li>
1524
+ <li>
1525
+ <button class="pro-notify" data-dialog="#collapsible_fieldsProFeatureDialog" data-dtitle="{{ environment.translate('Collapsible Rows') }}" data-dwidth="480" {{ tooltip.attr(environment.translate('Make the rows collapsible. First collapsible row become the &quot;main&quot; row with control button. Other collapsible rows will be hidden by default - user might show / hide them by pressing on control button of &quot;main&quot; row.')) }}>
1526
+ <span class="fa-stack">
1527
+ <i class="fa fa-fw fa-square-o fa-stack-2x"></i>
1528
+ <i class="fa fa-fw fa-compress fa-stack-1x"></i>
1529
+ </span>
1530
+ </button>
1531
+ </li>
1532
+ <li>
1533
+ <button class="pro-notify" data-dialog="#tooltip_fieldsProFeatureDialog" data-dtitle="{{ environment.translate('Create Tooltip') }}" data-dwidth="480" {{ tooltip.attr(environment.translate('Convert the cell content into icon with tooltip.')) }}>
1534
+ <span class="fa-stack">
1535
+ <i class="fa fa-fw fa-square-o fa-stack-2x"></i>
1536
+ <i class="fa fa-fw fa-info fa-stack-1x"></i>
1537
+ </span>
1538
+ </button>
1539
+ </li>
1540
+ {% endif %}
1541
+ {{ environment.getDispatcher().dispatch('toolbar_frontend_fields', [table]) }}
1542
  <li>
1543
+ <button {{ tooltip.attr(environment.translate('Hide the selected cells on frontend. Can be useful for placing intermediate calculations. <br /><br />To display the table correctly, please, add this property for the whole row or the whole column of table.')) }} data-toolbar="#toolbar-invisibleCell">
1544
+ <span class="fa-stack">
1545
+ <i class="fa fa-fw fa-square-o fa-stack-2x"></i>
1546
+ <i class="fa fa-fw fa-low-vision fa-stack-1x"></i>
1547
+ </span>
1548
  </button>
1549
  <div id="toolbar-invisibleCell" class="toolbar-content">
1550
  <a href="#" data-method="addInvisibleCell"><i class="fa fa-fw fa-plus"></i></a>
1552
  </div>
1553
  </li>
1554
  <li>
1555
+ <button {{ tooltip.attr(environment.translate('Remove the selected cells on frontend. Can be useful for placing information for admin side only. <br /><br />Importanr! To display the table correctly, please, add this property for the whole row or the whole column of table.')) }} data-toolbar="#toolbar-hiddenCell">
1556
+ <span class="fa-stack">
1557
+ <i class="fa fa-fw fa-square-o fa-stack-2x"></i>
1558
+ <i class="fa fa-fw fa-ban fa-stack-1x"></i>
1559
+ </span>
1560
  </button>
1561
  <div id="toolbar-hiddenCell" class="toolbar-content">
1562
  <a href="#" data-method="addHiddenCell"><i class="fa fa-fw fa-plus"></i></a>
1563
  <a href="#" data-method="removeHiddenCell"><i class="fa fa-fw fa-trash-o"></i></a>
1564
  </div>
1565
  </li>
1566
+ <li>
1567
+ <button {{ tooltip.attr(environment.translate("Remove the escaping of HTML in the selected cells. Can be useful for convert formula result to pure HTML. For example: =CONCATENATE(&#39;&lt;a href=&quot;&#39;;A1;&#39;&quot;&gt;';B1;&#39;&lt;/a&gt;&#39;)")) }} data-toolbar="#toolbar-unescapeHtml">
1568
+ <span class="fa-stack">
1569
+ <i class="fa fa-fw fa-square-o fa-stack-2x"></i>
1570
+ <i class="fa fa-fw fa-code fa-stack-1x"></i>
1571
+ </span>
1572
+ </button>
1573
+ <div id="toolbar-unescapeHtml" class="toolbar-content">
1574
+ <a href="#" data-method="addUnescapeHtml"><i class="fa fa-fw fa-plus"></i></a>
1575
+ <a href="#" data-method="removeUnescapeHtml"><i class="fa fa-fw fa-trash-o"></i></a>
1576
+ </div>
1577
+ </li>
1578
  </ul>
1579
  </div>
1580
  <!-- /#tableToolbar -->
1616
  <!-- /.container-fluid -->
1617
  {{ environment.getDispatcher().dispatch('tables-view-footer', [table]) }}
1618
 
 
 
 
 
 
 
 
 
 
1619
  <div id="cloneDialog" style="display: none;" title="Clone Table">
1620
  <div class="input-group">
1621
  <label>{{ environment.translate('Name of Cloned Table') }}</label>
1639
  <h3 class="fixedColumnWidthDataLabel">{{ environment.translate('List of width sizes, set for table columns:') }}</h3>
1640
  <div id="fixedColumnWidthData" class="dataContainer"></div>
1641
  </div>
1642
+
1643
  <div id="setMultipleColumnsSortingDialog" style="display: none;" title="Multiple Columns Sorting">
1644
  <p style="margin-top: 0;">{{ environment.translate('Set multiple column sorting for selected columns. Press "Clear Multiple Sorting" to clear multiple sorting for all table columns. All changes will be applied after table saving.') }}</p>
1645
  <p style="margin-top: 0;">{{ environment.translate('If multiple sorting for columns is not set - the table will be sorted in the specified order by the column set in the table settings: Settings-> Features-> Sorting Order / Sorting Column. Otherwise - table will be sorted by the specified custom columns in sequense, in which they are listed.') }}</p>
1664
  <div id="disableSortOrderData" class="dataContainer"></div>
1665
  </div>
1666
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1667
  <div id="insertUrlDialog" style="display: none;" title="{{ environment.translate('Insert Link') }}">
1668
  <div class="input-group">
1669
  <label>{{ environment.translate('Url') }}</label>
1733
  </div>
1734
  </div>
1735
 
1736
+ {# PRO notification dialogs #}
1737
+ {% set notifications = [ 'import_export', 'editable_fields', 'selectable_fields', 'datepicker_fields', 'collapsible_fields', 'tooltip_fields' ] %}
1738
+
1739
+ {% for notify in notifications %}
1740
+ <div id="{{ notify }}ProFeatureDialog" class="supsystic-plugin" style="display: none;">
1741
+ {% set url = '<a target="_blank" href="' ~ build_pro_url({ 'utm_medium': notify }) ~ '" style="color: #000;">' ~ environment.translate('PRO version') ~ '</a>' %}
1742
+ {% set url2 = '<a target="_blank" href="' ~ build_pro_url({ 'utm_medium': notify }) ~ '" style="color: #000;" class="button supsystic-button"><span class="ui-button-text">' ~ environment.translate('Get PRO') ~ '</span></a>' %}
1743
+ <p>{{ environment.translate('Please be advised that this feature available only in %s.')|format(url)|raw }}</p>
1744
+ <p>{{ environment.translate('You can %s today and have all PRO features of data tables!')|format(url2)|raw }}</p>
1745
+ </div>
1746
+ {% endfor %}
1747
+
1748
+ <div id="diagramsProFeatureDialog" class="supsystic-plugin" style="display: none;">
1749
+ {% set url = build_pro_url({ 'utm_medium': 'diagrams' }) %}
1750
+ <a href="{{ url }}" class="button button-hero" style="position: absolute; top: 63px; right: 20px; padding-top: 1px !important;" target="_blank">
1751
+ {{ environment.translate('Get PRO') }}
1752
+ </a>
1753
+ <div id="previewDiagramProFeature" style="z-index: 10;" title="{{ environment.translate('Diagram') }}">
1754
+ <div class="tab-switch" data-tabs>
1755
+ <a class="active" href="#typeProFeature">{{ environment.translate('Type') }}</a>
1756
+ <a href="#settingsProFeature">{{ environment.translate('Settings') }}</a>
1757
+ </div>
1758
+ <div class="tabs">
1759
+ <div id="typeTabProFeature" class="tab active" data-tab="#typeProFeature">
1760
+ <a href="{{ url }}" target="_blank">
1761
+ <img src="{{ environment.getModule('diagram').getLocationUrl() }}/assets/img/diagrams_dialog_type_tab.png" alt="Diagrams" title="diagrams_dialog_tab_1 Tab Content" style="width: 100%; height: auto;"/>
1762
+ </a>
1763
+ </div>
1764
+ <div id="settingsTabProFeature" class="tab" data-tab="#settingsProFeature">
1765
+ <a href="{{ url }}" target="_blank">
1766
+ <img src="{{ environment.getModule('diagram').getLocationUrl() }}/assets/img/diagrams_dialog_settings_tab.png" alt="Diagrams" title="Settings Tab Content" style="width: 100%; height: auto;"/>
1767
+ </a>
1768
+ </div>
1769
+ </div>
1770
+ </div>
1771
+ </div>
1772
+
1773
+ <div id="сonditional_formattingProFeatureDialog" class="supsystic-plugin" style="display: none;" title="{{ environment.translate('Conditional Formatting') }}">
1774
+ {% set url = build_pro_url({ 'utm_medium': 'conditional_formatting' }) %}
1775
+ <a href="{{ url }}" class="button button-hero" style="position: absolute; top: 63px; right: 20px; padding-top: 1px !important;" target="_blank">{{ environment.translate('Get PRO') }}</a>
1776
+ <a href="{{ url }}" target="_blank">
1777
+ <img src="{{ environment.getModule('tables').getLocationUrl() }}/assets/img/conditional_formatting_dialog.png" alt="Conditional Formatting" title="Conditional Formatting" style="width: 100%; height: auto;"/>
1778
+ </a>
1779
+ </div>
1780
+
1781
  </div>
1782
  <!-- /.supsystic-item -->
1783
  <div style="clear: both;"></div>
vendor/Rsc/Environment.php CHANGED
@@ -75,7 +75,7 @@ class Rsc_Environment
75
  * @var Rsc_Dispatcher
76
  */
77
  protected $dispatcher;
78
-
79
  protected $adminAreaMenus = array();
80
 
81
  protected $baseModInited = false;
@@ -113,7 +113,7 @@ class Rsc_Environment
113
 
114
  add_action('init', array($this, 'wpInitCallback'));
115
  }
116
-
117
  public function setBaseModInited( $newVal ) {
118
  $this->baseModInited = $newVal;
119
  }
@@ -218,7 +218,7 @@ class Rsc_Environment
218
  // $this->fc320fde997f9bea5c39d56e094bfb99();
219
  add_action('plugins_loaded', array($this, 'extend'));
220
  }
221
-
222
  public function setAdminAreaMenus( $menus ) {
223
  $this->adminAreaMenus = $menus;
224
  }
@@ -243,7 +243,7 @@ class Rsc_Environment
243
  $this->resolver->init();
244
  if($this->menu) {
245
  $this->menu->register();
246
- }
247
  }
248
 
249
  public function isPro()
@@ -379,9 +379,9 @@ class Rsc_Environment
379
  }
380
 
381
  if (!empty($parameters)) {
382
- $url .= '&' . http_build_query($parameters);
383
  }
384
-
385
  if(!empty($hash)) {
386
  $url .= '#'. $hash;
387
  }
@@ -621,7 +621,7 @@ class Rsc_Environment
621
  public function getLangCode2Letter() {
622
  $langCode = $this->getLangCode();
623
  return strlen($langCode) > 2 ? substr($langCode, 0, 2) : $langCode;
624
- }
625
  public function getLangCode() {
626
  return get_locale();
627
  }
75
  * @var Rsc_Dispatcher
76
  */
77
  protected $dispatcher;
78
+
79
  protected $adminAreaMenus = array();
80
 
81
  protected $baseModInited = false;
113
 
114
  add_action('init', array($this, 'wpInitCallback'));
115
  }
116
+
117
  public function setBaseModInited( $newVal ) {
118
  $this->baseModInited = $newVal;
119
  }
218
  // $this->fc320fde997f9bea5c39d56e094bfb99();
219
  add_action('plugins_loaded', array($this, 'extend'));
220
  }
221
+
222
  public function setAdminAreaMenus( $menus ) {
223
  $this->adminAreaMenus = $menus;
224
  }
243
  $this->resolver->init();
244
  if($this->menu) {
245
  $this->menu->register();
246
+ }
247
  }
248
 
249
  public function isPro()
379
  }
380
 
381
  if (!empty($parameters)) {
382
+ $url .= '&' . http_build_query($parameters, '', '&');
383
  }
384
+
385
  if(!empty($hash)) {
386
  $url .= '#'. $hash;
387
  }
621
  public function getLangCode2Letter() {
622
  $langCode = $this->getLangCode();
623
  return strlen($langCode) > 2 ? substr($langCode, 0, 2) : $langCode;
624
+ }
625
  public function getLangCode() {
626
  return get_locale();
627
  }
vendor/Rsc/Http/Parameters.php CHANGED
@@ -3,5 +3,11 @@
3
 
4
  class Rsc_Http_Parameters extends Rsc_Common_Collection
5
  {
 
 
 
 
6
 
 
 
7
  }
3
 
4
  class Rsc_Http_Parameters extends Rsc_Common_Collection
5
  {
6
+ public function get_esc_html($key, $default = null)
7
+ {
8
+ $default = parent::get($key, $default);
9
+ $default = esc_html($default);
10
 
11
+ return $default;
12
+ }
13
  }
vendor/Rsc/Menu/Page.php CHANGED
@@ -66,7 +66,7 @@ class Rsc_Menu_Page
66
  */
67
  public function getCapability()
68
  {
69
- return $this->capability;
70
  }
71
 
72
  /**
@@ -225,7 +225,7 @@ class Rsc_Menu_Page
225
  public function register()
226
  {
227
  add_action('admin_menu', array($this, 'addMenuPage'));
228
- if (count($this->submenu) > 0) {
229
  usort($this->submenu, array($this, 'sortSubMenuItemsClb'));
230
  /** @var Rsc_Menu_Item $submenu */
231
  foreach ($this->submenu as $submenu) {
@@ -233,7 +233,7 @@ class Rsc_Menu_Page
233
  }
234
  }
235
  }
236
-
237
  public function sortSubMenuItemsClb($a, $b) {
238
  $sortOrderA = $a->getSortOrder();
239
  $sortOrderB = $b->getSortOrder();
@@ -256,7 +256,7 @@ class Rsc_Menu_Page
256
  $parameters = array(
257
  $this->pageTitle,
258
  $this->menuTitle,
259
- $this->capability,
260
  $this->menuSlug,
261
  array($this->resolver, 'resolve'),
262
  $this->iconUrl,
66
  */
67
  public function getCapability()
68
  {
69
+ return apply_filters(sprintf('%s_menu_capability', $this->resolver->getEnvironment()->getConfig()->get('plugin_name')), $this->capability);
70
  }
71
 
72
  /**
225
  public function register()
226
  {
227
  add_action('admin_menu', array($this, 'addMenuPage'));
228
+ if(is_array($this->submenu) && count($this->submenu) > 0) {
229
  usort($this->submenu, array($this, 'sortSubMenuItemsClb'));
230
  /** @var Rsc_Menu_Item $submenu */
231
  foreach ($this->submenu as $submenu) {
233
  }
234
  }
235
  }
236
+
237
  public function sortSubMenuItemsClb($a, $b) {
238
  $sortOrderA = $a->getSortOrder();
239
  $sortOrderB = $b->getSortOrder();
256
  $parameters = array(
257
  $this->pageTitle,
258
  $this->menuTitle,
259
+ $this->getCapability(),
260
  $this->menuSlug,
261
  array($this->resolver, 'resolve'),
262
  $this->iconUrl,
vendor/Rsc/Mvc/Controller.php CHANGED
@@ -119,4 +119,8 @@ class Rsc_Mvc_Controller
119
  {
120
  return $this->request;
121
  }
 
 
 
 
122
  }
119
  {
120
  return $this->request;
121
  }
122
+
123
+ public function requireNonces() {
124
+ return array();
125
+ }
126
  }
vendor/Rsc/Mvc/Module.php CHANGED
@@ -99,12 +99,11 @@ class Rsc_Mvc_Module
99
  * Returns the URL to the module location
100
  * @return string
101
  */
102
- public function getLocationUrl()
103
- {
104
  $path = plugin_basename($this->location);
105
-
106
  return plugins_url($path);
107
- }
108
 
109
  /**
110
  * Returns the name of the current module
@@ -148,32 +147,35 @@ class Rsc_Mvc_Module
148
  return $this;
149
  }
150
 
151
- public function handle()
152
- {
153
- $action = $this->request->query->get('action', 'index') . 'Action';
154
- $welcomePageShowed = $this->environment->getConfig()->get('welcome_page_was_showed');
155
- $promoController = $this->environment->getConfig()->get('promo_controller');
156
-
157
- if ($promoController && class_exists($promoController) && !$welcomePageShowed) {
158
- $promoController = new $promoController($this->environment, $this->request);
159
- if (method_exists($promoController, 'indexAction')) {
160
- return call_user_func_array(
161
- array($promoController, 'indexAction'),
162
- array($this->request)
163
- );
164
- }
165
- } else {
166
- if (method_exists($this->getController(), $action)) {
167
- return call_user_func_array(array($this->getController(), $action), array(
168
- $this->request
169
- ));
170
- }
171
- }
172
-
173
- $twig = $this->environment->getTwig();
174
-
175
- return Rsc_Http_Response::create()->setContent($twig->render('404.twig'));
176
- }
 
 
 
177
 
178
  /**
179
  * Triggered when the resolver doing initialization of module
99
  * Returns the URL to the module location
100
  * @return string
101
  */
102
+ public function getLocationUrl()
103
+ {
104
  $path = plugin_basename($this->location);
 
105
  return plugins_url($path);
106
+ }
107
 
108
  /**
109
  * Returns the name of the current module
147
  return $this;
148
  }
149
 
150
+ public function handle()
151
+ {
152
+ $action = $this->request->query->get('action', 'index') . 'Action';
153
+ $welcomePageShowed = $this->environment->getConfig()->get('welcome_page_was_showed');
154
+ $promoController = $this->environment->getConfig()->get('promo_controller');
155
+
156
+ if ($promoController && class_exists($promoController) && !$welcomePageShowed) {
157
+ $promoController = new $promoController($this->environment, $this->request);
158
+ if (method_exists($promoController, 'indexAction')) {
159
+ return call_user_func_array(
160
+ array($promoController, 'indexAction'),
161
+ array($this->request)
162
+ );
163
+ }
164
+ } else {
165
+ if (method_exists($this->getController(), $action)) {
166
+ return call_user_func_array(array($this->getController(), $action), array(
167
+ $this->request
168
+ ));
169
+ }
170
+ }
171
+
172
+ $twig = $this->environment->getTwig();
173
+
174
+ return Rsc_Http_Response::create()->setContent($twig->render('404.twig', array(
175
+ 'controller' => $this->getModuleName(),
176
+ 'action' => $action,
177
+ )));
178
+ }
179
 
180
  /**
181
  * Triggered when the resolver doing initialization of module
vendor/Twig/Extension/Core.php CHANGED
@@ -1272,7 +1272,13 @@ if (function_exists('mb_get_info')) {
1272
  return mb_strlen((string) $thing, $env->getCharset());
1273
  }
1274
 
1275
- return count($thing);
 
 
 
 
 
 
1276
  }
1277
 
1278
  /**
1272
  return mb_strlen((string) $thing, $env->getCharset());
1273
  }
1274
 
1275
+ if($thing == null) {
1276
+ return 0;
1277
+ }
1278
+ if(!is_array($thing)) {
1279
+ return 1;
1280
+ }
1281
+ return count($thing);
1282
  }
1283
 
1284
  /**