jsxgrid 2.1.0 → 2.3.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.
Files changed (78) hide show
  1. package/README.md +43 -0
  2. package/dist/fields/jsgrid.field.XDateTimeField.min.js +2 -2
  3. package/dist/fields/jsgrid.field.XRowSelectField.min.js +2 -2
  4. package/dist/fields/jsgrid.field.Xcheckbox.min.js +2 -2
  5. package/dist/fields/jsgrid.field.Xcontrol.min.js +2 -2
  6. package/dist/fields/jsgrid.field.XimgField.min.js +2 -2
  7. package/dist/fields/jsgrid.field.Xjsoneditor.min.js +2 -2
  8. package/dist/fields/jsgrid.field.Xnumber.min.js +2 -2
  9. package/dist/fields/jsgrid.field.Xselect.min.js +2 -2
  10. package/dist/fields/jsgrid.field.Xtext.min.js +2 -2
  11. package/dist/fields/jsgrid.field.Xtextarea.min.js +2 -2
  12. package/dist/fields/lib/jsGridSummaryPlugin.min.js +1 -1
  13. package/dist/fields/lib/jsgrid.popup.basic.min.js +1 -1
  14. package/dist/i18n/jsgrid-Ko.js +28 -2
  15. package/dist/i18n/jsgrid-cs.js +28 -2
  16. package/dist/i18n/jsgrid-de.js +28 -2
  17. package/dist/i18n/jsgrid-el.js +28 -2
  18. package/dist/i18n/jsgrid-es.js +28 -2
  19. package/dist/i18n/jsgrid-fa.js +28 -2
  20. package/dist/i18n/jsgrid-fr.js +28 -2
  21. package/dist/i18n/jsgrid-he.js +28 -2
  22. package/dist/i18n/jsgrid-it.js +28 -2
  23. package/dist/i18n/jsgrid-ja.js +28 -2
  24. package/dist/i18n/jsgrid-ka.js +28 -2
  25. package/dist/i18n/jsgrid-lt.js +28 -2
  26. package/dist/i18n/jsgrid-pl.js +28 -2
  27. package/dist/i18n/jsgrid-pt-br.js +28 -2
  28. package/dist/i18n/jsgrid-pt.js +28 -2
  29. package/dist/i18n/jsgrid-ru.js +28 -2
  30. package/dist/i18n/jsgrid-tr.js +28 -2
  31. package/dist/i18n/jsgrid-zh-cn.js +28 -2
  32. package/dist/i18n/jsgrid-zh-tw.js +28 -2
  33. package/dist/jsxgrid-fields.js +61 -13
  34. package/dist/jsxgrid-fields.min.js +2 -2
  35. package/dist/jsxgrid-theme.css +1 -1
  36. package/dist/jsxgrid-xfields.js +98 -18
  37. package/dist/jsxgrid-xfields.min.js +2 -2
  38. package/dist/jsxgrid.css +1 -1
  39. package/dist/jsxgrid.js +59 -5
  40. package/dist/jsxgrid.min.js +2 -2
  41. package/package.json +1 -1
  42. package/src/fields/jsgrid.field.XDateTimeField.js +10 -2
  43. package/src/fields/jsgrid.field.XRowSelectField.js +10 -2
  44. package/src/fields/jsgrid.field.Xcheckbox.js +10 -2
  45. package/src/fields/jsgrid.field.Xcontrol.js +9 -1
  46. package/src/fields/jsgrid.field.XimgField.js +10 -2
  47. package/src/fields/jsgrid.field.Xjsoneditor.js +10 -2
  48. package/src/fields/jsgrid.field.Xnumber.js +9 -1
  49. package/src/fields/jsgrid.field.Xselect.js +10 -2
  50. package/src/fields/jsgrid.field.Xtext.js +9 -1
  51. package/src/fields/jsgrid.field.Xtextarea.js +10 -2
  52. package/src/fields/jsgrid.field.checkbox.js +10 -2
  53. package/src/fields/jsgrid.field.control.js +10 -2
  54. package/src/fields/jsgrid.field.number.js +10 -2
  55. package/src/fields/jsgrid.field.select.js +10 -2
  56. package/src/fields/jsgrid.field.text.js +10 -2
  57. package/src/fields/jsgrid.field.textarea.js +10 -2
  58. package/src/i18n/Ko.js +28 -2
  59. package/src/i18n/cs.js +28 -2
  60. package/src/i18n/de.js +28 -2
  61. package/src/i18n/el.js +28 -2
  62. package/src/i18n/es.js +28 -2
  63. package/src/i18n/fa.js +28 -2
  64. package/src/i18n/fr.js +28 -2
  65. package/src/i18n/he.js +28 -2
  66. package/src/i18n/it.js +28 -2
  67. package/src/i18n/ja.js +28 -2
  68. package/src/i18n/ka.js +28 -2
  69. package/src/i18n/lt.js +28 -2
  70. package/src/i18n/pl.js +28 -2
  71. package/src/i18n/pt-br.js +28 -2
  72. package/src/i18n/pt.js +28 -2
  73. package/src/i18n/ru.js +28 -2
  74. package/src/i18n/tr.js +28 -2
  75. package/src/i18n/zh-cn.js +28 -2
  76. package/src/i18n/zh-tw.js +28 -2
  77. package/src/jsgrid.core.js +51 -2
  78. package/src/jsgrid.validation.js +6 -1
