Data Tables Generator by Supsystic - Version 1.8.8

Version Description

/ 10.08.2018 = * Added the ability to create diagrams for cells with formulas and shortcodes * Fix for Preview Loader * Add loader for diagrams * new youtube video * For Source Option added the ability to Export data from an External DB and use SQL Query * Fixed row headers in Editor Tab * Added the ability to build a chart based on data from database tables * Added posibility to place reduction like 1-4, A-D in part shortcode *

Download this release

Release Info

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

Code changes from version 1.8.7 to 1.8.8

app/SupsysticTables.php CHANGED
@@ -18,7 +18,7 @@ class SupsysticTables
18
 
19
  $menuSlug = 'supsystic-tables';
20
  $pluginPath = dirname(dirname(__FILE__));
21
- $environment = new Rsc_Environment('st', '1.8.7', $pluginPath);
22
 
23
  /* Configure */
24
  $environment->configure(
18
 
19
  $menuSlug = 'supsystic-tables';
20
  $pluginPath = dirname(dirname(__FILE__));
21
+ $environment = new Rsc_Environment('st', '1.8.8', $pluginPath);
22
 
23
  /* Configure */
24
  $environment->configure(
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.8.7
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.8
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.7
5
- Stable tag: 1.8.7
6
 
7
  Create data tables with charts and graphs. Custom design, navigation, searching and ordering functions. Export to PDF, CSV, Print. Excel spreadsheet
8
 
@@ -30,7 +30,7 @@ Data Tables Generator is a new plugin created by Supsystic, which allows you to
30
 
31
  HTML tables responsive and awesome on all devices
32
 
33
- [youtube https://www.youtube.com/watch?v=Fa3EI7-oBfc]
34
 
35
  = Data Tables Plugin Support =
36
 
@@ -194,6 +194,17 @@ Important! Shortcode must be inserted in a text editor page, and not in the visu
194
 
195
  == Changelog ==
196
 
 
 
 
 
 
 
 
 
 
 
 
197
  = 1.8.7 / 24.07.2018 =
198
  * Fix Multisite Installation process
199
  * Fixed the problem: Clicking on the cell raises the table up
1
  === Data Tables Generator by Supsystic ===
2
  Contributors: supsystic.com
3
  Tags: csv, csv file, csv to table, excel, table, tablesorter, post, data table, table, database, html table, table generator, builder, generator, cells, area chart, bar chart, candlestick chart, canvas, chart, charting, charts, column chart, gauge chart, geo chart, google chart, google visualization api, graph, graphing, graphs, html5, line chart, pie chart, scatter chart, spreadsheet, visualisation, visualise data, visualization, visualize data
4
+ Tested up to: 4.9.8
5
+ Stable tag: 1.8.8
6
 
7
  Create data tables with charts and graphs. Custom design, navigation, searching and ordering functions. Export to PDF, CSV, Print. Excel spreadsheet
8
 
30
 
31
  HTML tables responsive and awesome on all devices
32
 
33
+ [youtube https://www.youtube.com/watch?v=RZ2I-aCiLZE]
34
 
35
  = Data Tables Plugin Support =
36
 
194
 
195
  == Changelog ==
196
 
197
+ = 1.8.8 / 10.08.2018 =
198
+ * Added the ability to create diagrams for cells with formulas and shortcodes
199
+ * Fix for Preview Loader
200
+ * Add loader for diagrams
201
+ * new youtube video
202
+ * For Source Option added the ability to Export data from an External DB and use SQL Query
203
+ * Fixed row headers in Editor Tab
204
+ * Added the ability to build a chart based on data from database tables
205
+ * Added posibility to place reduction like 1-4, A-D in part shortcode
206
+ *
207
+
208
  = 1.8.7 / 24.07.2018 =
209
  * Fix Multisite Installation process
210
  * Fixed the problem: Clicking on the cell raises the table up
src/SupsysticTables/Tables/Module.php CHANGED
@@ -557,9 +557,42 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
557
  add_action('wp_footer', array($asset, 'load'));
558
  }
559
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
560
  $this->isTablePart = array(
561
- 'row' => array_key_exists('row', $attributes) ? array_filter(explode(',', $attributes['row'])) : array(),
562
- 'col' => array_key_exists('col', $attributes) ? $this->_lettersToNumbers(array_filter(explode(',', $attributes['col']))) : array(),
563
  );
564
 
565
  return $this->render((int)$attributes['id']);
557
  add_action('wp_footer', array($asset, 'load'));
558
  }
559
  }
560
+
561
+
562
+ $rowsResult = array();
563
+ $rows = array_filter(
564
+ explode(',', $attributes['row'])
565
+ );
566
+ foreach ($rows as $row ){
567
+ if (strpos($row, '-') !== false) {
568
+ $minMaxVals = explode('-', $row);
569
+ foreach (range($minMaxVals[0], $minMaxVals[1]) as $item) {
570
+ $rowsResult[] = (string)$item;
571
+ }
572
+ }else{
573
+ $rowsResult[] = (string)$row;
574
+ }
575
+
576
+ }
577
+
578
+ $colsResult = array();
579
+ $cols = array_filter(
580
+ explode(',', $attributes['col'])
581
+ );
582
+ foreach ($cols as $col ){
583
+ if (strpos($col, '-') !== false) {
584
+ $minMaxVals = explode('-', $col);
585
+ foreach (range($minMaxVals[0], $minMaxVals[1]) as $item) {
586
+ $colsResult[] = $this->_lettersToNumbers((string)$item);
587
+ }
588
+ }else{
589
+ $colsResult[] = $this->_lettersToNumbers((string)$col);
590
+ }
591
+ }
592
+
593
  $this->isTablePart = array(
594
+ 'row' => $rowsResult,
595
+ 'col' => $colsResult,
596
  );
597
 
598
  return $this->render((int)$attributes['id']);
src/SupsysticTables/Tables/assets/css/loaders.css CHANGED
@@ -163,7 +163,7 @@
163
 
164
 
165
  /* Old Default Table Loader */
166
- .supsystic-table-loader {
167
  margin: 0 auto;
168
  }
169
  .spinner {
163
 
164
 
165
  /* Old Default Table Loader */
166
+ .supsystic-table-loader, .supsystic-diagram-loader {
167
  margin: 0 auto;
168
  }
169
  .spinner {
src/SupsysticTables/Tables/assets/css/tables.shortcode.css CHANGED
@@ -233,7 +233,9 @@ table.oneColumnWithLabels td:after {
233
  .supsystic-tables-wrap table {
234
  margin-left: 0 !important;
235
  }
236
-
 
 
237
  table.dataTable tfoot input {
238
  width: 100%;
239
  padding: 3px;
233
  .supsystic-tables-wrap table {
234
  margin-left: 0 !important;
235
  }
236
+ .supsystic-tables-wrap .dataTables_scroll {
237
+ padding-top: 0 !important;
238
+ }
239
  table.dataTable tfoot input {
240
  width: 100%;
241
  padding: 3px;
src/SupsysticTables/Tables/assets/css/tables.view.css CHANGED
@@ -422,3 +422,9 @@
422
  width: 100%;
423
  }
424
  }
 
 
 
 
 
 
422
  width: 100%;
423
  }
424
  }
425
+ .video-container {
426
+ position:relative;
427
+ padding-bottom:56.25%;
428
+ height:0;
429
+ overflow:hidden;
430
+ }
src/SupsysticTables/Tables/assets/js/editor/tables.editor.js CHANGED
@@ -319,6 +319,21 @@ var g_stbRowsPerPage = 1;
319
  }
320
  updateUndoRedoBtns();
321
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
322
  editor.addHook('afterRemoveRow', function (from, amount) {
323
  generateHeightData();
324
  editor.allHeights.splice(from, amount);
@@ -335,6 +350,7 @@ var g_stbRowsPerPage = 1;
335
  editor.bufferData.splice(rowForBuffer, amount);
336
  editor.bufferHeights.splice(rowForBuffer, amount);
337
  editor.bufferMeta.splice(rowForBuffer * countCols, amount * countCols);
 
338
 
339
  for (var i = 0; i < merge.length; i++) {
340
  var row = merge[i].row;
@@ -350,18 +366,6 @@ var g_stbRowsPerPage = 1;
350
  }
351
  }
352
  editor.bufferMerge = mergeNew;
353
- setTimeout(function() {
354
- if (amount > 1) {
355
- var merge = editor.mergeCells.mergedCellInfoCollection;
356
- for (var i = 0; i < merge.length; i++) {
357
- if (merge[i].row >= from) {
358
- merge[i].row -= (amount - 1);
359
- }
360
- }
361
- }
362
- editor.generatePagingLinks();
363
- editor.setPageData();
364
- }, 10);
365
  } else {
366
  var countRows = editor.countRows(),
367
  plugin = editor.getPlugin('ManualRowResize');
@@ -373,12 +377,32 @@ var g_stbRowsPerPage = 1;
373
  plugin.setManualSize(i, editor.allHeights[i]);
374
  }
375
  }
