Version Description
/ 24.07.2018 = * Fix Multisite Installation process * Fixed the problem: Clicking on the cell raises the table up * Fixes for optioon Source - Database * Added the ability to edit database table data through the frontend fields * Added the ability to create diagrams for cells with shortcodes * Fix underline position by exporting to pdf * Fix of dynamically applying of diagram's options to diagram preview * Add support Strict Matching Option for SSP * Fix of displaying merged cells in table footer * Fix for GlobalSearch
Download this release
Release Info
Developer | supsystic.com |
Plugin | Data Tables Generator by Supsystic |
Version | 1.8.7 |
Comparing to | |
See all releases |
Code changes from version 1.8.5 to 1.8.7
- app/SupsysticTables.php +1 -1
- app/langs/supsystic_tables-vi.mo +0 -0
- app/langs/supsystic_tables-vi.po +2156 -0
- index.php +1 -1
- readme.txt +21 -3
- src/SupsysticTables/Core/Module.php +35 -5
- src/SupsysticTables/Core/assets/js/core.js +213 -5
- src/SupsysticTables/Promo/Module.php +6 -8
- src/SupsysticTables/Tables/Controller.php +90 -3
- src/SupsysticTables/Tables/Model/Tables.php +341 -28
- src/SupsysticTables/Tables/Module.php +77 -27
- src/SupsysticTables/Tables/assets/css/tables.shortcode.css +0 -1
- src/SupsysticTables/Tables/assets/css/tables.view.css +3 -0
- src/SupsysticTables/Tables/assets/js/editor/tables.editor.js +29 -5
- src/SupsysticTables/Tables/assets/js/tables.model.js +36 -6
- src/SupsysticTables/Tables/assets/js/tables.shortcode.js +1 -54
- src/SupsysticTables/Tables/views/shortcode.twig +43 -11
- src/SupsysticTables/Tables/views/view.twig +23 -3
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.
|
22 |
|
23 |
/* Configure */
|
24 |
$environment->configure(
|
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(
|
app/langs/supsystic_tables-vi.mo
ADDED
Binary file
|
app/langs/supsystic_tables-vi.po
ADDED
@@ -0,0 +1,2156 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: \n"
|
4 |
+
"POT-Creation-Date: \n"
|
5 |
+
"PO-Revision-Date: \n"
|
6 |
+
"Language-Team: \n"
|
7 |
+
"MIME-Version: 1.0\n"
|
8 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
9 |
+
"Content-Transfer-Encoding: 8bit\n"
|
10 |
+
"X-Generator: Poedit 2.0.8\n"
|
11 |
+
"Last-Translator: \n"
|
12 |
+
"Plural-Forms: nplurals=1; plural=0;\n"
|
13 |
+
"Language: vi_VN\n"
|
14 |
+
|
15 |
+
msgid ""
|
16 |
+
"\n"
|
17 |
+
" You can set the rows and cols from the selected "
|
18 |
+
"range, which is need to be removed from diagram.<br /><br />\n"
|
19 |
+
" For example: 1r,2c<br /><br />\n"
|
20 |
+
" In this case the first row and the second column will "
|
21 |
+
"be removed from diagram.<br /><br />\n"
|
22 |
+
" Leave this field blank to use all selected rows and "
|
23 |
+
"columns."
|
24 |
+
msgstr ""
|
25 |
+
"\n"
|
26 |
+
" Bạn có thể đặt các hàng và cột từ phạm vi đã chọn, cần xóa khỏi sơ đồ. <br /"
|
27 |
+
"> <br />\n"
|
28 |
+
" Ví dụ: 1r, 2c <br /> <br />\n"
|
29 |
+
" Trong trường hợp này, hàng đầu tiên và cột thứ hai sẽ "
|
30 |
+
"bị xóa khỏi sơ đồ. <br /> <br />\n"
|
31 |
+
" Để trống trường này để sử dụng tất cả các hàng và cột "
|
32 |
+
"đã chọn."
|
33 |
+
|
34 |
+
msgid "(filtered from _MAX_ total entries)"
|
35 |
+
msgstr "(Được lọc từ mục nhập lớn nhất)"
|
36 |
+
|
37 |
+
msgid "11x17"
|
38 |
+
msgstr "11x17"
|
39 |
+
|
40 |
+
msgid "2A0"
|
41 |
+
msgstr "2A0"
|
42 |
+
|
43 |
+
msgid "3D Diagram"
|
44 |
+
msgstr "Biểu đồ 3D"
|
45 |
+
|
46 |
+
msgid "4A0"
|
47 |
+
msgstr "4A0"
|
48 |
+
|
49 |
+
msgid "8.5x11"
|
50 |
+
msgstr "8.5x11"
|
51 |
+
|
52 |
+
msgid "8.5x14"
|
53 |
+
msgstr "8.5x14"
|
54 |
+
|
55 |
+
msgid ""
|
56 |
+
"<a href=\"//supsystic.com/forum/datatable-plugin/\" target=\"_blank\"> "
|
57 |
+
"Contact us </a> through the Forum on our site - if you have some question, "
|
58 |
+
"offer or wish."
|
59 |
+
msgstr ""
|
60 |
+
"<a href=\"//supsystic.com/forum/datatable-plugin/\" target=\"_blank\"> Liên "
|
61 |
+
"hệ với chúng tôi </a> thông qua Diễn đàn trên trang web của chúng tôi - nếu "
|
62 |
+
"bạn có một số câu hỏi, ưu đãi hoặc mong muốn."
|
63 |
+
|
64 |
+
msgid ""
|
65 |
+
"<b>Upgrading</b> <br>Once you have purchased Premium version of plugin - "
|
66 |
+
"you’ll have to enter license key (you can find it in your personal account "
|
67 |
+
"on our site). Go to the License tab and enter your email and license key. "
|
68 |
+
"Once you have activated your PRO license - you can use all its advanced "
|
69 |
+
"options. <br><br>That’s all. From this moment you can use your Data Table "
|
70 |
+
"without any doubt. But if you still have some question - do not hesitate to "
|
71 |
+
"contact us through our <a href=\"https://supsystic.com/contact-us/"
|
72 |
+
"\">internal support</a> or on our <a href=\"http://supsystic.com/forum/"
|
73 |
+
"datatable-plugin/\">Supsystic Forum.</a> Besides you can always describe "
|
74 |
+
"your questions on <a href=\"https://wordpress.org/support/plugin/data-tables-"
|
75 |
+
"generator-by-supsystic\">WordPress Ultimate Forum.</a> <br><br><b>Enjoy this "
|
76 |
+
"plugin?</b> <br>It will be nice if you`ll help us and boost plugin with <a "
|
77 |
+
"href=\"https://wordpress.org/support/view/plugin-reviews/data-tables-"
|
78 |
+
"generator-by-supsystic?rate=5#postform/\">Five Stars rating on WordPress.org."
|
79 |
+
"</a> <br><br>We hope that you like our Data Table plugin and wish you all "
|
80 |
+
"the best! Good luck!"
|
81 |
+
msgstr ""
|
82 |
+
"<b> Nâng cấp </ b> <br> Khi bạn đã mua phiên bản cao cấp của plugin - bạn sẽ "
|
83 |
+
"phải nhập khóa cấp phép (bạn có thể tìm thấy nó trong tài khoản cá nhân của "
|
84 |
+
"mình trên trang web của chúng tôi). Chuyển đến tab Giấy phép và nhập email "
|
85 |
+
"và khóa cấp phép của bạn. Khi bạn đã kích hoạt giấy phép PRO của mình - bạn "
|
86 |
+
"có thể sử dụng tất cả các tùy chọn nâng cao của nó. <br> <br> Đó là tất cả. "
|
87 |
+
"Từ thời điểm này, bạn có thể sử dụng Bảng dữ liệu của mình mà không nghi ngờ "
|
88 |
+
"gì. Nhưng nếu bạn vẫn có một số câu hỏi - đừng ngần ngại liên hệ với chúng "
|
89 |
+
"tôi qua <a href=\"https://supsystic.com/contact-us/\"> bộ phận hỗ trợ nội bộ "
|
90 |
+
"</a> của chúng tôi hoặc trên <a href = \"http của chúng tôi : //supsystic."
|
91 |
+
"com/forum/datatable-plugin/ \"> Diễn đàn Supsystic. </a> Bên cạnh đó bạn "
|
92 |
+
"luôn có thể mô tả câu hỏi của mình trên <a href =\" https://wordpress.org/"
|
93 |
+
"support/plugin/data-tables -generator-by-supsystic \"> WordPress Ultimate "
|
94 |
+
"Forum. </a> <br> <br> <b> Thưởng thức plugin này? </ b> <br> Sẽ tốt hơn nếu "
|
95 |
+
"bạn giúp chúng tôi và tăng plugin bằng <a href=\"https://wordpress.org/"
|
96 |
+
"support/view/plugin-reviews/data-tables-generator-by-supsystic?"
|
97 |
+
"rate=5#postform/\"> Xếp hạng 5 sao trên WordPress.org. </ a > <br> <br> "
|
98 |
+
"Chúng tôi hy vọng bạn thích plugin Data Table của chúng tôi và chúc bạn mọi "
|
99 |
+
"điều tốt đẹp nhất! Chúc may mắn!"
|
100 |
+
|
101 |
+
msgid "A small guide for the first-time user"
|
102 |
+
msgstr "Hướng dẫn sử dung cho người dung lần đầu"
|
103 |
+
|
104 |
+
msgid ""
|
105 |
+
"A stacked column chart is a column chart that places related values atop one "
|
106 |
+
"another.<br /><br />\n"
|
107 |
+
" \"Relative Mode\" formats each value as a fraction "
|
108 |
+
"of 1.<br /><br />\n"
|
109 |
+
" \"Percent Mode\" formats each value as a percentage "
|
110 |
+
"of 100%. "
|
111 |
+
msgstr ""
|
112 |
+
"Biểu đồ cột xếp chồng lên nhau là biểu đồ cột đặt các giá trị có liên quan "
|
113 |
+
"trên đỉnh nhau. <br /> <br />\n"
|
114 |
+
" \"Chế độ tương đối\" định dạng từng giá trị dưới "
|
115 |
+
"dạng một phần nhỏ của 1. <br /> <br />\n"
|
116 |
+
" \"Chế độ phần trăm\" định dạng từng giá trị dưới "
|
117 |
+
"dạng phần trăm 100%.."
|
118 |
+
|
119 |
+
msgid "A0"
|
120 |
+
msgstr "A0"
|
121 |
+
|
122 |
+
msgid "A1"
|
123 |
+
msgstr "A1"
|
124 |
+
|
125 |
+
msgid "A10"
|
126 |
+
msgstr "A10"
|
127 |
+
|
128 |
+
msgid "A2"
|
129 |
+
msgstr "A2"
|
130 |
+
|
131 |
+
msgid "A3"
|
132 |
+
msgstr "A3"
|
133 |
+
|
134 |
+
msgid "A4"
|
135 |
+
msgstr "A4"
|
136 |
+
|
137 |
+
msgid "A5"
|
138 |
+
msgstr "A5"
|
139 |
+
|
140 |
+
msgid "A6"
|
141 |
+
msgstr "A6"
|
142 |
+
|
143 |
+
msgid "A7"
|
144 |
+
msgstr "A7"
|
145 |
+
|
146 |
+
msgid "A8"
|
147 |
+
msgstr "A8"
|
148 |
+
|
149 |
+
msgid "A9"
|
150 |
+
msgstr "A9"
|
151 |
+
|
152 |
+
msgid "Above table"
|
153 |
+
msgstr "Bên trên bảng"
|
154 |
+
|
155 |
+
msgid "Above the chart"
|
156 |
+
msgstr "Phía trên biểu đồ"
|
157 |
+
|
158 |
+
msgid "Actions"
|
159 |
+
msgstr "Thực hiện"
|
160 |
+
|
161 |
+
msgid "Activate"
|
162 |
+
msgstr "Kích hoạt"
|
163 |
+
|
164 |
+
msgid "Activate License"
|
165 |
+
msgstr "Kích hoạt bản quyền"
|
166 |
+
|
167 |
+
msgid ""
|
168 |
+
"Actually, Data Table plugin is very simple and has a lot of different "
|
169 |
+
"options at the same time. That’s why when you close this article I will show "
|
170 |
+
"you the main of them, but the very detailed one you can find on our site. I "
|
171 |
+
"hope that you will have no questions after even this small guide. For the "
|
172 |
+
"first time we will help you to install and create your first table, but if "
|
173 |
+
"you need help - contact us through the internal support"
|
174 |
+
msgstr ""
|
175 |
+
"Trên thực tế, plugin Data Table rất đơn giản và có nhiều tùy chọn khác nhau "
|
176 |
+
"cùng một lúc. Đó là lý do tại sao khi bạn đóng bài viết này tôi sẽ cho bạn "
|
177 |
+
"thấy chính của họ, nhưng một trong rất chi tiết bạn có thể tìm thấy trên "
|
178 |
+
"trang web của chúng tôi. Tôi hy vọng rằng bạn sẽ không có câu hỏi nào sau "
|
179 |
+
"ngay cả hướng dẫn nhỏ này. Lần đầu tiên chúng tôi sẽ giúp bạn cài đặt và tạo "
|
180 |
+
"bảng đầu tiên của bạn, nhưng nếu bạn cần trợ giúp - hãy liên hệ với chúng "
|
181 |
+
"tôi thông qua bộ phận hỗ trợ nội bộ"
|
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 |
+
"Thêm <a href=\"%s\" target=\"_blank\"> trường có thể chỉnh sửa </a> cho các "
|
189 |
+
"ô đã chọn để chỉnh sửa giá trị ô trên giao diện người dùng. Chúc bạn thành "
|
190 |
+
"công <a href=\"%s\" target=\"_blank\"> ví dụ thực tế </a>."
|
191 |
+
|
192 |
+
msgid "Add Fixed Column Width"
|
193 |
+
msgstr "Thêm chiều rộng cột cố định"
|
194 |
+
|
195 |
+
msgid "Add Multiple Sorting"
|
196 |
+
msgstr "Thêm nhiều lựa chọn sắp xếp"
|
197 |
+
|
198 |
+
msgid "Add Option"
|
199 |
+
msgstr "Thêm tùy chọn"
|
200 |
+
|
201 |
+
msgid "Add automatic highlight for table odd rows"
|
202 |
+
msgstr "Thêm đánh dấu tự động cho các hàng lẻ trong bảng"
|
203 |
+
|
204 |
+
msgid "Add column on the left"
|
205 |
+
msgstr "Thêm cột ở bên trái"
|
206 |
+
|
207 |
+
msgid "Add diagram"
|
208 |
+
msgstr "Thêm sơ đồ"
|
209 |
+
|
210 |
+
msgid ""
|
211 |
+
"Add dropdown list for highlighted cell to change cell value on frontend."
|
212 |
+
msgstr ""
|
213 |
+
"Thêm danh sách thả xuống cho ô được đánh dấu để thay đổi giá trị ô trên giao "
|
214 |
+
"diện người dùng."
|
215 |
+
|
216 |
+
msgid "Add editable field"
|
217 |
+
msgstr "Thêm trường có thể chỉnh sửa"
|
218 |
+
|
219 |
+
msgid "Add new table"
|
220 |
+
msgstr "Thêm bảng mới"
|
221 |
+
|
222 |
+
msgid "Add row above"
|
223 |
+
msgstr "Thêm hang vào bên trên"
|
224 |
+
|
225 |
+
msgid "Add table"
|
226 |
+
msgstr "Thêm bảng"
|
227 |
+
|
228 |
+
msgid "Align by First Table"
|
229 |
+
msgstr "Căn chỉnh theo bảng đầu tiên"
|
230 |
+
|
231 |
+
msgid "Alignment"
|
232 |
+
msgstr "Căn chỉnh"
|
233 |
+
|
234 |
+
msgid "Allow export table to pdf, csv, xls on frontend"
|
235 |
+
msgstr ""
|
236 |
+
"Cho phép xuất bảng thành các định dạng: pdf, csv, xls trên giao diện người "
|
237 |
+
"dùng"
|
238 |
+
|
239 |
+
msgid ""
|
240 |
+
"Allows to <a href=\"%s\" target=\"_blank\">use frontend fields only for "
|
241 |
+
"logged in users</a>. See the next buttons on the editor toolbar:<br />\n"
|
242 |
+
" Add editable field<br />\n"
|
243 |
+
" Add dropdown list"
|
244 |
+
msgstr ""
|
245 |
+
"Cho phép <a href=\"%s\" target=\"_blank\"> chỉ sử dụng các trường giao diện "
|
246 |
+
"người dùng cho người dùng đã đăng nhập </a>. Xem các nút tiếp theo trên "
|
247 |
+
"thanh công cụ của trình chỉnh sửa: <br />\n"
|
248 |
+
"Thêm trường có thể chỉnh sửa <br />\n"
|
249 |
+
"Thêm danh sách thả xuống"
|
250 |
+
|
251 |
+
msgid ""
|
252 |
+
"Allows to <a href=\"%s\" target=\"_blank\">use frontend fields only for "
|
253 |
+
"logged in users</a>. See the next buttons on the editor toolbar:<br />\n"
|
254 |
+
" Add editable field<br />\n"
|
255 |
+
" Add dropdown list"
|
256 |
+
msgstr ""
|
257 |
+
"Cho phép <a href=\"%s\" target=\"_blank\"> chỉ sử dụng các trường giao diện "
|
258 |
+
"người dùng cho người dùng đã đăng nhập </a>. Xem các nút tiếp theo trên "
|
259 |
+
"thanh công cụ của trình chỉnh sửa: <br />\n"
|
260 |
+
"Thêm trường có thể chỉnh sửa <br />\n"
|
261 |
+
"Thêm danh sách thả xuống"
|
262 |
+
|
263 |
+
msgid ""
|
264 |
+
"Allows to choose language for the table's labels (pagination, search ets.)"
|
265 |
+
msgstr "Cho phép chọn ngôn ngữ cho nhãn của bảng"
|
266 |
+
|
267 |
+
msgid "Allows to execute custom javascript code after table is loaded."
|
268 |
+
msgstr "Cho phép thực thi mã javascript tùy chỉnh sau khi bảng được load xong."
|
269 |
+
|
270 |
+
msgid ""
|
271 |
+
"Allows to export table in pdf, csv, xls formats from the front-end. Choose "
|
272 |
+
"needed formats"
|
273 |
+
msgstr ""
|
274 |
+
"Cho phép xuất bảng ở định dạng: pdf, csv, xls từ giao diện người dùng. Vui "
|
275 |
+
"long chọn định dạng"
|
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 |
+
"Cho phép sửa các cột trong khi cuộn bảng. Quan trọng! Việc sửa chữa các cột "
|
285 |
+
"cho thấy rằng bảng sẽ có một loại cuộn horisontal của chế độ đáp ứng, nếu "
|
286 |
+
"không bạn sẽ không thấy rằng các cột cố định tồn tại. Vì vậy, tính năng này "
|
287 |
+
"là một loại chế độ đáp ứng một mình và sẽ không hoạt động với các Chế độ đáp "
|
288 |
+
"ứng như các cột Tiêu chuẩn và Tự động ẩn."
|
289 |
+
|
290 |
+
msgid ""
|
291 |
+
"Allows to fix the table's footer during table scrolling. Important! Footer "
|
292 |
+
"option must be enabled for using this feature. Also you need to set Fixed "
|
293 |
+
"Table Height to create a vertical scroll at the table. To see the work of "
|
294 |
+
"this feature you should not use such Responsive Modes as Standard and "
|
295 |
+
"Automatic columns hiding."
|
296 |
+
msgstr ""
|
297 |
+
"Cho phép sửa chân trang của bảng trong khi cuộn bảng. Quan trọng! Tùy chọn "
|
298 |
+
"chân trang phải được bật để sử dụng tính năng này. Ngoài ra, bạn cần đặt "
|
299 |
+
"Fixed Table Height để tạo một cuộn dọc ở bảng. Để xem công việc của tính "
|
300 |
+
"năng này, bạn không nên sử dụng các Chế độ đáp ứng như các cột Tiêu chuẩn và "
|
301 |
+
"Tự động ẩn."
|
302 |
+
|
303 |
+
msgid ""
|
304 |
+
"Allows to fix the table's header during table scrolling. Important! Header "
|
305 |
+
"option must be enabled for using this feature. Also you need to set Fixed "
|
306 |
+
"Table Height to create a vertical scroll for your table. To see the work of "
|
307 |
+
"this feature you should not use such Responsive Modes such as Standard and "
|
308 |
+
"Automatic columns hiding."
|
309 |
+
msgstr ""
|
310 |
+
"Cho phép sửa tiêu đề của bảng trong khi cuộn bảng. Quan trọng! Tùy chọn tiêu "
|
311 |
+
"đề phải được bật để sử dụng tính năng này. Ngoài ra, bạn cần đặt Fixed Table "
|
312 |
+
"Height để tạo một cuộn dọc cho bảng của bạn. Để xem công việc của tính năng "
|
313 |
+
"này, bạn không nên sử dụng các Chế độ đáp ứng như các cột Tiêu chuẩn và Tự "
|
314 |
+
"động ẩn."
|
315 |
+
|
316 |
+
msgid ""
|
317 |
+
"Allows to save data to the table through the frontend fields. See the next "
|
318 |
+
"buttons on the editor toolbar:<br />\n"
|
319 |
+
" Add editable field<br />\n"
|
320 |
+
" Add dropdown list"
|
321 |
+
msgstr ""
|
322 |
+
"Cho phép lưu dữ liệu vào bảng thông qua các trường giao diện người dùng. Xem "
|
323 |
+
"các nút tiếp theo trên thanh công cụ của trình chỉnh sửa: <br />\n"
|
324 |
+
"Thêm trường có thể chỉnh sửa <br />\n"
|
325 |
+
"Thêm danh sách thả xuống"
|
326 |
+
|
327 |
+
msgid ""
|
328 |
+
"Allows to save data to the table through the frontend fields. See the next "
|
329 |
+
"buttons on the editor toolbar:<br />\n"
|
330 |
+
" Add editable field<br />\n"
|
331 |
+
" Add dropdown list"
|
332 |
+
msgstr ""
|
333 |
+
"Cho phép lưu dữ liệu vào bảng thông qua các trường giao diện người dùng. Xem "
|
334 |
+
"các nút tiếp theo trên thanh công cụ của trình chỉnh sửa: <br />\n"
|
335 |
+
"Thêm trường có thể chỉnh sửa <br />\n"
|
336 |
+
"Thêm danh sách thả xuống"
|
337 |
+
|
338 |
+
msgid ""
|
339 |
+
"Allows to use editable fields only for users with selected roles. If there "
|
340 |
+
"are no chosen roles - all logged in users will have ability to use the "
|
341 |
+
"editable fields."
|
342 |
+
msgstr ""
|
343 |
+
"Chỉ cho phép sử dụng các trường có thể chỉnh sửa cho người dùng có vai trò "
|
344 |
+
"đã chọn. Nếu không có vai trò nào được chọn - tất cả người dùng đã đăng nhập "
|
345 |
+
"sẽ có khả năng sử dụng các trường có thể chỉnh sửa."
|
346 |
+
|
347 |
+
msgid "An error has occurred"
|
348 |
+
msgstr "Một lỗi đã xảy ra"
|
349 |
+
|
350 |
+
msgid "Append to existing table data"
|
351 |
+
msgstr "Thêm vào dữ liệu bảng hiện có"
|
352 |
+
|
353 |
+
msgid "Area Chart"
|
354 |
+
msgstr "Biểu đồ khu vực"
|
355 |
+
|
356 |
+
msgid "Ascending"
|
357 |
+
msgstr "Tăng dần"
|
358 |
+
|
359 |
+
msgid "Auto Index"
|
360 |
+
msgstr "Lập chỉ mục tự động"
|
361 |
+
|
362 |
+
msgid "Auto Table Width"
|
363 |
+
msgstr "Chiều rộng bảng tự động"
|
364 |
+
|
365 |
+
msgid "Autoimport from Google Sheet"
|
366 |
+
msgstr "Tự động nhúng từ Google trang tính"
|
367 |
+
|
368 |
+
msgid "Automatic"
|
369 |
+
msgstr "Tự động"
|
370 |
+
|
371 |
+
msgid "Automatic column hiding"
|
372 |
+
msgstr "Tự động ẩn cột"
|
373 |
+
|
374 |
+
msgid ""
|
375 |
+
"Automatic column hiding - in this mode table columns will collapse from "
|
376 |
+
"right to left if content does not fit to parent container width"
|
377 |
+
msgstr ""
|
378 |
+
"Tự động ẩn cột - trong cột bảng chế độ này sẽ thu gọn từ phải sang trái nếu "
|
379 |
+
"nội dung không phù hợp với chiều rộng vùng chứa cấp độ gốc"
|
380 |
+
|
381 |
+
msgid "Automticaly appends selected logo for output pdf or printing"
|
382 |
+
msgstr "Tự động gắn logo cho bản in ra pdf hoặc in"
|
383 |
+
|
384 |
+
msgid "Axis X Format"
|
385 |
+
msgstr "Định dạng trục X"
|
386 |
+
|
387 |
+
msgid "Axis X Title"
|
388 |
+
msgstr "Tiêu đề trục X"
|
389 |
+
|
390 |
+
msgid "Axis Y Format"
|
391 |
+
msgstr "Định dạng trục Y"
|
392 |
+
|
393 |
+
msgid "Axis Y Title"
|
394 |
+
msgstr "Tiêu đề trục Y"
|
395 |
+
|
396 |
+
msgid "B0"
|
397 |
+
msgstr "B0"
|
398 |
+
|
399 |
+
msgid "B1"
|
400 |
+
msgstr "B1"
|
401 |
+
|
402 |
+
msgid "B10"
|
403 |
+
msgstr "B10"
|
404 |
+
|
405 |
+
msgid "B2"
|
406 |
+
msgstr "B2"
|
407 |
+
|
408 |
+
msgid "B3"
|
409 |
+
msgstr "B3"
|
410 |
+
|
411 |
+
msgid "B4"
|
412 |
+
msgstr "B4"
|
413 |
+
|
414 |
+
msgid "B5"
|
415 |
+
msgstr "B5"
|
416 |
+
|
417 |
+
msgid "B6"
|
418 |
+
msgstr "B6"
|
419 |
+
|
420 |
+
msgid "B7"
|
421 |
+
msgstr "B7"
|
422 |
+
|
423 |
+
msgid "B8"
|
424 |
+
msgstr "B8"
|
425 |
+
|
426 |
+
msgid "B9"
|
427 |
+
msgstr "B9"
|
428 |
+
|
429 |
+
msgid "Background color"
|
430 |
+
msgstr "Màu nền"
|
431 |
+
|
432 |
+
msgid "Backup Plugin"
|
433 |
+
msgstr "Sao lưu plugin"
|
434 |
+
|
435 |
+
msgid ""
|
436 |
+
"Backup and Restore WordPress Plugin by Supsystic provides quick and "
|
437 |
+
"unhitched DropBox, FTP, Amazon S3, Google Drive backup for your WordPress "
|
438 |
+
"website."
|
439 |
+
msgstr ""
|
440 |
+
"Sao lưu và khôi phục WordPress Plugin bởi Supsystic cung cấp DropBox nhanh "
|
441 |
+
"chóng và không bị giật, FTP, Amazon S3, sao lưu Google Drive cho trang web "
|
442 |
+
"WordPress của bạn."
|
443 |
+
|
444 |
+
msgid "Bar Chart"
|
445 |
+
msgstr "Biểu đồ thanh"
|
446 |
+
|
447 |
+
msgid ""
|
448 |
+
"Be closer to your visitors and customers with Live Chat Support by "
|
449 |
+
"Supsystic. Help you visitors, support them in real-time with exceptional "
|
450 |
+
"Live Chat WordPress plugin by Supsystic."
|
451 |
+
msgstr ""
|
452 |
+
"Được gần gũi hơn với khách truy cập và khách hàng của bạn với Live Chat "
|
453 |
+
"Support bởi Supsystic. Giúp bạn truy cập, hỗ trợ họ trong thời gian thực với "
|
454 |
+
"plugin Live Chat WordPress đặc biệt bởi Supsystic."
|
455 |
+
|
456 |
+
msgid "Begin Step-by-step Tutorial"
|
457 |
+
msgstr "Bắt đầu Hướng dẫn từng bước"
|
458 |
+
|
459 |
+
msgid "Below table"
|
460 |
+
msgstr "Bên dưới bảng"
|
461 |
+
|
462 |
+
msgid "Below the chart"
|
463 |
+
msgstr "Bên dưới đồ thị"
|
464 |
+
|
465 |
+
msgid "Bold"
|
466 |
+
msgstr "In đậm"
|
467 |
+
|
468 |
+
msgid "Borders"
|
469 |
+
msgstr "Đường"
|
470 |
+
|
471 |
+
msgid "Bubble Chart"
|
472 |
+
msgstr "Biểu đồ mờ"
|
473 |
+
|
474 |
+
msgid "C0"
|
475 |
+
msgstr "C0"
|
476 |
+
|
477 |
+
msgid "C1"
|
478 |
+
msgstr "C1"
|
479 |
+
|
480 |
+
msgid "C10"
|
481 |
+
msgstr "C10"
|
482 |
+
|
483 |
+
msgid "C2"
|
484 |
+
msgstr "C2"
|
485 |
+
|
486 |
+
msgid "C3"
|
487 |
+
msgstr "C3"
|
488 |
+
|
489 |
+
msgid "C4"
|
490 |
+
msgstr "C4"
|
491 |
+
|
492 |
+
msgid "C5"
|
493 |
+
msgstr "C5"
|
494 |
+
|
495 |
+
msgid "C6"
|
496 |
+
msgstr "C6"
|
497 |
+
|
498 |
+
msgid "C7"
|
499 |
+
msgstr "C7"
|
500 |
+
|
501 |
+
msgid "C8"
|
502 |
+
msgstr "C8"
|
503 |
+
|
504 |
+
msgid "C9"
|
505 |
+
msgstr "C9"
|
506 |
+
|
507 |
+
msgid "CSS"
|
508 |
+
msgstr "CSS"
|
509 |
+
|
510 |
+
msgid "CSS Editor"
|
511 |
+
msgstr "Sửa CSS"
|
512 |
+
|
513 |
+
msgid "Can't decode table meta from JSON."
|
514 |
+
msgstr "Không thể giải mã bảng meta từ JSON."
|
515 |
+
|
516 |
+
msgid "Can't decode table rows from JSON."
|
517 |
+
msgstr "Không thể giải mã các hàng trong bảng từ JSON."
|
518 |
+
|
519 |
+
msgid "Caption"
|
520 |
+
msgstr "Chú thích"
|
521 |
+
|
522 |
+
msgid "Catalog #10 1/2 Envelope"
|
523 |
+
msgstr "Mục lục #10 1/2 phong bì"
|
524 |
+
|
525 |
+
msgid "Cell"
|
526 |
+
msgstr "Cột"
|
527 |
+
|
528 |
+
msgid ""
|
529 |
+
"Cell - adds border around all four sides of each cell, Row - adds border "
|
530 |
+
"only over and under each row. (i.e. only for the rows)."
|
531 |
+
msgstr ""
|
532 |
+
"Ô - thêm đường viền xung quanh tất cả bốn cạnh của mỗi ô, Hàng - chỉ thêm "
|
533 |
+
"đường viền trên và dưới mỗi hàng. (tức là chỉ cho các hàng)."
|
534 |
+
|
535 |
+
msgid "Center"
|
536 |
+
msgstr "Giữa"
|
537 |
+
|
538 |
+
msgid "Check all other FAQs"
|
539 |
+
msgstr "Kiểm tra tất cả các Câu hỏi thường gặp khác"
|
540 |
+
|
541 |
+
msgid "Check the result of formula in the table on your site."
|
542 |
+
msgstr "Kiểm tra kết quả của công thức trong bảng trên trang web của bạn."
|
543 |
+
|
544 |
+
msgid "Choose Icon"
|
545 |
+
msgstr "Chọn icon"
|
546 |
+
|
547 |
+
msgid "Choose color for loader"
|
548 |
+
msgstr "Chọn màu khi đang load"
|
549 |
+
|
550 |
+
msgid "Choose icon"
|
551 |
+
msgstr "Chọn icon"
|
552 |
+
|
553 |
+
msgid "Choose icon for loader"
|
554 |
+
msgstr "Chọn icon trong khi load"
|
555 |
+
|
556 |
+
msgid "Choose the orientation for PDF pages"
|
557 |
+
msgstr "Chọn hướng cho các trang PDF"
|
558 |
+
|
559 |
+
msgid "Choose the paper size for PDF pages"
|
560 |
+
msgstr "Chọn khổ giấy cho các trang PDF"
|
561 |
+
|
562 |
+
msgid "Clear"
|
563 |
+
msgstr "Dọn dẹp"
|
564 |
+
|
565 |
+
msgid ""
|
566 |
+
"Click on the button “Add new table” and see the first form, which you need "
|
567 |
+
"to fill in. A very simple step!"
|
568 |
+
msgstr ""
|
569 |
+
"Nhấp vào nút \"Thêm bảng mới\" và xem biểu mẫu đầu tiên mà bạn cần điền. Một "
|
570 |
+
"bước rất đơn giản!"
|
571 |
+
|
572 |
+
msgid "Clone"
|
573 |
+
msgstr "Sao chép"
|
574 |
+
|
575 |
+
msgid "Close Tutorial"
|
576 |
+
msgstr "Đóng hướng dẫn"
|
577 |
+
|
578 |
+
msgid "Column Chart"
|
579 |
+
msgstr "Biểu đồ cột"
|
580 |
+
|
581 |
+
msgid "Columns"
|
582 |
+
msgstr "Cột"
|
583 |
+
|
584 |
+
msgid "Coming Soon Plugin"
|
585 |
+
msgstr "Plugin sắp ra mắt"
|
586 |
+
|
587 |
+
msgid ""
|
588 |
+
"Coming soon page with drag-and-drop builder or under construction | "
|
589 |
+
"maintenance mode to notify visitors and collects emails."
|
590 |
+
msgstr ""
|
591 |
+
"Sắp có trang với trình tạo kéo và thả hoặc đang được xây dựng | chế độ bảo "
|
592 |
+
"trì để thông báo cho khách truy cập và thu thập email."
|
593 |
+
|
594 |
+
msgid "Comment"
|
595 |
+
msgstr "Bình luận"
|
596 |
+
|
597 |
+
msgid "Commerical #10 Envelope"
|
598 |
+
msgstr "Phong bì thương mại số 10"
|
599 |
+
|
600 |
+
msgid "Compact Table"
|
601 |
+
msgstr "Bảng nhỏ gọn"
|
602 |
+
|
603 |
+
msgid ""
|
604 |
+
"Congratulations! You have successfully installed and activated PRO version "
|
605 |
+
"of %s plugin."
|
606 |
+
msgstr ""
|
607 |
+
"Xin chúc mừng! Bạn đã cài đặt thành công và kích hoạt phiên bản PRO của "
|
608 |
+
"plugin% s."
|
609 |
+
|
610 |
+
msgid ""
|
611 |
+
"Congratulations! You have successfully installed and activated PRO version "
|
612 |
+
"of ' ~ environment.getMenu().getMenuTitle() ~ ' plugin."
|
613 |
+
msgstr ""
|
614 |
+
"Xin chúc mừng! Bạn đã cài đặt thành công và kích hoạt phiên bản PRO của "
|
615 |
+
"plugin '~ environment.getMenu (). GetMenuTitle () ~'."
|
616 |
+
|
617 |
+
msgid "Contact Form Plugin"
|
618 |
+
msgstr "Plugin biểu mẫu liên hệ"
|
619 |
+
|
620 |
+
msgid "Count of Footer Rows"
|
621 |
+
msgstr "Số lượng chân trang"
|
622 |
+
|
623 |
+
msgid "Count of Header Rows"
|
624 |
+
msgstr "Số lượng dòng tiêu đề"
|
625 |
+
|
626 |
+
msgid "Count of table rows, which will be moved to footer."
|
627 |
+
msgstr "Đếm các hàng trong bảng, sẽ được chuyển đến chân trang."
|
628 |
+
|
629 |
+
msgid "Count of table rows, which will be moved to header."
|
630 |
+
msgstr "Tổng số hàng trong bảng, sẽ được chuyển đến tiêu đề."
|
631 |
+
|
632 |
+
msgid ""
|
633 |
+
"Create and manage beautiful data tables with custom design. No HTML "
|
634 |
+
"knowledge is required."
|
635 |
+
msgstr ""
|
636 |
+
"Tạo và quản lý các bảng dữ liệu đẹp với thiết kế tùy chỉnh. Không cần kiến "
|
637 |
+
"thức về HTML."
|
638 |
+
|
639 |
+
msgid ""
|
640 |
+
"Create online membership community with custom user profiles, roles, "
|
641 |
+
"FrontEnd registration and login. Members Directory, activity, groups, "
|
642 |
+
"messages."
|
643 |
+
msgstr ""
|
644 |
+
"Tạo cộng đồng thành viên trực tuyến với hồ sơ người dùng tùy chỉnh, vai trò, "
|
645 |
+
"đăng ký FrontEnd và đăng nhập. Danh bạ thành viên, hoạt động, nhóm, tin nhắn."
|
646 |
+
|
647 |
+
msgid "Create your first table"
|
648 |
+
msgstr "Tạo bảng đầu tiên của bạn"
|
649 |
+
|
650 |
+
msgid "Created"
|
651 |
+
msgstr "Tạo"
|
652 |
+
|
653 |
+
msgid ""
|
654 |
+
"Creating slideshows with Slider plugin is fast and easy. Simply select "
|
655 |
+
"images from your WordPress Media Library, Flickr, Instagram or Facebook, set "
|
656 |
+
"slide captions, links and SEO fields all from one page."
|
657 |
+
msgstr ""
|
658 |
+
"Tạo trình chiếu với plugin trượt nhanh chóng và dễ dàng. Chỉ cần chọn hình "
|
659 |
+
"ảnh từ Thư viện phương tiện WordPress, Flickr, Instagram hoặc Facebook của "
|
660 |
+
"bạn, đặt chú thích trang trình bày, liên kết và trường SEO tất cả từ một "
|
661 |
+
"trang."
|
662 |
+
|
663 |
+
msgid "Currency"
|
664 |
+
msgstr "Tiền tệ"
|
665 |
+
|
666 |
+
msgid "Custom Footer"
|
667 |
+
msgstr "Chân trang tùy chỉnh"
|
668 |
+
|
669 |
+
msgid "Data Formats"
|
670 |
+
msgstr "Định dạng dữ liệu"
|
671 |
+
|
672 |
+
msgid "Data Tables Generator"
|
673 |
+
msgstr "Trình tạo bảng dữ liệu"
|
674 |
+
|
675 |
+
msgid "Date"
|
676 |
+
msgstr "Ngày"
|
677 |
+
|
678 |
+
msgid "Decrease the amount of whitespace in the table."
|
679 |
+
msgstr "Giảm khoảng trắng trong bảng."
|
680 |
+
|
681 |
+
msgid "Default"
|
682 |
+
msgstr "Mặc định"
|
683 |
+
|
684 |
+
msgid "Delete"
|
685 |
+
msgstr "Xóa"
|
686 |
+
|
687 |
+
msgid "Delimiter"
|
688 |
+
msgstr "Dấu phân tách"
|
689 |
+
|
690 |
+
msgid "Descending"
|
691 |
+
msgstr "Giảm dần"
|
692 |
+
|
693 |
+
msgid "Description"
|
694 |
+
msgstr "Miêu tả"
|
695 |
+
|
696 |
+
msgid "Description Text"
|
697 |
+
msgstr "Văn bản mô tả"
|
698 |
+
|
699 |
+
msgid "Design"
|
700 |
+
msgstr "Thiết kế"
|
701 |
+
|
702 |
+
msgid "Diagram"
|
703 |
+
msgstr "Sơ đồ"
|
704 |
+
|
705 |
+
msgid "Diagram Title"
|
706 |
+
msgstr "Tiêu đề sơ đồ"
|
707 |
+
|
708 |
+
msgid "Diagrams"
|
709 |
+
msgstr "Sơ đồ"
|
710 |
+
|
711 |
+
msgid ""
|
712 |
+
"Diagrams - this is a Pro feature of our plugin, which can help you to follow "
|
713 |
+
"the statistics of your table. Several types for every taste and any wishes."
|
714 |
+
msgstr ""
|
715 |
+
"Sơ đồ - đây là tính năng Pro của plugin của chúng tôi, có thể giúp bạn theo "
|
716 |
+
"dõi thống kê của bảng. Một số loại cho mọi sở thích và mong muốn."
|
717 |
+
|
718 |
+
msgid "Digital Publication Plugin"
|
719 |
+
msgstr "Plugin xuất bản kỹ thuật số"
|
720 |
+
|
721 |
+
msgid ""
|
722 |
+
"Digital Publication WordPress Plugin by Supsystic for Magazines, Catalogs, "
|
723 |
+
"Portfolios. Convert images, posts, PDF to the page flip book."
|
724 |
+
msgstr ""
|
725 |
+
"Xuất bản kỹ thuật số WordPress Plugin bởi Supsystic cho Tạp chí, Catalogues, "
|
726 |
+
"Danh mục đầu tư. Chuyển đổi hình ảnh, bài đăng, PDF sang sách lật trang."
|
727 |
+
|
728 |
+
msgid "Disable"
|
729 |
+
msgstr "Vô hiệu hóa"
|
730 |
+
|
731 |
+
msgid "Disable Responsivity"
|
732 |
+
msgstr "Vô hiệu hóa trách nhiệm"
|
733 |
+
|
734 |
+
msgid "Disable Responsivity - default table fluid layout"
|
735 |
+
msgstr "Tắt tính năng trả lời - bố cục bảng mặc định"
|
736 |
+
|
737 |
+
msgid "Disable Sorting"
|
738 |
+
msgstr "Tắt sắp xếp"
|
739 |
+
|
740 |
+
msgid "Disable Wrapping"
|
741 |
+
msgstr "Tắt gói"
|
742 |
+
|
743 |
+
msgid "Disable indexing table for search bots"
|
744 |
+
msgstr "Vô hiệu hóa bảng lập chỉ mục cho các bot tìm kiếm"
|
745 |
+
|
746 |
+
msgid ""
|
747 |
+
"Disable wrapping of content in the table, so every word in the cells will be "
|
748 |
+
"in one single line."
|
749 |
+
msgstr ""
|
750 |
+
"Tắt gói nội dung trong bảng, vì vậy mọi từ trong các ô sẽ nằm trong một dòng."
|
751 |
+
|
752 |
+
msgid "Disallow Indexing"
|
753 |
+
msgstr "Không cho phép lập chỉ mục"
|
754 |
+
|
755 |
+
msgid ""
|
756 |
+
"Display custom Google Maps. Set markers and locations with text, images, "
|
757 |
+
"categories and links. Customize google map in a simple and intuitive way."
|
758 |
+
msgstr ""
|
759 |
+
"Hiển thị Google Maps tùy chỉnh. Đặt điểm đánh dấu và vị trí bằng văn bản, "
|
760 |
+
"hình ảnh, danh mục và liên kết. Tùy chỉnh bản đồ google theo cách đơn giản "
|
761 |
+
"và trực quan."
|
762 |
+
|
763 |
+
msgid "Display only entries with matching characters in the beginning of words"
|
764 |
+
msgstr "Chỉ hiển thị các mục nhập có các ký tự trùng khớp ở đầu từ"
|
765 |
+
|
766 |
+
msgid "Edit table \"%s\""
|
767 |
+
msgstr "Chỉnh sửa bảng \"% s\""
|
768 |
+
|
769 |
+
msgid "Editable fields"
|
770 |
+
msgstr "Các trường có thể chỉnh sửa"
|
771 |
+
|
772 |
+
msgid "Editor"
|
773 |
+
msgstr "Biên tập viên"
|
774 |
+
|
775 |
+
msgid "Editor tab"
|
776 |
+
msgstr "Tab trình soạn thảo"
|
777 |
+
|
778 |
+
msgid "Email"
|
779 |
+
msgstr "Email"
|
780 |
+
|
781 |
+
msgid "Empty info text"
|
782 |
+
msgstr "Văn bản thông tin trống"
|
783 |
+
|
784 |
+
msgid "Empty table"
|
785 |
+
msgstr "Bàn trống"
|
786 |
+
|
787 |
+
msgid "Enable"
|
788 |
+
msgstr "Bật"
|
789 |
+
|
790 |
+
msgid ""
|
791 |
+
"Enable / disable table loader icon before table will be completely loaded."
|
792 |
+
msgstr ""
|
793 |
+
"Bật / tắt biểu tượng trình tải bảng trước khi bảng sẽ được tải hoàn toàn."
|
794 |
+
|
795 |
+
msgid "Enable Table History"
|
796 |
+
msgstr "Bật Lịch sử bảng"
|
797 |
+
|
798 |
+
msgid "Enter the name and create Data Table"
|
799 |
+
msgstr "Nhập tên và tạo bảng dữ liệu"
|
800 |
+
|
801 |
+
msgid "Execute JS Script After Table Is Loaded"
|
802 |
+
msgstr "Thực thi JS Script sau khi bảng được tải"
|
803 |
+
|
804 |
+
msgid "Executive"
|
805 |
+
msgstr "Điều hành"
|
806 |
+
|
807 |
+
msgid "Export"
|
808 |
+
msgstr "Xuất ra"
|
809 |
+
|
810 |
+
msgid "Export Data to the File"
|
811 |
+
msgstr "Xuất dữ liệu vào tệp"
|
812 |
+
|
813 |
+
msgid "Export Logo"
|
814 |
+
msgstr "Xuất Logo"
|
815 |
+
|
816 |
+
msgid "Export Page Orientation"
|
817 |
+
msgstr "Định hướng trang xuất"
|
818 |
+
|
819 |
+
msgid "Export Paper Size"
|
820 |
+
msgstr "Chọn kích thước giấy xuất ra"
|
821 |
+
|
822 |
+
msgid "Export available only in PRO version."
|
823 |
+
msgstr "Xuất chỉ khả dụng trong phiên bản PRO."
|
824 |
+
|
825 |
+
msgid "Export label"
|
826 |
+
msgstr "Xuất nhãn"
|
827 |
+
|
828 |
+
msgid "Export table"
|
829 |
+
msgstr "Xuất bảng"
|
830 |
+
|
831 |
+
msgid "Failed to find diagram %s."
|
832 |
+
msgstr "Không thể tìm thấy sơ đồ% s."
|
833 |
+
|
834 |
+
msgid "Failed to find table %s."
|
835 |
+
msgstr "Không thể tìm thấy bảng% s."
|
836 |
+
|
837 |
+
msgid "Failed to get table rows: %s"
|
838 |
+
msgstr "Không nhận được hàng trong bảng:% s"
|
839 |
+
|
840 |
+
msgid "Failed to import data from the uploaded file"
|
841 |
+
msgstr "Không thể nhập dữ liệu từ tệp được tải lên"
|
842 |
+
|
843 |
+
msgid "Failed to import selected file"
|
844 |
+
msgstr "Không thể nhập tệp đã chọn"
|
845 |
+
|
846 |
+
msgid "Failed to import selected file: Wrong spreadsheet id or url"
|
847 |
+
msgstr "Không thể nhập tệp đã chọn: Id hoặc url bảng tính sai"
|
848 |
+
|
849 |
+
msgid "Failed to save table meta data: %s"
|
850 |
+
msgstr "Không thể lưu dữ liệu meta bảng:% s"
|
851 |
+
|
852 |
+
msgid "Failed to save table rows: %s"
|
853 |
+
msgstr "Không thể lưu hàng trong bảng:% s"
|
854 |
+
|
855 |
+
msgid "Failed to upload selected file"
|
856 |
+
msgstr "Không thể tải lên tệp đã chọn"
|
857 |
+
|
858 |
+
msgid "Featured Plugins"
|
859 |
+
msgstr "Plugins nổi bật"
|
860 |
+
|
861 |
+
msgid "Features"
|
862 |
+
msgstr "Đặc điểm"
|
863 |
+
|
864 |
+
msgid "Feel free to contact us and don’t worry, everything gonna be ok!"
|
865 |
+
msgstr "Hãy liên hệ với chúng tôi và đừng lo, mọi thứ sẽ ổn thôi!"
|
866 |
+
|
867 |
+
msgid "File Type"
|
868 |
+
msgstr "Loại tệp"
|
869 |
+
|
870 |
+
msgid "File extension type"
|
871 |
+
msgstr "Loại tiện ích mở rộng tệp"
|
872 |
+
|
873 |
+
msgid "Fill in the rest of the formula."
|
874 |
+
msgstr "Điền vào phần còn lại của công thức."
|
875 |
+
|
876 |
+
msgid ""
|
877 |
+
"Fill the table title and choose the number of columns and rows. Don’t worry, "
|
878 |
+
"you will be able to change it (add or delete some) later!"
|
879 |
+
msgstr ""
|
880 |
+
"Điền tiêu đề bảng và chọn số cột và hàng. Đừng lo lắng, bạn sẽ có thể thay "
|
881 |
+
"đổi nó (thêm hoặc xóa một số) sau!"
|
882 |
+
|
883 |
+
msgid "Filtered info text"
|
884 |
+
msgstr "Văn bản thông tin được lọc"
|
885 |
+
|
886 |
+
msgid "Fixed Columns"
|
887 |
+
msgstr "Cột cố định"
|
888 |
+
|
889 |
+
msgid "Fixed Footer"
|
890 |
+
msgstr "Chân trang cố định"
|
891 |
+
|
892 |
+
msgid "Fixed Header"
|
893 |
+
msgstr "Tiêu đề cố định"
|
894 |
+
|
895 |
+
msgid "Fixed Table Height"
|
896 |
+
msgstr "Chiều cao bảng cố định"
|
897 |
+
|
898 |
+
msgid "Fixed Table Width"
|
899 |
+
msgstr "Chiều rộng bảng cố định"
|
900 |
+
|
901 |
+
msgid ""
|
902 |
+
"Fixed table height in px. This value must be less than the original table "
|
903 |
+
"height to create a vertical scroll, otherwise you will not see that the "
|
904 |
+
"fixed header / footer exists."
|
905 |
+
msgstr ""
|
906 |
+
"Cố định chiều cao bảng trong px. Giá trị này phải nhỏ hơn chiều cao bảng ban "
|
907 |
+
"đầu để tạo một cuộn dọc, nếu không bạn sẽ không thấy rằng đầu trang / chân "
|
908 |
+
"trang cố định tồn tại."
|
909 |
+
|
910 |
+
msgid "Folio"
|
911 |
+
msgstr "Tờ số"
|
912 |
+
|
913 |
+
msgid "Font Family"
|
914 |
+
msgstr "Họ phông chữ"
|
915 |
+
|
916 |
+
msgid "Font Size"
|
917 |
+
msgstr "Cỡ font chữ"
|
918 |
+
|
919 |
+
msgid "Font family changing available only in PRO version."
|
920 |
+
msgstr "Thay đổi font chữ chỉ có trong phiên bản PRO."
|
921 |
+
|
922 |
+
msgid "Footer"
|
923 |
+
msgstr "Chân trang"
|
924 |
+
|
925 |
+
msgid ""
|
926 |
+
"Formats for cells value. All formats convert cell values to appropriate "
|
927 |
+
"format types.\n"
|
928 |
+
" <b>Percent with Convert</b> format sets percent "
|
929 |
+
"format and convert cells value to percentage by division by 100.\n"
|
930 |
+
" "
|
931 |
+
msgstr ""
|
932 |
+
"Định dạng cho giá trị ô. Tất cả các định dạng chuyển đổi giá trị ô thành các "
|
933 |
+
"loại định dạng thích hợp.\n"
|
934 |
+
"<b> Phần trăm với định dạng Chuyển đổi </ b> đặt định dạng phần trăm và "
|
935 |
+
"chuyển đổi các ô có giá trị thành phần trăm chia cho 100."
|
936 |
+
|
937 |
+
msgid "Frequently Asked Questions"
|
938 |
+
msgstr "Các câu hỏi thường gặp"
|
939 |
+
|
940 |
+
msgid "Frontend Export"
|
941 |
+
msgstr "Frontend xuất khẩu"
|
942 |
+
|
943 |
+
msgid "Get Browser Language"
|
944 |
+
msgstr "Tải ngôn ngữ trình duyệt"
|
945 |
+
|
946 |
+
msgid "Get PRO"
|
947 |
+
msgstr "Nhận phiên bản PRO"
|
948 |
+
|
949 |
+
msgid "Get PRO version"
|
950 |
+
msgstr "Nhận phiên bản PRO"
|
951 |
+
|
952 |
+
msgid "Global Table Data Search"
|
953 |
+
msgstr "Tìm kiếm dữ liệu bảng toàn cầu"
|
954 |
+
|
955 |
+
msgid "Go to Editor of Data Table."
|
956 |
+
msgstr "Chuyển đến Trình chỉnh sửa Bảng dữ liệu."
|
957 |
+
|
958 |
+
msgid "Google Maps Easy"
|
959 |
+
msgstr "Google Maps dễ dàng"
|
960 |
+
|
961 |
+
msgid "Google Spreadsheet Url"
|
962 |
+
msgstr "Url bảng tính của Google"
|
963 |
+
|
964 |
+
msgid "Header"
|
965 |
+
msgstr "Tiêu đề"
|
966 |
+
|
967 |
+
msgid "Height"
|
968 |
+
msgstr "Chiều cao"
|
969 |
+
|
970 |
+
msgid "Hello Supsystic Team!"
|
971 |
+
msgstr "Xin chào đội Supsystic!"
|
972 |
+
|
973 |
+
msgid "Hello! This is the Data Tables by Supsystic"
|
974 |
+
msgstr "Xin chào! Đây là bảng dữ liệu bởi Supsystic"
|
975 |
+
|
976 |
+
msgid "Hide Table Loader"
|
977 |
+
msgstr "Ẩn trình tải bảng"
|
978 |
+
|
979 |
+
msgid "Hide table by default and show only if search has a result."
|
980 |
+
msgstr "Ẩn bảng theo mặc định và chỉ hiển thị nếu tìm kiếm có kết quả."
|
981 |
+
|
982 |
+
msgid "Highlight the Order Column"
|
983 |
+
msgstr "Đánh dấu cột thứ tự"
|
984 |
+
|
985 |
+
msgid "Highlighting by Mousehover"
|
986 |
+
msgstr "Làm nổi bật khi rê chuột"
|
987 |
+
|
988 |
+
msgid "Horizontal scroll"
|
989 |
+
msgstr "Cuộn ngang"
|
990 |
+
|
991 |
+
msgid ""
|
992 |
+
"Horizontal scroll - in this mode scroll bar will be added if table overflows "
|
993 |
+
"parent container width"
|
994 |
+
msgstr ""
|
995 |
+
"Cuộn ngang - trong thanh cuộn chế độ này sẽ được thêm nếu bảng tràn chiều "
|
996 |
+
"rộng vùng chứa của cấp độ gốc"
|
997 |
+
|
998 |
+
msgid "How to use formulas in the table?"
|
999 |
+
msgstr "Làm thế nào để sử dụng các công thức trong bảng?"
|
1000 |
+
|
1001 |
+
msgid ""
|
1002 |
+
"I need to have line breaks/spaces between the paragraphs within the cells."
|
1003 |
+
msgstr "Tôi cần phải có dấu ngắt dòng / dấu cách giữa các đoạn trong các ô."
|
1004 |
+
|
1005 |
+
msgid ""
|
1006 |
+
"If checked - footer will be created from the last table rows. Otherwise - "
|
1007 |
+
"footer will be created from header rows."
|
1008 |
+
msgstr ""
|
1009 |
+
"Nếu được chọn - chân trang sẽ được tạo từ các hàng trong bảng cuối cùng. Nếu "
|
1010 |
+
"không - chân trang sẽ được tạo từ hàng tiêu đề."
|
1011 |
+
|
1012 |
+
msgid ""
|
1013 |
+
"If checked - table data on frontend will be overloaded from selected Google "
|
1014 |
+
"Sheet. <a href=\"%s\" tagget=\"_blank\">Read more</a> about how organize "
|
1015 |
+
"Auto Import form Google Sheets"
|
1016 |
+
msgstr ""
|
1017 |
+
"Nếu dữ liệu bảng đã chọn trên giao diện người dùng sẽ bị quá tải từ Google "
|
1018 |
+
"Trang tính đã chọn. <a href=\"%s\" tagget=\"_blank\"> Đọc thêm </a> về cách "
|
1019 |
+
"sắp xếp Tự động nhập tổ chức Google Trang tính"
|
1020 |
+
|
1021 |
+
msgid "If checked - table data will be included in the global site search"
|
1022 |
+
msgstr ""
|
1023 |
+
"Nếu dữ liệu được chọn - bảng sẽ được bao gồm trong tìm kiếm trang web toàn "
|
1024 |
+
"cầu"
|
1025 |
+
|
1026 |
+
msgid "If checked - the current sorted column will be highlighted"
|
1027 |
+
msgstr "Nếu được chọn - cột được sắp xếp hiện tại sẽ được tô sáng"
|
1028 |
+
|
1029 |
+
msgid ""
|
1030 |
+
"If checked - this table will be resized by first supsystic table on page. "
|
1031 |
+
"Important! This option makes sense only if table is not on responsive mode "
|
1032 |
+
"or responsive mode is disabled. Also if the first table has different count "
|
1033 |
+
"of columns or different settings, their sizes may not be equal."
|
1034 |
+
msgstr ""
|
1035 |
+
"Nếu được chọn - bảng này sẽ được thay đổi kích thước bằng bảng supsystic đầu "
|
1036 |
+
"tiên trên trang. Quan trọng! Tùy chọn này chỉ có ý nghĩa nếu bảng không ở "
|
1037 |
+
"chế độ phản hồi hoặc chế độ phản hồi bị tắt. Ngoài ra nếu bảng đầu tiên có "
|
1038 |
+
"số lượng cột khác nhau hoặc các cài đặt khác nhau, kích thước của chúng có "
|
1039 |
+
"thể không bằng nhau."
|
1040 |
+
|
1041 |
+
msgid ""
|
1042 |
+
"If checked - width of table columns will be calculated automatically for "
|
1043 |
+
"table width 100%.<br /><br />\n"
|
1044 |
+
" Otherwise - you can set "
|
1045 |
+
"table width manually: columns width will be get from Fixed Table Width "
|
1046 |
+
"option\n"
|
1047 |
+
" (toolbar on Editor tab) or "
|
1048 |
+
"calculated depending on the columns width in the table editor.<br /><br />\n"
|
1049 |
+
" If you do not want to apply "
|
1050 |
+
"columns width at all - you should uncheck \"Auto Table Width\" option, set "
|
1051 |
+
"\"Fixed Table Width\"\n"
|
1052 |
+
" option to \"auto\" and check "
|
1053 |
+
"\"Compact Table\" option."
|
1054 |
+
msgstr ""
|
1055 |
+
"Nếu được chọn - chiều rộng của các cột trong bảng sẽ được tính tự động cho "
|
1056 |
+
"chiều rộng bảng 100%. <br /> <br />\n"
|
1057 |
+
" Nếu không - bạn có thể đặt "
|
1058 |
+
"chiều rộng bảng theo cách thủ công: chiều rộng cột sẽ được lấy từ tùy chọn "
|
1059 |
+
"Chiều rộng Bảng cố định\n"
|
1060 |
+
" (thanh công cụ trên tab "
|
1061 |
+
"Editor) hoặc được tính toán tùy thuộc vào chiều rộng cột trong trình soạn "
|
1062 |
+
"thảo bảng. <br /> <br />\n"
|
1063 |
+
" Nếu bạn không muốn áp dụng "
|
1064 |
+
"chiều rộng cột ở tất cả - bạn nên bỏ chọn tùy chọn \"Chiều rộng bảng tự động"
|
1065 |
+
"\", đặt \"Chiều rộng bảng cố định\"\n"
|
1066 |
+
" tùy chọn \"tự động\" và "
|
1067 |
+
"chọn tùy chọn \"Bảng nhỏ gọn\"."
|
1068 |
+
|
1069 |
+
msgid ""
|
1070 |
+
"If multiple sorting for columns is not set - the table will be sorted in the "
|
1071 |
+
"specified order by the column set in the table settings: Settings-> Features-"
|
1072 |
+
"> Sorting Order / Sorting Column. Otherwise - table will be sorted by the "
|
1073 |
+
"specified custom columns in sequense, in which they are listed."
|
1074 |
+
msgstr ""
|
1075 |
+
"Nếu nhiều sắp xếp cho cột không được đặt - bảng sẽ được sắp xếp theo thứ tự "
|
1076 |
+
"được chỉ định bởi tập hợp cột trong cài đặt bảng: Cài đặt-> Tính năng-> Thứ "
|
1077 |
+
"tự sắp xếp / Cột sắp xếp. Nếu không - bảng sẽ được sắp xếp theo các cột tùy "
|
1078 |
+
"chỉnh được chỉ định theo trình tự, trong đó chúng được liệt kê."
|
1079 |
+
|
1080 |
+
msgid ""
|
1081 |
+
"If you use some specific characters (greek, cyrillic etc.) it is better to "
|
1082 |
+
"check this box for PDF export."
|
1083 |
+
msgstr ""
|
1084 |
+
"Nếu bạn sử dụng một số ký tự cụ thể (tiếng Hy Lạp, cyrillic, vv) thì tốt hơn "
|
1085 |
+
"nên chọn hộp này để xuất PDF."
|
1086 |
+
|
1087 |
+
msgid ""
|
1088 |
+
"If, unfortunately, you have some problem - we are ready to help you in our "
|
1089 |
+
"<a href=\"//supsystic.com/contact-us/\" target=\"_blank\">internal support.</"
|
1090 |
+
"a>"
|
1091 |
+
msgstr ""
|
1092 |
+
"Tuy nhiên, nếu bạn gặp sự cố - chúng tôi sẵn sàng trợ giúp bạn trong <a href="
|
1093 |
+
"\"//supsystic.com/contact-us/\" target=\"_blank\"> bộ phận hỗ trợ nội bộ của "
|
1094 |
+
"chúng tôi. </a>"
|
1095 |
+
|
1096 |
+
msgid "Import"
|
1097 |
+
msgstr "Nhập"
|
1098 |
+
|
1099 |
+
msgid "Import Data to the Table"
|
1100 |
+
msgstr "Nhập dữ liệu vào bảng"
|
1101 |
+
|
1102 |
+
msgid "Import Settings"
|
1103 |
+
msgstr "Nhập cài đặt"
|
1104 |
+
|
1105 |
+
msgid "Import available only in PRO version."
|
1106 |
+
msgstr "Nhập chỉ khả dụng trong phiên bản PRO."
|
1107 |
+
|
1108 |
+
msgid "Import error"
|
1109 |
+
msgstr "Lỗi nhập"
|
1110 |
+
|
1111 |
+
msgid "Import settings"
|
1112 |
+
msgstr "Nhập cài đặt"
|
1113 |
+
|
1114 |
+
msgid "Import to the table"
|
1115 |
+
msgstr "Nhập vào bảng"
|
1116 |
+
|
1117 |
+
msgid "Import/Export"
|
1118 |
+
msgstr "Nhập khẩu/ xuất khẩu"
|
1119 |
+
|
1120 |
+
msgid ""
|
1121 |
+
"Important! Please, check the sharing settings of your spreadsheet: it must "
|
1122 |
+
"be accessed to edit for everyone who has link. In other case the data will "
|
1123 |
+
"not import to table."
|
1124 |
+
msgstr ""
|
1125 |
+
"Quan trọng! Vui lòng kiểm tra cài đặt chia sẻ của bảng tính của bạn: nó phải "
|
1126 |
+
"được truy cập để chỉnh sửa cho tất cả những người có liên kết. Trong trường "
|
1127 |
+
"hợp khác, dữ liệu sẽ không được nhập vào bảng."
|
1128 |
+
|
1129 |
+
msgid ""
|
1130 |
+
"In case you have special or at least, basic knowledge of CSS code - you can "
|
1131 |
+
"easily change the table here. Just make sure that you know, what you are "
|
1132 |
+
"doing and you will not destroy the table."
|
1133 |
+
msgstr ""
|
1134 |
+
"Trong trường hợp bạn có kiến thức cơ bản về mã CSS - bạn có thể dễ dàng thay "
|
1135 |
+
"đổi bảng ở đây. Chỉ cần chắc chắn rằng bạn biết, những gì bạn đang làm và "
|
1136 |
+
"bạn sẽ không phá hủy bảng."
|
1137 |
+
|
1138 |
+
msgid "Insert Link"
|
1139 |
+
msgstr "Chèn đường dẫn"
|
1140 |
+
|
1141 |
+
msgid "Insert link"
|
1142 |
+
msgstr "Chèn đường dẫn"
|
1143 |
+
|
1144 |
+
msgid "Insert picture"
|
1145 |
+
msgstr "Chèn ảnh"
|
1146 |
+
|
1147 |
+
msgid "Inside by the top left corner"
|
1148 |
+
msgstr "Bên trong góc trên cùng bên trái"
|
1149 |
+
|
1150 |
+
msgid "Invalid range specified."
|
1151 |
+
msgstr "Phạm vi không hợp lệ được chỉ định."
|
1152 |
+
|
1153 |
+
msgid "Italic"
|
1154 |
+
msgstr "Chữ nghiêng"
|
1155 |
+
|
1156 |
+
msgid ""
|
1157 |
+
"It’s never been so easy to create and manage pricing and comparison tables "
|
1158 |
+
"with table builder. Any element of the table can be customise with mouse "
|
1159 |
+
"click."
|
1160 |
+
msgstr ""
|
1161 |
+
"Không bao giờ dễ dàng tạo và quản lý các bảng giá cả và so sánh với trình "
|
1162 |
+
"tạo bảng. Bất kỳ phần tử nào của bảng có thể được tùy chỉnh bằng cách nhấp "
|
1163 |
+
"chuột."
|
1164 |
+
|
1165 |
+
msgid "Landscape"
|
1166 |
+
msgstr "Phong cảnh"
|
1167 |
+
|
1168 |
+
msgid "Language"
|
1169 |
+
msgstr "Ngôn ngữ"
|
1170 |
+
|
1171 |
+
msgid "Language and Text"
|
1172 |
+
msgstr "Ngôn ngữ và văn bản"
|
1173 |
+
|
1174 |
+
msgid "Large"
|
1175 |
+
msgstr "Lớn"
|
1176 |
+
|
1177 |
+
msgid ""
|
1178 |
+
"Learn more about how to do this <a href=\"//supsystic.com/how-to-use-tables/"
|
1179 |
+
"\" target=\"_blank\">here</a>."
|
1180 |
+
msgstr ""
|
1181 |
+
"Tìm hiểu thêm về cách thực hiện <a href=\"//supsystic.com/how-to-use-tables/"
|
1182 |
+
"\" target=\"_blank\"> tại đây </a>."
|
1183 |
+
|
1184 |
+
msgid "Ledger"
|
1185 |
+
msgstr "Sổ cái"
|
1186 |
+
|
1187 |
+
msgid "Left"
|
1188 |
+
msgstr "Trái"
|
1189 |
+
|
1190 |
+
msgid "Left Columns Count"
|
1191 |
+
msgstr "Số cột còn lại"
|
1192 |
+
|
1193 |
+
msgid "Left of the chart"
|
1194 |
+
msgstr "Bên trái của biểu đồ"
|
1195 |
+
|
1196 |
+
msgid "Legal"
|
1197 |
+
msgstr "Hợp pháp"
|
1198 |
+
|
1199 |
+
msgid "Legend Position"
|
1200 |
+
msgstr "Vị trí chú giải"
|
1201 |
+
|
1202 |
+
msgid "Length text"
|
1203 |
+
msgstr "Văn bản chiều dài"
|
1204 |
+
|
1205 |
+
msgid "Let's Start!"
|
1206 |
+
msgstr "Hãy bắt đầu!"
|
1207 |
+
|
1208 |
+
msgid ""
|
1209 |
+
"Lets make search by fields, marked as hidden (see appropriate button on "
|
1210 |
+
"editor toolbar)"
|
1211 |
+
msgstr ""
|
1212 |
+
"Cho phép thực hiện tìm kiếm theo trường, được đánh dấu là ẩn (xem nút thích "
|
1213 |
+
"hợp trên thanh công cụ của trình soạn thảo)"
|
1214 |
+
|
1215 |
+
msgid "Letter"
|
1216 |
+
msgstr "Lá thư"
|
1217 |
+
|
1218 |
+
msgid "License"
|
1219 |
+
msgstr "Giấy phép"
|
1220 |
+
|
1221 |
+
msgid "Line Chart"
|
1222 |
+
msgstr "Biểu đồ đường kẻ"
|
1223 |
+
|
1224 |
+
msgid "Lines between slices and values"
|
1225 |
+
msgstr "Đường giữa các lát và giá trị"
|
1226 |
+
|
1227 |
+
msgid "Link Text"
|
1228 |
+
msgstr "Văn bản liên kết"
|
1229 |
+
|
1230 |
+
msgid "Link from Google Tables"
|
1231 |
+
msgstr "Liên kết từ Google Tables"
|
1232 |
+
|
1233 |
+
msgid "List of columns for multiple sorting"
|
1234 |
+
msgstr "Danh sách các cột để phân loại nhiều"
|
1235 |
+
|
1236 |
+
msgid "List of columns, disabled from manual sorting"
|
1237 |
+
msgstr "Danh sách các cột, vô hiệu hóa từ sắp xếp thủ công"
|
1238 |
+
|
1239 |
+
msgid "List of width sizes, set for table columns:"
|
1240 |
+
msgstr "Danh sách các kích thước chiều rộng, được đặt cho các cột trong bảng:"
|
1241 |
+
|
1242 |
+
msgid "Live Chat Plugin"
|
1243 |
+
msgstr "Pluin Live Chat"
|
1244 |
+
|
1245 |
+
msgid "Loading your table, please wait..."
|
1246 |
+
msgstr "Đang tải bảng của bạn, vui lòng chờ ..."
|
1247 |
+
|
1248 |
+
msgid "Logo Alignment"
|
1249 |
+
msgstr "Căn chỉnh logo"
|
1250 |
+
|
1251 |
+
msgid "Logo Position"
|
1252 |
+
msgstr "Vị trí logo"
|
1253 |
+
|
1254 |
+
msgid "Long Number"
|
1255 |
+
msgstr "Số dài"
|
1256 |
+
|
1257 |
+
msgid "Main"
|
1258 |
+
msgstr "Chính"
|
1259 |
+
|
1260 |
+
msgid ""
|
1261 |
+
"Main Settings of your first table. Here you can see main settings which are "
|
1262 |
+
"conected with languages, table elements, styling and other different editors "
|
1263 |
+
"settings. Generally it’s a tab where you can edit the visual part of the "
|
1264 |
+
"whole table, switch on/off the responsive mode, set pagination etc."
|
1265 |
+
msgstr ""
|
1266 |
+
"Cài đặt chính của bảng đầu tiên của bạn. Ở đây bạn có thể thấy các cài đặt "
|
1267 |
+
"chính được kết nối với ngôn ngữ, các yếu tố bảng, kiểu dáng và các cài đặt "
|
1268 |
+
"trình chỉnh sửa khác. Nói chung, đó là tab mà bạn có thể chỉnh sửa phần trực "
|
1269 |
+
"quan của toàn bộ bảng, bật / tắt chế độ phản hồi, đặt phân trang, v.v ..."
|
1270 |
+
|
1271 |
+
msgid "Make data table responsive"
|
1272 |
+
msgstr "Làm cho bảng dữ liệu đáp ứng"
|
1273 |
+
|
1274 |
+
msgid ""
|
1275 |
+
"Mandatory attribute \"id\" is not specified. ' . 'Shortcode usage example: "
|
1276 |
+
"[%s id=\"{table_id}\"]"
|
1277 |
+
msgstr ""
|
1278 |
+
"Thuộc tính bắt buộc \"id\" không được chỉ định. '. Ví dụ về sử dụng mã ngắn: "
|
1279 |
+
"[% s id = \"{table_id}\"]"
|
1280 |
+
|
1281 |
+
msgid ""
|
1282 |
+
"Mark selected cells as hidden and remove them from frontend. Can be useful "
|
1283 |
+
"for placing information in the table for admins only. <br /><br />Importanr! "
|
1284 |
+
"To display the table correctly, please, add this property for the whole row "
|
1285 |
+
"or the whole column of table."
|
1286 |
+
msgstr ""
|
1287 |
+
"Đánh dấu các ô đã chọn là ẩn và xóa chúng khỏi giao diện người dùng. Có thể "
|
1288 |
+
"hữu ích khi đặt thông tin trong bảng chỉ dành cho quản trị viên. <br /> <br /"
|
1289 |
+
"> Importanr! Để hiển thị bảng chính xác, vui lòng thêm thuộc tính này cho "
|
1290 |
+
"toàn bộ hàng hoặc toàn bộ cột của bảng."
|
1291 |
+
|
1292 |
+
msgid ""
|
1293 |
+
"Mark selected cells as invisible and hide them on frontend. Can be useful "
|
1294 |
+
"for placing intermediate calculations. <br /><br />To display the table "
|
1295 |
+
"correctly, please, add this property for the whole row or the whole column "
|
1296 |
+
"of table."
|
1297 |
+
msgstr ""
|
1298 |
+
"Đánh dấu các ô đã chọn là ẩn và ẩn chúng trên giao diện người dùng. Có thể "
|
1299 |
+
"hữu ích khi đặt các phép tính trung gian. <br /> <br /> Để hiển thị bảng "
|
1300 |
+
"chính xác, vui lòng thêm thuộc tính này cho toàn bộ hàng hoặc toàn bộ cột "
|
1301 |
+
"của bảng."
|
1302 |
+
|
1303 |
+
msgid "Medium"
|
1304 |
+
msgstr "Trung bình"
|
1305 |
+
|
1306 |
+
msgid "Membership by Supsystic"
|
1307 |
+
msgstr "Tư cách thành viên bởi Supsystic"
|
1308 |
+
|
1309 |
+
msgid "Message"
|
1310 |
+
msgstr "Tin nhắn"
|
1311 |
+
|
1312 |
+
msgid "Minimum Count of Characters"
|
1313 |
+
msgstr "Số lượng ký tự tối thiểu"
|
1314 |
+
|
1315 |
+
msgid "Name"
|
1316 |
+
msgstr "Tên"
|
1317 |
+
|
1318 |
+
msgid "Name of Cloned Table"
|
1319 |
+
msgstr "Tên bảng nhân bản"
|
1320 |
+
|
1321 |
+
msgid "Name of slice"
|
1322 |
+
msgstr "Tên lát"
|
1323 |
+
|
1324 |
+
msgid "Newsletter Plugin"
|
1325 |
+
msgstr "Pluin Newsletter"
|
1326 |
+
|
1327 |
+
msgid "Next"
|
1328 |
+
msgstr "Tiếp theo"
|
1329 |
+
|
1330 |
+
msgid "No"
|
1331 |
+
msgstr "Không"
|
1332 |
+
|
1333 |
+
msgid "No data available in table"
|
1334 |
+
msgstr "Không có dữ liệu trong bảng"
|
1335 |
+
|
1336 |
+
msgid "No detected"
|
1337 |
+
msgstr "Không phát hiện"
|
1338 |
+
|
1339 |
+
msgid "No legend"
|
1340 |
+
msgstr "Không có huyền thoại"
|
1341 |
+
|
1342 |
+
msgid "No matching records are found"
|
1343 |
+
msgstr "Không tìm thấy hồ sơ phù hợp"
|
1344 |
+
|
1345 |
+
msgid "No value"
|
1346 |
+
msgstr "Không có giá trị"
|
1347 |
+
|
1348 |
+
msgid "None"
|
1349 |
+
msgstr "Không ai"
|
1350 |
+
|
1351 |
+
msgid "Not displaying"
|
1352 |
+
msgstr "Không hiển thị"
|
1353 |
+
|
1354 |
+
msgid ""
|
1355 |
+
"Note that the table may look a little different depending on your theme "
|
1356 |
+
"style."
|
1357 |
+
msgstr ""
|
1358 |
+
"Lưu ý rằng bảng có thể trông hơi khác một chút tùy thuộc vào kiểu chủ đề của "
|
1359 |
+
"bạn."
|
1360 |
+
|
1361 |
+
msgid "Number"
|
1362 |
+
msgstr "Con số"
|
1363 |
+
|
1364 |
+
msgid "Number Formatting"
|
1365 |
+
msgstr "Định dạng số"
|
1366 |
+
|
1367 |
+
msgid ""
|
1368 |
+
"Number of column to apply sort order. Set no value to disable table sorting "
|
1369 |
+
"by default."
|
1370 |
+
msgstr ""
|
1371 |
+
"Số cột để áp dụng thứ tự sắp xếp. Không đặt giá trị để vô hiệu hóa sắp xếp "
|
1372 |
+
"bảng theo mặc định."
|
1373 |
+
|
1374 |
+
msgid "Number of column to fix by left side of the table."
|
1375 |
+
msgstr "Số cột cần sửa ở bên trái của bảng."
|
1376 |
+
|
1377 |
+
msgid "Number of column to fix by right side of the table."
|
1378 |
+
msgstr "Số cột cần sửa theo bên phải của bảng."
|
1379 |
+
|
1380 |
+
msgid "Offset Bottom"
|
1381 |
+
msgstr "Dưới bù đắp"
|
1382 |
+
|
1383 |
+
msgid "Offset Left"
|
1384 |
+
msgstr "Bù đắp trái"
|
1385 |
+
|
1386 |
+
msgid "Offset Right"
|
1387 |
+
msgstr "Bù đắp phải"
|
1388 |
+
|
1389 |
+
msgid "Offset Top"
|
1390 |
+
msgstr "Bù đắp trên"
|
1391 |
+
|
1392 |
+
msgid "Offset for axes' area by bottom."
|
1393 |
+
msgstr "Bù đắp cho khu vực của trục ở phía dưới."
|
1394 |
+
|
1395 |
+
msgid "Offset for axes' area by left."
|
1396 |
+
msgstr "Bù đắp cho khu vực của trục bên trái."
|
1397 |
+
|
1398 |
+
msgid "Offset for axes' area by right."
|
1399 |
+
msgstr "Bù đắp cho khu vực trục của bên phải."
|
1400 |
+
|
1401 |
+
msgid "Offset for axes' area by top."
|
1402 |
+
msgstr "Bù đắp cho khu vực trục của đầu."
|
1403 |
+
|
1404 |
+
msgid ""
|
1405 |
+
"One of the best plugin for creating Contact Forms on your WordPress site. "
|
1406 |
+
"Changeable fonts, backgrounds, an option for adding fields etc."
|
1407 |
+
msgstr ""
|
1408 |
+
"Một trong những plugin tốt nhất để tạo Biểu mẫu liên hệ trên trang web "
|
1409 |
+
"WordPress của bạn. Phông chữ có thể thay đổi, hình nền, tùy chọn thêm "
|
1410 |
+
"trường, v.v."
|
1411 |
+
|
1412 |
+
msgid "Open in new tab"
|
1413 |
+
msgstr "Mở ra trong trang mới"
|
1414 |
+
|
1415 |
+
msgid "Other"
|
1416 |
+
msgstr "Khác"
|
1417 |
+
|
1418 |
+
msgid "Overview"
|
1419 |
+
msgstr "Tổng quan"
|
1420 |
+
|
1421 |
+
msgid "Overwrite Table Text"
|
1422 |
+
msgstr "Ghi đè văn bản bảng"
|
1423 |
+
|
1424 |
+
msgid "PHP"
|
1425 |
+
msgstr "PHP"
|
1426 |
+
|
1427 |
+
msgid "PRO option"
|
1428 |
+
msgstr "Tùy chọn PRO"
|
1429 |
+
|
1430 |
+
msgid "PRO version"
|
1431 |
+
msgstr "Phiên bản PRO"
|
1432 |
+
|
1433 |
+
msgid "Pagination"
|
1434 |
+
msgstr "Phân trang"
|
1435 |
+
|
1436 |
+
msgid "Pagination List Content"
|
1437 |
+
msgstr "Nội dung danh sách phân trang"
|
1438 |
+
|
1439 |
+
msgid "Pagination Size"
|
1440 |
+
msgstr "Kích thước phân trang"
|
1441 |
+
|
1442 |
+
msgid "Paragraph Mode"
|
1443 |
+
msgstr "Chế độ đoạn"
|
1444 |
+
|
1445 |
+
msgid "Paste script code here"
|
1446 |
+
msgstr "Dán mã tập lệnh tại đây"
|
1447 |
+
|
1448 |
+
msgid "Percent"
|
1449 |
+
msgstr "Phần trăm"
|
1450 |
+
|
1451 |
+
msgid "Percent Mode"
|
1452 |
+
msgstr "Chế độ phần trăm"
|
1453 |
+
|
1454 |
+
msgid "Percent with Convert"
|
1455 |
+
msgstr "Phần trăm với chuyển đổi"
|
1456 |
+
|
1457 |
+
msgid "Percentage of slice size out of total"
|
1458 |
+
msgstr "Phần trăm kích thước lát trong tổng số"
|
1459 |
+
|
1460 |
+
msgid "Photo Gallery Plugin"
|
1461 |
+
msgstr "Plugin Photo Gallery"
|
1462 |
+
|
1463 |
+
msgid ""
|
1464 |
+
"Photo Gallery Plugin with a great number of layouts will help you to create "
|
1465 |
+
"quality respectable portfolios and image galleries."
|
1466 |
+
msgstr ""
|
1467 |
+
"Photo Gallery Plugin với một số lượng lớn bố trí sẽ giúp bạn tạo ra danh mục "
|
1468 |
+
"đầu tư chất lượng và thư viện hình ảnh đáng kính."
|
1469 |
+
|
1470 |
+
msgid "Pie Chart"
|
1471 |
+
msgstr "Biểu đồ tròn"
|
1472 |
+
|
1473 |
+
msgid "Plain"
|
1474 |
+
msgstr "Trơn"
|
1475 |
+
|
1476 |
+
msgid ""
|
1477 |
+
"Please be advised that this option is available only in %s. You can %s today "
|
1478 |
+
"and get this and other PRO option for your tables!"
|
1479 |
+
msgstr ""
|
1480 |
+
"Xin lưu ý rằng tùy chọn này chỉ có sẵn trong% s. Bạn có thể% s ngày hôm nay "
|
1481 |
+
"và nhận được tùy chọn này và PRO khác cho các bảng của bạn!"
|
1482 |
+
|
1483 |
+
msgid "Plugin options"
|
1484 |
+
msgstr "Tùy chọn plugin"
|
1485 |
+
|
1486 |
+
msgid "Popup Plugin"
|
1487 |
+
msgstr "Plugin bật lên"
|
1488 |
+
|
1489 |
+
msgid "Portrait"
|
1490 |
+
msgstr "Chân dung"
|
1491 |
+
|
1492 |
+
msgid "Preview"
|
1493 |
+
msgstr "Xem trước"
|
1494 |
+
|
1495 |
+
msgid ""
|
1496 |
+
"Preview insert for your comfort. Before updating the table on your page - "
|
1497 |
+
"you can see the result of your efforts and changes, look at it and enjoy the "
|
1498 |
+
"final outcome."
|
1499 |
+
msgstr ""
|
1500 |
+
"Xem trước chèn cho sự thoải mái của bạn. Trước khi cập nhật bảng trên trang "
|
1501 |
+
"của bạn - bạn có thể thấy kết quả của những nỗ lực và thay đổi của bạn, hãy "
|
1502 |
+
"nhìn vào nó và tận hưởng kết quả cuối cùng."
|
1503 |
+
|
1504 |
+
msgid "Pricing Table"
|
1505 |
+
msgstr "Bảng giá"
|
1506 |
+
|
1507 |
+
msgid "Quantitative value of slice"
|
1508 |
+
msgstr "Giá trị định lượng của lát cắt"
|
1509 |
+
|
1510 |
+
msgid "RA0"
|
1511 |
+
msgstr "RA0"
|
1512 |
+
|
1513 |
+
msgid "RA1"
|
1514 |
+
msgstr "RA1"
|
1515 |
+
|
1516 |
+
msgid "RA2"
|
1517 |
+
msgstr "RA2"
|
1518 |
+
|
1519 |
+
msgid "RA3"
|
1520 |
+
msgstr "RA3"
|
1521 |
+
|
1522 |
+
msgid "RA4"
|
1523 |
+
msgstr "RA4"
|
1524 |
+
|
1525 |
+
msgid "Redo"
|
1526 |
+
msgstr "Chuẩn bị"
|
1527 |
+
|
1528 |
+
msgid "Relative Mode"
|
1529 |
+
msgstr "Chế độ tương đối"
|
1530 |
+
|
1531 |
+
msgid "Remove"
|
1532 |
+
msgstr "Xóa bỏ"
|
1533 |
+
|
1534 |
+
msgid "Remove Data"
|
1535 |
+
msgstr "Xóa bỏ dữ liệu"
|
1536 |
+
|
1537 |
+
msgid "Remove Logo"
|
1538 |
+
msgstr "Xóa bỏ logo"
|
1539 |
+
|
1540 |
+
msgid "Renew License"
|
1541 |
+
msgstr "Gia hạn giấy phép"
|
1542 |
+
|
1543 |
+
msgid "Report a bug"
|
1544 |
+
msgstr "Báo cáo lỗi"
|
1545 |
+
|
1546 |
+
msgid "Require a new functionallity"
|
1547 |
+
msgstr "Yêu cầu chức năng mới"
|
1548 |
+
|
1549 |
+
msgid "Responsive Mode"
|
1550 |
+
msgstr "Chế độ đáp ứng"
|
1551 |
+
|
1552 |
+
msgid "Right"
|
1553 |
+
msgstr "Phải"
|
1554 |
+
|
1555 |
+
msgid "Right Columns Count"
|
1556 |
+
msgstr "Số cột phải"
|
1557 |
+
|
1558 |
+
msgid "Right of the chart"
|
1559 |
+
msgstr "Bên phải của biểu đồ"
|
1560 |
+
|
1561 |
+
msgid "Role for users who can use plugin. Administrator is included by default"
|
1562 |
+
msgstr ""
|
1563 |
+
"Vai trò cho người dùng có thể sử dụng plugin. Quản trị viên được bao gồm "
|
1564 |
+
"theo mặc định"
|
1565 |
+
|
1566 |
+
msgid "Roles"
|
1567 |
+
msgstr "Vai trò"
|
1568 |
+
|
1569 |
+
msgid "Row"
|
1570 |
+
msgstr "Hàng"
|
1571 |
+
|
1572 |
+
msgid "Row Striping"
|
1573 |
+
msgstr "Hàng tước"
|
1574 |
+
|
1575 |
+
msgid "Row highlighting by mouse hover."
|
1576 |
+
msgstr "Hàng nổi bật bằng cách di chuột."
|
1577 |
+
|
1578 |
+
msgid "Rows"
|
1579 |
+
msgstr "Hàng"
|
1580 |
+
|
1581 |
+
msgid "Rows Count per Request"
|
1582 |
+
msgstr "Số lượng hàng cho mỗi yêu cầu"
|
1583 |
+
|
1584 |
+
msgid "SRA0"
|
1585 |
+
msgstr "SRA0"
|
1586 |
+
|
1587 |
+
msgid "SRA1"
|
1588 |
+
msgstr "SRA1"
|
1589 |
+
|
1590 |
+
msgid "SRA2"
|
1591 |
+
msgstr "SRA2"
|
1592 |
+
|
1593 |
+
msgid "SRA3"
|
1594 |
+
msgstr "SRA3"
|
1595 |
+
|
1596 |
+
msgid "SRA4"
|
1597 |
+
msgstr "SRA4"
|
1598 |
+
|
1599 |
+
msgid "Save"
|
1600 |
+
msgstr "Lưu"
|
1601 |
+
|
1602 |
+
msgid "Save Frontend Fields"
|
1603 |
+
msgstr "Lưu các trường Frontend"
|
1604 |
+
|
1605 |
+
msgid "Save as"
|
1606 |
+
msgstr "Lưu dưới dạng"
|
1607 |
+
|
1608 |
+
msgid "Save the changes of table."
|
1609 |
+
msgstr "Lưu các thay đổi của bảng."
|
1610 |
+
|
1611 |
+
msgid "Scientific"
|
1612 |
+
msgstr "Thuộc về khoa học"
|
1613 |
+
|
1614 |
+
msgid "Search by Hidden Fields"
|
1615 |
+
msgstr "Tìm kiếm theo trường ẩn"
|
1616 |
+
|
1617 |
+
msgid "Search label"
|
1618 |
+
msgstr "Tìm kiếm nhãn"
|
1619 |
+
|
1620 |
+
msgid "Search:"
|
1621 |
+
msgstr "Tìm kiếm:"
|
1622 |
+
|
1623 |
+
msgid "Searching"
|
1624 |
+
msgstr "Đang tìm kiếm"
|
1625 |
+
|
1626 |
+
msgid "Select Logo"
|
1627 |
+
msgstr "Chọn logo"
|
1628 |
+
|
1629 |
+
msgid "Select User to display its table"
|
1630 |
+
msgstr "Chọn Người dùng để hiển thị bảng của nó"
|
1631 |
+
|
1632 |
+
msgid ""
|
1633 |
+
"Select a cell and start typing. In a cell, type an equal sign “=” to start "
|
1634 |
+
"the formula."
|
1635 |
+
msgstr ""
|
1636 |
+
"Chọn một ô và bắt đầu nhập. Trong một ô, nhập dấu bằng “=” để bắt đầu công "
|
1637 |
+
"thức."
|
1638 |
+
|
1639 |
+
msgid "Select alignment of table logotype"
|
1640 |
+
msgstr "Chọn căn chỉnh của biểu trưng bảng"
|
1641 |
+
|
1642 |
+
msgid "Select avalilable roles to use tables"
|
1643 |
+
msgstr "Chọn vai trò có sẵn để sử dụng bảng"
|
1644 |
+
|
1645 |
+
msgid "Select chart type"
|
1646 |
+
msgstr "Chọn loại biểu đồ"
|
1647 |
+
|
1648 |
+
msgid "Select file type to export table:"
|
1649 |
+
msgstr "Chọn loại tệp để xuất bảng:"
|
1650 |
+
|
1651 |
+
msgid "Select position of table logotype"
|
1652 |
+
msgstr "Chọn vị trí của biểu trưng bảng"
|
1653 |
+
|
1654 |
+
msgid "Select roles"
|
1655 |
+
msgstr "Chọn vai trò"
|
1656 |
+
|
1657 |
+
msgid "Selectable fields"
|
1658 |
+
msgstr "Các trường có thể chọn"
|
1659 |
+
|
1660 |
+
msgid ""
|
1661 |
+
"Set column width for selected columns in pixels or percents. Press \"Clear "
|
1662 |
+
"Fixed Width\" to clear fixed columns width for all table columns. All "
|
1663 |
+
"changes will be applied after table saving."
|
1664 |
+
msgstr ""
|
1665 |
+
"Đặt chiều rộng cột cho các cột được chọn theo pixel hoặc phần trăm. Nhấn "
|
1666 |
+
"\"Clear Fixed Width\" để xóa chiều rộng cột cố định cho tất cả các cột trong "
|
1667 |
+
"bảng. Tất cả thay đổi sẽ được áp dụng sau khi lưu bảng."
|
1668 |
+
|
1669 |
+
msgid ""
|
1670 |
+
"Set count of table rows, which will be saved per one request. If you do not "
|
1671 |
+
"know why does this value need for - it's better to keep the preferred value: "
|
1672 |
+
"400."
|
1673 |
+
msgstr ""
|
1674 |
+
"Đặt số lượng hàng trong bảng, sẽ được lưu theo một yêu cầu. Nếu bạn không "
|
1675 |
+
"biết tại sao giá trị này lại cần - tốt hơn là giữ giá trị ưu tiên: 400."
|
1676 |
+
|
1677 |
+
msgid ""
|
1678 |
+
"Set fixed table width in px, % or auto (in this case table will be adjusted "
|
1679 |
+
"by table content)"
|
1680 |
+
msgstr ""
|
1681 |
+
"Đặt chiều rộng bảng cố định bằng px,% hoặc tự động (trong trường hợp này "
|
1682 |
+
"bảng sẽ được điều chỉnh theo nội dung bảng)"
|
1683 |
+
|
1684 |
+
msgid "Set format of all numbers in the table"
|
1685 |
+
msgstr "Đặt định dạng của tất cả các số trong bảng"
|
1686 |
+
|
1687 |
+
msgid ""
|
1688 |
+
"Set minimum count of characters to start search in Search field. Set 0 to "
|
1689 |
+
"make search in any case."
|
1690 |
+
msgstr ""
|
1691 |
+
"Đặt số ký tự tối thiểu để bắt đầu tìm kiếm trong trường Tìm kiếm. Đặt 0 để "
|
1692 |
+
"thực hiện tìm kiếm trong mọi trường hợp."
|
1693 |
+
|
1694 |
+
msgid ""
|
1695 |
+
"Set multiple column sorting for selected columns. Press \"Clear Multiple "
|
1696 |
+
"Sorting\" to clear multiple sorting for all table columns. All changes will "
|
1697 |
+
"be applied after table saving."
|
1698 |
+
msgstr ""
|
1699 |
+
"Đặt nhiều cột sắp xếp cho các cột đã chọn. Nhấn \"Xóa nhiều phân loại\" để "
|
1700 |
+
"xóa nhiều phân loại cho tất cả các cột trong bảng. Tất cả thay đổi sẽ được "
|
1701 |
+
"áp dụng sau khi lưu bảng."
|
1702 |
+
|
1703 |
+
msgid ""
|
1704 |
+
"Set output format for currencies. Supports only 1 currency for 1 table. "
|
1705 |
+
"Besides here you can establish needed divider between integer and fractional "
|
1706 |
+
"parts and quantity of zeros at fractional part. For example:<br />\n"
|
1707 |
+
" $ 1,000.000<br />\n"
|
1708 |
+
" € 1.00"
|
1709 |
+
msgstr ""
|
1710 |
+
"Đặt định dạng đầu ra cho tiền tệ. Chỉ hỗ trợ 1 đơn vị tiền tệ cho 1 bảng. "
|
1711 |
+
"Bên cạnh đó ở đây bạn có thể thiết lập chia cần thiết giữa các số nguyên và "
|
1712 |
+
"các phần phân đoạn và số lượng các số không ở phần phân số. Ví dụ: <br />\n"
|
1713 |
+
" $ 1,000.000 <br />\n"
|
1714 |
+
" € 1,00"
|
1715 |
+
|
1716 |
+
msgid ""
|
1717 |
+
"Set output format for date. For example:<br />\n"
|
1718 |
+
" YYYY-MM-DD - 1991-12-25<br />\n"
|
1719 |
+
" DD.MM.YY - 25.12.91"
|
1720 |
+
msgstr ""
|
1721 |
+
"Đặt định dạng đầu ra cho ngày. Ví dụ: <br />\n"
|
1722 |
+
" YYYY-MM-DD - 1991-12-25 <br />\n"
|
1723 |
+
" DD.MM.YY - 25.12.91"
|
1724 |
+
|
1725 |
+
msgid "Set output format for numbers e.g. 1,000.00, 1.00"
|
1726 |
+
msgstr "Đặt định dạng đầu ra cho các số, ví dụ: 1.000,00, 1,00"
|
1727 |
+
|
1728 |
+
msgid ""
|
1729 |
+
"Set output format for percent numbers. For example:<br />\n"
|
1730 |
+
" 10.00%<br />\n"
|
1731 |
+
" 10%"
|
1732 |
+
msgstr ""
|
1733 |
+
"Đặt định dạng đầu ra cho số phần trăm. Ví dụ: <br />\n"
|
1734 |
+
" 10,00% <br />\n"
|
1735 |
+
" 10%"
|
1736 |
+
|
1737 |
+
msgid ""
|
1738 |
+
"Set output format for time and duration. For example:<br />\n"
|
1739 |
+
" 1) time<br />\n"
|
1740 |
+
" HH:mm - 18:00<br />\n"
|
1741 |
+
" hh:mm a - 9:00 pm<br /><br />\n"
|
1742 |
+
" 2) duration<br />\n"
|
1743 |
+
" hh:mm - 36:40<br />\n"
|
1744 |
+
" hh:mm:ss - 36:40:12"
|
1745 |
+
msgstr ""
|
1746 |
+
"Đặt định dạng đầu ra cho thời gian và thời lượng. Ví dụ:<br />\n"
|
1747 |
+
" 1) time<br />\n"
|
1748 |
+
" HH:mm - 18:00<br />\n"
|
1749 |
+
" hh:mm a - 9:00 pm<br /><br />\n"
|
1750 |
+
" 2) duration<br />\n"
|
1751 |
+
" hh:mm - 36:40<br />\n"
|
1752 |
+
" hh:mm:ss - 36:40:12"
|
1753 |
+
|
1754 |
+
msgid "Set sort order by default"
|
1755 |
+
msgstr "Đặt thứ tự sắp xếp theo mặc định"
|
1756 |
+
|
1757 |
+
msgid ""
|
1758 |
+
"Set the numeric value from 0 to 100, for example 10 (equals to 10%). Leave "
|
1759 |
+
"this field empty to use default offset value."
|
1760 |
+
msgstr ""
|
1761 |
+
"Đặt giá trị số từ 0 đến 100, ví dụ 10 (bằng 10%). Để trống trường này để sử "
|
1762 |
+
"dụng giá trị bù mặc định."
|
1763 |
+
|
1764 |
+
msgid ""
|
1765 |
+
"Set the value in px or %, for example, 200 (equals to 200px) or 80%. Leave "
|
1766 |
+
"this field empty to use default height value."
|
1767 |
+
msgstr ""
|
1768 |
+
"Đặt giá trị bằng px hoặc%, ví dụ: 200 (bằng 200px) hoặc 80%. Để trống trường "
|
1769 |
+
"này để sử dụng giá trị độ cao mặc định."
|
1770 |
+
|
1771 |
+
msgid ""
|
1772 |
+
"Set the value in px or %, for example, 400 (equals to 400px) or 90%. Leave "
|
1773 |
+
"this field empty to use default width value."
|
1774 |
+
msgstr ""
|
1775 |
+
"Đặt giá trị bằng px hoặc%, ví dụ: 400 (bằng 400px) hoặc 90%. Để trống trường "
|
1776 |
+
"này để sử dụng giá trị độ rộng mặc định."
|
1777 |
+
|
1778 |
+
msgid "Settings"
|
1779 |
+
msgstr "Cài đặt"
|
1780 |
+
|
1781 |
+
msgid "Short Number"
|
1782 |
+
msgstr "Số ngắn"
|
1783 |
+
|
1784 |
+
msgid "Shortcode"
|
1785 |
+
msgstr "Mã ngắn"
|
1786 |
+
|
1787 |
+
msgid "Show Empty Table"
|
1788 |
+
msgstr "Hiển thị bảng trống"
|
1789 |
+
|
1790 |
+
msgid "Show Only Search Results"
|
1791 |
+
msgstr "Chỉ hiển thị kết quả tìm kiếm"
|
1792 |
+
|
1793 |
+
msgid "Show _MENU_ entries"
|
1794 |
+
msgstr "Hiển thị các mục _MENU"
|
1795 |
+
|
1796 |
+
msgid "Showing 0 to 0 of 0 entries"
|
1797 |
+
msgstr "Hiển thị 0 đến 0 trong số 0 mục"
|
1798 |
+
|
1799 |
+
msgid "Showing _START_ to _END_ of _TOTAL_ entries"
|
1800 |
+
msgstr "Hiển thị _START_ đến _END_ của _TOTAL_ mục"
|
1801 |
+
|
1802 |
+
msgid "Signature"
|
1803 |
+
msgstr "Chữ ký"
|
1804 |
+
|
1805 |
+
msgid "Signature Text"
|
1806 |
+
msgstr "Chữ ký"
|
1807 |
+
|
1808 |
+
msgid "Slider Plugin"
|
1809 |
+
msgstr "Pluin Slider"
|
1810 |
+
|
1811 |
+
msgid "Slider by Supsystic"
|
1812 |
+
msgstr "Slider bởi Supsystic"
|
1813 |
+
|
1814 |
+
msgid "Small"
|
1815 |
+
msgstr "Nhỏ"
|
1816 |
+
|
1817 |
+
msgid "Social Share Buttons"
|
1818 |
+
msgstr "Nút chia sẻ mạng xã hội"
|
1819 |
+
|
1820 |
+
msgid ""
|
1821 |
+
"Social share buttons to increase social traffic and popularity. Social "
|
1822 |
+
"sharing to Facebook, Twitter and other social networks."
|
1823 |
+
msgstr ""
|
1824 |
+
"Nút chia sẻ xã hội để tăng lưu lượng truy cập xã hội và mức độ phổ biến. "
|
1825 |
+
"Chia sẻ xã hội lên Facebook, Twitter và các mạng xã hội khác."
|
1826 |
+
|
1827 |
+
msgid ""
|
1828 |
+
"Some errors occurred while sending mail please send your message trough this "
|
1829 |
+
"contact form:"
|
1830 |
+
msgstr ""
|
1831 |
+
"Đã xảy ra một số lỗi khi gửi thư, vui lòng gửi tin nhắn của bạn thông qua "
|
1832 |
+
"biểu mẫu liên hệ này:"
|
1833 |
+
|
1834 |
+
msgid "Sort order"
|
1835 |
+
msgstr "Thứ tự sắp xếp"
|
1836 |
+
|
1837 |
+
msgid "Sorting"
|
1838 |
+
msgstr "Sắp xếp"
|
1839 |
+
|
1840 |
+
msgid "Sorting Column"
|
1841 |
+
msgstr "Sắp xếp theo cột"
|
1842 |
+
|
1843 |
+
msgid "Sorting Order"
|
1844 |
+
msgstr "Sắp xếp thứ tự"
|
1845 |
+
|
1846 |
+
msgid "Stacked Columns"
|
1847 |
+
msgstr "Cột xếp chồng lên nhau"
|
1848 |
+
|
1849 |
+
msgid "Standard Responsive mode"
|
1850 |
+
msgstr "Chế độ đáp ứng tiêu chuẩn"
|
1851 |
+
|
1852 |
+
msgid ""
|
1853 |
+
"Standard Responsive mode - in this mode if table content doesn't fit all "
|
1854 |
+
"columns become under each other with one cell per row"
|
1855 |
+
msgstr ""
|
1856 |
+
"Chế độ đáp ứng tiêu chuẩn - trong chế độ này nếu nội dung bảng không phù hợp "
|
1857 |
+
"với tất cả các cột trở nên dưới nhau với một ô trên mỗi hàng"
|
1858 |
+
|
1859 |
+
msgid "Step-by-step Tutorial"
|
1860 |
+
msgstr "Hướng dẫn từng bước"
|
1861 |
+
|
1862 |
+
msgid "Strict Matching"
|
1863 |
+
msgstr "Kết hợp chặt chẽ"
|
1864 |
+
|
1865 |
+
msgid "Subject"
|
1866 |
+
msgstr "Chủ đề"
|
1867 |
+
|
1868 |
+
msgid "Support"
|
1869 |
+
msgstr "Hỗ trợ"
|
1870 |
+
|
1871 |
+
msgid ""
|
1872 |
+
"Supsystic Newsletter plugin for automatic mailing of your letters. You will "
|
1873 |
+
"have no need to control it or send them manually. No coding, hard skills or "
|
1874 |
+
"long hours of customizing are required."
|
1875 |
+
msgstr ""
|
1876 |
+
"Supsystic Bản tin plugin cho tự động gửi thư của bạn. Bạn sẽ không cần phải "
|
1877 |
+
"kiểm soát nó hoặc gửi chúng bằng tay. Không yêu cầu mã hóa, kỹ năng cứng "
|
1878 |
+
"hoặc nhiều giờ tùy chỉnh."
|
1879 |
+
|
1880 |
+
msgid "Switch rows / columns"
|
1881 |
+
msgstr "Chuyển đổi hàng / cột"
|
1882 |
+
|
1883 |
+
msgid "Table Elements"
|
1884 |
+
msgstr "Các phần tử bảng"
|
1885 |
+
|
1886 |
+
msgid "Table History"
|
1887 |
+
msgstr "Lịch sử thay đổi bảng"
|
1888 |
+
|
1889 |
+
msgid "Table Information"
|
1890 |
+
msgstr "Thông tin bảng"
|
1891 |
+
|
1892 |
+
msgid "Table Language"
|
1893 |
+
msgstr "Ngôn ngữ bảng"
|
1894 |
+
|
1895 |
+
msgid "Table Loader Color"
|
1896 |
+
msgstr "Màu khi load bảng"
|
1897 |
+
|
1898 |
+
msgid "Table Loader Icon"
|
1899 |
+
msgstr "Icon khi load bảng"
|
1900 |
+
|
1901 |
+
msgid "Table info text"
|
1902 |
+
msgstr "Văn bản thông tin bảng"
|
1903 |
+
|
1904 |
+
msgid "Table information display field. %s"
|
1905 |
+
msgstr "Trường hiển thị thông tin bảng. %S"
|
1906 |
+
|
1907 |
+
msgid "Table title"
|
1908 |
+
msgstr "Tiêu đề bảng"
|
1909 |
+
|
1910 |
+
msgid "Table will not be hidden by default , but will be empty."
|
1911 |
+
msgstr "Bảng sẽ không bị ẩn theo mặc định, nhưng sẽ trống."
|
1912 |
+
|
1913 |
+
msgid "Tables"
|
1914 |
+
msgstr "Bảng"
|
1915 |
+
|
1916 |
+
msgid "Tabloid"
|
1917 |
+
msgstr "Báo lá cải"
|
1918 |
+
|
1919 |
+
msgid "Text color"
|
1920 |
+
msgstr "Màu chữ văn bản"
|
1921 |
+
|
1922 |
+
msgid "Text on Slice"
|
1923 |
+
msgstr "Văn bản trên Slice"
|
1924 |
+
|
1925 |
+
msgid ""
|
1926 |
+
"Thank you for choosing our Data Tables plugin. Just click here to start "
|
1927 |
+
"using it - and we will show you it's possibilities and powerfull features."
|
1928 |
+
msgstr ""
|
1929 |
+
"Cảm ơn bạn đã chọn plugin Bảng dữ liệu của chúng tôi. Chỉ cần nhấp vào đây "
|
1930 |
+
"để bắt đầu sử dụng nó - và chúng tôi sẽ cho bạn thấy khả năng của nó và các "
|
1931 |
+
"tính năng mạnh mẽ."
|
1932 |
+
|
1933 |
+
msgid ""
|
1934 |
+
"Thank you for choosing our Data Tables plugin. Let’s make a quick tour "
|
1935 |
+
"through features and main options of the plugin. Just click “Next” button."
|
1936 |
+
msgstr ""
|
1937 |
+
"Cảm ơn bạn đã chọn plugin Bảng dữ liệu của chúng tôi. Hãy thực hiện chuyến "
|
1938 |
+
"tham quan nhanh qua các tính năng và tùy chọn chính của plugin. Chỉ cần nhấp "
|
1939 |
+
"vào nút \"Tiếp theo\"."
|
1940 |
+
|
1941 |
+
msgid ""
|
1942 |
+
"The Best WordPress PopUp option plugin to help you gain more subscribers, "
|
1943 |
+
"social followers or advertisement. Responsive pop-ups with friendly options."
|
1944 |
+
msgstr ""
|
1945 |
+
"Plugin tùy chọn WordPress PopUp tốt nhất để giúp bạn có được nhiều người "
|
1946 |
+
"đăng ký, người theo dõi xã hội hoặc quảng cáo hơn. Cửa sổ bật lên đáp ứng "
|
1947 |
+
"với các tùy chọn thân thiện."
|
1948 |
+
|
1949 |
+
msgid ""
|
1950 |
+
"The most important part of settings - Editor. Here you can fill all the "
|
1951 |
+
"cells of your table, add some colors, play with fonts and sizes. This insert "
|
1952 |
+
"also allows you to change the alignment of your font, add formats (percents, "
|
1953 |
+
"currency), images and links to make your table more visual attraction."
|
1954 |
+
msgstr ""
|
1955 |
+
"Phần quan trọng nhất của cài đặt - Trình chỉnh sửa. Ở đây bạn có thể điền "
|
1956 |
+
"vào tất cả các ô của bảng, thêm một số màu, chơi với phông chữ và kích cỡ. "
|
1957 |
+
"Chèn này cũng cho phép bạn thay đổi sự liên kết của phông chữ của bạn, thêm "
|
1958 |
+
"định dạng (phần trăm, tiền tệ), hình ảnh và liên kết để làm cho bảng của bạn "
|
1959 |
+
"thu hút thị giác hơn."
|
1960 |
+
|
1961 |
+
msgid "The table ID %s not found."
|
1962 |
+
msgstr "Không tìm thấy ID bảng% s."
|
1963 |
+
|
1964 |
+
msgid "The table with ID %d not exists."
|
1965 |
+
msgstr "Bảng có ID% d không tồn tại."
|
1966 |
+
|
1967 |
+
msgid "There are not all shortcode's attributes specified. Usage example"
|
1968 |
+
msgstr ""
|
1969 |
+
"Không có tất cả các thuộc tính của shortcode được chỉ định. Ví dụ sử dụng"
|
1970 |
+
|
1971 |
+
msgid ""
|
1972 |
+
"This label can not be translated using Table Language option. You can change "
|
1973 |
+
"this label typing the custom text or hide this label typing _NONE_ as label "
|
1974 |
+
"text."
|
1975 |
+
msgstr ""
|
1976 |
+
"Không thể dịch nhãn này bằng tùy chọn Ngôn ngữ bảng. Bạn có thể thay đổi "
|
1977 |
+
"nhãn này bằng cách nhập văn bản tùy chỉnh hoặc ẩn nhãn này đang nhập _NONE_ "
|
1978 |
+
"làm văn bản nhãn."
|
1979 |
+
|
1980 |
+
msgid ""
|
1981 |
+
"This mode allows you to separate the content into paragraphs. To move to a "
|
1982 |
+
"new line in the cell - please press CTRL + Enter."
|
1983 |
+
msgstr ""
|
1984 |
+
"Chế độ này cho phép bạn tách nội dung thành các đoạn văn. Để di chuyển đến "
|
1985 |
+
"một dòng mới trong ô - vui lòng nhấn CTRL + Enter."
|
1986 |
+
|
1987 |
+
msgid "Time / Duration"
|
1988 |
+
msgstr "Khoảng thời gian"
|
1989 |
+
|
1990 |
+
msgid "Title"
|
1991 |
+
msgstr "Chức vụ"
|
1992 |
+
|
1993 |
+
msgid "Topic"
|
1994 |
+
msgstr "Đề tài"
|
1995 |
+
|
1996 |
+
msgid "Type"
|
1997 |
+
msgstr "Kiểu"
|
1998 |
+
|
1999 |
+
msgid "Type Google Sheet url to import data from sheet to table"
|
2000 |
+
msgstr "Nhập url của Trang tính Google để nhập dữ liệu từ trang tính vào bảng"
|
2001 |
+
|
2002 |
+
msgid "Underline"
|
2003 |
+
msgstr "Gạch dưới"
|
2004 |
+
|
2005 |
+
msgid "Undo"
|
2006 |
+
msgstr "Hủy bỏ"
|
2007 |
+
|
2008 |
+
msgid "Unsupported export type: %s."
|
2009 |
+
msgstr "Loại xuất không được hỗ trợ:% s."
|
2010 |
+
|
2011 |
+
msgid "Url"
|
2012 |
+
msgstr "Url"
|
2013 |
+
|
2014 |
+
msgid "Use Comma as Delimiter"
|
2015 |
+
msgstr "Sử dụng dấu phẩy làm dấu phân tách"
|
2016 |
+
|
2017 |
+
msgid "Use Custom Colors"
|
2018 |
+
msgstr "Sử dụng màu tùy chỉnh"
|
2019 |
+
|
2020 |
+
msgid "Use Editable Fields for Current Roles"
|
2021 |
+
msgstr "Sử dụng các trường có thể chỉnh sửa cho vai trò hiện tại"
|
2022 |
+
|
2023 |
+
msgid "Use Export Font"
|
2024 |
+
msgstr "Sử dụng Phông chữ xuất"
|
2025 |
+
|
2026 |
+
msgid "Use Frontend Fields for Logged In Users Only"
|
2027 |
+
msgstr "Sử dụng các trường giao diện người dùng cho người dùng đã đăng nhập"
|
2028 |
+
|
2029 |
+
msgid ""
|
2030 |
+
"Use comma as delimiter of integer and fractional parts of number for "
|
2031 |
+
"editable fields on frontend"
|
2032 |
+
msgstr ""
|
2033 |
+
"Sử dụng dấu phẩy làm dấu phân tách các phần số nguyên và phân số cho các "
|
2034 |
+
"trường có thể chỉnh sửa trên giao diện người dùng"
|
2035 |
+
|
2036 |
+
msgid "Use first column as labels"
|
2037 |
+
msgstr "Sử dụng cột đầu tiên làm nhãn"
|
2038 |
+
|
2039 |
+
msgid "Use first row as headers"
|
2040 |
+
msgstr "Sử dụng hàng đầu tiên làm tiêu đề"
|
2041 |
+
|
2042 |
+
msgid "Vertical alignment"
|
2043 |
+
msgstr "Căn chỉnh theo chiều dọc"
|
2044 |
+
|
2045 |
+
msgid "Video Tutorial"
|
2046 |
+
msgstr "Video hướng dẫn"
|
2047 |
+
|
2048 |
+
msgid ""
|
2049 |
+
"We are trying to make your using of our plugin maximum comfortable and easy. "
|
2050 |
+
"So we find it like the best way to tell you about some options and features "
|
2051 |
+
"of this plugin."
|
2052 |
+
msgstr ""
|
2053 |
+
"Chúng tôi đang cố gắng làm cho việc sử dụng plugin của chúng tôi tối đa "
|
2054 |
+
"thoải mái và dễ dàng. Vì vậy, chúng tôi tìm thấy nó như là cách tốt nhất để "
|
2055 |
+
"cho bạn biết về một số tùy chọn và tính năng của plugin này."
|
2056 |
+
|
2057 |
+
msgid ""
|
2058 |
+
"We really like what we do and feel responsibility for our “child”. "
|
2059 |
+
"Constantly we are trying to change something or update the new features, but "
|
2060 |
+
"sometimes you may have a situation when you need help or have a problem. We "
|
2061 |
+
"can offer you two kinds of help: "
|
2062 |
+
msgstr ""
|
2063 |
+
"Chúng tôi thực sự thích những gì chúng tôi làm và cảm thấy có trách nhiệm "
|
2064 |
+
"với “đứa trẻ” của chúng tôi. Thường xuyên chúng tôi đang cố gắng thay đổi "
|
2065 |
+
"một cái gì đó hoặc cập nhật các tính năng mới, nhưng đôi khi bạn có thể có "
|
2066 |
+
"một tình huống khi bạn cần giúp đỡ hoặc có một vấn đề. Chúng tôi có thể cung "
|
2067 |
+
"cấp cho bạn hai loại trợ giúp:"
|
2068 |
+
|
2069 |
+
msgid "Website"
|
2070 |
+
msgstr "Website"
|
2071 |
+
|
2072 |
+
msgid "Welcome to Data Tables plugin by Supsystic!"
|
2073 |
+
msgstr "Chào mừng bạn đến với plugin Bảng dữ liệu bởi Supsystic!"
|
2074 |
+
|
2075 |
+
msgid "Welcome to our plugin"
|
2076 |
+
msgstr "Chào mừng bạn đến với plugin của chúng tôi"
|
2077 |
+
|
2078 |
+
msgid "Well done!"
|
2079 |
+
msgstr "Làm tốt!"
|
2080 |
+
|
2081 |
+
msgid ""
|
2082 |
+
"When you use frontend fields, <a href=\"%s\" target=\"_blank\">Table Hitory</"
|
2083 |
+
"a> allows you (using History Shortcode) to display on frontend the own table "
|
2084 |
+
"version for each logged in user. On this tab you can display any user's "
|
2085 |
+
"table - just choose the user name from dropdown list."
|
2086 |
+
msgstr ""
|
2087 |
+
"Khi bạn sử dụng các trường giao diện người dùng, <a href=\"%s\" target="
|
2088 |
+
"\"_blank\"> Bảng Hitory </a> cho phép bạn (sử dụng Shortcode lịch sử) hiển "
|
2089 |
+
"thị trên giao diện người dùng phiên bản bảng riêng cho từng người dùng đã "
|
2090 |
+
"đăng nhập. Trên tab này, bạn có thể hiển thị bảng của bất kỳ người dùng nào "
|
2091 |
+
"- chỉ cần chọn tên người dùng từ danh sách thả xuống."
|
2092 |
+
|
2093 |
+
msgid "Width"
|
2094 |
+
msgstr "Chiều rộng"
|
2095 |
+
|
2096 |
+
msgid ""
|
2097 |
+
"With these two buttons in our Pro version you can Import any table of csv "
|
2098 |
+
"format and Export the whole table, which you have done."
|
2099 |
+
msgstr ""
|
2100 |
+
"Với hai nút này trong phiên bản Pro của chúng tôi, bạn có thể Nhập bất kỳ "
|
2101 |
+
"bảng định dạng csv nào và Xuất toàn bộ bảng mà bạn đã thực hiện."
|
2102 |
+
|
2103 |
+
msgid "Word wrapping"
|
2104 |
+
msgstr "Gói từ"
|
2105 |
+
|
2106 |
+
msgid "Yes"
|
2107 |
+
msgstr "Vâng"
|
2108 |
+
|
2109 |
+
msgid "You can change number of Columns and Rows later"
|
2110 |
+
msgstr "Bạn có thể thay đổi số lượng cột và hàng sau"
|
2111 |
+
|
2112 |
+
msgid ""
|
2113 |
+
"You have no diagrams for now. Go to %s -> select the required data in the "
|
2114 |
+
"table and click on “Add diagram” button. Also please check the tutorial %s"
|
2115 |
+
msgstr ""
|
2116 |
+
"Bạn không có sơ đồ cho bây giờ. Đi tới% s -> chọn dữ liệu cần thiết trong "
|
2117 |
+
"bảng và nhấp vào nút “Thêm sơ đồ”. Ngoài ra, hãy kiểm tra hướng dẫn% s"
|
2118 |
+
|
2119 |
+
msgid ""
|
2120 |
+
"You need to enable ZipArchive extension in PHP config file on your server. "
|
2121 |
+
"Please, contact to your server administrator."
|
2122 |
+
msgstr ""
|
2123 |
+
"Bạn cần bật phần mở rộng ZipArchive trong tệp cấu hình PHP trên máy chủ của "
|
2124 |
+
"bạn. Vui lòng liên hệ với quản trị viên máy chủ của bạn."
|
2125 |
+
|
2126 |
+
msgid "You will not be able to update your pro version with expired license"
|
2127 |
+
msgstr ""
|
2128 |
+
"Bạn sẽ không thể cập nhật phiên bản chuyên nghiệp của mình với giấy phép đã "
|
2129 |
+
"hết hạn"
|
2130 |
+
|
2131 |
+
msgid "Your message successfully send. We contact you soon."
|
2132 |
+
msgstr "Tin nhắn của bạn đã gửi thành công. Chúng tôi liên lạc với bạn sớm."
|
2133 |
+
|
2134 |
+
msgid "Your premium support is expired in %s days"
|
2135 |
+
msgstr "Hỗ trợ phí bảo hiểm của bạn đã hết hạn sau% s ngày"
|
2136 |
+
|
2137 |
+
msgid "Your premium support is expired in ' ~ days ~ ' days"
|
2138 |
+
msgstr "Hỗ trợ phí bảo hiểm của bạn đã hết hạn sau '~ days ~' ngày"
|
2139 |
+
|
2140 |
+
msgid "Zero records"
|
2141 |
+
msgstr "Bản ghi Zero"
|
2142 |
+
|
2143 |
+
msgid "by Supsystic!"
|
2144 |
+
msgstr "bởi Supsystic!"
|
2145 |
+
|
2146 |
+
msgid "default"
|
2147 |
+
msgstr "mặc định"
|
2148 |
+
|
2149 |
+
msgid "disable width"
|
2150 |
+
msgstr "tắt chiều rộng"
|
2151 |
+
|
2152 |
+
msgid "how to create Diagrams with Data Table plugin"
|
2153 |
+
msgstr "làm thế nào để tạo ra Diagrams với Data Table plugin"
|
2154 |
+
|
2155 |
+
msgid "value"
|
2156 |
+
msgstr "giá trị"
|
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.
|
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.7
|
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.
|
5 |
-
Stable tag: 1.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 |
|
@@ -194,6 +194,25 @@ Important! Shortcode must be inserted in a text editor page, and not in the visu
|
|
194 |
|
195 |
== Changelog ==
|
196 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
197 |
= 1.8.5 / 21.06.2018 =
|
198 |
* Added mass migration of tables
|
199 |
* Add caching to solve the problem of importing large tables
|
@@ -206,7 +225,6 @@ Important! Shortcode must be inserted in a text editor page, and not in the visu
|
|
206 |
* Change "Insert picture" toolbar button to "Insert media"
|
207 |
* Minor issues fix
|
208 |
|
209 |
-
|
210 |
= 1.8.4 / 30.05.2018 =
|
211 |
* Add of option to plugin settings: Disable WP Footer Fix
|
212 |
* Implemented automatic updating of diagrams when changing data in a table
|
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 |
|
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
|
200 |
+
* Fixes for optioon Source - Database
|
201 |
+
* Added the ability to edit database table data through the frontend fields
|
202 |
+
* Added the ability to create diagrams for cells with shortcodes
|
203 |
+
* Fix underline position by exporting to pdf
|
204 |
+
* Fix of dynamically applying of diagram's options to diagram preview
|
205 |
+
* Add support Strict Matching Option for SSP
|
206 |
+
* Fix of displaying merged cells in table footer
|
207 |
+
* Fix for GlobalSearch
|
208 |
+
|
209 |
+
= 1.8.6 / 03.07.2018 =
|
210 |
+
* fix code for IE
|
211 |
+
* Disabled Save button until the data loaded
|
212 |
+
* Added Vietnamese translation
|
213 |
+
* Add Server-side Processing as an option and optimize import of the large tables
|
214 |
+
* Minor issues fix
|
215 |
+
|
216 |
= 1.8.5 / 21.06.2018 =
|
217 |
* Added mass migration of tables
|
218 |
* Add caching to solve the problem of importing large tables
|
225 |
* Change "Insert picture" toolbar button to "Insert media"
|
226 |
* Minor issues fix
|
227 |
|
|
|
228 |
= 1.8.4 / 30.05.2018 =
|
229 |
* Add of option to plugin settings: Disable WP Footer Fix
|
230 |
* Implemented automatic updating of diagrams when changing data in a table
|
src/SupsysticTables/Core/Module.php
CHANGED
@@ -16,7 +16,7 @@ class SupsysticTables_Core_Module extends SupsysticTables_Core_BaseModule
|
|
16 |
|
17 |
private $frontendMethods = array(
|
18 |
'ajax' => array(
|
19 |
-
'tables' => array('saveEditableFields')
|
20 |
),
|
21 |
'post' => array(
|
22 |
'importer' => array('import'),
|
@@ -462,8 +462,20 @@ class SupsysticTables_Core_Module extends SupsysticTables_Core_BaseModule
|
|
462 |
$oldVersion = get_option($optionName);
|
463 |
|
464 |
if (version_compare($oldVersion, $currentVersion) === -1) {
|
465 |
-
|
466 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
467 |
}
|
468 |
|
469 |
$revision = array(
|
@@ -475,7 +487,25 @@ class SupsysticTables_Core_Module extends SupsysticTables_Core_BaseModule
|
|
475 |
return;
|
476 |
}
|
477 |
|
478 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
479 |
$core = $this->getModelsFactory()->get('core');
|
480 |
$updatesPath = $this->getLocation() . '/updates';
|
481 |
|
@@ -503,7 +533,7 @@ class SupsysticTables_Core_Module extends SupsysticTables_Core_BaseModule
|
|
503 |
}
|
504 |
|
505 |
update_option($config->get('revision_key'), $revision['current']);
|
506 |
-
|
507 |
|
508 |
private function registerTwigFunctions()
|
509 |
{
|
16 |
|
17 |
private $frontendMethods = array(
|
18 |
'ajax' => array(
|
19 |
+
'tables' => array('saveEditableFields', 'getPageRows')
|
20 |
),
|
21 |
'post' => array(
|
22 |
'importer' => array('import'),
|
462 |
$oldVersion = get_option($optionName);
|
463 |
|
464 |
if (version_compare($oldVersion, $currentVersion) === -1) {
|
465 |
+
if (function_exists('is_multisite') && is_multisite()) {
|
466 |
+
global $wpdb;
|
467 |
+
$blog_id = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs");
|
468 |
+
foreach ($blog_id as $id) {
|
469 |
+
if (switch_to_blog($id)) {
|
470 |
+
$this->cleanTablesCache();
|
471 |
+
update_option($optionName, $currentVersion);
|
472 |
+
restore_current_blog();
|
473 |
+
}
|
474 |
+
}
|
475 |
+
} else {
|
476 |
+
$this->cleanTablesCache();
|
477 |
+
update_option($optionName, $currentVersion);
|
478 |
+
}
|
479 |
}
|
480 |
|
481 |
$revision = array(
|
487 |
return;
|
488 |
}
|
489 |
|
490 |
+
if (function_exists('is_multisite') && is_multisite()) {
|
491 |
+
global $wpdb;
|
492 |
+
$blog_id = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs");
|
493 |
+
foreach ($blog_id as $id) {
|
494 |
+
if (switch_to_blog($id)) {
|
495 |
+
$this->makeDbUpdate($revision);
|
496 |
+
restore_current_blog();
|
497 |
+
}
|
498 |
+
}
|
499 |
+
} else {
|
500 |
+
$this->makeDbUpdate($revision);
|
501 |
+
}
|
502 |
+
}
|
503 |
+
|
504 |
+
private function makeDbUpdate($revision) {
|
505 |
+
$environment = $this->getEnvironment();
|
506 |
+
$config = $environment->getConfig();
|
507 |
+
|
508 |
+
/** @var SupsysticTables_Core_Model_Core $core */
|
509 |
$core = $this->getModelsFactory()->get('core');
|
510 |
$updatesPath = $this->getLocation() . '/updates';
|
511 |
|
533 |
}
|
534 |
|
535 |
update_option($config->get('revision_key'), $revision['current']);
|
536 |
+
}
|
537 |
|
538 |
private function registerTwigFunctions()
|
539 |
{
|
src/SupsysticTables/Core/assets/js/core.js
CHANGED
@@ -1,6 +1,7 @@
|
|
1 |
if(typeof(SDT_DATA) == 'undefined') {
|
2 |
var SDT_DATA = {};
|
3 |
}
|
|
|
4 |
|
5 |
(function (vendor, $, window) {
|
6 |
|
@@ -207,6 +208,7 @@ if(typeof(SDT_DATA) == 'undefined') {
|
|
207 |
searching: false,
|
208 |
stateSave: false,
|
209 |
api: true,
|
|
|
210 |
initComplete: callback,
|
211 |
headerCallback: function( thead, data, start, end, display ) {
|
212 |
$(thead).closest('thead').find('th').each(function() {
|
@@ -219,6 +221,9 @@ if(typeof(SDT_DATA) == 'undefined') {
|
|
219 |
});
|
220 |
}
|
221 |
};
|
|
|
|
|
|
|
222 |
|
223 |
// Fix of correct displaying of tables with hidden rows / columns for tables without headers.
|
224 |
if (!$table.data('head')) {
|
@@ -349,11 +354,11 @@ if(typeof(SDT_DATA) == 'undefined') {
|
|
349 |
});
|
350 |
}
|
351 |
if (searchingSettings.columnSearch && $table.find('tfoot').find('input').length == 0) {
|
352 |
-
var tds = $table.find('
|
353 |
ths = '';
|
354 |
|
355 |
for (var i = 0; i < tds.length; i++) {
|
356 |
-
|
357 |
}
|
358 |
if (ths.length > 0) {
|
359 |
if($table.find('tfoot').length == 0) {
|
@@ -439,6 +444,11 @@ if(typeof(SDT_DATA) == 'undefined') {
|
|
439 |
}
|
440 |
}
|
441 |
}, 150));
|
|
|
|
|
|
|
|
|
|
|
442 |
}).trigger('resize');
|
443 |
} else if (responsiveMode === 1) {
|
444 |
// Responsive Mode: Automatic Column Hiding
|
@@ -476,13 +486,22 @@ if(typeof(SDT_DATA) == 'undefined') {
|
|
476 |
}
|
477 |
};
|
478 |
$table.on('responsive-resize.dt', function(event, api, columns) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
479 |
if ($table.width() > $table.parent().width()) {
|
480 |
api.responsive.recalc();
|
481 |
return;
|
482 |
}
|
483 |
for (var i = 0, len = columns.length; i < len; i++) {
|
484 |
if (columns[i]) {
|
485 |
-
|
486 |
var $this = $(this);
|
487 |
var $cell = $(api.cell(
|
488 |
$this.data('cell-row'),
|
@@ -549,13 +568,132 @@ if(typeof(SDT_DATA) == 'undefined') {
|
|
549 |
}
|
550 |
});
|
551 |
config.language = translation;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
552 |
$table.trigger('beforeInitializeTable', $table);
|
553 |
-
tableInstance = $table.dataTable($.extend({}, defaultFeatures, config, reinit));
|
554 |
tableInstance.table_id = $table.data('id');
|
555 |
tableInstance.table_view_id = $table.data('view-id');
|
556 |
tableInstance.fnFakeRowspan();
|
557 |
self._checkOnClickPopups($table);
|
558 |
|
|
|
|
|
|
|
|
|
|
|
|
|
559 |
if(addInstance) {
|
560 |
this.setTableInstance(tableInstance);
|
561 |
}
|
@@ -601,7 +739,7 @@ if(typeof(SDT_DATA) == 'undefined') {
|
|
601 |
|
602 |
$(document).on('click', '.paginate_button', function () {
|
603 |
setTimeout(function() {
|
604 |
-
|
605 |
self.formatDataAtTable($table, true);
|
606 |
}, 50);
|
607 |
});
|
@@ -649,6 +787,9 @@ if(typeof(SDT_DATA) == 'undefined') {
|
|
649 |
self.setAllFields($table, $editableFields, $selectableFields);
|
650 |
} else {
|
651 |
self.createEditableFields($table, $editableFields);
|
|
|
|
|
|
|
652 |
}
|
653 |
$table.on('init.dt', function() {
|
654 |
$table.on('responsive-resize.dt responsive-display.dt draw.dt', function() {
|
@@ -690,6 +831,9 @@ if(typeof(SDT_DATA) == 'undefined') {
|
|
690 |
}else{
|
691 |
tBody.removeStyle('border-bottom');
|
692 |
}
|
|
|
|
|
|
|
693 |
}).trigger('resize');
|
694 |
|
695 |
// need resize twice to get better frontend view
|
@@ -772,6 +916,19 @@ if(typeof(SDT_DATA) == 'undefined') {
|
|
772 |
}
|
773 |
}
|
774 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
775 |
function b64DecodeUnicode(str) {
|
776 |
return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {
|
777 |
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
@@ -779,6 +936,57 @@ if(typeof(SDT_DATA) == 'undefined') {
|
|
779 |
}
|
780 |
});
|
781 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
782 |
// Callback for executing script after table is initialized
|
783 |
vendor[appName].executeScript = (function(table) {
|
784 |
var $table = (table instanceof $ ? table : $(table)),
|
1 |
if(typeof(SDT_DATA) == 'undefined') {
|
2 |
var SDT_DATA = {};
|
3 |
}
|
4 |
+
var g_stbServerSideProcessing = false;
|
5 |
|
6 |
(function (vendor, $, window) {
|
7 |
|
208 |
searching: false,
|
209 |
stateSave: false,
|
210 |
api: true,
|
211 |
+
retrieve: true,
|
212 |
initComplete: callback,
|
213 |
headerCallback: function( thead, data, start, end, display ) {
|
214 |
$(thead).closest('thead').find('th').each(function() {
|
221 |
});
|
222 |
}
|
223 |
};
|
224 |
+
if($table.data('server-side-processing') && $table.data('server-side-processing') == 'on') {
|
225 |
+
g_stbServerSideProcessing = true;
|
226 |
+
}
|
227 |
|
228 |
// Fix of correct displaying of tables with hidden rows / columns for tables without headers.
|
229 |
if (!$table.data('head')) {
|
354 |
});
|
355 |
}
|
356 |
if (searchingSettings.columnSearch && $table.find('tfoot').find('input').length == 0) {
|
357 |
+
var tds = $table.find('thead tr:first').find('th'),
|
358 |
ths = '';
|
359 |
|
360 |
for (var i = 0; i < tds.length; i++) {
|
361 |
+
ths += '<th><input type="text" /></th>';
|
362 |
}
|
363 |
if (ths.length > 0) {
|
364 |
if($table.find('tfoot').length == 0) {
|
444 |
}
|
445 |
}
|
446 |
}, 150));
|
447 |
+
if(g_stbServerSideProcessing) {
|
448 |
+
$table.find('td').each(function() {
|
449 |
+
$(this).css({'width': '','min-width': ''});
|
450 |
+
});
|
451 |
+
}
|
452 |
}).trigger('resize');
|
453 |
} else if (responsiveMode === 1) {
|
454 |
// Responsive Mode: Automatic Column Hiding
|
486 |
}
|
487 |
};
|
488 |
$table.on('responsive-resize.dt', function(event, api, columns) {
|
489 |
+
if(typeof api == 'undefined' || typeof columns == 'undefined') {
|
490 |
+
var tbl = $(this),
|
491 |
+
instance = vendor[appName].getTableInstanceById(tbl.data('id'));
|
492 |
+
|
493 |
+
if(instance) {
|
494 |
+
api = typeof api != 'undefined' ? api : instance.api();
|
495 |
+
columns = typeof columns != 'undefined' ? columns : instance.api().columns();
|
496 |
+
}
|
497 |
+
}
|
498 |
if ($table.width() > $table.parent().width()) {
|
499 |
api.responsive.recalc();
|
500 |
return;
|
501 |
}
|
502 |
for (var i = 0, len = columns.length; i < len; i++) {
|
503 |
if (columns[i]) {
|
504 |
+
$table.find('tr > td.collapsed-cell-holder[data-cell-column="' + i + '"]').each(function(index, el) {
|
505 |
var $this = $(this);
|
506 |
var $cell = $(api.cell(
|
507 |
$this.data('cell-row'),
|
568 |
}
|
569 |
});
|
570 |
config.language = translation;
|
571 |
+
|
572 |
+
var ajaxSource = {};
|
573 |
+
|
574 |
+
if(g_stbServerSideProcessing) {
|
575 |
+
var route = {"action" : "getPageRows", "module": "tables"},
|
576 |
+
loadedRows = [],
|
577 |
+
loadedCells = [],
|
578 |
+
headerRowsCount = ($table.data('head') == 'on' ? $table.data('head-rows-count') : 0),
|
579 |
+
footerRowsCount = ($table.data('foot') == 'on' ? $table.data('foot-custom-rows-count') : 0);
|
580 |
+
ajaxSource = {
|
581 |
+
processing: true,
|
582 |
+
serverSide: true,
|
583 |
+
ajax: {
|
584 |
+
url: window.ajaxurl ? window.ajaxurl : ajax_obj.ajaxurl,
|
585 |
+
type: 'POST',
|
586 |
+
data: {
|
587 |
+
action: "supsystic-tables",
|
588 |
+
route: route,
|
589 |
+
id: $table.data('id'),
|
590 |
+
searchParams: searchingSettings,
|
591 |
+
searchValue: function () {
|
592 |
+
var input = $('#' + $table.attr('id') + '_filter.dataTables_filter').find('input');
|
593 |
+
return (input.length ? input.val() : '');
|
594 |
+
},
|
595 |
+
header: headerRowsCount,
|
596 |
+
footer: footerRowsCount},
|
597 |
+
dataFilter: function(data){
|
598 |
+
var json = jQuery.parseJSON(data),
|
599 |
+
rows = $(json.rows).find('tr'),
|
600 |
+
aData = [];
|
601 |
+
|
602 |
+
loadedRows = [];
|
603 |
+
loadedCells = [];
|
604 |
+
for(var i = 0; i < rows.length; i++) {
|
605 |
+
var row = rows[i];
|
606 |
+
loadedRows.push(row.attributes);
|
607 |
+
var cells = $(row).find('td'),
|
608 |
+
attrs = [],
|
609 |
+
vals = [];
|
610 |
+
for(var j = 0; j < cells.length; j++) {
|
611 |
+
var cell = cells[j];
|
612 |
+
attrs.push(cell.attributes);
|
613 |
+
vals.push(cell.innerHTML);
|
614 |
+
}
|
615 |
+
loadedCells.push(attrs);
|
616 |
+
aData.push(vals);
|
617 |
+
}
|
618 |
+
json.rows = '';
|
619 |
+
json.data = aData;
|
620 |
+
return JSON.stringify(json);
|
621 |
+
}
|
622 |
+
},
|
623 |
+
createdRow: function (row, data, dataIndex) {
|
624 |
+
if(typeof(loadedRows[dataIndex]) != 'undefined') {
|
625 |
+
$(loadedRows[dataIndex]).each(function () {
|
626 |
+
$(row).attr(this.name, this.value);
|
627 |
+
});
|
628 |
+
}
|
629 |
+
}
|
630 |
+
}
|
631 |
+
if(typeof(config.aoColumnDefs) == 'undefined') {
|
632 |
+
config.aoColumnDefs = [];
|
633 |
+
}
|
634 |
+
config.aoColumnDefs.push({
|
635 |
+
targets: '_all',
|
636 |
+
cellType: 'td',
|
637 |
+
createdCell: function (td, cellData, rowData, row, col) {
|
638 |
+
if(typeof(loadedCells[row][col]) != 'undefined') {
|
639 |
+
var rowspan = 1,
|
640 |
+
colspan = 1;
|
641 |
+
$(loadedCells[row][col]).each(function () {
|
642 |
+
if (this.name == 'data-rowspan' && this.value > 1) {
|
643 |
+
rowspan = this.value;
|
644 |
+
}
|
645 |
+
if(this.name == 'data-colspan' && this.value > 1) {
|
646 |
+
colspan = this.value;
|
647 |
+
}
|
648 |
+
});
|
649 |
+
if(rowspan > 1 || colspan > 1) {
|
650 |
+
var stopRow = row + parseInt(rowspan),
|
651 |
+
stopCol = col + parseInt(colspan),
|
652 |
+
startRow = colspan > 1 ? row : row + 1,
|
653 |
+
hide;
|
654 |
+
if(stopRow >= loadedCells.length) {
|
655 |
+
stopRow = loadedCells.length;
|
656 |
+
}
|
657 |
+
if(stopCol >= loadedCells[row].length) {
|
658 |
+
stopCol = loadedCells[row].length;
|
659 |
+
}
|
660 |
+
|
661 |
+
for(i = startRow; i < stopRow; i++) {
|
662 |
+
if(i > row) {
|
663 |
+
hide = document.createAttribute('data-hide');
|
664 |
+
hide.value = 'true';
|
665 |
+
loadedCells[i][col].setNamedItem(hide);
|
666 |
+
}
|
667 |
+
for(j = col + 1; j < stopCol; j++) {
|
668 |
+
hide = document.createAttribute('data-hide');
|
669 |
+
hide.value = 'true';
|
670 |
+
loadedCells[i][j].setNamedItem(hide);
|
671 |
+
}
|
672 |
+
}
|
673 |
+
}
|
674 |
+
$(loadedCells[row][col]).each(function () {
|
675 |
+
if(this.name != 'data-formula') {
|
676 |
+
$(td).attr(this.name, this.value);
|
677 |
+
}
|
678 |
+
});
|
679 |
+
}
|
680 |
+
}
|
681 |
+
});
|
682 |
+
}
|
683 |
+
|
684 |
$table.trigger('beforeInitializeTable', $table);
|
685 |
+
tableInstance = $table.dataTable($.extend({}, defaultFeatures, config, ajaxSource, reinit));
|
686 |
tableInstance.table_id = $table.data('id');
|
687 |
tableInstance.table_view_id = $table.data('view-id');
|
688 |
tableInstance.fnFakeRowspan();
|
689 |
self._checkOnClickPopups($table);
|
690 |
|
691 |
+
if(g_stbServerSideProcessing) {
|
692 |
+
$('.dataTables_processing').css('z-index', '10');
|
693 |
+
} else {
|
694 |
+
self.setColumnSearch($table);
|
695 |
+
}
|
696 |
+
|
697 |
if(addInstance) {
|
698 |
this.setTableInstance(tableInstance);
|
699 |
}
|
739 |
|
740 |
$(document).on('click', '.paginate_button', function () {
|
741 |
setTimeout(function() {
|
742 |
+
_ruleJS.init();
|
743 |
self.formatDataAtTable($table, true);
|
744 |
}, 50);
|
745 |
});
|
787 |
self.setAllFields($table, $editableFields, $selectableFields);
|
788 |
} else {
|
789 |
self.createEditableFields($table, $editableFields);
|
790 |
+
}
|
791 |
+
if(typeof(self.setImgLightbox) == 'function'){
|
792 |
+
self.setImgLightbox($table);
|
793 |
}
|
794 |
$table.on('init.dt', function() {
|
795 |
$table.on('responsive-resize.dt responsive-display.dt draw.dt', function() {
|
831 |
}else{
|
832 |
tBody.removeStyle('border-bottom');
|
833 |
}
|
834 |
+
if(g_stbServerSideProcessing) {
|
835 |
+
self.getTableInstanceByViewId(viewId).fnAdjustColumnSizing(false);
|
836 |
+
}
|
837 |
}).trigger('resize');
|
838 |
|
839 |
// need resize twice to get better frontend view
|
916 |
}
|
917 |
}
|
918 |
|
919 |
+
if(g_stbServerSideProcessing) {
|
920 |
+
$table.on('draw.dt', function (e) {
|
921 |
+
var searching = $table.data('searching-settings');
|
922 |
+
if(searching && ('columnSearch' in searching) && searching.columnSearch == 'on') {
|
923 |
+
self.setColumnSearch($table);
|
924 |
+
}
|
925 |
+
self.getTableInstanceByViewId(viewId).fnFakeRowspan();
|
926 |
+
if(responsiveMode === 0 || responsiveMode === 2) {
|
927 |
+
$(window).trigger('resize');
|
928 |
+
}
|
929 |
+
}).trigger('draw.dt');
|
930 |
+
}
|
931 |
+
|
932 |
function b64DecodeUnicode(str) {
|
933 |
return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {
|
934 |
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
936 |
}
|
937 |
});
|
938 |
|
939 |
+
vendor[appName].setColumnSearch = (function(table) {
|
940 |
+
var dtable = $('#supsystic-table-' + table.data('id') + '[data-view-id="' + table.data('view-id') + '"]'),
|
941 |
+
tfoot = $('#supsystic-table-' + table.data('view-id')).find('div .dataTables_scrollFootInner table '),
|
942 |
+
inputs = (tfoot.length == 0 ? dtable.find('tfoot tr:last input') : tfoot.eq(0).find('tfoot tr:last input'));
|
943 |
+
|
944 |
+
if(inputs.length == 0) {
|
945 |
+
return;
|
946 |
+
}
|
947 |
+
dtable.DataTable().columns().every( function (colIdx) {
|
948 |
+
var that = this;
|
949 |
+
inputs.eq(colIdx).off('keyup.dtg change.dtg').on('keyup.dtg change.dtg', function () {
|
950 |
+
if ( that.search() !== this.value ) {
|
951 |
+
that
|
952 |
+
.search (this.value.replace(/;/g, "|"), true, false)
|
953 |
+
.draw ();
|
954 |
+
}
|
955 |
+
});
|
956 |
+
});
|
957 |
+
var div = $('#supsystic-table-' + table.data('view-id')),
|
958 |
+
leftTable = div.find('.DTFC_LeftBodyWrapper').find('table'),
|
959 |
+
rightTable = div.find('.DTFC_RightBodyWrapper').find('table'),
|
960 |
+
self = vendor[appName];
|
961 |
+
|
962 |
+
if(leftTable.length) {
|
963 |
+
var leftFoot = div.find('.DTFC_LeftFootWrapper').find('table'),
|
964 |
+
leftInputs = (leftFoot.length == 0 ? leftTable.find('tfoot tr:last input') : leftFoot.eq(0).find('tfoot tr:last input'));
|
965 |
+
|
966 |
+
leftInputs.each( function (colIdx) {
|
967 |
+
self.setCopyEvents(this, inputs.eq(colIdx).data('events'));
|
968 |
+
});
|
969 |
+
}
|
970 |
+
if(rightTable.length) {
|
971 |
+
var rightFoot = div.find('.DTFC_RightFootWrapper').find('table'),
|
972 |
+
rightInputs = (rightFoot.length == 0 ? rightTable.find('tfoot tr:last input') : rightFoot.eq(0).find('tfoot tr:last input')),
|
973 |
+
cntRight = rightInputs.length,
|
974 |
+
cntInputs = inputs.length;
|
975 |
+
|
976 |
+
rightInputs.each( function (colIdx) {
|
977 |
+
self.setCopyEvents(this, inputs.eq(cntInputs - cntRight + colIdx).data('events'));
|
978 |
+
});
|
979 |
+
}
|
980 |
+
});
|
981 |
+
|
982 |
+
vendor[appName].setCopyEvents = (function(obj, events) {
|
983 |
+
$.each(events, function (event, handlers) {
|
984 |
+
$.each(handlers, function (j, handler) {
|
985 |
+
$(obj).unbind(event).bind(event, handler);
|
986 |
+
});
|
987 |
+
});
|
988 |
+
});
|
989 |
+
|
990 |
// Callback for executing script after table is initialized
|
991 |
vendor[appName].executeScript = (function(table) {
|
992 |
var $table = (table instanceof $ ? table : $(table)),
|
src/SupsysticTables/Promo/Module.php
CHANGED
@@ -21,21 +21,19 @@ class SupsysticTables_Promo_Module extends SupsysticTables_Core_BaseModule
|
|
21 |
}
|
22 |
|
23 |
public function loadAdminPromoAssets() {
|
24 |
-
$modulePath = untrailingslashit(plugin_dir_url(__FILE__));
|
25 |
-
|
26 |
if (!get_user_meta(get_current_user_id(), 'supsystic-tables-tutorial_was_showed', true)) {
|
27 |
-
wp_enqueue_script(
|
28 |
-
'supsystic-tables-step-tutorial',
|
29 |
-
$modulePath . '/assets/js/tutorial.js',
|
30 |
-
array('wp-pointer')
|
31 |
-
);
|
32 |
-
|
33 |
add_action('admin_enqueue_scripts', array($this, 'enqueueTutorialAssets'));
|
34 |
}
|
35 |
}
|
36 |
|
37 |
public function enqueueTutorialAssets()
|
38 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
wp_enqueue_style('wp-pointer');
|
40 |
|
41 |
$data = array(
|
21 |
}
|
22 |
|
23 |
public function loadAdminPromoAssets() {
|
|
|
|
|
24 |
if (!get_user_meta(get_current_user_id(), 'supsystic-tables-tutorial_was_showed', true)) {
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
add_action('admin_enqueue_scripts', array($this, 'enqueueTutorialAssets'));
|
26 |
}
|
27 |
}
|
28 |
|
29 |
public function enqueueTutorialAssets()
|
30 |
{
|
31 |
+
$modulePath = untrailingslashit(plugin_dir_url(__FILE__));
|
32 |
+
wp_enqueue_script(
|
33 |
+
'supsystic-tables-step-tutorial',
|
34 |
+
$modulePath . '/assets/js/tutorial.js',
|
35 |
+
array('wp-pointer')
|
36 |
+
);
|
37 |
wp_enqueue_style('wp-pointer');
|
38 |
|
39 |
$data = array(
|
src/SupsysticTables/Tables/Controller.php
CHANGED
@@ -118,6 +118,8 @@ class SupsysticTables_Tables_Controller extends SupsysticTables_Core_BaseControl
|
|
118 |
$table->settings['features']['after_table_loaded_script'] = base64_decode($table->settings['features']['after_table_loaded_script']);
|
119 |
}
|
120 |
|
|
|
|
|
121 |
return $this->response(
|
122 |
'@tables/view.twig',
|
123 |
array(
|
@@ -127,6 +129,7 @@ class SupsysticTables_Tables_Controller extends SupsysticTables_Core_BaseControl
|
|
127 |
'rows' => $request->query->get('rows', 5)
|
128 |
),
|
129 |
'translations' => $languages->getTranslations(),
|
|
|
130 |
)
|
131 |
);
|
132 |
}
|
@@ -152,6 +155,67 @@ class SupsysticTables_Tables_Controller extends SupsysticTables_Core_BaseControl
|
|
152 |
return $this->ajaxSuccess();
|
153 |
}
|
154 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
155 |
/**
|
156 |
* Returns the table columns.
|
157 |
* @param Rsc_Http_Request $request
|
@@ -200,6 +264,27 @@ class SupsysticTables_Tables_Controller extends SupsysticTables_Core_BaseControl
|
|
200 |
return $this->ajaxSuccess();
|
201 |
}
|
202 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
/**
|
204 |
* Returns the table rows.
|
205 |
* @param Rsc_Http_Request $request
|
@@ -210,12 +295,14 @@ class SupsysticTables_Tables_Controller extends SupsysticTables_Core_BaseControl
|
|
210 |
/** @var SupsysticTables_Tables_Model_Tables $tables */
|
211 |
$tables = $this->getModel('tables');
|
212 |
$id = $request->post->get('id');
|
|
|
|
|
213 |
|
214 |
try {
|
215 |
$this->getEnvironment()->getModule('tables')->setIniLimits();
|
216 |
|
217 |
return $this->ajaxSuccess(array(
|
218 |
-
'rows' => $tables->getRows($id)
|
219 |
));
|
220 |
} catch (Exception $e) {
|
221 |
return $this->ajaxError($e->getMessage());
|
@@ -356,9 +443,8 @@ class SupsysticTables_Tables_Controller extends SupsysticTables_Core_BaseControl
|
|
356 |
/** @var SupsysticTables_Tables_Model_Tables $tables */
|
357 |
$tables = $this->getModel('tables');
|
358 |
$this->getEnvironment()->getModule('tables')->setIniLimits();
|
359 |
-
$table = $tables->getById($id);
|
360 |
|
361 |
-
return $this->ajaxSuccess(array('meta' => $
|
362 |
}
|
363 |
|
364 |
/**
|
@@ -420,6 +506,7 @@ class SupsysticTables_Tables_Controller extends SupsysticTables_Core_BaseControl
|
|
420 |
$title = $request->post->get('title');
|
421 |
$tableModel = $this->getModel('tables');
|
422 |
$clonedTable = $tableModel->getById($id);
|
|
|
423 |
|
424 |
try {
|
425 |
if (!$this->isValidTitle($title)) {
|
118 |
$table->settings['features']['after_table_loaded_script'] = base64_decode($table->settings['features']['after_table_loaded_script']);
|
119 |
}
|
120 |
|
121 |
+
$settings = get_option($this->getConfig()->get('db_prefix') . 'settings');
|
122 |
+
|
123 |
return $this->response(
|
124 |
'@tables/view.twig',
|
125 |
array(
|
129 |
'rows' => $request->query->get('rows', 5)
|
130 |
),
|
131 |
'translations' => $languages->getTranslations(),
|
132 |
+
'settings' => $settings
|
133 |
)
|
134 |
);
|
135 |
}
|
155 |
return $this->ajaxSuccess();
|
156 |
}
|
157 |
|
158 |
+
/**
|
159 |
+
* Get Data for AJAX paging.
|
160 |
+
* @param Rsc_Http_Request $request
|
161 |
+
* @return Rsc_Http_Response
|
162 |
+
*/
|
163 |
+
public function getPageRowsAction(Rsc_Http_Request $request)
|
164 |
+
{
|
165 |
+
|
166 |
+
$id = (int)$request->post->get('id');
|
167 |
+
$tables = $this->getModel('tables');
|
168 |
+
|
169 |
+
try {
|
170 |
+
$this->getEnvironment()->getModule('tables')->setIniLimits();
|
171 |
+
|
172 |
+
$start = $request->post->get('start');
|
173 |
+
$length = $request->post->get('length');
|
174 |
+
$searchAll = $request->post->get('search');
|
175 |
+
$columns = $request->post->get('columns');
|
176 |
+
$searchParams = $request->post->get('searchParams');
|
177 |
+
$searchValue = $request->post->get('searchValue');
|
178 |
+
if (isset($searchValue) && $searchValue != '') {
|
179 |
+
$searchAll['value'] = $searchValue;
|
180 |
+
}
|
181 |
+
|
182 |
+
$searchCols = array();
|
183 |
+
foreach ($columns as $j => $column) {
|
184 |
+
if (isset($column['search']) && isset($column['search']['value'])) {
|
185 |
+
$search = $column['search']['value'];
|
186 |
+
if($search != '') {
|
187 |
+
$list = explode('|', $search);
|
188 |
+
if (!in_array('', $list)) {
|
189 |
+
$searchCols[$j] = $list;
|
190 |
+
}
|
191 |
+
}
|
192 |
+
}
|
193 |
+
}
|
194 |
+
$order = $request->post->get('order');
|
195 |
+
$orderCol = (isset($order[0]) && isset($order[0]['column']) ? $order[0]['column'] : false);
|
196 |
+
$orderAsc = (isset($order[0]) && isset($order[0]['dir']) && $order[0]['dir'] == 'asc');
|
197 |
+
$header = (int)$request->post->get('header');
|
198 |
+
$footer = (int)$request->post->get('footer');
|
199 |
+
|
200 |
+
$rows = $tables->getRowsByPart($id, ($searchAll['value'] == '' ? false : $searchAll['value']), $searchCols, $orderCol, $orderAsc, $start, $length, $header, $footer, $searchParams);
|
201 |
+
|
202 |
+
$table = $tables->getById($id);
|
203 |
+
$table->rows = $rows['data'];
|
204 |
+
|
205 |
+
$module = $this->getEnvironment()->getModule('tables');
|
206 |
+
$module->setIniLimits();
|
207 |
+
$module->setDataForPage($table);
|
208 |
+
|
209 |
+
return $this->ajaxSuccess(array('draw' => $request->post->get('draw'),
|
210 |
+
'recordsTotal' => $rows['recordsTotal'],
|
211 |
+
'recordsFiltered' => $rows['recordsFiltered'],
|
212 |
+
'rows' => $module->render($id)));
|
213 |
+
|
214 |
+
} catch (Exception $e) {
|
215 |
+
return $this->ajaxError($e->getMessage());
|
216 |
+
}
|
217 |
+
}
|
218 |
+
|
219 |
/**
|
220 |
* Returns the table columns.
|
221 |
* @param Rsc_Http_Request $request
|
264 |
return $this->ajaxSuccess();
|
265 |
}
|
266 |
|
267 |
+
/**
|
268 |
+
* Returns count of table rows.
|
269 |
+
* @param Rsc_Http_Request $request
|
270 |
+
* @return Rsc_Http_Response
|
271 |
+
*/
|
272 |
+
public function getCountRowsAction(Rsc_Http_Request $request)
|
273 |
+
{
|
274 |
+
$tables = $this->getModel('tables');
|
275 |
+
$id = $request->post->get('id');
|
276 |
+
|
277 |
+
try {
|
278 |
+
$this->getEnvironment()->getModule('tables')->setIniLimits();
|
279 |
+
|
280 |
+
return $this->ajaxSuccess(array(
|
281 |
+
'countRows' => $tables->getCountRows($id)
|
282 |
+
));
|
283 |
+
} catch (Exception $e) {
|
284 |
+
return $this->ajaxError($e->getMessage());
|
285 |
+
}
|
286 |
+
}
|
287 |
+
|
288 |
/**
|
289 |
* Returns the table rows.
|
290 |
* @param Rsc_Http_Request $request
|
295 |
/** @var SupsysticTables_Tables_Model_Tables $tables */
|
296 |
$tables = $this->getModel('tables');
|
297 |
$id = $request->post->get('id');
|
298 |
+
$limit = $request->post->get('limit');
|
299 |
+
$offset = $request->post->get('offset');
|
300 |
|
301 |
try {
|
302 |
$this->getEnvironment()->getModule('tables')->setIniLimits();
|
303 |
|
304 |
return $this->ajaxSuccess(array(
|
305 |
+
'rows' => $tables->getRows($id, isset($limit) ? $limit : 0, 'ASC', isset($offset) ? $offset : 0)
|
306 |
));
|
307 |
} catch (Exception $e) {
|
308 |
return $this->ajaxError($e->getMessage());
|
443 |
/** @var SupsysticTables_Tables_Model_Tables $tables */
|
444 |
$tables = $this->getModel('tables');
|
445 |
$this->getEnvironment()->getModule('tables')->setIniLimits();
|
|
|
446 |
|
447 |
+
return $this->ajaxSuccess(array('meta' => $tables->getMeta($id)));
|
448 |
}
|
449 |
|
450 |
/**
|
506 |
$title = $request->post->get('title');
|
507 |
$tableModel = $this->getModel('tables');
|
508 |
$clonedTable = $tableModel->getById($id);
|
509 |
+
$clonedTable->rows = $tableModel->getRows($id);
|
510 |
|
511 |
try {
|
512 |
if (!$this->isValidTitle($title)) {
|
src/SupsysticTables/Tables/Model/Tables.php
CHANGED
@@ -289,15 +289,22 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
|
|
289 |
/**
|
290 |
* Returns all table rows
|
291 |
* @param int $id Table id
|
|
|
|
|
|
|
292 |
* @return array
|
293 |
*/
|
294 |
-
public function getRows($id)
|
295 |
{
|
296 |
$query = $this->getQueryBuilder()
|
297 |
->select($this->getField('rows', 'data'))
|
298 |
->from($this->getTable('rows'))
|
299 |
->where('table_id', '=', (int)$id)
|
300 |
->orderBy($this->getField('rows', 'id'));
|
|
|
|
|
|
|
|
|
301 |
|
302 |
$rows = $this->db->get_results($query->build());
|
303 |
|
@@ -319,6 +326,218 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
|
|
319 |
return $rows;
|
320 |
}
|
321 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
322 |
/**
|
323 |
* Sets the part of rows for the table
|
324 |
* @param int $id Table id
|
@@ -378,6 +597,61 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
|
|
378 |
}
|
379 |
}
|
380 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
381 |
/**
|
382 |
* Sets the rows for the table
|
383 |
* @param int $id Table id
|
@@ -404,6 +678,26 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
|
|
404 |
}
|
405 |
}
|
406 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
407 |
/**
|
408 |
* Removes all table rows.
|
409 |
* @param int $id Table id
|
@@ -445,8 +739,6 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
|
|
445 |
*/
|
446 |
public function onTablesGet($table)
|
447 |
{
|
448 |
-
// This method load twice all rows in backend second call go via ajax.
|
449 |
-
// Need to fix.
|
450 |
if (null === $table) {
|
451 |
return $table;
|
452 |
}
|
@@ -454,14 +746,6 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
|
|
454 |
$table->view_id = $table->id . '_' . mt_rand(1, 99999);
|
455 |
$table->columns = $this->getColumns($table->id);
|
456 |
$table->settings = unserialize(htmlspecialchars_decode($table->settings, ENT_QUOTES));
|
457 |
-
$source = ($this->environment->isPro() && isset($table->settings['source']) ? $table->settings['source'] : '');
|
458 |
-
if(isset($source['database']) && $source['database'] == 'on' && isset($source['dbTable'])){
|
459 |
-
$core = $this->environment->getModule('core');
|
460 |
-
$dbTableModel = $core->getModelsFactory()->get('DBTables', 'tables');
|
461 |
-
$table->rows = $dbTableModel->getRows($source['dbTable'], isset($source['dbFields']) ? $source['dbFields'] : array());
|
462 |
-
} else {
|
463 |
-
$table->rows = $this->getRows($table->id);
|
464 |
-
}
|
465 |
|
466 |
// rev 41
|
467 |
if (property_exists($table, 'meta')) {
|
@@ -563,6 +847,26 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
|
|
563 |
return $result;
|
564 |
}
|
565 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
566 |
/**
|
567 |
* @param $tableIds
|
568 |
*
|
@@ -589,7 +893,7 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
|
|
589 |
if(preg_match_all('|\[supsystic-tables\s+id=[\'"]?(\d+)[\'"]?\s*?\]|',$content,$matches)) {
|
590 |
array_shift( $matches );
|
591 |
foreach($matches[0] as $matchedTableId) {
|
592 |
-
if (in_array( $matchedTableId,
|
593 |
$postIds[ $parsingPost->ID ]['tables'][] = $matchedTableId;
|
594 |
}
|
595 |
}
|
@@ -606,25 +910,34 @@ class SupsysticTables_Tables_Model_Tables extends SupsysticTables_Core_BaseModel
|
|
606 |
*/
|
607 |
public function getTableIdsBySearchTokens($tokens)
|
608 |
{
|
609 |
-
$
|
610 |
-
$
|
611 |
-
|
612 |
-
|
613 |
-
->
|
614 |
-
|
615 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
616 |
|
617 |
-
|
618 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
619 |
}
|
620 |
-
if(!empty($allTables)){
|
621 |
-
foreach($allTables as $table) {
|
622 |
-
$tableRows = $this->getRowsLike($table->id, $tokens);
|
623 |
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
}
|
629 |
}
|
630 |
return $tableIds;
|
289 |
/**
|
290 |
* Returns all table rows
|
291 |
* @param int $id Table id
|
292 |
+
* @param int $limit limit
|
293 |
+
* @param bool $asc
|
294 |
+
* @param int $offset offset
|
295 |
* @return array
|
296 |
*/
|
297 |
+
public function getRows($id, $limit = 0, $asc = true, $offset = 0)
|
298 |
{
|
299 |
$query = $this->getQueryBuilder()
|
300 |
->select($this->getField('rows', 'data'))
|
301 |
->from($this->getTable('rows'))
|
302 |
->where('table_id', '=', (int)$id)
|
303 |
->orderBy($this->getField('rows', 'id'));
|
304 |
+
|
305 |
+
if ($limit != 0){
|
306 |
+
$query->order($asc ? 'ASC' : 'DESC')->limit((int)$limit)->offset((int)$offset);
|
307 |
+
}
|
308 |
|
309 |
$rows = $this->db->get_results($query->build());
|
310 |
|
326 |
return $rows;
|
327 |
}
|
328 |
|
329 |
+
/**
|
330 |
+
* Returns table rows with Id
|
331 |
+
* @return array
|
332 |
+
*/
|
333 |
+
public function getRowsWithId($id, $limit = 0, $asc = true, $offset = 0, $raw = false)
|
334 |
+
{
|
335 |
+
$query = $this->getQueryBuilder()
|
336 |
+
->select('id, data')
|
337 |
+
->from($this->getTable('rows'))
|
338 |
+
->where('table_id', '=', (int)$id);
|
339 |
+
|
340 |
+
if ($limit != 0){
|
341 |
+
$query->order($asc ? 'ASC' : 'DESC')->limit((int)$limit)->offset((int)$offset);
|
342 |
+
}
|
343 |
+
$result = $this->db->get_results($query->build());
|
344 |
+
|
345 |
+
if ($this->db->last_error) {
|
346 |
+
throw new RuntimeException($this->db->last_error);
|
347 |
+
}
|
348 |
+
|
349 |
+
$rows = array();
|
350 |
+
if (count($result) > 0) {
|
351 |
+
foreach ($result as $index => $row) {
|
352 |
+
$rows[$row->id] = @unserialize($row->data);
|
353 |
+
}
|
354 |
+
}
|
355 |
+
if (!$raw) {
|
356 |
+
foreach ($rows as &$row) {
|
357 |
+
$row = $this->prepareRowsData($row, false);
|
358 |
+
}
|
359 |
+
}
|
360 |
+
|
361 |
+
return $rows;
|
362 |
+
}
|
363 |
+
|
364 |
+
/**
|
365 |
+
* Returns needed table rows
|
366 |
+
* @return array
|
367 |
+
*/
|
368 |
+
public function getNeededRows($id, &$settings, $isSSP, $all = false)
|
369 |
+
{
|
370 |
+
$source = ($this->environment->isPro() && isset($settings['source']) ? $settings['source'] : '');
|
371 |
+
|
372 |
+
if (isset($source['database']) && $source['database'] == 'on' && isset($source['dbTable'])){
|
373 |
+
$core = $this->environment->getModule('core');
|
374 |
+
$dbTableModel = $core->getModelsFactory()->get('DBTables', 'tables');
|
375 |
+
return $dbTableModel->getRowsData($settings);
|
376 |
+
}
|
377 |
+
if (!$all && $isSSP) {
|
378 |
+
$cntHead = 1;
|
379 |
+
$footers = array();
|
380 |
+
if (isset($settings['elements']['head']) && $settings['elements']['head'] == 'on' &&
|
381 |
+
isset($settings['headerRowsCount']) && $settings['headerRowsCount'] > 0) {
|
382 |
+
$cntHead = $this->getRows($id, $settings['headerRowsCount']);
|
383 |
+
}
|
384 |
+
$headers = $this->getRows($id, $cntHead);
|
385 |
+
if (isset($settings['elements']['foot']) && $settings['elements']['foot'] == 'on' &&
|
386 |
+
isset($settings['customFooter']) && $settings['customFooter'] == 'on' &&
|
387 |
+
isset($settings['footerRowsCount']) && $settings['footerRowsCount'] > 0) {
|
388 |
+
$footers = $this->getRows($id, $settings['footerRowsCount'], false);
|
389 |
+
}
|
390 |
+
return array_merge($headers, $footers);
|
391 |
+
}
|
392 |
+
return $this->getRows($id);
|
393 |
+
}
|
394 |
+
|
395 |
+
/**
|
396 |
+
* Returns count table rows
|
397 |
+
* @return int
|
398 |
+
*/
|
399 |
+
public function getCountRows($id)
|
400 |
+
{
|
401 |
+
$query = $this->getQueryBuilder()
|
402 |
+
->select('count(*)')
|
403 |
+
->from($this->getTable('rows'))
|
404 |
+
->where('table_id', '=', (int)$id);
|
405 |
+
|
406 |
+
$count = $this->db->get_row($query->build(), ARRAY_N);
|
407 |
+
|
408 |
+
if ($this->db->last_error) {
|
409 |
+
throw new RuntimeException($this->db->last_error);
|
410 |
+
}
|
411 |
+
|
412 |
+
return $count[0];
|
413 |
+
}
|
414 |
+
|
415 |
+
/**
|
416 |
+
* Calc rows for AJAX page
|
417 |
+
* @return array
|
418 |
+
*/
|
419 |
+
public function getRowsByPart($id, $searchAll, $searchCols, $orderCol, $orderAsc, $start, $length, $header, $footer, $searchParams)
|
420 |
+
{
|
421 |
+
$sort = $orderCol !== false;
|
422 |
+
$sorter = array();
|
423 |
+
$search = (sizeof($searchCols) > 0 || $searchAll !== false);
|
424 |
+
$isWord = (isset($searchParams['strictMatching']) && ($searchParams['strictMatching'] == 'on'));
|
425 |
+
if ($isWord) {
|
426 |
+
$searchAll = '~\b'.$searchAll.'~i';
|
427 |
+
}
|
428 |
+
|
429 |
+
$rawData = (!$sort && !$search);
|
430 |
+
|
431 |
+
$recordsTotal = $this->getCountRows($id);
|
432 |
+
$bodyStart = $header;
|
433 |
+
$bodyStop = $recordsTotal - $footer - 1;
|
434 |
+
$recordsTotal = $recordsTotal - $header - $footer;
|
435 |
+
|
436 |
+
$query = $this->getQueryBuilder()
|
437 |
+
->select('id, data')
|
438 |
+
->from($this->getTable('rows'))
|
439 |
+
->where('table_id', '=', (int)$id)
|
440 |
+
->orderBy($this->getField('rows', 'id'));
|
441 |
+
|
442 |
+
if ($rawData) {
|
443 |
+
$recordsFiltered = $recordsTotal;
|
444 |
+
$offset = $header + $start;
|
445 |
+
$limit = ($offset + $length - 1 > $bodyStop ? $bodyStop - $offset + 1: $length);
|
446 |
+
$query->limit($limit)->offset($offset);
|
447 |
+
} else {
|
448 |
+
$offset = $bodyStart;
|
449 |
+
$limit = 1000;
|
450 |
+
$query->limit($limit);
|
451 |
+
do {
|
452 |
+
$query->offset($offset);
|
453 |
+
$rows = $this->db->get_results($query->build());
|
454 |
+
if($this->db->last_error) {
|
455 |
+
throw new RuntimeException($this->db->last_error);
|
456 |
+
}
|
457 |
+
|
458 |
+
foreach ($rows as $i => $row) {
|
459 |
+
$values = $this->prepareRowsData(@unserialize($row->data), false);
|
460 |
+
$cells = $values['cells'];
|
461 |
+
$filterCols = true;
|
462 |
+
foreach ($searchCols as $j => $s) {
|
463 |
+
if (!$this->searchInValue($cells[$j]['data'], $s)) {
|
464 |
+
$filterCols = false;
|
465 |
+
break;
|
466 |
+
}
|
467 |
+
}
|
468 |
+
if (!$filterCols) continue;
|
469 |
+
|
470 |
+
$filterAll = $searchAll === false;
|
471 |
+
if (!$filterAll) {
|
472 |
+
foreach ($cells as $j => $cell) {
|
473 |
+
$filterAll = ($isWord ? preg_match($searchAll, $cell['data']) == 1 : stripos($cell['data'], $searchAll) !== false);
|
474 |
+
if ($filterAll) break;
|
475 |
+
}
|
476 |
+
}
|
477 |
+
if ($filterAll) {
|
478 |
+
$sorter[$row->id] = $cells[$orderCol]['data'];
|
479 |
+
}
|
480 |
+
}
|
481 |
+
unset($rows);
|
482 |
+
$offset += $limit;
|
483 |
+
} while ($offset < $bodyStop);
|
484 |
+
|
485 |
+
$recordsFiltered = count($sorter);
|
486 |
+
if ($sort) {
|
487 |
+
if ($orderAsc) {
|
488 |
+
asort($sorter);
|
489 |
+
} else {
|
490 |
+
arsort($sorter);
|
491 |
+
}
|
492 |
+
}
|
493 |
+
if ($start > 0 || $length > 0) {
|
494 |
+
$sorter = array_slice($sorter, $start, $length, true);
|
495 |
+
}
|
496 |
+
$list = '0,';
|
497 |
+
$num = 0;
|
498 |
+
foreach ($sorter as $i => $v) {
|
499 |
+
$list .= $i.',';
|
500 |
+
$sorter[$i] = $num;
|
501 |
+
$num++;
|
502 |
+
}
|
503 |
+
|
504 |
+
$query = $this->getQueryBuilder()
|
505 |
+
->select('id, data')
|
506 |
+
->from($this->getTable('rows'))
|
507 |
+
->where('table_id', '=', (int)$id)
|
508 |
+
->andWhere('id', 'IN', substr($list, 0, -1));
|
509 |
+
}
|
510 |
+
|
511 |
+
$rows = $this->db->get_results($query->build());
|
512 |
+
if ($this->db->last_error) {
|
513 |
+
throw new RuntimeException($this->db->last_error);
|
514 |
+
}
|
515 |
+
|
516 |
+
$num = 0;
|
517 |
+
$data = array();
|
518 |
+
foreach ($rows as $i => $row) {
|
519 |
+
$values = $this->prepareRowsData(@unserialize($row->data), false);
|
520 |
+
|
521 |
+
$rowId = $row->id;
|
522 |
+
$n = ($sort ? $sorter[$rowId] : $num++);
|
523 |
+
$data[$n] = $values;
|
524 |
+
}
|
525 |
+
|
526 |
+
if ($sort) {
|
527 |
+
ksort($data);
|
528 |
+
}
|
529 |
+
return array('data' => $data, 'recordsTotal' => $recordsTotal, 'recordsFiltered' => $recordsFiltered);
|
530 |
+
}
|
531 |
+
private function searchInValue($value, $searchs)
|
532 |
+
{
|
533 |
+
foreach($searchs as $i => $search) {
|
534 |
+
if(stripos($value, $search) !== false) {
|
535 |
+
return true;
|
536 |
+
}
|
537 |
+
}
|
538 |
+
return false;
|
539 |
+
}
|
540 |
+
|
541 |
/**
|
542 |
* Sets the part of rows for the table
|
543 |
* @param int $id Table id
|
597 |
}
|
598 |
}
|
599 |
|
600 |
+
public function removeLastRows($id, $count)
|
601 |
+
{
|
602 |
+
if ($count <= 0) return;
|
603 |
+
|
604 |
+
$query = $this->getQueryBuilder()
|
605 |
+
->select('MAX(' . $this->getField('rows', 'id') . ') as max')
|
606 |
+
->from($this->getTable('rows'))
|
607 |
+
->where($this->getField('rows', 'table_id'), '=', (int)$id);
|
608 |
+
|
609 |
+
$lastRowId = $this->db->get_row($query->build(), ARRAY_N);
|
610 |
+
|
611 |
+
$query = $this->getQueryBuilder()
|
612 |
+
->deleteFrom($this->getTable('rows'))
|
613 |
+
->where($this->getField('rows', 'table_id'), '=', (int)$id)
|
614 |
+
->andWhere($this->getField('rows', 'id'), '>', (int)($lastRowId[0] - $count));
|
615 |
+
|
616 |
+
$this->db->query($query->build());
|
617 |
+
|
618 |
+
if ($this->db->last_error) {
|
619 |
+
throw new RuntimeException($this->db->last_error);
|
620 |
+
}
|
621 |
+
}
|
622 |
+
|
623 |
+
public function removeLastColumns($id, $from)
|
624 |
+
{
|
625 |
+
if ($from <= 0) return;
|
626 |
+
|
627 |
+
$totalRows = $this->getCountRows($id);
|
628 |
+
|
629 |
+
$query = $this->getQueryBuilder()
|
630 |
+
->select('id, data')
|
631 |
+
->from($this->getTable('rows'))
|
632 |
+
->where('table_id', '=', (int)$id)
|
633 |
+
->orderBy($this->getField('rows', 'id'));
|
634 |
+
|
635 |
+
$limit = 400;
|
636 |
+
$offset = 0;
|
637 |
+
do {
|
638 |
+
$query->limit($limit)->offset($offset);
|
639 |
+
$rows = $this->db->get_results($query->build());
|
640 |
+
|
641 |
+
if ($this->db->last_error) {
|
642 |
+
throw new RuntimeException($this->db->last_error);
|
643 |
+
}
|
644 |
+
|
645 |
+
foreach ($rows as $i => $row) {
|
646 |
+
$values = @unserialize($row->data);
|
647 |
+
array_splice($values['cells'], $from);
|
648 |
+
updateRow($row->id, $values);
|
649 |
+
}
|
650 |
+
unset($rows);
|
651 |
+
$offset += $limit;
|
652 |
+
} while ($offset < $totalRows);
|
653 |
+
}
|
654 |
+
|
655 |
/**
|
656 |
* Sets the rows for the table
|
657 |
* @param int $id Table id
|
678 |
}
|
679 |
}
|
680 |
|
681 |
+
/**
|
682 |
+
* Update the rows by id
|
683 |
+
*/
|
684 |
+
public function updateRow($id, $data, $raw = false)
|
685 |
+
{
|
686 |
+
if($raw) {
|
687 |
+
$data = $this->prepareRowsData($data);
|
688 |
+
}
|
689 |
+
$update = $this->getQueryBuilder()
|
690 |
+
->update($this->getTable('rows'))
|
691 |
+
->where('id', '=', (int)$id)
|
692 |
+
->set(array('data' => serialize($data)));
|
693 |
+
|
694 |
+
$this->db->query($update->build());
|
695 |
+
if ($this->db->last_error) {
|
696 |
+
throw new RuntimeException($this->db->last_error);
|
697 |
+
}
|
698 |
+
}
|
699 |
+
|
700 |
+
|
701 |
/**
|
702 |
* Removes all table rows.
|
703 |
* @param int $id Table id
|
739 |
*/
|
740 |
public function onTablesGet($table)
|
741 |
{
|
|
|
|
|
742 |
if (null === $table) {
|
743 |
return $table;
|
744 |
}
|
746 |
$table->view_id = $table->id . '_' . mt_rand(1, 99999);
|
747 |
$table->columns = $this->getColumns($table->id);
|
748 |
$table->settings = unserialize(htmlspecialchars_decode($table->settings, ENT_QUOTES));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
749 |
|
750 |
// rev 41
|
751 |
if (property_exists($table, 'meta')) {
|
847 |
return $result;
|
848 |
}
|
849 |
|
850 |
+
public function getMeta($id)
|
851 |
+
{
|
852 |
+
$query = $this->getQueryBuilder()
|
853 |
+
->select($this->getField('tables', 'meta'))
|
854 |
+
->from($this->getTable('tables'))
|
855 |
+
->where('id', '=', (int)$id);
|
856 |
+
|
857 |
+
$result = $this->db->get_results($query->build());
|
858 |
+
|
859 |
+
if ($this->db->last_error) {
|
860 |
+
throw new RuntimeException($this->db->last_error);
|
861 |
+
}
|
862 |
+
if (!empty($result)) {
|
863 |
+
$result = $result[0]->meta;
|
864 |
+
$result = unserialize(htmlspecialchars_decode($result, ENT_QUOTES));
|
865 |
+
}
|
866 |
+
|
867 |
+
return $result;
|
868 |
+
}
|
869 |
+
|
870 |
/**
|
871 |
* @param $tableIds
|
872 |
*
|
893 |
if(preg_match_all('|\[supsystic-tables\s+id=[\'"]?(\d+)[\'"]?\s*?\]|',$content,$matches)) {
|
894 |
array_shift( $matches );
|
895 |
foreach($matches[0] as $matchedTableId) {
|
896 |
+
if (in_array( $matchedTableId, $tableIds)) {
|
897 |
$postIds[ $parsingPost->ID ]['tables'][] = $matchedTableId;
|
898 |
}
|
899 |
}
|
910 |
*/
|
911 |
public function getTableIdsBySearchTokens($tokens)
|
912 |
{
|
913 |
+
$tempIds = array();
|
914 |
+
$step = 0;
|
915 |
+
foreach($tokens as $token) {
|
916 |
+
$step++;
|
917 |
+
$query = $this->getQueryBuilder()
|
918 |
+
->select('DISTINCT table_id')
|
919 |
+
->from($this->getTable('rows'))
|
920 |
+
->where('data', 'LIKE', "%{$token}%");
|
921 |
+
$tables = $this->db->get_results($query->build());
|
922 |
+
|
923 |
+
if($this->db->last_error) {
|
924 |
+
throw new RuntimeException( $this->db->last_error );
|
925 |
+
}
|
926 |
|
927 |
+
foreach($tables as $table) {
|
928 |
+
$id = $table->table_id;
|
929 |
+
if($step == 1) {
|
930 |
+
$tempIds[$id] = 1;
|
931 |
+
} elseif(isset($tempIds[$id])) {
|
932 |
+
$tempIds[$id]++;
|
933 |
+
}
|
934 |
+
}
|
935 |
}
|
|
|
|
|
|
|
936 |
|
937 |
+
$tableIds = array();
|
938 |
+
foreach($tempIds as $id => $flag) {
|
939 |
+
if($flag == $step) {
|
940 |
+
array_push($tableIds, $id);
|
941 |
}
|
942 |
}
|
943 |
return $tableIds;
|
src/SupsysticTables/Tables/Module.php
CHANGED
@@ -124,6 +124,12 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
|
|
124 |
return '';
|
125 |
}
|
126 |
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
public function getDataTablesObj() {
|
128 |
if(empty($this->_tablesObj)) {
|
129 |
$core = $this->getEnvironment()->getModule('core'); // @var SupsysticTables_Core_Module $core
|
@@ -150,15 +156,13 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
|
|
150 |
$settings = get_option('supsystic_tbl_settings');
|
151 |
|
152 |
if (!empty($settings['table_search'])) {
|
153 |
-
add_filter('
|
154 |
}
|
155 |
}
|
156 |
}
|
157 |
|
158 |
-
public function globalTablesSearchFilter($where) {
|
159 |
-
|
160 |
-
|
161 |
-
if(is_main_query() && is_search()) {
|
162 |
$search_query = trim(get_search_query());
|
163 |
|
164 |
if(!empty($search_query)) {
|
@@ -173,15 +177,18 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
|
|
173 |
$postIds = $tables->getPostIdsByTableIds($tableIds);
|
174 |
|
175 |
if(!empty($postIds)) {
|
|
|
176 |
$idsStr = implode(',',array_keys($postIds));
|
177 |
|
178 |
$exact = get_query_var( 'exact' );
|
179 |
$n = ( empty( $exact ) ) ? '%' : '';
|
180 |
$where = $wpdb->remove_placeholder_escape( $where );
|
181 |
-
|
182 |
-
$
|
183 |
-
|
184 |
-
|
|
|
|
|
185 |
|
186 |
$where = $wpdb->add_placeholder_escape( $where );
|
187 |
}
|
@@ -220,16 +227,25 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
|
|
220 |
}
|
221 |
}
|
222 |
$table = $table ? $table : $tables->getById($id);
|
223 |
-
|
224 |
if (!$table) {
|
225 |
return sprintf($environment->translate('The table with ID %d not exists.'), $id);
|
226 |
}
|
227 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
228 |
&& $environment->isPro()
|
229 |
&& isset($table->settings['features']['import']['google']['automatically_update'])
|
230 |
&& isset($table->settings['features']['import']['google']['link']);
|
231 |
|
232 |
-
if (!isset($table->settings['disableCache']) && !$this->isSingleCell && !$this->isTablePart && !$this->checkSpreadsheet && !$this->isFromHistory && file_exists($cachePath) && $this->getEnvironment()->isProd()) {
|
|
|
233 |
// Connect scripts and styles depending on table settings and table's cells settings for table cache
|
234 |
$dispatcher = $this->getEnvironment()->getDispatcher();
|
235 |
$dispatcher->apply('before_table_render', array($table));
|
@@ -243,19 +259,25 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
|
|
243 |
return $e->getMessage();
|
244 |
}
|
245 |
// We need to get the new rows' data from db
|
246 |
-
$table = $tables->
|
247 |
}
|
248 |
-
|
249 |
-
|
|
|
|
|
|
|
250 |
|
251 |
-
|
252 |
-
|
253 |
-
|
|
|
254 |
}
|
255 |
}
|
256 |
}
|
257 |
|
258 |
-
|
|
|
|
|
259 |
if($this->isSingleCell) {
|
260 |
// Unset unneeded elements and features
|
261 |
unset($table->settings['elements']['head']);
|
@@ -327,17 +349,11 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
|
|
327 |
$table->rows[$key]['cells'][$index]['calculatedValue'] = $this->isFromHistory[$key]['cells'][$index]['calculatedValue'];
|
328 |
}
|
329 |
}
|
330 |
-
// add href for Lightbox
|
331 |
-
if($lightbox && substr($cell['data'], 0, 10) == '<img src="'){
|
332 |
-
$endHref = strpos($cell['data'], '"', 15);
|
333 |
-
if($endHref > 0) {
|
334 |
-
$table->rows[$key]['cells'][$index]['imgHref'] = substr($cell['data'], 10, $endHref - 10);
|
335 |
-
}
|
336 |
-
}
|
337 |
$table->rows[$key]['cells'][$index]['data'] = do_shortcode($table->rows[$key]['cells'][$index]['data']);
|
338 |
}
|
339 |
}
|
340 |
}
|
|
|
341 |
$table->history = (bool) $this->isFromHistory;
|
342 |
$table->history_data = $this->historyData;
|
343 |
$table->encoded_title = htmlspecialchars($table->title, ENT_QUOTES);
|
@@ -362,6 +378,40 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
|
|
362 |
return $renderData;
|
363 |
}
|
364 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
365 |
/**
|
366 |
* Renders the value of single cell
|
367 |
* @param int $tableId
|
@@ -1034,7 +1084,7 @@ class SupsysticTables_Tables_Module extends SupsysticTables_Core_BaseModule
|
|
1034 |
}
|
1035 |
|
1036 |
public function getFontsList() {
|
1037 |
-
return array("ABeeZee","Abel","Abril Fatface","Aclonica","Acme","Actor","Adamina","Advent Pro","Aguafina Script","Akronim","Aladin","Aldrich","Alef","Alegreya","Alegreya SC","Alegreya Sans","Alegreya Sans SC","Alex Brush","Alfa Slab One","Alice","Alike","Alike Angular","Allan","Allerta","Allerta Stencil","Allura","Almendra","Almendra Display","Almendra SC","Amarante","Amaranth","Amatic SC","Amethysta","Amiri","Anaheim","Andada","Andika","Angkor","Annie Use Your Telescope","Anonymous Pro","Antic","Antic Didone","Antic Slab","Anton","Arapey","Arbutus","Arbutus Slab","Architects Daughter","Archivo Black","Archivo Narrow","Arimo","Arizonia","Armata","Artifika","Arvo","Asap","Asset","Astloch","Asul","Atomic Age","Aubrey","Audiowide","Autour One","Average","Average Sans","Averia Gruesa Libre","Averia Libre","Averia Sans Libre","Averia Serif Libre","Bad Script","Balthazar","Bangers","Basic","Battambang","Baumans","Bayon","Belgrano","Belleza","BenchNine","Bentham","Berkshire Swash","Bevan","Bigelow Rules","Bigshot One","Bilbo","Bilbo Swash Caps","Biryani","Bitter","Black Ops One","Bokor","Bonbon","Boogaloo","Bowlby One","Bowlby One SC","Brawler","Bree Serif","Bubblegum Sans","Bubbler One","
|
1038 |
}
|
1039 |
|
1040 |
public function getStandardFontsList() {
|
124 |
return '';
|
125 |
}
|
126 |
|
127 |
+
public function setDataForPage($table) {
|
128 |
+
$table->isDisplayed = false;
|
129 |
+
$table->isPageRows = true;
|
130 |
+
$this->_tablesObj[$table->view_id] = $table;
|
131 |
+
}
|
132 |
+
|
133 |
public function getDataTablesObj() {
|
134 |
if(empty($this->_tablesObj)) {
|
135 |
$core = $this->getEnvironment()->getModule('core'); // @var SupsysticTables_Core_Module $core
|
156 |
$settings = get_option('supsystic_tbl_settings');
|
157 |
|
158 |
if (!empty($settings['table_search'])) {
|
159 |
+
add_filter('posts_search' , array($this, 'globalTablesSearchFilter'), 10, 2);
|
160 |
}
|
161 |
}
|
162 |
}
|
163 |
|
164 |
+
public function globalTablesSearchFilter($where, $query) {
|
165 |
+
if($query->is_search() && $query->is_main_query()) {
|
|
|
|
|
166 |
$search_query = trim(get_search_query());
|
167 |
|
168 |
if(!empty($search_query)) {
|
177 |
$postIds = $tables->getPostIdsByTableIds($tableIds);
|
178 |
|
179 |
if(!empty($postIds)) {
|
180 |
+
global $wpdb;
|
181 |
$idsStr = implode(',',array_keys($postIds));
|
182 |
|
183 |
$exact = get_query_var( 'exact' );
|
184 |
$n = ( empty( $exact ) ) ? '%' : '';
|
185 |
$where = $wpdb->remove_placeholder_escape( $where );
|
186 |
+
|
187 |
+
foreach($tokens as $token) {
|
188 |
+
$old_or = "OR ({$wpdb->posts}.post_content LIKE '{$n}{$token}{$n}')";
|
189 |
+
$new_or = $old_or . " OR {$wpdb->posts}.ID IN ({$idsStr}) ";
|
190 |
+
$where = str_replace( $old_or, $new_or, $where );
|
191 |
+
}
|
192 |
|
193 |
$where = $wpdb->add_placeholder_escape( $where );
|
194 |
}
|
227 |
}
|
228 |
}
|
229 |
$table = $table ? $table : $tables->getById($id);
|
230 |
+
|
231 |
if (!$table) {
|
232 |
return sprintf($environment->translate('The table with ID %d not exists.'), $id);
|
233 |
}
|
234 |
+
|
235 |
+
$table->isSSP = (!$this->isSingleCell && !$this->isTablePart && isset($table->settings['serverSideProcessing']) && $table->settings['serverSideProcessing'] == 'on');
|
236 |
+
$table->isDB = ($environment->isPro() && !$this->isSingleCell && !$this->isTablePart && isset($table->settings['source']) && isset($table->settings['source']['database']) && $table->settings['source']['database'] == 'on');
|
237 |
+
|
238 |
+
if(!isset($table->isPageRows)) {
|
239 |
+
$table->isPageRows = false;
|
240 |
+
}
|
241 |
+
|
242 |
+
$this->checkSpreadsheet = $this->checkSpreadsheet && !$table->isPageRows
|
243 |
&& $environment->isPro()
|
244 |
&& isset($table->settings['features']['import']['google']['automatically_update'])
|
245 |
&& isset($table->settings['features']['import']['google']['link']);
|
246 |
|
247 |
+
if (!$table->isSSP && !isset($table->settings['disableCache']) && !$this->isSingleCell && !$this->isTablePart && !$this->checkSpreadsheet && !$this->isFromHistory && file_exists($cachePath) && $this->getEnvironment()->isProd()) {
|
248 |
+
$table->rows = $tables->getNeededRows($id, $table->settings, $table->isSSP);
|
249 |
// Connect scripts and styles depending on table settings and table's cells settings for table cache
|
250 |
$dispatcher = $this->getEnvironment()->getDispatcher();
|
251 |
$dispatcher->apply('before_table_render', array($table));
|
259 |
return $e->getMessage();
|
260 |
}
|
261 |
// We need to get the new rows' data from db
|
262 |
+
$table->meta = $tables->getMeta($id);
|
263 |
}
|
264 |
+
if(!$table->isPageRows) {
|
265 |
+
$table->rows = $tables->getNeededRows($id, $table->settings, $table->isSSP);
|
266 |
+
|
267 |
+
if (isset($table->meta['columnsWidth'])) {
|
268 |
+
$columnsTotalWidth = array_sum($table->meta['columnsWidth']);
|
269 |
|
270 |
+
if($columnsTotalWidth) {
|
271 |
+
foreach ($table->meta['columnsWidth'] as &$value) {
|
272 |
+
$value = round($value / $columnsTotalWidth * 100, 4);
|
273 |
+
}
|
274 |
}
|
275 |
}
|
276 |
}
|
277 |
|
278 |
+
if(!$environment->isPro()) {
|
279 |
+
$table->settings['styling']['lightboxImg'] = '';
|
280 |
+
}
|
281 |
if($this->isSingleCell) {
|
282 |
// Unset unneeded elements and features
|
283 |
unset($table->settings['elements']['head']);
|
349 |
$table->rows[$key]['cells'][$index]['calculatedValue'] = $this->isFromHistory[$key]['cells'][$index]['calculatedValue'];
|
350 |
}
|
351 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
352 |
$table->rows[$key]['cells'][$index]['data'] = do_shortcode($table->rows[$key]['cells'][$index]['data']);
|
353 |
}
|
354 |
}
|
355 |
}
|
356 |
+
$table->mirrorFooter = $this->getMirrorFooter($table);
|
357 |
$table->history = (bool) $this->isFromHistory;
|
358 |
$table->history_data = $this->historyData;
|
359 |
$table->encoded_title = htmlspecialchars($table->title, ENT_QUOTES);
|
378 |
return $renderData;
|
379 |
}
|
380 |
|
381 |
+
public function getMirrorFooter($table) {
|
382 |
+
$footer = array();
|
383 |
+
|
384 |
+
if(!in_array('customFooter', $table->settings)) {
|
385 |
+
$headerRowsCount = !empty($table->settings['headerRowsCount']) ? $table->settings['headerRowsCount'] : 1;
|
386 |
+
$footer = array_slice($table->rows, 0, $headerRowsCount);
|
387 |
+
|
388 |
+
foreach($footer as $key => $row) {
|
389 |
+
foreach($row['cells'] as $index => $cell) {
|
390 |
+
if(!empty($table->meta['mergedCells'])) {
|
391 |
+
foreach($table->meta['mergedCells'] as $m) {
|
392 |
+
if($m['row'] == $key && $m['col'] == $index && $m['rowspan'] > 1) {
|
393 |
+
$newKey = $key + $m['rowspan'] - 1;
|
394 |
+
$footer[$newKey]['cells'][$index] = $cell;
|
395 |
+
$footer[$newKey]['cells'][$index]['rewrite'] = array(
|
396 |
+
'rowspan' => $m['rowspan'],
|
397 |
+
'colspan' => $m['colspan'],
|
398 |
+
'display' => true,
|
399 |
+
);
|
400 |
+
$footer[$key]['cells'][$index]['rewrite'] = array(
|
401 |
+
'rowspan' => 1,
|
402 |
+
'colspan' => 1,
|
403 |
+
'display' => false,
|
404 |
+
);
|
405 |
+
}
|
406 |
+
}
|
407 |
+
}
|
408 |
+
}
|
409 |
+
}
|
410 |
+
$footer = array_reverse($footer);
|
411 |
+
}
|
412 |
+
return $footer;
|
413 |
+
}
|
414 |
+
|
415 |
/**
|
416 |
* Renders the value of single cell
|
417 |
* @param int $tableId
|
1084 |
}
|
1085 |
|
1086 |
public function getFontsList() {
|
1087 |
+
return array("ABeeZee","Abel","Abril Fatface","Aclonica","Acme","Actor","Adamina","Advent Pro","Aguafina Script","Akronim","Aladin","Aldrich","Alef","Alegreya","Alegreya SC","Alegreya Sans","Alegreya Sans SC","Alex Brush","Alfa Slab One","Alice","Alike","Alike Angular","Allan","Allerta","Allerta Stencil","Allura","Almendra","Almendra Display","Almendra SC","Amarante","Amaranth","Amatic SC","Amethysta","Amiri","Anaheim","Andada","Andika","Angkor","Annie Use Your Telescope","Anonymous Pro","Antic","Antic Didone","Antic Slab","Anton","Arapey","Arbutus","Arbutus Slab","Architects Daughter","Archivo Black","Archivo Narrow","Arimo","Arizonia","Armata","Artifika","Arvo","Asap","Asset","Astloch","Asul","Atomic Age","Aubrey","Audiowide","Autour One","Average","Average Sans","Averia Gruesa Libre","Averia Libre","Averia Sans Libre","Averia Serif Libre","Bad Script","Balthazar","Bangers","Basic","Battambang","Baumans","Bayon","Belgrano","Belleza","BenchNine","Bentham","Berkshire Swash","Bevan","Bigelow Rules","Bigshot One","Bilbo","Bilbo Swash Caps","Biryani","Bitter","Black Ops One","Bokor","Bonbon","Boogaloo","Bowlby One","Bowlby One SC","Brawler","Bree Serif","Bubblegum Sans","Bubbler One","Buenard","Butcherman","Butterfly Kids","Cabin","Cabin Condensed","Cabin Sketch","Caesar Dressing","Cagliostro","Calligraffitti","Cambay","Cambo","Candal","Cantarell","Cantata One","Cantora One","Capriola","Cardo","Carme","Carrois Gothic","Carrois Gothic SC","Carter One","Caudex","Cedarville Cursive","Ceviche One","Changa One","Chango","Chau Philomene One","Chela One","Chelsea Market","Chenla","Cherry Cream Soda","Cherry Swash","Chewy","Chicle","Chivo","Cinzel","Cinzel Decorative","Clicker Script","Coda","Codystar","Combo","Comfortaa","Coming Soon","Concert One","Condiment","Content","Contrail One","Convergence","Cookie","Copse","Corben","Courgette","Cousine","Coustard","Covered By Your Grace","Crafty Girls","Creepster","Crete Round","Crimson Text","Croissant One","Crushed","Cuprum","Cutive","Cutive Mono","Damion","Dancing Script","Dangrek","Dawning of a New Day","Days One","Dekko","Delius","Delius Swash Caps","Delius Unicase","Della Respira","Denk One","Devonshire","Dhurjati","Didact Gothic","Diplomata","Diplomata SC","Domine","Donegal One","Doppio One","Dorsa","Dosis","Dr Sugiyama","Droid Sans","Droid Sans Mono","Droid Serif","Duru Sans","Dynalight","EB Garamond","Eagle Lake","Eater","Economica","Ek Mukta","Electrolize","Elsie","Elsie Swash Caps","Emblema One","Emilys Candy","Engagement","Englebert","Enriqueta","Erica One","Esteban","Euphoria Script","Ewert","Exo","Exo 2","Expletus Sans","Fanwood Text","Fascinate","Fascinate Inline","Faster One","Fasthand","Fauna One","Federant","Federo","Felipa","Fenix","Finger Paint","Fira Mono","Fira Sans","Fjalla One","Fjord One","Flamenco","Flavors","Fondamento","Fontdiner Swanky","Forum","Francois One","Freckle Face","Fredericka the Great","Fredoka One","Freehand","Fresca","Frijole","Fruktur","Fugaz One","GFS Didot","GFS Neohellenic","Gabriela","Gafata","Galdeano","Galindo","Gentium Basic","Gentium Book Basic","Geo","Geostar","Geostar Fill","Germania One","Gidugu","Gilda Display","Give You Glory","Glass Antiqua","Glegoo","Gloria Hallelujah","Goblin One","Gochi Hand","Gorditas","Goudy Bookletter 1911","Graduate","Grand Hotel","Gravitas One","Great Vibes","Griffy","Gruppo","Gudea","Gurajada","Habibi","Halant","Hammersmith One","Hanalei","Hanalei Fill","Handlee","Hanuman","Happy Monkey","Headland One","Henny Penny","Herr Von Muellerhoff","Hind","Holtwood One SC","Homemade Apple","Homenaje","IM Fell DW Pica","IM Fell DW Pica SC","IM Fell Double Pica","IM Fell Double Pica SC","IM Fell English","IM Fell English SC","IM Fell French Canon","IM Fell French Canon SC","IM Fell Great Primer","IM Fell Great Primer SC","Iceberg","Iceland","Imprima","Inconsolata","Inder","Indie Flower","Inika","Irish Grover","Istok Web","Italiana","Italianno","Jacques Francois","Jacques Francois Shadow","Jaldi","Jim Nightshade","Jockey One","Jolly Lodger","Josefin Sans","Josefin Slab","Joti One","Judson","Julee","Julius Sans One","Junge","Jura","Just Another Hand","Just Me Again Down Here","Kalam","Kameron","Kantumruy","Karla","Karma","Kaushan Script","Kavoon","Kdam Thmor","Keania One","Kelly Slab","Kenia","Khand","Khmer","Khula","Kite One","Knewave","Kotta One","Koulen","Kranky","Kreon","Kristi","Krona One","Kurale","La Belle Aurore","Laila","Lakki Reddy","Lancelot","Lateef","Lato","League Script","Leckerli One","Ledger","Lekton","Lemon","Libre Baskerville","Life Savers","Lilita One","Lily Script One","Limelight","Linden Hill","Lobster","Lobster Two","Londrina Outline","Londrina Shadow","Londrina Sketch","Londrina Solid","Lora","Love Ya Like A Sister","Loved by the King","Lovers Quarrel","Luckiest Guy","Lusitana","Lustria","Macondo","Macondo Swash Caps","Magra","Maiden Orange","Mako","Mallanna","Mandali","Marcellus","Marcellus SC","Marck Script","Margarine","Marko One","Marmelad","Martel","Martel Sans","Marvel","Mate","Mate SC","Maven Pro","McLaren","Meddon","MedievalSharp","Medula One","Megrim","Meie Script","Merienda","Merienda One","Merriweather","Merriweather Sans","Metal","Metal Mania","Metamorphous","Metrophobic","Michroma","Milonga","Miltonian","Miltonian Tattoo","Miniver","Miss Fajardose","Modak","Modern Antiqua","Molengo","Monda","Monofett","Monoton","Monsieur La Doulaise","Montaga","Montez","Montserrat","Montserrat Alternates","Montserrat Subrayada","Moul","Moulpali","Mountains of Christmas","Mouse Memoirs","Mr Bedfort","Mr Dafoe","Mr De Haviland","Mrs Saint Delafield","Mrs Sheppards","Muli","Mystery Quest","NTR","Neucha","Neuton","New Rocker","News Cycle","Niconne","Nixie One","Nobile","Nokora","Norican","Nosifer","Nothing You Could Do","Noticia Text","Noto Sans","Noto Serif","Nova Cut","Nova Flat","Nova Mono","Nova Oval","Nova Round","Nova Script","Nova Slim","Nova Square","Numans","Nunito","Odor Mean Chey","Offside","Old Standard TT","Oldenburg","Oleo Script","Oleo Script Swash Caps","Open Sans","Oranienbaum","Orbitron","Oregano","Orienta","Original Surfer","Oswald","Over the Rainbow","Overlock","Overlock SC","Ovo","Oxygen","Oxygen Mono","PT Mono","PT Sans","PT Sans Caption","PT Sans Narrow","PT Serif","PT Serif Caption","Pacifico","Palanquin","Palanquin Dark","Paprika","Parisienne","Passero One","Passion One","Pathway Gothic One","Patrick Hand","Patrick Hand SC","Patua One","Paytone One","Peddana","Peralta","Permanent Marker","Petit Formal Script","Petrona","Philosopher","Piedra","Pinyon Script","Pirata One","Plaster","Play","Playball","Playfair Display","Playfair Display SC","Podkova","Poiret One","Poller One","Poly","Pompiere","Pontano Sans","Port Lligat Sans","Port Lligat Slab","Pragati Narrow","Prata","Preahvihear","Press Start 2P","Princess Sofia","Prociono","Prosto One","Puritan","Purple Purse","Quando","Quantico","Quattrocento","Quattrocento Sans","Questrial","Quicksand","Quintessential","Qwigley","Racing Sans One","Radley","Rajdhani","Raleway","Raleway Dots","Ramabhadra","Ramaraja","Rambla","Rammetto One","Ranchers","Rancho","Ranga","Rationale","Ravi Prakash","Redressed","Reenie Beanie","Revalia","Ribeye","Ribeye Marrow","Righteous","Risque","Roboto","Roboto Condensed","Roboto Slab","Rochester","Rock Salt","Rokkitt","Romanesco","Ropa Sans","Rosario","Rosarivo","Rouge Script","Rozha One","Rubik Mono One","Rubik One","Ruda","Rufina","Ruge Boogie","Ruluko","Rum Raisin","Ruslan Display","Russo One","Ruthie","Rye","Sacramento","Sail","Salsa","Sanchez","Sancreek","Sansita One","Sarina","Sarpanch","Satisfy","Scada","Scheherazade","Schoolbell","Seaweed Script","Sevillana","Seymour One","Shadows Into Light","Shadows Into Light Two","Shanti","Share","Share Tech","Share Tech Mono","Shojumaru","Short Stack","Siemreap","Sigmar One","Signika","Signika Negative","Simonetta","Sintony","Sirin Stencil","Six Caps","Skranji","Slabo 13px","Slabo 27px","Slackey","Smokum","Smythe","Sniglet","Snippet","Snowburst One","Sofadi One","Sofia","Sonsie One","Sorts Mill Goudy","Source Code Pro","Source Sans Pro","Source Serif Pro","Special Elite","Spicy Rice","Spinnaker","Spirax","Squada One","Sree Krushnadevaraya","Stalemate","Stalinist One","Stardos Stencil","Stint Ultra Condensed","Stint Ultra Expanded","Stoke","Strait","Sue Ellen Francisco","Sumana","Sunshiney","Supermercado One","Suranna","Suravaram","Suwannaphum","Swanky and Moo Moo","Syncopate","Tangerine","Taprom","Tauri","Teko","Telex","Tenali Ramakrishna","Tenor Sans","Text Me One","The Girl Next Door","Tienne","Timmana","Tinos","Titan One","Titillium Web","Trade Winds","Trocchi","Trochut","Trykker","Tulpen One","Ubuntu","Ubuntu Condensed","Ubuntu Mono","Ultra","Uncial Antiqua","Underdog","Unica One","UnifrakturMaguntia","Unkempt","Unlock","Unna","VT323","Vampiro One","Varela","Varela Round","Vast Shadow","Vesper Libre","Vibur","Vidaloka","Viga","Voces","Volkhov","Vollkorn","Voltaire","Waiting for the Sunrise","Wallpoet","Walter Turncoat","Warnes","Wellfleet","Wendy One","Wire One","Yanone Kaffeesatz","Yellowtail","Yeseva One","Yesteryear","Zeyada");
|
1088 |
}
|
1089 |
|
1090 |
public function getStandardFontsList() {
|
src/SupsysticTables/Tables/assets/css/tables.shortcode.css
CHANGED
@@ -93,7 +93,6 @@ table.supsystic-table img {
|
|
93 |
table.supsystic-table .ww-h {
|
94 |
white-space: nowrap !important;
|
95 |
overflow: hidden;
|
96 |
-
max-width: 0;
|
97 |
}
|
98 |
|
99 |
table.supsystic-table {
|
93 |
table.supsystic-table .ww-h {
|
94 |
white-space: nowrap !important;
|
95 |
overflow: hidden;
|
|
|
96 |
}
|
97 |
|
98 |
table.supsystic-table {
|
src/SupsysticTables/Tables/assets/css/tables.view.css
CHANGED
@@ -232,6 +232,9 @@
|
|
232 |
.setting-item + .setting-item {
|
233 |
text-align: right;
|
234 |
}
|
|
|
|
|
|
|
235 |
.setting-item label {
|
236 |
height: 33px;
|
237 |
line-height: 33px;
|
232 |
.setting-item + .setting-item {
|
233 |
text-align: right;
|
234 |
}
|
235 |
+
.setting-item .chosen-drop {
|
236 |
+
text-align: left;
|
237 |
+
}
|
238 |
.setting-item label {
|
239 |
height: 33px;
|
240 |
line-height: 33px;
|
src/SupsysticTables/Tables/assets/js/editor/tables.editor.js
CHANGED
@@ -1,8 +1,19 @@
|
|
1 |
-
g_stbWindowHeight = 0;
|
|
|
|
|
2 |
(function ($, app, undefined) {
|
3 |
$(document).ready(function() {
|
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'), {
|
@@ -503,15 +514,27 @@ g_stbWindowHeight = 0;
|
|
503 |
// Load table data to editor
|
504 |
$.when(
|
505 |
tablesModel.getMeta(tableId),
|
506 |
-
tablesModel.
|
507 |
-
).done(function
|
508 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
509 |
}).fail(function (error) {
|
510 |
alert('Failed to load table data: ' + error);
|
511 |
}).always(function (response) {
|
512 |
$('#loadingProgress').remove();
|
513 |
editor.render();
|
|
|
|
|
514 |
});
|
|
|
|
|
|
|
515 |
|
516 |
// Select all table cells by click on the top left corner of table editor
|
517 |
$('.ht_clone_top_left_corner').on('mousedown', function(e) {
|
@@ -592,7 +615,8 @@ g_stbWindowHeight = 0;
|
|
592 |
})();
|
593 |
|
594 |
editor.setPageData = (function () {
|
595 |
-
return function (inBuffer
|
|
|
596 |
if (inBuffer) {
|
597 |
this.copyInBuffer();
|
598 |
}
|
1 |
+
var g_stbWindowHeight = 0;
|
2 |
+
var g_stbPagination = false;
|
3 |
+
var g_stbRowsPerPage = 1;
|
4 |
(function ($, app, undefined) {
|
5 |
$(document).ready(function() {
|
6 |
g_stbWindowHeight = $(window).width() > 810 ? $(window).height() * 0.7 : $(window).height(); // 810px is mobile responsive width
|
7 |
|
8 |
+
var pagination = $('#tableEditor').data('editor-pagination');
|
9 |
+
if(typeof(pagination) != 'undefined' && pagination == 'on') {
|
10 |
+
g_stbPagination = true;
|
11 |
+
var rowsPerPage = $('#tableEditor').data('editor-pagination-rows');
|
12 |
+
if(typeof(rowsPerPage) != 'undefined') {
|
13 |
+
g_stbRowsPerPage = rowsPerPage;
|
14 |
+
}
|
15 |
+
}
|
16 |
+
|
17 |
var tableId = app.getParameterByName('id'),
|
18 |
tablesModel = app.Models.Tables,
|
19 |
editor = new Handsontable(document.getElementById('tableEditor'), {
|
514 |
// Load table data to editor
|
515 |
$.when(
|
516 |
tablesModel.getMeta(tableId),
|
517 |
+
tablesModel.getCountRows(tableId)
|
518 |
+
).done(function(metaResponse, countResponse) {
|
519 |
+
$.when(
|
520 |
+
tablesModel.getRows(tableId, countResponse[0].countRows)
|
521 |
+
).done(function (rowsResponse) {
|
522 |
+
if(countResponse[0].countRows == rowsResponse[0].rows.length) {
|
523 |
+
tablesModel.setTableData(metaResponse, rowsResponse);
|
524 |
+
} else {
|
525 |
+
alert('Failed to load table data!');
|
526 |
+
}
|
527 |
}).fail(function (error) {
|
528 |
alert('Failed to load table data: ' + error);
|
529 |
}).always(function (response) {
|
530 |
$('#loadingProgress').remove();
|
531 |
editor.render();
|
532 |
+
$('#buttonSave').attr('disabled', false);
|
533 |
+
g_stbDoSaving = false;
|
534 |
});
|
535 |
+
}).fail(function (error) {
|
536 |
+
alert('Failed to load table data: ' + error);
|
537 |
+
});
|
538 |
|
539 |
// Select all table cells by click on the top left corner of table editor
|
540 |
$('.ht_clone_top_left_corner').on('mousedown', function(e) {
|
615 |
})();
|
616 |
|
617 |
editor.setPageData = (function () {
|
618 |
+
return function (inBuffer) {
|
619 |
+
if (typeof(inBuffer) == 'undefined') inBuffer = true;
|
620 |
if (inBuffer) {
|
621 |
this.copyInBuffer();
|
622 |
}
|
src/SupsysticTables/Tables/assets/js/tables.model.js
CHANGED
@@ -1,8 +1,6 @@
|
|
1 |
-
var g_stbDoSaving =
|
2 |
var g_stbDoPreview = false;
|
3 |
var g_stbPreviewTimeoutSet = false;
|
4 |
-
var g_stbPagination = false;
|
5 |
-
var g_stbRowsPerPage = 1;
|
6 |
(function ($, app) {
|
7 |
|
8 |
var TablesModel = (function () {
|
@@ -58,12 +56,40 @@ var g_stbRowsPerPage = 1;
|
|
58 |
return this.request('updateColumns', { id: id, columns: columns })
|
59 |
};
|
60 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
TablesModel.prototype.getRows = function (id) {
|
62 |
if (isNaN(id = parseInt(id))) {
|
63 |
throw new Error('Invalid table id.');
|
64 |
}
|
|
|
|
|
|
|
65 |
|
66 |
-
|
|
|
67 |
};
|
68 |
|
69 |
TablesModel.prototype.setRows = function (id, rows, byPart, preview) {
|
@@ -185,7 +211,7 @@ var g_stbRowsPerPage = 1;
|
|
185 |
$.each(rows, function (x, row) {
|
186 |
var cells = [];
|
187 |
|
188 |
-
heights.push(row.height
|
189 |
|
190 |
$.each(row.cells, function (y, cell) {
|
191 |
var metaData = {};
|
@@ -419,7 +445,8 @@ var g_stbRowsPerPage = 1;
|
|
419 |
metaData = [],
|
420 |
mergeData = [],
|
421 |
rowsData = [],
|
422 |
-
columnsWidth = []
|
|
|
423 |
|
424 |
// Put textareas data into the hidden fields before the saving of table settings
|
425 |
formData.find('input[name="elements[descriptionText]"]').val( formData.find('#descriptionText').val() );
|
@@ -434,8 +461,10 @@ var g_stbRowsPerPage = 1;
|
|
434 |
$(preview).empty();
|
435 |
}
|
436 |
}
|
|
|
437 |
$.each((pagination ? bufferData : editor.getData()), function (x, row) {
|
438 |
var currentRow = { cells: [] };
|
|
|
439 |
|
440 |
$.each(row, function (y, cell) {
|
441 |
var meta = (pagination ? bufferMeta[x * countCols + y] : editor.getCellMeta(x, y)),
|
@@ -455,6 +484,7 @@ var g_stbRowsPerPage = 1;
|
|
455 |
var cellHtml = (pagination ? bufferData[x][y] : $(editor.getCell(x, y))),
|
456 |
classes = [],
|
457 |
cellData = {
|
|
|
458 |
data: cell,
|
459 |
calculatedValue: null,
|
460 |
hidden: false,
|
1 |
+
var g_stbDoSaving = true; //waiting for the end of downloads
|
2 |
var g_stbDoPreview = false;
|
3 |
var g_stbPreviewTimeoutSet = false;
|
|
|
|
|
4 |
(function ($, app) {
|
5 |
|
6 |
var TablesModel = (function () {
|
56 |
return this.request('updateColumns', { id: id, columns: columns })
|
57 |
};
|
58 |
|
59 |
+
TablesModel.prototype.getCountRows = function (id) {
|
60 |
+
if (isNaN(id = parseInt(id))) {
|
61 |
+
throw new Error('Invalid table id.');
|
62 |
+
}
|
63 |
+
|
64 |
+
return this.request('getCountRows', { id: id })
|
65 |
+
};
|
66 |
+
|
67 |
+
var allRows = [];
|
68 |
+
TablesModel.prototype.getPartRows = function(id, limit, offset, deferred) {
|
69 |
+
var self = this;
|
70 |
+
$.when(
|
71 |
+
this.request('getRows', { id: id, limit: limit, offset: offset})
|
72 |
+
).done(function (rowsResponse) {
|
73 |
+
if(rowsResponse.rows.length > 0) {
|
74 |
+
$.merge(allRows, rowsResponse.rows);
|
75 |
+
offset += limit;
|
76 |
+
self.getPartRows(id, limit, offset, deferred);
|
77 |
+
} else {
|
78 |
+
deferred.resolve([{rows: allRows}]);
|
79 |
+
}
|
80 |
+
});
|
81 |
+
};
|
82 |
+
|
83 |
TablesModel.prototype.getRows = function (id) {
|
84 |
if (isNaN(id = parseInt(id))) {
|
85 |
throw new Error('Invalid table id.');
|
86 |
}
|
87 |
+
var deferred = $.Deferred();
|
88 |
+
limit = 2000,
|
89 |
+
offset = 0;
|
90 |
|
91 |
+
this.getPartRows(id, limit, offset, deferred);
|
92 |
+
return deferred.promise();
|
93 |
};
|
94 |
|
95 |
TablesModel.prototype.setRows = function (id, rows, byPart, preview) {
|
211 |
$.each(rows, function (x, row) {
|
212 |
var cells = [];
|
213 |
|
214 |
+
heights.push(row.height !== undefined && row.height > 0 ? row.height : undefined);
|
215 |
|
216 |
$.each(row.cells, function (y, cell) {
|
217 |
var metaData = {};
|
445 |
metaData = [],
|
446 |
mergeData = [],
|
447 |
rowsData = [],
|
448 |
+
columnsWidth = [],
|
449 |
+
rowCounter = 0;
|
450 |
|
451 |
// Put textareas data into the hidden fields before the saving of table settings
|
452 |
formData.find('input[name="elements[descriptionText]"]').val( formData.find('#descriptionText').val() );
|
461 |
$(preview).empty();
|
462 |
}
|
463 |
}
|
464 |
+
|
465 |
$.each((pagination ? bufferData : editor.getData()), function (x, row) {
|
466 |
var currentRow = { cells: [] };
|
467 |
+
rowCounter++;
|
468 |
|
469 |
$.each(row, function (y, cell) {
|
470 |
var meta = (pagination ? bufferMeta[x * countCols + y] : editor.getCellMeta(x, y)),
|
484 |
var cellHtml = (pagination ? bufferData[x][y] : $(editor.getCell(x, y))),
|
485 |
classes = [],
|
486 |
cellData = {
|
487 |
+
y: rowCounter,
|
488 |
data: cell,
|
489 |
calculatedValue: null,
|
490 |
hidden: false,
|
src/SupsysticTables/Tables/assets/js/tables.shortcode.js
CHANGED
@@ -61,66 +61,13 @@
|
|
61 |
}
|
62 |
if(typeof app.getTableInstanceById(table.data('id')).fnAdjustColumnSizing == 'function' ) {
|
63 |
setTimeout(function(){
|
64 |
-
app.getTableInstanceById(table.data('id')).fnAdjustColumnSizing();
|
65 |
}, 350);
|
66 |
}
|
67 |
-
var searching = table.data('searching-settings');
|
68 |
-
if(searching && ("columnSearch" in searching) && searching.columnSearch == 'on') {
|
69 |
-
setColumnSearch(table);
|
70 |
-
}
|
71 |
});
|
72 |
});
|
73 |
});
|
74 |
|
75 |
-
function setColumnSearch(table) {
|
76 |
-
var dtable = $('#supsystic-table-' + table.data('id') + '[data-view-id="' + table.data('view-id') + '"]'),
|
77 |
-
tfoot = $('#supsystic-table-' + table.data('view-id')).find('div .dataTables_scrollFootInner table '),
|
78 |
-
inputs = (tfoot.length == 0 ? dtable.find('tfoot tr:last input') : tfoot.eq(0).find('tfoot tr:last input'));
|
79 |
-
|
80 |
-
if(inputs.length == 0) {
|
81 |
-
return;
|
82 |
-
}
|
83 |
-
dtable.DataTable().columns().every( function (colIdx) {
|
84 |
-
var that = this;
|
85 |
-
inputs.eq(colIdx).on('keyup change', function () {
|
86 |
-
if ( that.search() !== this.value ) {
|
87 |
-
that
|
88 |
-
.search (this.value.replace(/;/g, "|"), true, false)
|
89 |
-
.draw ();
|
90 |
-
}
|
91 |
-
});
|
92 |
-
});
|
93 |
-
var div = $('#supsystic-table-' + table.data('view-id')),
|
94 |
-
leftTable = div.find('.DTFC_LeftBodyWrapper').find('table'),
|
95 |
-
rightTable = div.find('.DTFC_RightBodyWrapper').find('table');
|
96 |
-
|
97 |
-
if(leftTable.length) {
|
98 |
-
var leftFoot = div.find('.DTFC_LeftFootWrapper').find('table'),
|
99 |
-
leftInputs = (leftFoot.length == 0 ? leftTable.find('tfoot tr:last input') : leftFoot.eq(0).find('tfoot tr:last input'));
|
100 |
-
|
101 |
-
leftInputs.each( function (colIdx) {
|
102 |
-
setCopyEvents(this, inputs.eq(colIdx).data('events'));
|
103 |
-
});
|
104 |
-
}
|
105 |
-
if(rightTable.length) {
|
106 |
-
var rightFoot = div.find('.DTFC_RightFootWrapper').find('table'),
|
107 |
-
rightInputs = (rightFoot.length == 0 ? rightTable.find('tfoot tr:last input') : rightFoot.eq(0).find('tfoot tr:last input')),
|
108 |
-
cntRight = rightInputs.length,
|
109 |
-
cntInputs = inputs.length;
|
110 |
-
|
111 |
-
rightInputs.each( function (colIdx) {
|
112 |
-
setCopyEvents(this, inputs.eq(cntInputs - cntRight + colIdx).data('events'));
|
113 |
-
});
|
114 |
-
}
|
115 |
-
}
|
116 |
-
function setCopyEvents(obj, events) {
|
117 |
-
$.each(events, function (event, handlers) {
|
118 |
-
$.each(handlers, function (j, handler) {
|
119 |
-
$(obj).bind(event, handler);
|
120 |
-
});
|
121 |
-
});
|
122 |
-
}
|
123 |
-
|
124 |
function getOriginalImageSizes(img) {
|
125 |
var tempImage = new Image(),
|
126 |
width,
|
61 |
}
|
62 |
if(typeof app.getTableInstanceById(table.data('id')).fnAdjustColumnSizing == 'function' ) {
|
63 |
setTimeout(function(){
|
64 |
+
app.getTableInstanceById(table.data('id')).fnAdjustColumnSizing(false);
|
65 |
}, 350);
|
66 |
}
|
|
|
|
|
|
|
|
|
67 |
});
|
68 |
});
|
69 |
});
|
70 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
function getOriginalImageSizes(img) {
|
72 |
var tempImage = new Image(),
|
73 |
width,
|
src/SupsysticTables/Tables/views/shortcode.twig
CHANGED
@@ -3,15 +3,19 @@
|
|
3 |
|
4 |
{% if cell.hiddenCell != true or cell.hiddenCell == true and searchByHidden == 'on' %}
|
5 |
{% set data = cell.data %}
|
|
|
|
|
|
|
|
|
6 |
|
7 |
{% if context.table.settings.styling.paragraphMode %}
|
8 |
{% set data = data | raw | nl2br %}
|
9 |
{% endif %}
|
10 |
|
11 |
<{{tag}}
|
12 |
-
data-cell-id="{{ context.cols[context.countIter] ~ context.cols[context.cellIter] ~
|
13 |
data-x="{{ cellIndex }}"
|
14 |
-
data-y="{{
|
15 |
class="{{ cell.meta | join(' ') | trim }}"
|
16 |
|
17 |
{% if cell.comment is defined and cell.comment.value is defined %}
|
@@ -79,13 +83,22 @@
|
|
79 |
{% set colspan = 1 %}
|
80 |
{% set rowspan = 1 %}
|
81 |
{% for mergedCell in context.table.meta.mergedCells %}
|
82 |
-
{% if mergedCell.row ==
|
83 |
{% set display = true %}
|
84 |
{% set colspan = mergedCell.colspan %}
|
85 |
{% set rowspan = mergedCell.rowspan %}
|
86 |
{% endif %}
|
87 |
{% endfor %}
|
88 |
-
{% if
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
data-hide="true"
|
90 |
{% else %}
|
91 |
data-colspan="{{ colspan }}"
|
@@ -93,12 +106,7 @@
|
|
93 |
{% endif %}
|
94 |
{% endif %}
|
95 |
>
|
96 |
-
|
97 |
-
{% if cell.imgHref is defined %}
|
98 |
-
<a href="{{ cell.imgHref }}" data-featherlight="image">{{ data | raw }}</a>
|
99 |
-
{% else %}
|
100 |
-
{{ data | raw }}
|
101 |
-
{% endif %}
|
102 |
</{{tag}}>
|
103 |
{% endif %}
|
104 |
{% endmacro %}
|
@@ -108,7 +116,11 @@
|
|
108 |
{% set cols = 'A'..'Z' %}
|
109 |
{% set countIter = -1 %}
|
110 |
{% set cellIter = 0 %}
|
|
|
|
|
|
|
111 |
|
|
|
112 |
{% if 'auto_width' not in table.settings.features | keys %}
|
113 |
{% if table.settings.tableWidthType == 'auto' %}
|
114 |
{% set tableWidth = 'auto' %}
|
@@ -173,6 +185,12 @@
|
|
173 |
data-date-format="{{ table.settings.dateFormat | default('DD.MM.YYYY') }}"
|
174 |
data-time-format="{{ table.settings.timeFormat | default('HH:mm') }}"
|
175 |
data-features="{{ table.settings.features | keys | json_encode | e }}"
|
|
|
|
|
|
|
|
|
|
|
|
|
176 |
{% if 'head' in table.settings.elements | keys %}
|
177 |
data-head="{{ table.settings.elements.head }}"
|
178 |
{% endif %}
|
@@ -185,6 +203,9 @@
|
|
185 |
{% if 'foot' in table.settings.elements | keys %}
|
186 |
data-foot="{{ table.settings.elements.foot }}"
|
187 |
{% endif %}
|
|
|
|
|
|
|
188 |
{% if 'fixedFooter' in table.settings | keys %}
|
189 |
data-fixed-foot="{{ table.settings.fixedFooter }}"
|
190 |
{% endif %}
|
@@ -289,7 +310,11 @@
|
|
289 |
{% set footRowsCount = table.settings.footerRowsCount | default(1) %}
|
290 |
{% set footRows = table.rows | slice('-' ~ footRowsCount, footRowsCount) %}
|
291 |
{% else %}
|
292 |
-
{%
|
|
|
|
|
|
|
|
|
293 |
{% endif %}
|
294 |
{% endif %}
|
295 |
|
@@ -338,8 +363,12 @@
|
|
338 |
{% endfor %}
|
339 |
</thead>
|
340 |
{% endblock %}
|
|
|
|
|
|
|
341 |
|
342 |
{% block tbody %}
|
|
|
343 |
<tbody>
|
344 |
{% for row in bodyRows %}
|
345 |
{% set rowNumber = loop.index + (head ? headRowsCount : 0) %}
|
@@ -385,8 +414,10 @@
|
|
385 |
{% endif %}
|
386 |
{% endfor %}
|
387 |
</tbody>
|
|
|
388 |
{% endblock %}
|
389 |
|
|
|
390 |
{% block tfoot %}
|
391 |
{% if foot %}
|
392 |
<tfoot>
|
@@ -436,6 +467,7 @@
|
|
436 |
|
437 |
{% block after_table %}{% endblock %}
|
438 |
</div>
|
|
|
439 |
<!-- /.supsystic-tables-wrap -->
|
440 |
|
441 |
<!-- Tables Generator by Supsystic -->
|
3 |
|
4 |
{% if cell.hiddenCell != true or cell.hiddenCell == true and searchByHidden == 'on' %}
|
5 |
{% set data = cell.data %}
|
6 |
+
{% set cellY = rowIndex %}
|
7 |
+
{% if context.isSSP == true or context.isDB == true %}
|
8 |
+
{% set cellY = cell.y | default(rowIndex) %}
|
9 |
+
{% endif %}
|
10 |
|
11 |
{% if context.table.settings.styling.paragraphMode %}
|
12 |
{% set data = data | raw | nl2br %}
|
13 |
{% endif %}
|
14 |
|
15 |
<{{tag}}
|
16 |
+
data-cell-id="{{ context.cols[context.countIter] ~ context.cols[context.cellIter] ~ cellY }}"
|
17 |
data-x="{{ cellIndex }}"
|
18 |
+
data-y="{{ cellY }}"
|
19 |
class="{{ cell.meta | join(' ') | trim }}"
|
20 |
|
21 |
{% if cell.comment is defined and cell.comment.value is defined %}
|
83 |
{% set colspan = 1 %}
|
84 |
{% set rowspan = 1 %}
|
85 |
{% for mergedCell in context.table.meta.mergedCells %}
|
86 |
+
{% if mergedCell.row == cellY - 1 and mergedCell.col == cellIndex %}
|
87 |
{% set display = true %}
|
88 |
{% set colspan = mergedCell.colspan %}
|
89 |
{% set rowspan = mergedCell.rowspan %}
|
90 |
{% endif %}
|
91 |
{% endfor %}
|
92 |
+
{% if cell.rewrite.rowspan is defined %}
|
93 |
+
{% set rowspan = cell.rewrite.rowspan %}
|
94 |
+
{% endif %}
|
95 |
+
{% if cell.rewrite.colspan is defined %}
|
96 |
+
{% set colspan = cell.rewrite.colspan %}
|
97 |
+
{% endif %}
|
98 |
+
{% if cell.rewrite.display is defined %}
|
99 |
+
{% set display = cell.rewrite.display %}
|
100 |
+
{% endif %}
|
101 |
+
{% if display == false and context.isPageRows == false %}
|
102 |
data-hide="true"
|
103 |
{% else %}
|
104 |
data-colspan="{{ colspan }}"
|
106 |
{% endif %}
|
107 |
{% endif %}
|
108 |
>
|
109 |
+
{{ data | raw }}
|
|
|
|
|
|
|
|
|
|
|
110 |
</{{tag}}>
|
111 |
{% endif %}
|
112 |
{% endmacro %}
|
116 |
{% set cols = 'A'..'Z' %}
|
117 |
{% set countIter = -1 %}
|
118 |
{% set cellIter = 0 %}
|
119 |
+
{% set isSSP = table.isSSP | default(false) %}
|
120 |
+
{% set isPageRows = table.isPageRows | default(false) %}
|
121 |
+
{% set isDB = table.isDB | default(false) %}
|
122 |
|
123 |
+
{% if isPageRows == false %}
|
124 |
{% if 'auto_width' not in table.settings.features | keys %}
|
125 |
{% if table.settings.tableWidthType == 'auto' %}
|
126 |
{% set tableWidth = 'auto' %}
|
185 |
data-date-format="{{ table.settings.dateFormat | default('DD.MM.YYYY') }}"
|
186 |
data-time-format="{{ table.settings.timeFormat | default('HH:mm') }}"
|
187 |
data-features="{{ table.settings.features | keys | json_encode | e }}"
|
188 |
+
{% if 'lightboxImg' in table.settings.styling | keys %}
|
189 |
+
data-lightbox-img="{{ table.settings.styling.lightboxImg }}"
|
190 |
+
{% endif %}
|
191 |
+
{% if table.isSSP == true %}
|
192 |
+
data-server-side-processing="on"
|
193 |
+
{% endif %}
|
194 |
{% if 'head' in table.settings.elements | keys %}
|
195 |
data-head="{{ table.settings.elements.head }}"
|
196 |
{% endif %}
|
203 |
{% if 'foot' in table.settings.elements | keys %}
|
204 |
data-foot="{{ table.settings.elements.foot }}"
|
205 |
{% endif %}
|
206 |
+
{% if 'customFooter' in table.settings | keys and 'footerRowsCount' in table.settings | keys %}
|
207 |
+
data-foot-custom-rows-count="{{ table.settings.footerRowsCount | default(1) }}"
|
208 |
+
{% endif %}
|
209 |
{% if 'fixedFooter' in table.settings | keys %}
|
210 |
data-fixed-foot="{{ table.settings.fixedFooter }}"
|
211 |
{% endif %}
|
310 |
{% set footRowsCount = table.settings.footerRowsCount | default(1) %}
|
311 |
{% set footRows = table.rows | slice('-' ~ footRowsCount, footRowsCount) %}
|
312 |
{% else %}
|
313 |
+
{% if table.mirrorFooter is not empty %}
|
314 |
+
{% set footRows = table.mirrorFooter %}
|
315 |
+
{% else %}
|
316 |
+
{% set footRows = headRows | reverse %}
|
317 |
+
{% endif %}
|
318 |
{% endif %}
|
319 |
{% endif %}
|
320 |
|
363 |
{% endfor %}
|
364 |
</thead>
|
365 |
{% endblock %}
|
366 |
+
{% else %}
|
367 |
+
{% set bodyRows = table.rows %}
|
368 |
+
{% endif %}
|
369 |
|
370 |
{% block tbody %}
|
371 |
+
{% if isSSP == false or isPageRows == true %}
|
372 |
<tbody>
|
373 |
{% for row in bodyRows %}
|
374 |
{% set rowNumber = loop.index + (head ? headRowsCount : 0) %}
|
414 |
{% endif %}
|
415 |
{% endfor %}
|
416 |
</tbody>
|
417 |
+
{% endif %}
|
418 |
{% endblock %}
|
419 |
|
420 |
+
{% if isPageRows == false %}
|
421 |
{% block tfoot %}
|
422 |
{% if foot %}
|
423 |
<tfoot>
|
467 |
|
468 |
{% block after_table %}{% endblock %}
|
469 |
</div>
|
470 |
+
{% endif %}
|
471 |
<!-- /.supsystic-tables-wrap -->
|
472 |
|
473 |
<!-- Tables Generator by Supsystic -->
|
src/SupsysticTables/Tables/views/view.twig
CHANGED
@@ -61,7 +61,7 @@
|
|
61 |
<div class="stbMainBtnsShell col-lg-6 col-md-12 col-sm-12 col-xs-12">
|
62 |
<ul class="subsubsub control-buttons">
|
63 |
<li>
|
64 |
-
<button id="buttonSave" class="button">
|
65 |
<i class="fa fa-floppy-o" aria-hidden="true"></i>
|
66 |
<span>{{ environment.translate('Save') }}</span>
|
67 |
</button>
|
@@ -738,6 +738,23 @@
|
|
738 |
</select>
|
739 |
</div>
|
740 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
741 |
<div class="setting-wrapper row">
|
742 |
<div class="setting-item col-md-6 col-sm-6 col-xs-12">
|
743 |
<label for="features-searching">
|
@@ -759,7 +776,7 @@
|
|
759 |
>
|
760 |
<div class="setting-item setting-options col-md-6 col-sm-6 col-xs-12">
|
761 |
<label for="features-search-by-column">
|
762 |
-
{{ environment.translate('Search by
|
763 |
{{ tooltip.icon(environment.translate('Add search by table columns. Use a semicolon as separator for select any of the values.')) }}
|
764 |
</label>
|
765 |
</div>
|
@@ -1741,7 +1758,10 @@
|
|
1741 |
<div class="clear"></div>
|
1742 |
</div>
|
1743 |
<!-- /#formulaEditor -->
|
1744 |
-
<div id="tableEditor"
|
|
|
|
|
|
|
1745 |
<!-- /#tableEditor -->
|
1746 |
</div>
|
1747 |
|
61 |
<div class="stbMainBtnsShell col-lg-6 col-md-12 col-sm-12 col-xs-12">
|
62 |
<ul class="subsubsub control-buttons">
|
63 |
<li>
|
64 |
+
<button id="buttonSave" class="button" disabled>
|
65 |
<i class="fa fa-floppy-o" aria-hidden="true"></i>
|
66 |
<span>{{ environment.translate('Save') }}</span>
|
67 |
</button>
|
738 |
</select>
|
739 |
</div>
|
740 |
</div>
|
741 |
+
<div class="setting-wrapper row pagination-options"
|
742 |
+
{% if table.settings.features.paging is not defined %}
|
743 |
+
style="display:none"
|
744 |
+
{% endif %}
|
745 |
+
>
|
746 |
+
<div class="setting-item setting-options col-md-6 col-sm-6 col-xs-12">
|
747 |
+
<label for="pagination-server-processing">
|
748 |
+
{{ environment.translate('Server-side Processing') }}
|
749 |
+
{{ tooltip.icon(environment.translate('This option is recommended for a large tables that cannot be processed in conventional way. The table will be sequentially loaded by ajax on a per page basis, all filtering, ordering and search clauses is server-side implemented too.')) }}
|
750 |
+
</label>
|
751 |
+
</div>
|
752 |
+
<div class="setting-item col-md-6 col-sm-6 col-xs-12">
|
753 |
+
<input type="checkbox" name="serverSideProcessing" id="server-side-processing"
|
754 |
+
{{ checkbox.checked(table.settings.serverSideProcessing) }}
|
755 |
+
>
|
756 |
+
</div>
|
757 |
+
</div>
|
758 |
<div class="setting-wrapper row">
|
759 |
<div class="setting-item col-md-6 col-sm-6 col-xs-12">
|
760 |
<label for="features-searching">
|
776 |
>
|
777 |
<div class="setting-item setting-options col-md-6 col-sm-6 col-xs-12">
|
778 |
<label for="features-search-by-column">
|
779 |
+
{{ environment.translate('Search by Columns') }}
|
780 |
{{ tooltip.icon(environment.translate('Add search by table columns. Use a semicolon as separator for select any of the values.')) }}
|
781 |
</label>
|
782 |
</div>
|
1758 |
<div class="clear"></div>
|
1759 |
</div>
|
1760 |
<!-- /#formulaEditor -->
|
1761 |
+
<div id="tableEditor"
|
1762 |
+
{% if settings.editor_pagination is defined %} data-editor-pagination="{{ settings.editor_pagination }}" {% endif %}
|
1763 |
+
{% if settings.editor_pagination_rows is defined %} data-editor-pagination-rows="{{ settings.editor_pagination_rows | default(1) }}" {% endif %}
|
1764 |
+
></div>
|
1765 |
<!-- /#tableEditor -->
|
1766 |
</div>
|
1767 |
|