package/src/i18n/it.js CHANGED
@@ -1,4 +1,12 @@
1
- (function(jsGrid) {
1
+ (function(jsGrid) {
2
+
3
+ if (!jsGrid) {
4
+ if (window.console) {
5
+ console.error("[jsxgrid] it.js was loaded before the jsxgrid engine (jsxgrid.js) - include the engine first.");
6
+ }
7
+ return;
8
+ }
9
+
2
10
 
3
11
  jsGrid.locales.it = {
4
12
  grid: {
@@ -28,6 +36,24 @@
28
36
  insertButtonTooltip: "Inserisci",
29
37
  updateButtonTooltip: "Aggiorna",
30
38
  cancelEditButtonTooltip: "Annulla"
39
+ },
40
+ Xcontrol: {
41
+ searchModeButtonTooltip: "Modallità ricerca",
42
+ insertModeButtonTooltip: "Modalità inserimento",
43
+ editButtonTooltip: "Modifica",
44
+ deleteButtonTooltip: "Cancella",
45
+ searchButtonTooltip: "Cerca",
46
+ clearFilterButtonTooltip: "Cancella filtri",
47
+ insertButtonTooltip: "Inserisci",
48
+ updateButtonTooltip: "Aggiorna",
49
+ cancelEditButtonTooltip: "Annulla"
50
+ },
51
+ XimgField: {
52
+ editButtonText: "Apri gestore file"
53
+ },
54
+ Xjsoneditor: {
55
+ editText: "Editor",
56
+ closeText: "Salva"
31
57
  }
32
58
  },
33
59
 
@@ -43,5 +69,5 @@
43
69
  }
44
70
  };
45
71
 
46
- }(jsGrid, jQuery));
72
+ }(window.jsGrid, window.jQuery));
47
73
 