376
- setTimeout(function() {
377
- toolbar.renderTooltips(from, 0);
378
- }, 10);
379
  }
 
 
 
 
 
 
 
 
380
  updateUndoRedoBtns();
381
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
382
  editor.addHook('afterRemoveCol', function(from, amount) {
383
  generateWidthData();
384
  editor.allWidths.splice(from, amount);
@@ -716,7 +740,9 @@ var g_stbRowsPerPage = 1;
716
  }
717
  }
718
 
719
- var mergeNew = [];
 
 
720
  for (var i = 0; i < merge.length; i++) {
721
  mergeNew.push({
722
  col: merge[i].col,
@@ -727,7 +753,7 @@ var g_stbRowsPerPage = 1;
727
  }
728
  for (var i = 0; i < this.bufferMerge.length; i++) {
729
  row = this.bufferMerge[i].row;
730
- if (row < start || row > stop) {
731
  mergeNew.push(this.bufferMerge[i]);
732
  }
733
  }
@@ -750,6 +776,7 @@ var g_stbRowsPerPage = 1;
750
  editor.getSourceDataPagination = (function () {
751
  return function (fromX, fromY, toX, toY) {
752
  this.copyInBuffer();
 
753
  var data = this.bufferData,
754
  rangeData = [],
755
  buffer;
@@ -776,7 +803,9 @@ var g_stbRowsPerPage = 1;
776
  })();
777
 
778
  Handsontable.dom.addEvent(window, 'hashchange', function (event) {
779
- editor.setPageData();
 
 
780
  });
781
  });
782
  }(window.jQuery, window.supsystic.Tables));
