datavis-glide 4.0.1 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datavis-glide",
3
- "version": "4.0.1",
3
+ "version": "4.1.0",
4
4
  "description": "DataVis GLIDE (Graphical Layer for Interactive Data Exploration)",
5
5
  "keywords": [
6
6
  "data",
@@ -45,7 +45,7 @@
45
45
  "chart.js": "=4.5.1",
46
46
  "core-js": "=3.47.0",
47
47
  "css.escape": "=1.5.1",
48
- "datavis-ace": "=4.0.0-PRE.2",
48
+ "datavis-ace": "=4.1.0",
49
49
  "es6-symbol": "=3.1.4",
50
50
  "flatpickr": "=4.6.13",
51
51
  "handlebars": "=4.7.8",
package/src/grid.js CHANGED
@@ -21,6 +21,7 @@ import {
21
21
  setPropDef,
22
22
  Timing,
23
23
  } from './util/misc.js';
24
+ import { writeToClipboard } from './util/clipboard.js';
24
25
  import { OrdMap, Lock, Prefs, ComputedView, MirageView, FileSource } from 'datavis-ace';
25
26
  import {
26
27
  AggregateControl,
@@ -40,6 +41,7 @@ import { ColConfigWin } from './ui/windows/col_config.js';
40
41
  import { DebugWin } from './ui/windows/debug.js';
41
42
  import { TemplatesEditor } from './ui/templates.js';
42
43
  import { PopupWindow } from './ui/popup_window.js';
44
+ import Toast from './ui/toast.js';
43
45
  import {
44
46
  ComputedViewToolbar,
45
47
  PlainToolbar,
@@ -321,6 +323,9 @@ function makeJsonOrderBy(o) {
321
323
  *
322
324
  * @property {boolean} [rowSelect=false] If true, the user is allowed to select rows by using the
323
325
  * checkbox in the first column.
326
+
327
+ * @property {boolean} [cellSelect=false] If true, the user is allowed to select a rectangular range
328
+ * of cells by clicking and dragging in plain output.
324
329
  *
325
330
  * @property {boolean} [rowReorder=false] If true, the user is allowed to manually reorder the rows
326
331
  * using the handle in the last column.
@@ -451,6 +456,8 @@ function makeJsonOrderBy(o) {
451
456
  * @borrows GridTable#select
452
457
  * @borrows GridTable#unselect
453
458
  * @borrows GridTable#isSelected
459
+ * @borrows GridTable#getCellSelection
460
+ * @borrows GridTable#clearCellSelection
454
461
  */
455
462
 
456
463
  var Grid = makeSubclass('Grid', Object, function (defn, opts, cb) {
@@ -490,6 +497,8 @@ var Grid = makeSubclass('Grid', Object, function (defn, opts, cb) {
490
497
  self.grid = null; // List of all grids generated as a result.
491
498
  self.ui = {}; // User interface elements.
492
499
  self.selected = {}; // Information about what rows are selected.
500
+ self.toast = null;
501
+ self.copyConfirmThreshold = 10000;
493
502
 
494
503
  self._validateFeatures();
495
504
  self._validateId(self.defn.id);
@@ -1038,10 +1047,11 @@ mixinEventHandling(Grid, [
1038
1047
  , 'renderEnd'
1039
1048
  , 'colConfigUpdate'
1040
1049
  , 'selectionChange'
1050
+ , 'cellSelectionChange'
1041
1051
  , 'rowModeChange'
1042
1052
  ]);
1043
1053
 
1044
- delegate(Grid, 'renderer', ['setSelection', 'getSelection', 'select', 'unselect', 'isSelected']);
1054
+ delegate(Grid, 'renderer', ['setSelection', 'getSelection', 'select', 'unselect', 'isSelected', 'getCellSelection', 'clearCellSelection']);
1045
1055
 
1046
1056
  mixinLogging(Grid);
1047
1057
  mixinNameSetting(Grid);
@@ -1087,6 +1097,15 @@ mixinNameSetting(Grid);
1087
1097
  * Data from rows that are selected.
1088
1098
  */
1089
1099
 
1100
+ /**
1101
+ * Fired when cell selection is changed.
1102
+ *
1103
+ * @event Grid#cellSelectionChange
1104
+ *
1105
+ * @param {object} selection
1106
+ * Information about selected cells.
1107
+ */
1108
+
1090
1109
  // #toString {{{2
1091
1110
 
1092
1111
  Grid.prototype.toString = function () {
@@ -1108,6 +1127,7 @@ Grid.prototype._validateFeatures = function () {
1108
1127
  'group',
1109
1128
  'pivot',
1110
1129
  'rowSelect',
1130
+ 'cellSelect',
1111
1131
  'rowReorder',
1112
1132
  'add',
1113
1133
  'edit',
@@ -1312,6 +1332,23 @@ Grid.prototype._addTitleWidgets = function (titlebar, doingServerFilter, id) {
1312
1332
 
1313
1333
  self._setExportStatus('notReady');
1314
1334
 
1335
+ if (self.features.rowSelect || self.features.cellSelect) {
1336
+ self.ui.copyBtn = jQuery('<button>', {
1337
+ 'type': 'button',
1338
+ 'style': 'font-size: 18px',
1339
+ 'class': 'wcdv_icon_button wcdv_text-primary',
1340
+ 'aria-label': trans('GRID.TITLEBAR.COPY_SELECTION')
1341
+ })
1342
+ .on('click', function (evt) {
1343
+ evt.stopPropagation();
1344
+ self.copySelection();
1345
+ })
1346
+ .appendTo(self.ui.titlebar_controls)
1347
+ ;
1348
+
1349
+ self._setCopyStatus('disabled');
1350
+ }
1351
+
1315
1352
  // Create the Refresh button
1316
1353
 
1317
1354
  self.ui.refreshBtn = jQuery('<button>', {
@@ -1407,6 +1444,11 @@ Grid.prototype.clear = function () {
1407
1444
  self.resizeObserver = null;
1408
1445
  }
1409
1446
 
1447
+ if (self.toast != null) {
1448
+ self.toast.destroy();
1449
+ self.toast = null;
1450
+ }
1451
+
1410
1452
  self.ui.root.children().remove();
1411
1453
  };
1412
1454
  // #redraw {{{2
@@ -1514,6 +1556,7 @@ Grid.prototype.redraw = function (contOk, contFail) {
1514
1556
  self.renderer.on('renderEnd', function () {
1515
1557
  self.fire('renderEnd');
1516
1558
  self._isIdle = true;
1559
+ self._updateCopyStatus();
1517
1560
  });
1518
1561
 
1519
1562
  self.renderer.on('unableToRender', function () {
@@ -1554,15 +1597,24 @@ Grid.prototype.redraw = function (contOk, contFail) {
1554
1597
  str += trans(selection.length === 1 ? 'GRID.TITLEBAR.SELECTED_COUNT_SINGULAR' : 'GRID.TITLEBAR.SELECTED_COUNT_PLURAL', selection.length);
1555
1598
  self.ui.selectionInfo.text(str);
1556
1599
  }
1600
+ self._updateCopyStatus();
1557
1601
  self.fire('selectionChange', null, selection);
1558
1602
  });
1559
1603
  }
1560
1604
 
1605
+ if (self.features.cellSelect) {
1606
+ self.renderer.on('cellSelectionChange', function (selection) {
1607
+ self._updateCopyStatus();
1608
+ self.fire('cellSelectionChange', null, selection);
1609
+ });
1610
+ }
1611
+
1561
1612
  self.renderer.draw(self.ui.grid, null, function () {
1562
1613
  if (self.colConfigLock.isLocked()) {
1563
1614
  self.colConfigLock.unlock('renderer finished drawing');
1564
1615
  }
1565
1616
  self.setSelection();
1617
+ self._updateCopyStatus();
1566
1618
  self.ui.exportBtn.attr('disabled', false);
1567
1619
  if (self.features.omnifilter) {
1568
1620
  self._applyOmnifilter();
@@ -2224,6 +2276,95 @@ Grid.prototype._setExportStatus = function (status) {
2224
2276
  }
2225
2277
  };
2226
2278
 
2279
+ // #_setCopyStatus {{{2
2280
+
2281
+ Grid.prototype._setCopyStatus = function (status) {
2282
+ var self = this;
2283
+
2284
+ if (self.ui.copyBtn == null) {
2285
+ return;
2286
+ }
2287
+
2288
+ switch (status) {
2289
+ case 'disabled':
2290
+ self.ui.copyBtn.attr('disabled', true);
2291
+ self.ui.copyBtn.attr('title', trans('GRID.TITLEBAR.COPY_SELECTION_TOOLTIP'));
2292
+ self.ui.copyBtn.children('svg.wcdv_icon').remove();
2293
+ self.ui.copyBtn.append(icon('clipboard'));
2294
+ break;
2295
+ case 'enabled':
2296
+ self.ui.copyBtn.attr('disabled', false);
2297
+ self.ui.copyBtn.attr('title', trans('GRID.TITLEBAR.COPY_SELECTION_TOOLTIP'));
2298
+ self.ui.copyBtn.children('svg.wcdv_icon').remove();
2299
+ self.ui.copyBtn.append(icon('clipboard'));
2300
+ break;
2301
+ default:
2302
+ throw new Error('Call Error: invalid copy button status "' + status + '"');
2303
+ }
2304
+ };
2305
+
2306
+ // #_updateCopyStatus {{{2
2307
+
2308
+ Grid.prototype._updateCopyStatus = function () {
2309
+ var self = this;
2310
+
2311
+ if (self.ui.copyBtn == null || self.renderer == null) {
2312
+ return;
2313
+ }
2314
+
2315
+ var hasRows = self.renderer.getSelection().rows.length > 0;
2316
+ var hasCells = self.renderer.getCellSelection().cells.length > 0;
2317
+
2318
+ self._setCopyStatus(hasRows || hasCells ? 'enabled' : 'disabled');
2319
+ };
2320
+
2321
+ // #copySelection {{{2
2322
+
2323
+ Grid.prototype.copySelection = function () {
2324
+ var self = this;
2325
+
2326
+ if (self.renderer == null) {
2327
+ return;
2328
+ }
2329
+
2330
+ var rowSelection = self.renderer.getSelection();
2331
+ var cellSelection = self.renderer.getCellSelection();
2332
+ var tsv = '';
2333
+ var count = 0;
2334
+ var toastKey = null;
2335
+
2336
+ if (cellSelection.cells.length > 0) {
2337
+ tsv = self.renderer.getSelectedCellsAsTsv();
2338
+ count = cellSelection.cells.length;
2339
+ toastKey = 'GRID.TOAST.CELLS_COPIED';
2340
+ }
2341
+ else if (rowSelection.rows.length > 0) {
2342
+ tsv = self.renderer.getSelectedDataAsTsv();
2343
+ count = rowSelection.rows.length;
2344
+ toastKey = 'GRID.TOAST.ROWS_COPIED';
2345
+ }
2346
+ else {
2347
+ return;
2348
+ }
2349
+
2350
+ if (count > self.copyConfirmThreshold && !window.confirm(trans('GRID.TITLEBAR.COPY_SELECTION_CONFIRM', count))) {
2351
+ return;
2352
+ }
2353
+
2354
+ if (self.toast == null) {
2355
+ self.toast = new Toast();
2356
+ }
2357
+
2358
+ writeToClipboard(tsv)
2359
+ .then(function () {
2360
+ self.toast.show(trans(toastKey, count));
2361
+ })
2362
+ .catch(function (err) {
2363
+ self.logError(self.makeLogTag() + ' Unable to copy selection to clipboard: %O', err);
2364
+ })
2365
+ ;
2366
+ };
2367
+
2227
2368
  // #setColConfig {{{2
2228
2369
 
2229
2370
  /**
package/src/lang/en-US.js CHANGED
@@ -106,8 +106,10 @@ export default {
106
106
  'GRID.TABLE.DRAGGABLE_FIELD_HELP': 'You can drag & drop this field into the grid controls above to filter, group or pivot.',
107
107
  'GRID.TABLE.REORDER_COLUMN': 'Drag to reorder column',
108
108
  'GRID.TABLE.RESIZE_COLUMN': 'Drag to resize column',
109
+ 'GRID.TABLE.SORT_MENU.ADD_TO_SORT': 'Add to Sort',
109
110
  'GRID.TABLE.SORT_MENU.ASCENDING': '%s, Ascending',
110
111
  'GRID.TABLE.SORT_MENU.DESCENDING': '%s, Descending',
112
+ 'GRID.TABLE.SORT_MENU.PRIORITY_BADGE': 'Sort priority %d',
111
113
  'GRID.TABLE.SORT_MENU.RESET_SORT': 'Reset Sort',
112
114
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER': 'After',
113
115
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER_GROUP': 'After Group',
@@ -121,6 +123,9 @@ export default {
121
123
  'GRID.TEMPLATE_EDITOR.TITLE': 'Template Editor',
122
124
  'GRID.TITLEBAR.CANCEL': 'Cancel',
123
125
  'GRID.TITLEBAR.CLEAR_FILTER': 'clear filter',
126
+ 'GRID.TITLEBAR.COPY_SELECTION': 'Copy Selection',
127
+ 'GRID.TITLEBAR.COPY_SELECTION_CONFIRM': '%d values will be copied to the clipboard. Continue?',
128
+ 'GRID.TITLEBAR.COPY_SELECTION_TOOLTIP': 'Copy the selected rows or cells to the clipboard',
124
129
  'GRID.TITLEBAR.DATA_LIMITED_WARNING': 'To save time, not all records were retrieved. As a result, some functionality is reduced. Click to fetch all data (this may take some time).',
125
130
  'GRID.TITLEBAR.DOWNLOAD_CSV': 'Download CSV',
126
131
  'GRID.TITLEBAR.GENERATE_CSV': 'Generate CSV',
@@ -138,6 +143,8 @@ export default {
138
143
  'GRID.TITLEBAR.SHOW_HIDE': 'Show/Hide Grid',
139
144
  'GRID.TITLEBAR.SHOW_HIDE_CONTROLS': 'Show/Hide Grid Controls',
140
145
  'GRID.TITLEBAR.WORKING': 'Working...',
146
+ 'GRID.TOAST.CELLS_COPIED': '%d cells copied to clipboard',
147
+ 'GRID.TOAST.ROWS_COPIED': '%d rows copied to clipboard',
141
148
  'GRID_CONTROL.AGGREGATE.EDIT_OPTIONS': 'Edit options',
142
149
  'GRID_CONTROL.AGGREGATE.OPTIONS_DIALOG.TITLE': 'Options for %s',
143
150
  'GRID_CONTROL.AGGREGATE.TITLE': 'Aggregate',
package/src/lang/es-MX.js CHANGED
@@ -106,8 +106,10 @@ export default {
106
106
  'GRID.TABLE.DRAGGABLE_FIELD_HELP': 'Puedes arrastrar y soltar este campo en los controles de la tabla de arriba para filtrar, agrupar o pivotar.',
107
107
  'GRID.TABLE.REORDER_COLUMN': 'Arrastra para reordenar columna',
108
108
  'GRID.TABLE.RESIZE_COLUMN': 'Arrastra para redimensionar columna',
109
+ 'GRID.TABLE.SORT_MENU.ADD_TO_SORT': 'Agregar al orden',
109
110
  'GRID.TABLE.SORT_MENU.ASCENDING': '%s, Ascendente',
110
111
  'GRID.TABLE.SORT_MENU.DESCENDING': '%s, Descendente',
112
+ 'GRID.TABLE.SORT_MENU.PRIORITY_BADGE': 'Prioridad de orden %d',
111
113
  'GRID.TABLE.SORT_MENU.RESET_SORT': 'Restablecer orden',
112
114
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER': 'Después',
113
115
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER_GROUP': 'Después del grupo',
@@ -121,6 +123,9 @@ export default {
121
123
  'GRID.TEMPLATE_EDITOR.TITLE': 'Editor de Plantillas',
122
124
  'GRID.TITLEBAR.CANCEL': 'Cancelar',
123
125
  'GRID.TITLEBAR.CLEAR_FILTER': 'limpiar filtro',
126
+ 'GRID.TITLEBAR.COPY_SELECTION': 'Copiar selección',
127
+ 'GRID.TITLEBAR.COPY_SELECTION_CONFIRM': 'Se copiarán %d valores al portapapeles. ¿Continuar?',
128
+ 'GRID.TITLEBAR.COPY_SELECTION_TOOLTIP': 'Copiar las filas o celdas seleccionadas al portapapeles',
124
129
  'GRID.TITLEBAR.DATA_LIMITED_WARNING': 'Para ahorrar tiempo, no se recuperaron todos los registros. Como resultado, algunas funciones están reducidas. Haz clic para obtener todos los datos (esto puede tardar un poco).',
125
130
  'GRID.TITLEBAR.DOWNLOAD_CSV': 'Descargar CSV',
126
131
  'GRID.TITLEBAR.GENERATE_CSV': 'Generar CSV',
@@ -138,6 +143,8 @@ export default {
138
143
  'GRID.TITLEBAR.SHOW_HIDE': 'Mostrar/Ocultar Tabla',
139
144
  'GRID.TITLEBAR.SHOW_HIDE_CONTROLS': 'Mostrar/Ocultar Controles de Tabla',
140
145
  'GRID.TITLEBAR.WORKING': 'Trabajando...',
146
+ 'GRID.TOAST.CELLS_COPIED': '%d celdas copiadas al portapapeles',
147
+ 'GRID.TOAST.ROWS_COPIED': '%d filas copiadas al portapapeles',
141
148
  'GRID_CONTROL.AGGREGATE.EDIT_OPTIONS': 'Editar opciones',
142
149
  'GRID_CONTROL.AGGREGATE.OPTIONS_DIALOG.TITLE': 'Opciones para %s',
143
150
  'GRID_CONTROL.AGGREGATE.TITLE': 'Agregado',
package/src/lang/fr-FR.js CHANGED
@@ -106,8 +106,10 @@ export default {
106
106
  'GRID.TABLE.DRAGGABLE_FIELD_HELP': 'Vous pouvez faire glisser ce champ dans les contrôles de la grille ci-dessus pour filtrer, regrouper ou pivoter.',
107
107
  'GRID.TABLE.REORDER_COLUMN': 'Glisser pour réorganiser la colonne',
108
108
  'GRID.TABLE.RESIZE_COLUMN': 'Glisser pour redimensionner la colonne',
109
+ 'GRID.TABLE.SORT_MENU.ADD_TO_SORT': 'Ajouter au tri',
109
110
  'GRID.TABLE.SORT_MENU.ASCENDING': '%s, croissant',
110
111
  'GRID.TABLE.SORT_MENU.DESCENDING': '%s, décroissant',
112
+ 'GRID.TABLE.SORT_MENU.PRIORITY_BADGE': 'Priorité de tri %d',
111
113
  'GRID.TABLE.SORT_MENU.RESET_SORT': 'Réinitialiser le tri',
112
114
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER': 'Après',
113
115
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER_GROUP': 'Après le groupe',
@@ -121,6 +123,9 @@ export default {
121
123
  'GRID.TEMPLATE_EDITOR.TITLE': 'Éditeur de modèles',
122
124
  'GRID.TITLEBAR.CANCEL': 'Annuler',
123
125
  'GRID.TITLEBAR.CLEAR_FILTER': 'annuler le filtre',
126
+ 'GRID.TITLEBAR.COPY_SELECTION': 'Copier la sélection',
127
+ 'GRID.TITLEBAR.COPY_SELECTION_CONFIRM': '%d valeurs seront copiées dans le presse-papiers. Continuer ?',
128
+ 'GRID.TITLEBAR.COPY_SELECTION_TOOLTIP': 'Copier les lignes ou cellules sélectionnées dans le presse-papiers',
124
129
  'GRID.TITLEBAR.DATA_LIMITED_WARNING': 'Pour gagner du temps, tous les enregistrements n\'ont pas été récupérés. Par conséquent, certaines fonctionnalités sont réduites. Cliquez pour récupérer toutes les données (cela peut prendre du temps).',
125
130
  'GRID.TITLEBAR.DOWNLOAD_CSV': 'Télécharger CSV',
126
131
  'GRID.TITLEBAR.GENERATE_CSV': 'Générer CSV',
@@ -138,6 +143,8 @@ export default {
138
143
  'GRID.TITLEBAR.SHOW_HIDE': 'Afficher/Masquer la grille',
139
144
  'GRID.TITLEBAR.SHOW_HIDE_CONTROLS': 'Afficher/Masquer les contrôles de la grille',
140
145
  'GRID.TITLEBAR.WORKING': 'En cours...',
146
+ 'GRID.TOAST.CELLS_COPIED': '%d cellules copiées dans le presse-papiers',
147
+ 'GRID.TOAST.ROWS_COPIED': '%d lignes copiées dans le presse-papiers',
141
148
  'GRID_CONTROL.AGGREGATE.EDIT_OPTIONS': 'Modifier les options',
142
149
  'GRID_CONTROL.AGGREGATE.OPTIONS_DIALOG.TITLE': 'Options pour %s',
143
150
  'GRID_CONTROL.AGGREGATE.TITLE': 'Agrégat',
package/src/lang/id-ID.js CHANGED
@@ -106,8 +106,10 @@ export default {
106
106
  'GRID.TABLE.DRAGGABLE_FIELD_HELP': 'Anda dapat menyeret & melepaskan bidang ini ke kontrol grid di atas untuk memfilter, mengelompokkan, atau pivot.',
107
107
  'GRID.TABLE.REORDER_COLUMN': 'Seret untuk mengurutkan ulang kolom',
108
108
  'GRID.TABLE.RESIZE_COLUMN': 'Seret untuk mengubah ukuran kolom',
109
+ 'GRID.TABLE.SORT_MENU.ADD_TO_SORT': 'Tambahkan ke Urutan',
109
110
  'GRID.TABLE.SORT_MENU.ASCENDING': '%s, Naik',
110
111
  'GRID.TABLE.SORT_MENU.DESCENDING': '%s, Turun',
112
+ 'GRID.TABLE.SORT_MENU.PRIORITY_BADGE': 'Prioritas urutan %d',
111
113
  'GRID.TABLE.SORT_MENU.RESET_SORT': 'Atur Ulang Urutan',
112
114
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER': 'Setelah',
113
115
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER_GROUP': 'Setelah Grup',
@@ -121,6 +123,9 @@ export default {
121
123
  'GRID.TEMPLATE_EDITOR.TITLE': 'Editor Template',
122
124
  'GRID.TITLEBAR.CANCEL': 'Batal',
123
125
  'GRID.TITLEBAR.CLEAR_FILTER': 'hapus filter',
126
+ 'GRID.TITLEBAR.COPY_SELECTION': 'Salin pilihan',
127
+ 'GRID.TITLEBAR.COPY_SELECTION_CONFIRM': '%d nilai akan disalin ke papan klip. Lanjutkan?',
128
+ 'GRID.TITLEBAR.COPY_SELECTION_TOOLTIP': 'Salin baris atau sel yang dipilih ke papan klip',
124
129
  'GRID.TITLEBAR.DATA_LIMITED_WARNING': 'Untuk menghemat waktu, tidak semua catatan diambil. Akibatnya, beberapa fungsi berkurang. Klik untuk mengambil semua data (ini mungkin memerlukan waktu).',
125
130
  'GRID.TITLEBAR.DOWNLOAD_CSV': 'Unduh CSV',
126
131
  'GRID.TITLEBAR.GENERATE_CSV': 'Buat CSV',
@@ -138,6 +143,8 @@ export default {
138
143
  'GRID.TITLEBAR.SHOW_HIDE': 'Tampilkan/Sembunyikan Grid',
139
144
  'GRID.TITLEBAR.SHOW_HIDE_CONTROLS': 'Tampilkan/Sembunyikan Kontrol Grid',
140
145
  'GRID.TITLEBAR.WORKING': 'Sedang bekerja...',
146
+ 'GRID.TOAST.CELLS_COPIED': '%d sel disalin ke papan klip',
147
+ 'GRID.TOAST.ROWS_COPIED': '%d baris disalin ke papan klip',
141
148
  'GRID_CONTROL.AGGREGATE.EDIT_OPTIONS': 'Edit opsi',
142
149
  'GRID_CONTROL.AGGREGATE.OPTIONS_DIALOG.TITLE': 'Opsi untuk %s',
143
150
  'GRID_CONTROL.AGGREGATE.TITLE': 'Agregat',
package/src/lang/nl-NL.js CHANGED
@@ -106,8 +106,10 @@ export default {
106
106
  'GRID.TABLE.DRAGGABLE_FIELD_HELP': 'U kunt dit veld slepen en neerzetten in de bovenstaande rasterbediening om te filteren, groeperen of pivoteren.',
107
107
  'GRID.TABLE.REORDER_COLUMN': 'Sleep om de kolom te herordenen',
108
108
  'GRID.TABLE.RESIZE_COLUMN': 'Sleep om de kolom te verkleinen/vergroten',
109
+ 'GRID.TABLE.SORT_MENU.ADD_TO_SORT': 'Toevoegen aan sortering',
109
110
  'GRID.TABLE.SORT_MENU.ASCENDING': '%s, oplopend',
110
111
  'GRID.TABLE.SORT_MENU.DESCENDING': '%s, aflopend',
112
+ 'GRID.TABLE.SORT_MENU.PRIORITY_BADGE': 'Sorteervolgorde %d',
111
113
  'GRID.TABLE.SORT_MENU.RESET_SORT': 'Sortering resetten',
112
114
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER': 'Na',
113
115
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER_GROUP': 'Na groep',
@@ -121,6 +123,9 @@ export default {
121
123
  'GRID.TEMPLATE_EDITOR.TITLE': 'Sjabloonbewerker',
122
124
  'GRID.TITLEBAR.CANCEL': 'Annuleren',
123
125
  'GRID.TITLEBAR.CLEAR_FILTER': 'filter wissen',
126
+ 'GRID.TITLEBAR.COPY_SELECTION': 'Selectie kopiëren',
127
+ 'GRID.TITLEBAR.COPY_SELECTION_CONFIRM': '%d waarden worden naar het klembord gekopieerd. Doorgaan?',
128
+ 'GRID.TITLEBAR.COPY_SELECTION_TOOLTIP': 'Kopieer de geselecteerde rijen of cellen naar het klembord',
124
129
  'GRID.TITLEBAR.DATA_LIMITED_WARNING': 'Om tijd te besparen zijn niet alle records opgehaald. Hierdoor is sommige functionaliteit beperkt. Klik om alle gegevens op te halen (dit kan enige tijd duren).',
125
130
  'GRID.TITLEBAR.DOWNLOAD_CSV': 'CSV downloaden',
126
131
  'GRID.TITLEBAR.GENERATE_CSV': 'CSV genereren',
@@ -138,6 +143,8 @@ export default {
138
143
  'GRID.TITLEBAR.SHOW_HIDE': 'Raster tonen/verbergen',
139
144
  'GRID.TITLEBAR.SHOW_HIDE_CONTROLS': 'Rasterbediening tonen/verbergen',
140
145
  'GRID.TITLEBAR.WORKING': 'Bezig...',
146
+ 'GRID.TOAST.CELLS_COPIED': '%d cellen gekopieerd naar klembord',
147
+ 'GRID.TOAST.ROWS_COPIED': '%d rijen gekopieerd naar klembord',
141
148
  'GRID_CONTROL.AGGREGATE.EDIT_OPTIONS': 'Opties bewerken',
142
149
  'GRID_CONTROL.AGGREGATE.OPTIONS_DIALOG.TITLE': 'Opties voor %s',
143
150
  'GRID_CONTROL.AGGREGATE.TITLE': 'Aggregatie',
package/src/lang/pt-BR.js CHANGED
@@ -106,8 +106,10 @@ export default {
106
106
  'GRID.TABLE.DRAGGABLE_FIELD_HELP': 'Você pode arrastar e soltar este campo nos controles da grade acima para filtrar, agrupar ou pivotar.',
107
107
  'GRID.TABLE.REORDER_COLUMN': 'Arraste para reordenar coluna',
108
108
  'GRID.TABLE.RESIZE_COLUMN': 'Arraste para redimensionar coluna',
109
+ 'GRID.TABLE.SORT_MENU.ADD_TO_SORT': 'Adicionar à ordenação',
109
110
  'GRID.TABLE.SORT_MENU.ASCENDING': '%s, Ascendente',
110
111
  'GRID.TABLE.SORT_MENU.DESCENDING': '%s, Descendente',
112
+ 'GRID.TABLE.SORT_MENU.PRIORITY_BADGE': 'Prioridade de ordenação %d',
111
113
  'GRID.TABLE.SORT_MENU.RESET_SORT': 'Redefinir Ordenação',
112
114
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER': 'Depois',
113
115
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER_GROUP': 'Depois do Grupo',
@@ -121,6 +123,9 @@ export default {
121
123
  'GRID.TEMPLATE_EDITOR.TITLE': 'Editor de Modelos',
122
124
  'GRID.TITLEBAR.CANCEL': 'Cancelar',
123
125
  'GRID.TITLEBAR.CLEAR_FILTER': 'limpar filtro',
126
+ 'GRID.TITLEBAR.COPY_SELECTION': 'Copiar seleção',
127
+ 'GRID.TITLEBAR.COPY_SELECTION_CONFIRM': '%d valores serão copiados para a área de transferência. Continuar?',
128
+ 'GRID.TITLEBAR.COPY_SELECTION_TOOLTIP': 'Copiar as linhas ou células selecionadas para a área de transferência',
124
129
  'GRID.TITLEBAR.DATA_LIMITED_WARNING': 'Para economizar tempo, nem todos os registros foram recuperados. Como resultado, algumas funcionalidades estão reduzidas. Clique para buscar todos os dados (isso pode levar algum tempo).',
125
130
  'GRID.TITLEBAR.DOWNLOAD_CSV': 'Baixar CSV',
126
131
  'GRID.TITLEBAR.GENERATE_CSV': 'Gerar CSV',
@@ -138,6 +143,8 @@ export default {
138
143
  'GRID.TITLEBAR.SHOW_HIDE': 'Mostrar/Ocultar Grade',
139
144
  'GRID.TITLEBAR.SHOW_HIDE_CONTROLS': 'Mostrar/Ocultar Controles da Grade',
140
145
  'GRID.TITLEBAR.WORKING': 'Trabalhando...',
146
+ 'GRID.TOAST.CELLS_COPIED': '%d células copiadas para a área de transferência',
147
+ 'GRID.TOAST.ROWS_COPIED': '%d linhas copiadas para a área de transferência',
141
148
  'GRID_CONTROL.AGGREGATE.EDIT_OPTIONS': 'Editar opções',
142
149
  'GRID_CONTROL.AGGREGATE.OPTIONS_DIALOG.TITLE': 'Opções para %s',
143
150
  'GRID_CONTROL.AGGREGATE.TITLE': 'Agregado',
package/src/lang/ru-RU.js CHANGED
@@ -106,8 +106,10 @@ export default {
106
106
  'GRID.TABLE.DRAGGABLE_FIELD_HELP': 'Вы можете перетащить это поле в элементы управления таблицей выше для фильтрации, группировки или сводки.',
107
107
  'GRID.TABLE.REORDER_COLUMN': 'Перетащите для изменения порядка столбцов',
108
108
  'GRID.TABLE.RESIZE_COLUMN': 'Перетащите для изменения размера столбца',
109
+ 'GRID.TABLE.SORT_MENU.ADD_TO_SORT': 'Добавить к сортировке',
109
110
  'GRID.TABLE.SORT_MENU.ASCENDING': '%s, по возрастанию',
110
111
  'GRID.TABLE.SORT_MENU.DESCENDING': '%s, по убыванию',
112
+ 'GRID.TABLE.SORT_MENU.PRIORITY_BADGE': 'Приоритет сортировки %d',
111
113
  'GRID.TABLE.SORT_MENU.RESET_SORT': 'Сбросить сортировку',
112
114
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER': 'После',
113
115
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER_GROUP': 'После группы',
@@ -121,6 +123,9 @@ export default {
121
123
  'GRID.TEMPLATE_EDITOR.TITLE': 'Редактор шаблонов',
122
124
  'GRID.TITLEBAR.CANCEL': 'Отмена',
123
125
  'GRID.TITLEBAR.CLEAR_FILTER': 'очистить фильтр',
126
+ 'GRID.TITLEBAR.COPY_SELECTION': 'Копировать выделение',
127
+ 'GRID.TITLEBAR.COPY_SELECTION_CONFIRM': '%d значений будет скопировано в буфер обмена. Продолжить?',
128
+ 'GRID.TITLEBAR.COPY_SELECTION_TOOLTIP': 'Скопировать выбранные строки или ячейки в буфер обмена',
124
129
  'GRID.TITLEBAR.DATA_LIMITED_WARNING': 'Для экономии времени были получены не все записи. В результате часть функциональности ограничена. Нажмите, чтобы получить все данные (это может занять некоторое время).',
125
130
  'GRID.TITLEBAR.DOWNLOAD_CSV': 'Скачать CSV',
126
131
  'GRID.TITLEBAR.GENERATE_CSV': 'Создать CSV',
@@ -138,6 +143,8 @@ export default {
138
143
  'GRID.TITLEBAR.SHOW_HIDE': 'Показать/Скрыть таблицу',
139
144
  'GRID.TITLEBAR.SHOW_HIDE_CONTROLS': 'Показать/Скрыть элементы управления таблицей',
140
145
  'GRID.TITLEBAR.WORKING': 'Выполняется...',
146
+ 'GRID.TOAST.CELLS_COPIED': '%d ячеек скопировано в буфер обмена',
147
+ 'GRID.TOAST.ROWS_COPIED': '%d строк скопировано в буфер обмена',
141
148
  'GRID_CONTROL.AGGREGATE.EDIT_OPTIONS': 'Изменить параметры',
142
149
  'GRID_CONTROL.AGGREGATE.OPTIONS_DIALOG.TITLE': 'Параметры для %s',
143
150
  'GRID_CONTROL.AGGREGATE.TITLE': 'Агрегат',
package/src/lang/th-TH.js CHANGED
@@ -106,8 +106,10 @@ export default {
106
106
  'GRID.TABLE.DRAGGABLE_FIELD_HELP': 'คุณสามารถลากและวางฟิลด์นี้ไปยังตัวควบคุมตารางด้านบนเพื่อกรอง จัดกลุ่ม หรือ Pivot',
107
107
  'GRID.TABLE.REORDER_COLUMN': 'ลากเพื่อเรียงลำดับคอลัมน์ใหม่',
108
108
  'GRID.TABLE.RESIZE_COLUMN': 'ลากเพื่อปรับขนาดคอลัมน์',
109
+ 'GRID.TABLE.SORT_MENU.ADD_TO_SORT': 'เพิ่มในการเรียงลำดับ',
109
110
  'GRID.TABLE.SORT_MENU.ASCENDING': '%s, น้อยไปมาก',
110
111
  'GRID.TABLE.SORT_MENU.DESCENDING': '%s, มากไปน้อย',
112
+ 'GRID.TABLE.SORT_MENU.PRIORITY_BADGE': 'ลำดับความสำคัญการเรียง %d',
111
113
  'GRID.TABLE.SORT_MENU.RESET_SORT': 'รีเซ็ตการเรียงลำดับ',
112
114
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER': 'หลัง',
113
115
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER_GROUP': 'หลังกกลุ่ม',
@@ -121,6 +123,9 @@ export default {
121
123
  'GRID.TEMPLATE_EDITOR.TITLE': 'ตัวแก้ไขเทมเพลต',
122
124
  'GRID.TITLEBAR.CANCEL': 'ยกเลิก',
123
125
  'GRID.TITLEBAR.CLEAR_FILTER': 'ล้างตัวกรอง',
126
+ 'GRID.TITLEBAR.COPY_SELECTION': 'คัดลอกส่วนที่เลือก',
127
+ 'GRID.TITLEBAR.COPY_SELECTION_CONFIRM': 'จะคัดลอก %d ค่าไปยังคลิปบอร์ด ดำเนินการต่อหรือไม่?',
128
+ 'GRID.TITLEBAR.COPY_SELECTION_TOOLTIP': 'คัดลอกแถวหรือเซลล์ที่เลือกไปยังคลิปบอร์ด',
124
129
  'GRID.TITLEBAR.DATA_LIMITED_WARNING': 'เพื่อประหยัดเวลา ไม่ได้ดึงข้อมูลทั้งหมดมาใช้งาน ส่งผลให้ฟังก์ชันบางอย่างถูกจำกัด คลิกเพื่อดึงข้อมูลทั้งหมด (อาจใช้เวลานาน)',
125
130
  'GRID.TITLEBAR.DOWNLOAD_CSV': 'ดาวน์โหลดไฟล์ CSV',
126
131
  'GRID.TITLEBAR.GENERATE_CSV': 'สร้างไฟล์ CSV',
@@ -138,6 +143,8 @@ export default {
138
143
  'GRID.TITLEBAR.SHOW_HIDE': 'แสดง/ซ่อนตาราง',
139
144
  'GRID.TITLEBAR.SHOW_HIDE_CONTROLS': 'แสดง/ซ่อนตัวควบคุมตาราง',
140
145
  'GRID.TITLEBAR.WORKING': 'กำลังทำงาน...',
146
+ 'GRID.TOAST.CELLS_COPIED': 'คัดลอก %d เซลล์ไปยังคลิปบอร์ดแล้ว',
147
+ 'GRID.TOAST.ROWS_COPIED': 'คัดลอก %d แถวไปยังคลิปบอร์ดแล้ว',
141
148
  'GRID_CONTROL.AGGREGATE.EDIT_OPTIONS': 'แก้ไขตัวเลือก',
142
149
  'GRID_CONTROL.AGGREGATE.OPTIONS_DIALOG.TITLE': 'ตัวเลือกสำหรับ %s',
143
150
  'GRID_CONTROL.AGGREGATE.TITLE': 'การรวม',
package/src/lang/vi-VN.js CHANGED
@@ -106,8 +106,10 @@ export default {
106
106
  'GRID.TABLE.DRAGGABLE_FIELD_HELP': 'Bạn có thể kéo & thả trường này vào các điều khiển lưới phía trên để lọc, nhóm hoặc xoay.',
107
107
  'GRID.TABLE.REORDER_COLUMN': 'Kéo để sắp xếp lại cột',
108
108
  'GRID.TABLE.RESIZE_COLUMN': 'Kéo để thay đổi kích thước cột',
109
+ 'GRID.TABLE.SORT_MENU.ADD_TO_SORT': 'Thêm vào sắp xếp',
109
110
  'GRID.TABLE.SORT_MENU.ASCENDING': '%s, Tăng dần',
110
111
  'GRID.TABLE.SORT_MENU.DESCENDING': '%s, Giảm dần',
112
+ 'GRID.TABLE.SORT_MENU.PRIORITY_BADGE': 'Ưu tiên sắp xếp %d',
111
113
  'GRID.TABLE.SORT_MENU.RESET_SORT': 'Đặt lại sắp xếp',
112
114
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER': 'Sau',
113
115
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER_GROUP': 'Sau nhóm',
@@ -121,6 +123,9 @@ export default {
121
123
  'GRID.TEMPLATE_EDITOR.TITLE': 'Trình chỉnh sửa mẫu',
122
124
  'GRID.TITLEBAR.CANCEL': 'Hủy',
123
125
  'GRID.TITLEBAR.CLEAR_FILTER': 'xóa bộ lọc',
126
+ 'GRID.TITLEBAR.COPY_SELECTION': 'Sao chép vùng chọn',
127
+ 'GRID.TITLEBAR.COPY_SELECTION_CONFIRM': '%d giá trị sẽ được sao chép vào bảng tạm. Tiếp tục?',
128
+ 'GRID.TITLEBAR.COPY_SELECTION_TOOLTIP': 'Sao chép các hàng hoặc ô đã chọn vào bảng tạm',
124
129
  'GRID.TITLEBAR.DATA_LIMITED_WARNING': 'Để tiết kiệm thời gian, không phải tất cả bản ghi đều được truy xuất. Do đó, một số chức năng bị giảm. Nhấn để lấy toàn bộ dữ liệu (có thể mất thời gian).',
125
130
  'GRID.TITLEBAR.DOWNLOAD_CSV': 'Tải CSV',
126
131
  'GRID.TITLEBAR.GENERATE_CSV': 'Tạo CSV',
@@ -138,6 +143,8 @@ export default {
138
143
  'GRID.TITLEBAR.SHOW_HIDE': 'Hiện/Ẩn Lưới',
139
144
  'GRID.TITLEBAR.SHOW_HIDE_CONTROLS': 'Hiện/Ẩn Điều Khiển Lưới',
140
145
  'GRID.TITLEBAR.WORKING': 'Đang xử lý...',
146
+ 'GRID.TOAST.CELLS_COPIED': 'Đã sao chép %d ô vào bảng tạm',
147
+ 'GRID.TOAST.ROWS_COPIED': 'Đã sao chép %d hàng vào bảng tạm',
141
148
  'GRID_CONTROL.AGGREGATE.EDIT_OPTIONS': 'Chỉnh sửa tùy chọn',
142
149
  'GRID_CONTROL.AGGREGATE.OPTIONS_DIALOG.TITLE': 'Tùy chọn cho %s',
143
150
  'GRID_CONTROL.AGGREGATE.TITLE': 'Tổng hợp',
@@ -106,8 +106,10 @@ export default {
106
106
  'GRID.TABLE.DRAGGABLE_FIELD_HELP': '你可以将此字段拖放到上方表格控件中以进行筛选、分组或透视。',
107
107
  'GRID.TABLE.REORDER_COLUMN': '拖动以重新排列列',
108
108
  'GRID.TABLE.RESIZE_COLUMN': '拖动以调整列宽',
109
+ 'GRID.TABLE.SORT_MENU.ADD_TO_SORT': '添加到排序',
109
110
  'GRID.TABLE.SORT_MENU.ASCENDING': '%s,升序',
110
111
  'GRID.TABLE.SORT_MENU.DESCENDING': '%s,降序',
112
+ 'GRID.TABLE.SORT_MENU.PRIORITY_BADGE': '排序优先级 %d',
111
113
  'GRID.TABLE.SORT_MENU.RESET_SORT': '重置排序',
112
114
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER': '之后',
113
115
  'GRID.TEMPLATE_EDITOR.CONFIG.AFTER_GROUP': '分组后',
@@ -121,6 +123,9 @@ export default {
121
123
  'GRID.TEMPLATE_EDITOR.TITLE': '模板编辑器',
122
124
  'GRID.TITLEBAR.CANCEL': '取消',
123
125
  'GRID.TITLEBAR.CLEAR_FILTER': '清除筛选',
126
+ 'GRID.TITLEBAR.COPY_SELECTION': '复制所选内容',
127
+ 'GRID.TITLEBAR.COPY_SELECTION_CONFIRM': '将有 %d 个值复制到剪贴板。是否继续?',
128
+ 'GRID.TITLEBAR.COPY_SELECTION_TOOLTIP': '将所选行或单元格复制到剪贴板',
124
129
  'GRID.TITLEBAR.DATA_LIMITED_WARNING': '为节省时间,未检索所有记录,因此部分功能受限。点击以获取全部数据(可能需要一些时间)。',
125
130
  'GRID.TITLEBAR.DOWNLOAD_CSV': '下载 CSV',
126
131
  'GRID.TITLEBAR.GENERATE_CSV': '生成 CSV',
@@ -138,6 +143,8 @@ export default {
138
143
  'GRID.TITLEBAR.SHOW_HIDE': '显示/隐藏表格',
139
144
  'GRID.TITLEBAR.SHOW_HIDE_CONTROLS': '显示/隐藏表格控件',
140
145
  'GRID.TITLEBAR.WORKING': '处理中...',
146
+ 'GRID.TOAST.CELLS_COPIED': '已复制 %d 个单元格到剪贴板',
147
+ 'GRID.TOAST.ROWS_COPIED': '已复制 %d 行到剪贴板',
141
148
  'GRID_CONTROL.AGGREGATE.EDIT_OPTIONS': '编辑选项',
142
149
  'GRID_CONTROL.AGGREGATE.OPTIONS_DIALOG.TITLE': '%s 的选项',
143
150
  'GRID_CONTROL.AGGREGATE.TITLE': '聚合',
@@ -5,7 +5,7 @@ import jQuery from 'jquery';
5
5
 
6
6
  import { trans } from './trans.js';
7
7
  import {
8
- icon,
8
+ makeOperationButton,
9
9
  makeSubclass,
10
10
  mixinLogging,
11
11
  } from './util/misc.js';
@@ -93,20 +93,8 @@ OperationsPalette.prototype.drawPalette = function () {
93
93
  var catLabel = jQuery('<span>').text(c).appendTo(catDiv);
94
94
  }
95
95
  _.each(ops, function (op) {
96
- var btn = jQuery('<button>', {
97
- 'type': 'button',
98
- 'class': 'wcdv_operation',
99
- 'data-operation-index': op.idx
100
- }).appendTo(catDiv);
101
- if (op.label == null) {
102
- btn.addClass('no_label');
103
- }
104
- if (op.icon) {
105
- btn.append(icon(op.icon));
106
- }
107
- if (op.label) {
108
- btn.append(op.label);
109
- }
96
+ var btn = makeOperationButton('all', op, op.idx);
97
+ catDiv.append(btn);
110
98
  });
111
99
  });
112
100
  };