package/src/i18n/ja.js CHANGED
@@ -1,4 +1,12 @@
1
- (function(jsGrid) {
1
+ (function(jsGrid) {
2
+
3
+ if (!jsGrid) {
4
+ if (window.console) {
5
+ console.error("[jsxgrid] ja.js was loaded before the jsxgrid engine (jsxgrid.js) - include the engine first.");
6
+ }
7
+ return;
8
+ }
9
+
2
10
 
3
11
  jsGrid.locales.ja = {
4
12
  grid: {
@@ -28,6 +36,24 @@
28
36
  insertButtonTooltip: "登録",
29
37
  updateButtonTooltip: "更新",
30
38
  cancelEditButtonTooltip: "編集戻す"
39
+ },
40
+ Xcontrol: {
41
+ searchModeButtonTooltip: "検索モードへ",
42
+ insertModeButtonTooltip: "登録モードへ",
43
+ editButtonTooltip: "編集",
44
+ deleteButtonTooltip: "削除",
45
+ searchButtonTooltip: "フィルター",
46
+ clearFilterButtonTooltip: "クリア",
47
+ insertButtonTooltip: "登録",
48
+ updateButtonTooltip: "更新",
49
+ cancelEditButtonTooltip: "編集戻す"
50
+ },
51
+ XimgField: {
52
+ editButtonText: "ファイルマネージャーを開く"
53
+ },
54
+ Xjsoneditor: {
55
+ editText: "エディター",
56
+ closeText: "保存"
31
57
  }
32
58
  },
33
59
 
@@ -43,4 +69,4 @@
43
69
  }
44
70
  };
45
71
 
46
- }(jsGrid, jQuery));
72
+ }(window.jsGrid, window.jQuery));
package/src/i18n/ka.js CHANGED
@@ -1,4 +1,12 @@
1
- (function(jsGrid) {
1
+ (function(jsGrid) {
2
+
3
+ if (!jsGrid) {
4
+ if (window.console) {
5
+ console.error("[jsxgrid] ka.js was loaded before the jsxgrid engine (jsxgrid.js) - include the engine first.");
6
+ }
7
+ return;
8
+ }
9
+
2
10
 
3
11
  jsGrid.locales.ka = {
4
12
  grid: {
@@ -28,6 +36,24 @@
28
36
  insertButtonTooltip: "დამატება",
29
37
  updateButtonTooltip: "შენახვა",
30
38
  cancelEditButtonTooltip: "გაუქმება"
39
+ },
40
+ Xcontrol: {
41
+ searchModeButtonTooltip: "ძებნა",
42
+ insertModeButtonTooltip: "ჩანაწერის დამატება",
43
+ editButtonTooltip: "შესწორება",
44
+ deleteButtonTooltip: "წაშლა",
45
+ searchButtonTooltip: "ძებნა",
46
+ clearFilterButtonTooltip: "ფილტრის გასუფთავება",
47
+ insertButtonTooltip: "დამატება",
48
+ updateButtonTooltip: "შენახვა",
49
+ cancelEditButtonTooltip: "გაუქმება"
50
+ },
51
+ XimgField: {
52
+ editButtonText: "ფაილების მენეჯერის გახსნა"
53
+ },
54
+ Xjsoneditor: {
55
+ editText: "რედაქტორი",
56
+ closeText: "შენახვა"
31
57
  }
32
58
  },
33
59
 
@@ -43,4 +69,4 @@
43
69
  }
44
70
  };
45
71
 
46
- }(jsGrid, jQuery));
72
+ }(window.jsGrid, window.jQuery));
package/src/i18n/lt.js CHANGED
@@ -1,4 +1,12 @@
1
- (function(jsGrid) {
1
+ (function(jsGrid) {
2
+
3
+ if (!jsGrid) {
4
+ if (window.console) {
5
+ console.error("[jsxgrid] lt.js was loaded before the jsxgrid engine (jsxgrid.js) - include the engine first.");
6
+ }
7
+ return;
8
+ }
9
+
2
10
 
3
11
  jsGrid.locales.lt = {
4
12
  grid: {
@@ -28,6 +36,24 @@
28
36
  insertButtonTooltip: "Pridėti",
29
37
  updateButtonTooltip: "Išsaugoti",
30
38
  cancelEditButtonTooltip: "Atšaukti"
39
+ },
40
+ Xcontrol: {
41
+ searchModeButtonTooltip: "Paieška",
42
+ insertModeButtonTooltip: "Naujas įrašas",
43
+ editButtonTooltip: "Pakeisti",
44
+ deleteButtonTooltip: "Pašalinti",
45
+ searchButtonTooltip: "Surasti",
46
+ clearFilterButtonTooltip: "Išvalyti filtrą",
47
+ insertButtonTooltip: "Pridėti",
48
+ updateButtonTooltip: "Išsaugoti",
49
+ cancelEditButtonTooltip: "Atšaukti"
50
+ },
51
+ XimgField: {
52
+ editButtonText: "Atidaryti failų tvarkyklę"
53
+ },
54
+ Xjsoneditor: {
55
+ editText: "Redaktorius",
56
+ closeText: "Išsaugoti"
31
57
  }
32
58
  },
33
59
 
@@ -43,5 +69,5 @@
43
69
  }
44
70
  };
45
71
 
46
- }(jsGrid, jQuery));
72
+ }(window.jsGrid, window.jQuery));
47
73
 