319
  }
320
  updateUndoRedoBtns();
321
  });
322
+ editor.addHook('beforeRemoveRow', function (from, amount) {
323
+ var merge = editor.mergeCells.mergedCellInfoCollection,
324
+ to = from + amount - 1,
325
+ cntMerge = merge.length;
326
+ for (var i = cntMerge - 1; i >= 0; i--) {
327
+ var row = merge[i].row;
328
+ if (row >= from) {
329
+ if (row <= to) {
330
+ merge.splice(i, 1);
331
+ } else {
332
+ merge[i].row -= (amount - 1);
333
+ }
334
+ }
335
+ }
336
+ });
337
  editor.addHook('afterRemoveRow', function (from, amount) {
338
  generateHeightData();
339
  editor.allHeights.splice(from, amount);
350
  editor.bufferData.splice(rowForBuffer, amount);
351
  editor.bufferHeights.splice(rowForBuffer, amount);
352
  editor.bufferMeta.splice(rowForBuffer * countCols, amount * countCols);
353
+ editor.pageStop -= amount;
354
 
355
  for (var i = 0; i < merge.length; i++) {
356
  var row = merge[i].row;
366
  }
367
  }
368
  editor.bufferMerge = mergeNew;
 
 
 
 
 
 
 
 
 
 
 
 
369
  } else {
370
  var countRows = editor.countRows(),
371
  plugin = editor.getPlugin('ManualRowResize');
377
  plugin.setManualSize(i, editor.allHeights[i]);
378
  }
379
  }
 
 
 
380
  }
381
+ setTimeout(function() {
382
+ if (g_stbPagination) {
383
+ editor.generatePagingLinks();
384
+ editor.setPageData();
385
+ } else {
386
+ toolbar.renderTooltips(from, 0);
387
+ }
388
+ }, 10);
389
  updateUndoRedoBtns();
390
  });