package/src/i18n/pl.js CHANGED
@@ -1,4 +1,12 @@
1
- (function(jsGrid) {
1
+ (function(jsGrid) {
2
+
3
+ if (!jsGrid) {
4
+ if (window.console) {
5
+ console.error("[jsxgrid] pl.js was loaded before the jsxgrid engine (jsxgrid.js) - include the engine first.");
6
+ }
7
+ return;
8
+ }
9
+
2
10
 
3
11
  jsGrid.locales.pl = {
4
12
  grid: {
@@ -28,6 +36,24 @@
28
36
  insertButtonTooltip: "Dodaj",
29
37
  updateButtonTooltip: "Aktualizuj",
30
38
  cancelEditButtonTooltip: "Anuluj edytowanie"
39
+ },
40
+ Xcontrol: {
41
+ searchModeButtonTooltip: "Wyszukiwanie",
42
+ insertModeButtonTooltip: "Dodawanie",
43
+ editButtonTooltip: "Edytuj",
44
+ deleteButtonTooltip: "Usuń",
45
+ searchButtonTooltip: "Szukaj",
46
+ clearFilterButtonTooltip: "Wyczyść filtr",
47
+ insertButtonTooltip: "Dodaj",
48
+ updateButtonTooltip: "Aktualizuj",
49
+ cancelEditButtonTooltip: "Anuluj edytowanie"
50
+ },
51
+ XimgField: {
52
+ editButtonText: "Otwórz menedżera plików"
53
+ },
54
+ Xjsoneditor: {
55
+ editText: "Edytor",
56
+ closeText: "Zapisz"
31
57
  }
32
58
  },
33
59
 
@@ -59,4 +85,4 @@
59
85
  }
60
86
  };
61
87
 
62
- }(jsGrid, jQuery));
88
+ }(window.jsGrid, window.jQuery));
package/src/i18n/pt-br.js CHANGED
@@ -1,4 +1,12 @@
1
- (function(jsGrid) {
1
+ (function(jsGrid) {
2
+
3
+ if (!jsGrid) {
4
+ if (window.console) {
5
+ console.error("[jsxgrid] pt-br.js was loaded before the jsxgrid engine (jsxgrid.js) - include the engine first.");
6
+ }
7
+ return;
8
+ }
9
+
2
10
 
3
11
  jsGrid.locales["pt-br"] = {
4
12
  grid: {
@@ -28,6 +36,24 @@
28
36
  insertButtonTooltip: "Adicionar",
29
37
  updateButtonTooltip: "Atualizar",
30
38
  cancelEditButtonTooltip: "Cancelar Edição"
39
+ },
40
+ Xcontrol: {
41
+ searchModeButtonTooltip: "Mudar para busca",
42
+ insertModeButtonTooltip: "Mudar para inserção",
43
+ editButtonTooltip: "Editar",
44
+ deleteButtonTooltip: "Remover",
45
+ searchButtonTooltip: "Buscar",
46
+ clearFilterButtonTooltip: "Remover filtro",
47
+ insertButtonTooltip: "Adicionar",
48
+ updateButtonTooltip: "Atualizar",
49
+ cancelEditButtonTooltip: "Cancelar Edição"
50
+ },
51
+ XimgField: {
52
+ editButtonText: "Abrir gerenciador de arquivos"
53
+ },
54
+ Xjsoneditor: {
55
+ editText: "Editor",
56
+ closeText: "Salvar"
31
57
  }
32
58
  },
33
59
 
@@ -43,4 +69,4 @@
43
69
  }
44
70
  };
45
71
 
46
- }(jsGrid, jQuery));
72
+ }(window.jsGrid, window.jQuery));
package/src/i18n/pt.js CHANGED
@@ -1,4 +1,12 @@
1
- (function(jsGrid) {
1
+ (function(jsGrid) {
2
+
3
+ if (!jsGrid) {
4
+ if (window.console) {
5
+ console.error("[jsxgrid] pt.js was loaded before the jsxgrid engine (jsxgrid.js) - include the engine first.");
6
+ }
7
+ return;
8
+ }
9
+
2
10
 
3
11
  jsGrid.locales.pt = {
4
12
  grid: {
@@ -28,6 +36,24 @@
28
36
  insertButtonTooltip: "Adicionar",
29
37
  updateButtonTooltip: "Atualizar",
30
38
  cancelEditButtonTooltip: "Cancelar Edição"
39
+ },
40
+ Xcontrol: {
41
+ searchModeButtonTooltip: "Mudar para busca",
42
+ insertModeButtonTooltip: "Mudar para inserção",
43
+ editButtonTooltip: "Editar",
44
+ deleteButtonTooltip: "Remover",
45
+ searchButtonTooltip: "Buscar",
46
+ clearFilterButtonTooltip: "Remover filtro",
47
+ insertButtonTooltip: "Adicionar",
48
+ updateButtonTooltip: "Atualizar",
49
+ cancelEditButtonTooltip: "Cancelar Edição"
50
+ },
51
+ XimgField: {
52
+ editButtonText: "Abrir gestor de ficheiros"
53
+ },
54
+ Xjsoneditor: {
55
+ editText: "Editor",
56
+ closeText: "Guardar"
31
57
  }
32
58
  },
33
59
 
@@ -43,4 +69,4 @@
43
69
  }
44
70
  };
45
71
 
46
- }(jsGrid, jQuery));
72
+ }(window.jsGrid, window.jQuery));
package/src/i18n/ru.js CHANGED
@@ -1,4 +1,12 @@
1
- (function(jsGrid) {
1
+ (function(jsGrid) {
2
+
3
+ if (!jsGrid) {
4
+ if (window.console) {
5
+ console.error("[jsxgrid] ru.js was loaded before the jsxgrid engine (jsxgrid.js) - include the engine first.");
6
+ }
7
+ return;
8
+ }
9
+
2
10
 
3
11
  jsGrid.locales.ru = {
4
12
  grid: {
@@ -28,6 +36,24 @@
28
36
  insertButtonTooltip: "Добавить",
29
37
  updateButtonTooltip: "Сохранить",
30
38
  cancelEditButtonTooltip: "Отменить"
39
+ },
40
+ Xcontrol: {
41
+ searchModeButtonTooltip: "Поиск",
42
+ insertModeButtonTooltip: "Добавить запись",
43
+ editButtonTooltip: "Изменить",
44
+ deleteButtonTooltip: "Удалить",
45
+ searchButtonTooltip: "Найти",
46
+ clearFilterButtonTooltip: "Очистить фильтр",
47
+ insertButtonTooltip: "Добавить",
48
+ updateButtonTooltip: "Сохранить",
49
+ cancelEditButtonTooltip: "Отменить"
50
+ },
51
+ XimgField: {
52
+ editButtonText: "Открыть менеджер файлов"
53
+ },
54
+ Xjsoneditor: {
55
+ editText: "Редактор",
56
+ closeText: "Сохранить"
31
57
  }
32
58
  },
33
59
 
@@ -43,5 +69,5 @@
43
69
  }
44
70
  };
45
71
 
46
- }(jsGrid, jQuery));
72
+ }(window.jsGrid, window.jQuery));
47
73
 