391
+ editor.addHook('beforeRemoveCol', function (from, amount) {
392
+ var merge = editor.mergeCells.mergedCellInfoCollection,
393
+ to = from + amount - 1,
394
+ cntMerge = merge.length;
395
+ for (var i = cntMerge - 1; i >= 0; i--) {
396
+ var col = merge[i].col;
397
+ if (col >= from) {
398
+ if (col <= to) {
399
+ merge.splice(i, 1);
400
+ } else {
401
+ merge[i].col -= (amount - 1);
402
+ }
403
+ }
404
+ }
405
+ });
406
  editor.addHook('afterRemoveCol', function(from, amount) {
407
  generateWidthData();
408
  editor.allWidths.splice(from, amount);
740
  }
741
  }
742
 
743
+ var mergeNew = [],
744
+ realCountRows = this.bufferData.length;
745
+
746
  for (var i = 0; i < merge.length; i++) {
747
  mergeNew.push({
748
  col: merge[i].col,
753
  }
754
  for (var i = 0; i < this.bufferMerge.length; i++) {
755
  row = this.bufferMerge[i].row;
756
+ if (row < realCountRows && (row < start || row > stop)) {
757
  mergeNew.push(this.bufferMerge[i]);
758
  }
759
  }
776
  editor.getSourceDataPagination = (function () {
777
  return function (fromX, fromY, toX, toY) {
778
  this.copyInBuffer();
779
+ if (typeof(fromX) == 'undefined') return this.bufferData;
780
  var data = this.bufferData,
781
  rangeData = [],
782
  buffer;
803
  })();
804
 
805
  Handsontable.dom.addEvent(window, 'hashchange', function (event) {
806
+ if (g_stbPagination) {
807
+ editor.setPageData();
808
+ }
809
  });
810
  });
811
  }(window.jQuery, window.supsystic.Tables));
src/SupsysticTables/Tables/assets/js/editor/tables.editor.toolbar.js CHANGED
@@ -257,6 +257,9 @@ var g_stbCellBgColorTimeoutSet = false,
257
 
258
  if(attachment && attachment.url) {
259
  editor.setDataAtCell(highlighted.row, highlighted.col, self.getHtmlForAttachment(attachment));
 
 
 
260
  }
261
  });
262
  }
@@ -583,10 +586,10 @@ var g_stbCellBgColorTimeoutSet = false,
583
  content = '<img src="' + attachment.url + '" />';
584
  break;
585
  case 'video':
586
- content = '<video controls>';
587
  content += '<source src="' + attachment.url + '" ' +
588
  (typeof attachment.mime != 'undefined' ? 'type="' + attachment.mime + '"' : '') + '>';
589
- content += '</video>';
590
  break;
591
  case 'audio':
592
  content = '<audio controls>';
257
 
258
  if(attachment && attachment.url) {
259
  editor.setDataAtCell(highlighted.row, highlighted.col, self.getHtmlForAttachment(attachment));
260
+ setTimeout(function(){
261
+ editor.render();
262
+ }, 200);
263
  }
264
  });
265
  }
586
  content = '<img src="' + attachment.url + '" />';
587
  break;
588
  case 'video':
589
+ content = '<div class="video-container"><video controls>';
590
  content += '<source src="' + attachment.url + '" ' +
591
  (typeof attachment.mime != 'undefined' ? 'type="' + attachment.mime + '"' : '') + '>';
592
+ content += '</video></div>';
593
  break;
594
  case 'audio':
595
  content = '<audio controls>';
src/SupsysticTables/Tables/assets/js/tables.model.js CHANGED
@@ -354,6 +354,12 @@ var g_stbPreviewTimeoutSet = false;
354
  comment: cell.comment
355
  });
356
  }
 
 
 
 
 
 
357
  cells.push(cell.data);
358
  });
359
  data.push(cells);
@@ -452,13 +458,13 @@ var g_stbPreviewTimeoutSet = false;
452
  formData.find('input[name="elements[descriptionText]"]').val( formData.find('#descriptionText').val() );
453
  formData.find('input[name="elements[signatureText]"]').val( formData.find('#signatureText').val() );
454
  formData.find('input[name="features[after_table_loaded_script]"]').val(this._b64EncodeUnicode(formData.find('#after-table-loaded-script-text').val()));
 