package/src/i18n/tr.js CHANGED
@@ -1,4 +1,12 @@
1
- (function(jsGrid) {
1
+ (function(jsGrid) {
2
+
3
+ if (!jsGrid) {
4
+ if (window.console) {
5
+ console.error("[jsxgrid] tr.js was loaded before the jsxgrid engine (jsxgrid.js) - include the engine first.");
6
+ }
7
+ return;
8
+ }
9
+
2
10
 
3
11
  jsGrid.locales.tr = {
4
12
  grid: {
@@ -28,6 +36,24 @@
28
36
  insertButtonTooltip: "Ekle",
29
37
  updateButtonTooltip: "Güncelle",
30
38
  cancelEditButtonTooltip: "Güncelleme iptali"
39
+ },
40
+ Xcontrol: {
41
+ searchModeButtonTooltip: "Arama moduna geç",
42
+ insertModeButtonTooltip: "Yeni kayıt moduna geç",
43
+ editButtonTooltip: "Değiştir",
44
+ deleteButtonTooltip: "Sil",
45
+ searchButtonTooltip: "Bul",
46
+ clearFilterButtonTooltip: "Filtreyi temizle",
47
+ insertButtonTooltip: "Ekle",
48
+ updateButtonTooltip: "Güncelle",
49
+ cancelEditButtonTooltip: "Güncelleme iptali"
50
+ },
51
+ XimgField: {
52
+ editButtonText: "Dosya yöneticisini aç"
53
+ },
54
+ Xjsoneditor: {
55
+ editText: "Düzenleyici",
56
+ closeText: "Kaydet"
31
57
  }
32
58
  },
33
59
 
@@ -43,5 +69,5 @@
43
69
  }
44
70
  };
45
71
 
46
- }(jsGrid, jQuery));
72
+ }(window.jsGrid, window.jQuery));
47
73
 
package/src/i18n/zh-cn.js CHANGED
@@ -1,4 +1,12 @@
1
- (function(jsGrid) {
1
+ (function(jsGrid) {
2
+
3
+ if (!jsGrid) {
4
+ if (window.console) {
5
+ console.error("[jsxgrid] zh-cn.js was loaded before the jsxgrid engine (jsxgrid.js) - include the engine first.");
6
+ }
7
+ return;
8
+ }
9
+
2
10
 
3
11
  jsGrid.locales["zh-cn"] = {
4
12
  grid: {
@@ -28,6 +36,24 @@
28
36
  insertButtonTooltip: "插入",
29
37
  updateButtonTooltip: "更新",
30
38
  cancelEditButtonTooltip: "取消编辑"
39
+ },
40
+ Xcontrol: {
41
+ searchModeButtonTooltip: "切换为搜索",
42
+ insertModeButtonTooltip: "切换为新增",
43
+ editButtonTooltip: "编辑",
44
+ deleteButtonTooltip: "删除",
45
+ searchButtonTooltip: "搜索",
46
+ clearFilterButtonTooltip: "清空过滤",
47
+ insertButtonTooltip: "插入",
48
+ updateButtonTooltip: "更新",
49
+ cancelEditButtonTooltip: "取消编辑"
50
+ },
51
+ XimgField: {
52
+ editButtonText: "打开文件管理器"
53
+ },
54
+ Xjsoneditor: {
55
+ editText: "编辑器",
56
+ closeText: "保存"
31
57
  }
32
58
  },
33
59
 
@@ -43,4 +69,4 @@
43
69
  }
44
70
  };
45
71
 
46
- }(jsGrid, jQuery));
72
+ }(window.jsGrid, window.jQuery));
package/src/i18n/zh-tw.js CHANGED
@@ -1,4 +1,12 @@
1
- (function(jsGrid) {
1
+ (function(jsGrid) {
2
+
3
+ if (!jsGrid) {
4
+ if (window.console) {
5
+ console.error("[jsxgrid] zh-tw.js was loaded before the jsxgrid engine (jsxgrid.js) - include the engine first.");
6
+ }
7
+ return;
8
+ }
9
+
2
10
 
3
11
  jsGrid.locales["zh-tw"] = {
4
12
  grid: {
@@ -28,6 +36,24 @@
28
36
  insertButtonTooltip: "新增",
29
37
  updateButtonTooltip: "修改",
30
38
  cancelEditButtonTooltip: "取消編輯"
39
+ },
40
+ Xcontrol: {
41
+ searchModeButtonTooltip: "切換為搜尋",
42
+ insertModeButtonTooltip: "切換為新增",
43
+ editButtonTooltip: "編輯",
44
+ deleteButtonTooltip: "刪除",
45
+ searchButtonTooltip: "搜尋",
46
+ clearFilterButtonTooltip: "清除搜尋條件",
47
+ insertButtonTooltip: "新增",
48
+ updateButtonTooltip: "修改",
49
+ cancelEditButtonTooltip: "取消編輯"
50
+ },
51
+ XimgField: {
52
+ editButtonText: "開啟檔案總管"
53
+ },
54
+ Xjsoneditor: {
55
+ editText: "編輯器",
56
+ closeText: "儲存"
31
57
  }
32
58
  },
33
59
 
@@ -43,4 +69,4 @@
43
69
  }
44
70
  };
45
71
 
46
- }(jsGrid, jQuery));
72
+ }(window.jsGrid, window.jQuery));
@@ -83,6 +83,14 @@
83
83
  height: "auto",
84
84
  updateOnResize: true,
85
85
 
86
+ // Per-instance locale: a key from jsGrid.locales (e.g. "ru"), or an
87
+ // inline locale config object with the same {grid, fields} shape.
88
+ // Applied once at construction time, before the rest of `config` -
89
+ // any option the caller also sets explicitly still wins. Unlike
90
+ // jsGrid.locale(), this never touches shared prototypes, so two
91
+ // grids on the same page can run in different languages at once.
92
+ locale: null,
93
+
86
94
  rowClass: $.noop,
87
95
  rowRenderer: null,
88
96
 
@@ -196,6 +204,7 @@
196
204
  gridBodyClass: "jsgrid-grid-body",