455
 
456
  if(preview) {
457
  var tableInstance = app.getTableInstanceById(id);
458
 
459
  if(tableInstance) {
460
  tableInstance.api().destroy();
461
- $(preview).empty();
462
  }
463
  }
464
 
354
  comment: cell.comment
355
  });
356
  }
357
+ try {
358
+ if(cell.data[0] !== '=' && $(cell.data).is('video')) {
359
+ cell.data = '<div class="video-container">' + cell.data + '</div>';
360
+ }
361
+ } catch(e) {}
362
+
363
  cells.push(cell.data);
364
  });
365
  data.push(cells);
458
  formData.find('input[name="elements[descriptionText]"]').val( formData.find('#descriptionText').val() );
459
  formData.find('input[name="elements[signatureText]"]').val( formData.find('#signatureText').val() );
460
  formData.find('input[name="features[after_table_loaded_script]"]').val(this._b64EncodeUnicode(formData.find('#after-table-loaded-script-text').val()));
461
+ formData.find('input[name="source[dbSQL]"]').val( formData.find('#source-db-sql').val() );
462
 
463
  if(preview) {
464
  var tableInstance = app.getTableInstanceById(id);
465
 
466
  if(tableInstance) {
467
  tableInstance.api().destroy();
 
468
  }
469
  }
470
 
src/SupsysticTables/Tables/views/view.twig CHANGED
@@ -1436,26 +1436,26 @@
1436
  </div>
1437
  </section>
1438
  <section class="row row-settings-tab" id="row-tab-settings-source">
 
1439
  <div class="col-md-6 col-sm-6 col-xs-12">
1440
  <div class="title-place">
1441
  <h3>{{ environment.translate('Database') }}</h3>
1442
  </div>
1443
- {% if environment.isPro() == false %}
1444
- <div class="setting-wrapper row">
1445
- <div class="setting-item col-md-6 col-sm-6 col-xs-12">
1446
- <label for="table-source-database-unavailable">
1447
- {{ environment.translate('Data from Database') }}
1448
- {{ tooltip.icon('You can retrieve data for table from the database.', 'top', true) }}
1449
- </label>
1450
- <a target="_blank" class="supsystic-pro-feature" href="{{ build_pro_url({ 'utm_medium': 'table-source-database' }) }}">{{ environment.translate('PRO option') }}</a>
1451
- </div>
1452
- <div class="setting-item col-md-6 col-sm-6 col-xs-12">
1453
- <input type="checkbox" disabled="disabled" name="source[database]" id="table-source-database-unavailable" />
1454
- </div>
1455
  </div>
1456
- {% endif %}
1457
- {{ environment.getDispatcher().dispatch('tables-view-source', [table]) }}
 
 
1458
  </div>
 
 
1459
  </section>
1460
  </section>
1461
  </form>
1436
  </div>
1437
  </section>
1438
  <section class="row row-settings-tab" id="row-tab-settings-source">
1439
+ {% if environment.isPro() == false %}
1440
  <div class="col-md-6 col-sm-6 col-xs-12">
1441
  <div class="title-place">
1442
  <h3>{{ environment.translate('Database') }}</h3>
1443
  </div>
1444
+ <div class="setting-wrapper row">
1445
+ <div class="setting-item col-md-6 col-sm-6 col-xs-12">
1446
+ <label for="table-source-database-unavailable">
1447
+ {{ environment.translate('Data from Database') }}
1448
+ {{ tooltip.icon('You can retrieve data for table from the database.', 'top', true) }}
1449
+ </label>
1450
+ <a target="_blank" class="supsystic-pro-feature" href="{{ build_pro_url({ 'utm_medium': 'table-source-database' }) }}">{{ environment.translate('PRO option') }}</a>
 
 
 
 
 
1451
  </div>
1452
+ <div class="setting-item col-md-6 col-sm-6 col-xs-12">
1453
+ <input type="checkbox" disabled="disabled" name="source[database]" id="table-source-database-unavailable" />
1454
+ </div>
1455
+ </div>
1456
  </div>
1457
+ {% endif %}
1458
+ {{ environment.getDispatcher().dispatch('tables-view-source', [table]) }}
1459
  </section>
1460
  </section>
1461
  </form>