197
205
 
198
206
  _init: function(config) {
207
+ this._initInstanceLocale(config && config.locale);
199
208
  $.extend(this, config);
200
209
  this._initLoadStrategy();
201
210
  this._initController();
@@ -205,6 +214,24 @@
205
214
  this._callEventHandler(this.onInit)
206
215
  },
207
216
 
217
+ _initInstanceLocale: function(locale) {
218
+ if(!locale) {
219
+ return;
220
+ }
221
+
222
+ var localeConfig = $.isPlainObject(locale) ? locale : jsGrid.locales[locale];
223
+ if(!localeConfig) {
224
+ return;
225
+ }
226
+
227
+ if(localeConfig.grid) {
228
+ $.extend(this, localeConfig.grid);
229
+ }
230
+
231
+ this._fieldsLocaleConfig = localeConfig.fields;
232
+ this._validatorsLocaleConfig = localeConfig.validators;
233
+ },
234
+
208
235
  loadStrategy: function() {
209
236
  return this.pageLoading
210
237
  ? new jsGrid.loadStrategies.PageLoadingStrategy(this)
@@ -241,9 +268,22 @@
241
268
 
242
269
  _initFields: function() {
243
270
  var self = this;
271
+ var fieldsLocale = self._fieldsLocaleConfig;
244
272
  self.fields = $.map(self.fields, function(field) {
245
273
  if($.isPlainObject(field)) {
274
+ if(field.type && !jsGrid.fields[field.type] && window.console) {
275
+ // falls back to the plain base Field below (no filter/insert/edit
276
+ // templates), which otherwise fails completely silently - most
277
+ // often caused by the field's script loading before the engine,
278
+ // or before the field type it's supposed to register
279
+ console.warn("[jsxgrid] unknown field type \"" + field.type + "\" - falling back to the base field (no filtering/inserting/editing UI). Check that its script is loaded, and after jsxgrid.js.");
280
+ }
246
281
  var fieldConstructor = (field.type && jsGrid.fields[field.type]) || jsGrid.Field;
282
+ var fieldLocale = fieldsLocale && field.type && fieldsLocale[field.type];
283
+ if(fieldLocale) {
284
+ // locale strings are defaults; explicit keys on the field config still win
285
+ field = $.extend({}, fieldLocale, field);
286
+ }
247
287
  field = new fieldConstructor(field);
248
288
  }
249
289
  field._grid = self;
@@ -415,7 +455,9 @@
415
455
  },
416
456
 
417
457
  _createValidation: function() {
418
- return getOrApply(this.validation, this);
458
+ return getOrApply(this.validation, this, {
459
+ validatorsLocale: this._validatorsLocaleConfig
460
+ });
419
461
  },
420
462
 
421
463
  _clear: function() {
@@ -1629,6 +1671,13 @@
1629
1671
  };
1630
1672
 
1631
1673
  var setLocale = function(obj, localeConfig) {
1674
+ if(!obj) {
1675
+ // target not loaded on the page (e.g. a locale file's fields.control
1676
+ // section with no native control.js loaded) - skip this branch
1677
+ // instead of throwing and aborting the rest of the locale.
1678
+ return;
1679
+ }
1680
+
1632
1681
  $.each(localeConfig, function(field, value) {
1633
1682
  if($.isPlainObject(value)) {
1634
1683
  setLocale(obj[field] || obj[field[0].toUpperCase() + field.slice(1)], value);
@@ -1637,7 +1686,7 @@
1637
1686
 
1638
1687
  if(obj.hasOwnProperty(field)) {
1639
1688
  obj[field] = value;
1640
- } else {
1689
+ } else if(obj.prototype) {
1641
1690
  obj.prototype[field] = value;
1642
1691
  }
1643
1692
  });
@@ -62,7 +62,12 @@
62
62
  validator = { validator: validator };
63
63
  }
64
64
 
65
- return $.extend({}, validator, rule);
65
+ // this grid's own locale (jsGrid's `locale` init option), if any,
66
+ // overrides the shared default message but still loses to a message
67
+ // set explicitly on the rule itself
68
+ var localeOverride = this.validatorsLocale && this.validatorsLocale[validatorName];
69
+
70
+ return $.extend({}, validator, localeOverride, rule);
66
71
  }
67
72
  };
68
73