@themarioga/grid-editor 8.3.0 → 8.4.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/CHANGELOG.md +22 -0
- package/README.md +17 -1
- package/dist/grideditor.bundle.min.js +3 -3
- package/dist/grideditor.css +49 -0
- package/dist/grideditor.d.ts +4 -0
- package/dist/grideditor.esm.js +200 -8
- package/dist/grideditor.js +200 -8
- package/dist/grideditor.min.css +1 -1
- package/dist/grideditor.min.css.map +1 -1
- package/dist/grideditor.min.js +2 -2
- package/dist/grideditor.min.js.map +3 -3
- package/dist/locales/grideditor.es.esm.js +3 -0
- package/dist/locales/grideditor.es.js +3 -0
- package/dist/locales/grideditor.es.min.js +1 -1
- package/dist/locales/grideditor.es.min.js.map +2 -2
- package/dist/plugins/grideditor.ckeditor.esm.js +1 -0
- package/dist/plugins/grideditor.ckeditor.js +1 -0
- package/dist/plugins/grideditor.ckeditor.min.js +1 -1
- package/dist/plugins/grideditor.ckeditor.min.js.map +2 -2
- package/dist/plugins/grideditor.sections.esm.js +1 -0
- package/dist/plugins/grideditor.sections.js +1 -0
- package/dist/plugins/grideditor.sections.min.js +1 -1
- package/dist/plugins/grideditor.sections.min.js.map +2 -2
- package/dist/plugins/grideditor.summernote.esm.js +1 -0
- package/dist/plugins/grideditor.summernote.js +1 -0
- package/dist/plugins/grideditor.summernote.min.js +1 -1
- package/dist/plugins/grideditor.summernote.min.js.map +2 -2
- package/dist/plugins/grideditor.tinymce.esm.js +1 -0
- package/dist/plugins/grideditor.tinymce.js +1 -0
- package/dist/plugins/grideditor.tinymce.min.js +1 -1
- package/dist/plugins/grideditor.tinymce.min.js.map +2 -2
- package/docs/locale-keys.md +4 -1
- package/docs/plugins.md +22 -0
- package/package.json +1 -1
- package/src/js/grideditor.js +246 -8
- package/src/js/locales/grideditor.es.js +3 -0
- package/src/js/plugins/grideditor.sections.js +1 -0
- package/src/js/text/grideditor.text.js +1 -0
- package/src/less/grideditor.less +58 -0
- package/types/grideditor.d.ts +4 -0
package/dist/grideditor.css
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
position: relative;
|
|
3
3
|
min-height: 22px;
|
|
4
4
|
margin-bottom: 10px;
|
|
5
|
+
/* toolbar_groups: the tabs choosing which category of add buttons
|
|
6
|
+
shows, at the start of the line. Never squeezed, and never behind the
|
|
7
|
+
more button */
|
|
5
8
|
/* toolbar_overflow: 'menu'. The add buttons keep to one line, and the
|
|
6
9
|
ones that don't fit go behind a button at its end. The right-hand
|
|
7
10
|
buttons come before in the markup, so they are ordered back to how
|
|
@@ -49,6 +52,13 @@
|
|
|
49
52
|
.ge-mainControls .ge-layout-mode {
|
|
50
53
|
margin-left: 5px;
|
|
51
54
|
}
|
|
55
|
+
.ge-mainControls .ge-toolbar-groups {
|
|
56
|
+
flex: none;
|
|
57
|
+
margin-right: 8px;
|
|
58
|
+
}
|
|
59
|
+
.ge-mainControls .ge-toolbar-groups > .btn {
|
|
60
|
+
white-space: nowrap;
|
|
61
|
+
}
|
|
52
62
|
.ge-mainControls .ge-wrapper.ge-toolbar-menu {
|
|
53
63
|
display: flex;
|
|
54
64
|
align-items: flex-start;
|
|
@@ -70,6 +80,14 @@
|
|
|
70
80
|
flex: 1 1 auto;
|
|
71
81
|
min-width: 0;
|
|
72
82
|
overflow: hidden;
|
|
83
|
+
/* A group as wide as its buttons and a button as wide as its label:
|
|
84
|
+
squeezed, they would wrap their labels rather than overflow */
|
|
85
|
+
}
|
|
86
|
+
.ge-mainControls .ge-toolbar-start > .btn-group {
|
|
87
|
+
flex: none;
|
|
88
|
+
}
|
|
89
|
+
.ge-mainControls .ge-toolbar-start .btn {
|
|
90
|
+
white-space: nowrap;
|
|
73
91
|
}
|
|
74
92
|
.ge-mainControls .ge-toolbar-more {
|
|
75
93
|
display: none;
|
|
@@ -966,6 +984,37 @@
|
|
|
966
984
|
.ge-canvas.ge-editing .column.ge-resizing > .ge-tools-drawer > .ge-resize-size {
|
|
967
985
|
display: block;
|
|
968
986
|
}
|
|
987
|
+
/* drawer_overflow: 'menu'. A drawer keeps its tools to one line; the ones
|
|
988
|
+
that don't fit are hidden behind a more tool at its end, which unfolds it
|
|
989
|
+
to show them all */
|
|
990
|
+
.ge-canvas.ge-editing .ge-tools-drawer.ge-drawer-fit {
|
|
991
|
+
white-space: nowrap;
|
|
992
|
+
}
|
|
993
|
+
.ge-canvas.ge-editing .ge-tools-drawer.ge-drawer-fit > .ge-details {
|
|
994
|
+
white-space: normal;
|
|
995
|
+
}
|
|
996
|
+
.ge-canvas.ge-editing .ge-tools-drawer.ge-drawer-fit > a.ge-tool-overflow,
|
|
997
|
+
.ge-canvas.ge-editing .ge-tools-drawer.ge-drawer-fit > a.ge-drawer-more {
|
|
998
|
+
display: none;
|
|
999
|
+
}
|
|
1000
|
+
.ge-canvas.ge-editing .ge-tools-drawer.ge-drawer-fit.ge-drawer-overflow {
|
|
1001
|
+
padding-right: 26px;
|
|
1002
|
+
}
|
|
1003
|
+
.ge-canvas.ge-editing .ge-tools-drawer.ge-drawer-fit.ge-drawer-overflow > a.ge-drawer-more {
|
|
1004
|
+
display: inline-block;
|
|
1005
|
+
position: absolute;
|
|
1006
|
+
top: 0;
|
|
1007
|
+
right: 0;
|
|
1008
|
+
}
|
|
1009
|
+
.ge-canvas.ge-editing .ge-tools-drawer.ge-drawer-fit.ge-drawer-expanded {
|
|
1010
|
+
white-space: normal;
|
|
1011
|
+
}
|
|
1012
|
+
.ge-canvas.ge-editing .ge-tools-drawer.ge-drawer-fit.ge-drawer-expanded > a.ge-tool-overflow {
|
|
1013
|
+
display: inline-block;
|
|
1014
|
+
}
|
|
1015
|
+
.ge-canvas.ge-editing .ge-tools-drawer.ge-drawer-fit.ge-drawer-expanded > a.ge-drawer-more {
|
|
1016
|
+
background: rgba(0, 0, 0, 0.08);
|
|
1017
|
+
}
|
|
969
1018
|
/* The handle belongs to editing, and never to the output */
|
|
970
1019
|
.ge-canvas:not(.ge-editing) .ge-resize-handle {
|
|
971
1020
|
display: none;
|
package/dist/grideditor.d.ts
CHANGED
|
@@ -109,6 +109,10 @@ export interface GridEditorOptions {
|
|
|
109
109
|
toolbar_drag?: 'auto' | boolean;
|
|
110
110
|
/** The add buttons that don't fit on the toolbar's line: behind a more button, or onto another line. Default 'menu'. */
|
|
111
111
|
toolbar_overflow?: 'menu' | 'wrap';
|
|
112
|
+
/** The drawers' tools that don't fit on one line: behind a more tool, or onto more lines. Default 'menu'. */
|
|
113
|
+
drawer_overflow?: 'menu' | 'wrap';
|
|
114
|
+
/** The add buttons in categories - rows, content, and a plugin's own - one shown at a time, chosen with tabs. Default false. */
|
|
115
|
+
toolbar_groups?: boolean;
|
|
112
116
|
/** A click in a column or a section makes it where the toolbar's buttons add. Default false. */
|
|
113
117
|
active_target?: boolean;
|
|
114
118
|
/** The plugins to use, of any kind; null is every one loaded. */
|
package/dist/grideditor.esm.js
CHANGED
|
@@ -444,6 +444,10 @@ function translate(settings, key, params) {
|
|
|
444
444
|
return params && params[name] !== void 0 ? params[name] : placeholder;
|
|
445
445
|
});
|
|
446
446
|
}
|
|
447
|
+
function hasString(settings, key) {
|
|
448
|
+
var locales = GridEditor.locales;
|
|
449
|
+
return (settings.locale_strings || {})[key] !== void 0 || (locales[settings.locale] || {})[key] !== void 0 || locales.en[key] !== void 0;
|
|
450
|
+
}
|
|
447
451
|
function warn(message) {
|
|
448
452
|
if (window.console && window.console.warn) {
|
|
449
453
|
window.console.warn("grid-editor: " + message);
|
|
@@ -572,6 +576,10 @@ function build(instance, baseElem, optionsOrMethod) {
|
|
|
572
576
|
// Drag the toolbar's buttons onto the canvas. 'auto' follows drag_handle
|
|
573
577
|
"toolbar_overflow": "menu",
|
|
574
578
|
// What doesn't fit on one line: 'menu' behind a button, 'wrap' onto another line
|
|
579
|
+
"drawer_overflow": "menu",
|
|
580
|
+
// The same for the drawers' tools: 'menu' behind a button, 'wrap' onto another line
|
|
581
|
+
"toolbar_groups": false,
|
|
582
|
+
// The add buttons in categories, one shown at a time, picked with tabs
|
|
575
583
|
"active_target": false,
|
|
576
584
|
// A click in a column makes it where the toolbar's buttons add
|
|
577
585
|
"element_tools": [],
|
|
@@ -639,6 +647,10 @@ function build(instance, baseElem, optionsOrMethod) {
|
|
|
639
647
|
var toolbarLifetime = null;
|
|
640
648
|
var closeOverflowMenu = function() {
|
|
641
649
|
};
|
|
650
|
+
var refitToolbar = function() {
|
|
651
|
+
};
|
|
652
|
+
var addButtons = [];
|
|
653
|
+
var toolbarGroup = null;
|
|
642
654
|
var warnedHere = {};
|
|
643
655
|
var sortables = [];
|
|
644
656
|
var instanceId = ++editorCounter;
|
|
@@ -1035,6 +1047,7 @@ function build(instance, baseElem, optionsOrMethod) {
|
|
|
1035
1047
|
htmlTextArea = element("textarea", { "class": "ge-html-output" });
|
|
1036
1048
|
canvas.parentNode.insertBefore(htmlTextArea, canvas);
|
|
1037
1049
|
createMainControls();
|
|
1050
|
+
watchDrawers();
|
|
1038
1051
|
var signal = { signal: lifetime.signal };
|
|
1039
1052
|
window.addEventListener("scroll", onScroll, signal);
|
|
1040
1053
|
delegate(canvas, "click", ".ge-content", onContentClick, signal);
|
|
@@ -1058,6 +1071,10 @@ function build(instance, baseElem, optionsOrMethod) {
|
|
|
1058
1071
|
return;
|
|
1059
1072
|
}
|
|
1060
1073
|
var region = closest(e.target, targetSelector());
|
|
1074
|
+
if (region && region === activeTarget && (e.target === region || e.target === child(region, ".ge-tools-drawer"))) {
|
|
1075
|
+
changeTarget(null);
|
|
1076
|
+
return;
|
|
1077
|
+
}
|
|
1061
1078
|
changeTarget(region && region !== canvas && canvas.contains(region) ? region : null);
|
|
1062
1079
|
}, signal);
|
|
1063
1080
|
document.addEventListener("keydown", function(e) {
|
|
@@ -1089,6 +1106,7 @@ function build(instance, baseElem, optionsOrMethod) {
|
|
|
1089
1106
|
addClass(wrapper, "ge-toolbar-menu");
|
|
1090
1107
|
start = wrapper.appendChild(element("div", { "class": "ge-toolbar-start" }));
|
|
1091
1108
|
}
|
|
1109
|
+
addButtons = [];
|
|
1092
1110
|
addRowGroup = start.appendChild(element("div", { "class": "ge-addRowGroup btn-group" }));
|
|
1093
1111
|
addContainerGroup = element("div", { "class": "ge-addContainerGroup btn-group ms-1" });
|
|
1094
1112
|
settings.new_row_layouts.forEach(function(layout) {
|
|
@@ -1115,6 +1133,7 @@ function build(instance, baseElem, optionsOrMethod) {
|
|
|
1115
1133
|
}
|
|
1116
1134
|
});
|
|
1117
1135
|
addRowGroup.appendChild(btn);
|
|
1136
|
+
addButtons.push({ button: btn, home: addRowGroup, group: "rows" });
|
|
1118
1137
|
btn.appendChild(create('<i class="bi bi-plus"></i>'));
|
|
1119
1138
|
var sizes = grouped ? rowColsIcon(layout) : layout;
|
|
1120
1139
|
var icon = '<div class="row ge-row-icon">';
|
|
@@ -1146,6 +1165,7 @@ function build(instance, baseElem, optionsOrMethod) {
|
|
|
1146
1165
|
}, { parent: canvas, source: "tool" });
|
|
1147
1166
|
});
|
|
1148
1167
|
addContainerGroup.appendChild(button);
|
|
1168
|
+
addButtons.push({ button, home: addContainerGroup, group: toolbarGroupOf(definition.group) || "content" });
|
|
1149
1169
|
});
|
|
1150
1170
|
var endItems = [];
|
|
1151
1171
|
Object.keys(FEATURES).forEach(function(name) {
|
|
@@ -1155,6 +1175,7 @@ function build(instance, baseElem, optionsOrMethod) {
|
|
|
1155
1175
|
endItems.push(button);
|
|
1156
1176
|
} else {
|
|
1157
1177
|
addContainerGroup.appendChild(button);
|
|
1178
|
+
addButtons.push({ button, home: addContainerGroup, group: toolbarGroupOf(item.group) || name });
|
|
1158
1179
|
}
|
|
1159
1180
|
});
|
|
1160
1181
|
});
|
|
@@ -1208,11 +1229,81 @@ function build(instance, baseElem, optionsOrMethod) {
|
|
|
1208
1229
|
end.appendChild(button);
|
|
1209
1230
|
});
|
|
1210
1231
|
}
|
|
1232
|
+
if (settings.toolbar_groups) {
|
|
1233
|
+
createGroupTabs(start);
|
|
1234
|
+
}
|
|
1211
1235
|
if (overflowMenu) {
|
|
1212
1236
|
createOverflowMenu(start);
|
|
1213
1237
|
}
|
|
1214
1238
|
makeToolbarDraggable();
|
|
1215
1239
|
}
|
|
1240
|
+
var CORE_GROUPS = [
|
|
1241
|
+
{ name: "rows", labelKey: "group.rows" },
|
|
1242
|
+
{ name: "content", labelKey: "group.content" }
|
|
1243
|
+
];
|
|
1244
|
+
function toolbarGroupOf(value) {
|
|
1245
|
+
return typeof value === "string" && value.trim() !== "" ? value : null;
|
|
1246
|
+
}
|
|
1247
|
+
function createGroupTabs(start) {
|
|
1248
|
+
var names = CORE_GROUPS.map(function(group) {
|
|
1249
|
+
return group.name;
|
|
1250
|
+
});
|
|
1251
|
+
addButtons.forEach(function(entry) {
|
|
1252
|
+
if (names.indexOf(entry.group) < 0) {
|
|
1253
|
+
names.push(entry.group);
|
|
1254
|
+
}
|
|
1255
|
+
});
|
|
1256
|
+
names = names.filter(function(name) {
|
|
1257
|
+
return addButtons.some(function(entry) {
|
|
1258
|
+
return entry.group === name;
|
|
1259
|
+
});
|
|
1260
|
+
});
|
|
1261
|
+
if (names.length < 2) {
|
|
1262
|
+
return;
|
|
1263
|
+
}
|
|
1264
|
+
var tabs = element("div", { "class": "ge-toolbar-groups btn-group", role: "tablist", "aria-label": t("group.select") });
|
|
1265
|
+
start.insertBefore(tabs, start.firstChild);
|
|
1266
|
+
var stash = mainControls.appendChild(element("div", { "class": "ge-toolbar-stash", hidden: "hidden" }));
|
|
1267
|
+
names.forEach(function(name) {
|
|
1268
|
+
var tab = tabs.appendChild(element("button", {
|
|
1269
|
+
type: "button",
|
|
1270
|
+
"class": "btn btn-sm btn-outline-primary",
|
|
1271
|
+
role: "tab",
|
|
1272
|
+
"data-ge-group": name
|
|
1273
|
+
}, groupLabel(name)));
|
|
1274
|
+
tab.addEventListener("click", function() {
|
|
1275
|
+
showGroup(name);
|
|
1276
|
+
});
|
|
1277
|
+
});
|
|
1278
|
+
showGroup(names.indexOf(toolbarGroup) >= 0 ? toolbarGroup : names[0]);
|
|
1279
|
+
function showGroup(name) {
|
|
1280
|
+
toolbarGroup = name;
|
|
1281
|
+
addButtons.forEach(function(entry) {
|
|
1282
|
+
(entry.group === name ? entry.home : stash).appendChild(entry.button);
|
|
1283
|
+
});
|
|
1284
|
+
children(tabs).forEach(function(tab) {
|
|
1285
|
+
var chosen = tab.getAttribute("data-ge-group") === name;
|
|
1286
|
+
toggleClass(tab, "active", chosen);
|
|
1287
|
+
tab.setAttribute("aria-selected", chosen ? "true" : "false");
|
|
1288
|
+
});
|
|
1289
|
+
refitToolbar();
|
|
1290
|
+
}
|
|
1291
|
+
}
|
|
1292
|
+
function groupLabel(name) {
|
|
1293
|
+
var key = "group." + name;
|
|
1294
|
+
if (hasString(settings, key)) {
|
|
1295
|
+
return t(key);
|
|
1296
|
+
}
|
|
1297
|
+
var first = addButtons.filter(function(entry) {
|
|
1298
|
+
return entry.group === name;
|
|
1299
|
+
})[0];
|
|
1300
|
+
return first.button.getAttribute("title") || name;
|
|
1301
|
+
}
|
|
1302
|
+
function shownAddButtons() {
|
|
1303
|
+
return addButtons.filter(function(entry) {
|
|
1304
|
+
return !closest(entry.button, ".ge-toolbar-stash");
|
|
1305
|
+
});
|
|
1306
|
+
}
|
|
1216
1307
|
function removeMainControls() {
|
|
1217
1308
|
if (toolbarLifetime) {
|
|
1218
1309
|
toolbarLifetime.abort();
|
|
@@ -1220,6 +1311,8 @@ function build(instance, baseElem, optionsOrMethod) {
|
|
|
1220
1311
|
toolbarLifetime = null;
|
|
1221
1312
|
closeOverflowMenu = function() {
|
|
1222
1313
|
};
|
|
1314
|
+
refitToolbar = function() {
|
|
1315
|
+
};
|
|
1223
1316
|
mainControls.remove();
|
|
1224
1317
|
}
|
|
1225
1318
|
function createOverflowMenu(start) {
|
|
@@ -1228,12 +1321,9 @@ function build(instance, baseElem, optionsOrMethod) {
|
|
|
1228
1321
|
var toggle2 = one(more, "button");
|
|
1229
1322
|
var panel = one(more, ".ge-toolbar-overflow");
|
|
1230
1323
|
var spares = all(panel, ".btn-group");
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
homes.push({ button, home: group, spare: spares[index] });
|
|
1235
|
-
});
|
|
1236
|
-
});
|
|
1324
|
+
function spareOf(home) {
|
|
1325
|
+
return home === addRowGroup ? spares[0] : spares[1];
|
|
1326
|
+
}
|
|
1237
1327
|
toggle2.setAttribute("title", t("tool.more"));
|
|
1238
1328
|
toggle2.setAttribute("aria-haspopup", "true");
|
|
1239
1329
|
toggle2.setAttribute("aria-expanded", "false");
|
|
@@ -1260,6 +1350,7 @@ function build(instance, baseElem, optionsOrMethod) {
|
|
|
1260
1350
|
closeOverflowMenu = function() {
|
|
1261
1351
|
openOverflow(false);
|
|
1262
1352
|
};
|
|
1353
|
+
refitToolbar = fit;
|
|
1263
1354
|
fit();
|
|
1264
1355
|
if (window.ResizeObserver) {
|
|
1265
1356
|
var pending = false;
|
|
@@ -1287,6 +1378,7 @@ function build(instance, baseElem, optionsOrMethod) {
|
|
|
1287
1378
|
toggle2.setAttribute("aria-expanded", open ? "true" : "false");
|
|
1288
1379
|
}
|
|
1289
1380
|
function fit() {
|
|
1381
|
+
var homes = shownAddButtons();
|
|
1290
1382
|
homes.forEach(function(entry) {
|
|
1291
1383
|
entry.home.appendChild(entry.button);
|
|
1292
1384
|
});
|
|
@@ -1297,7 +1389,8 @@ function build(instance, baseElem, optionsOrMethod) {
|
|
|
1297
1389
|
}
|
|
1298
1390
|
addClass(more, "ge-needed");
|
|
1299
1391
|
for (var i = homes.length - 1; i >= 0 && start.scrollWidth > start.clientWidth; i--) {
|
|
1300
|
-
|
|
1392
|
+
var into = spareOf(homes[i].home);
|
|
1393
|
+
into.insertBefore(homes[i].button, into.firstChild);
|
|
1301
1394
|
}
|
|
1302
1395
|
}
|
|
1303
1396
|
}
|
|
@@ -2824,6 +2917,102 @@ function build(instance, baseElem, optionsOrMethod) {
|
|
|
2824
2917
|
}
|
|
2825
2918
|
return createTool(drawer, t("tool.move"), "ge-move", "bi bi-arrows-move");
|
|
2826
2919
|
}
|
|
2920
|
+
var FITTED_DRAWERS = ".ge-tools-drawer:not(.ge-text-drawer):not(.ge-pane-drawer):not(.ge-code-inline)";
|
|
2921
|
+
function watchDrawers() {
|
|
2922
|
+
if (settings.drawer_overflow === "wrap" || !window.ResizeObserver || !window.MutationObserver) {
|
|
2923
|
+
return;
|
|
2924
|
+
}
|
|
2925
|
+
var due = /* @__PURE__ */ new Set();
|
|
2926
|
+
var frame = null;
|
|
2927
|
+
function schedule(drawer) {
|
|
2928
|
+
due.add(drawer);
|
|
2929
|
+
if (frame === null) {
|
|
2930
|
+
frame = window.requestAnimationFrame(flush);
|
|
2931
|
+
}
|
|
2932
|
+
}
|
|
2933
|
+
function flush() {
|
|
2934
|
+
frame = null;
|
|
2935
|
+
var drawers = Array.from(due);
|
|
2936
|
+
due.clear();
|
|
2937
|
+
drawers.forEach(function(drawer) {
|
|
2938
|
+
if (!drawer.isConnected) {
|
|
2939
|
+
drawerResizes.unobserve(drawer);
|
|
2940
|
+
return;
|
|
2941
|
+
}
|
|
2942
|
+
fitDrawer(drawer);
|
|
2943
|
+
});
|
|
2944
|
+
}
|
|
2945
|
+
var drawerResizes = new window.ResizeObserver(function(entries) {
|
|
2946
|
+
entries.forEach(function(entry) {
|
|
2947
|
+
schedule(entry.target);
|
|
2948
|
+
});
|
|
2949
|
+
});
|
|
2950
|
+
var mutations = new window.MutationObserver(function(records) {
|
|
2951
|
+
records.forEach(function(record) {
|
|
2952
|
+
var target = record.target;
|
|
2953
|
+
if (record.type === "attributes") {
|
|
2954
|
+
var parent = target.parentNode;
|
|
2955
|
+
if (parent && parent.nodeType === 1 && parent.matches(FITTED_DRAWERS)) {
|
|
2956
|
+
schedule(parent);
|
|
2957
|
+
}
|
|
2958
|
+
return;
|
|
2959
|
+
}
|
|
2960
|
+
if (target.nodeType === 1 && target.matches(FITTED_DRAWERS)) {
|
|
2961
|
+
schedule(target);
|
|
2962
|
+
return;
|
|
2963
|
+
}
|
|
2964
|
+
record.addedNodes.forEach(function(node) {
|
|
2965
|
+
if (node.nodeType !== 1) {
|
|
2966
|
+
return;
|
|
2967
|
+
}
|
|
2968
|
+
selfAndAll(node, FITTED_DRAWERS).forEach(function(drawer) {
|
|
2969
|
+
addClass(drawer, "ge-drawer-fit");
|
|
2970
|
+
drawerResizes.observe(drawer);
|
|
2971
|
+
schedule(drawer);
|
|
2972
|
+
});
|
|
2973
|
+
});
|
|
2974
|
+
});
|
|
2975
|
+
});
|
|
2976
|
+
mutations.observe(canvas, { childList: true, subtree: true, attributes: true, attributeFilter: ["style"] });
|
|
2977
|
+
lifetime.signal.addEventListener("abort", function() {
|
|
2978
|
+
mutations.disconnect();
|
|
2979
|
+
drawerResizes.disconnect();
|
|
2980
|
+
if (frame !== null) {
|
|
2981
|
+
window.cancelAnimationFrame(frame);
|
|
2982
|
+
}
|
|
2983
|
+
});
|
|
2984
|
+
}
|
|
2985
|
+
function fitDrawer(drawer) {
|
|
2986
|
+
var tools = children(drawer, "a").filter(function(tool) {
|
|
2987
|
+
return !hasClass(tool, "ge-drawer-more");
|
|
2988
|
+
});
|
|
2989
|
+
var expanded = hasClass(drawer, "ge-drawer-expanded");
|
|
2990
|
+
removeClass(drawer, "ge-drawer-overflow ge-drawer-expanded");
|
|
2991
|
+
tools.forEach(function(tool) {
|
|
2992
|
+
removeClass(tool, "ge-tool-overflow");
|
|
2993
|
+
});
|
|
2994
|
+
if (!drawerOverflows(drawer, tools)) {
|
|
2995
|
+
return;
|
|
2996
|
+
}
|
|
2997
|
+
addClass(drawer, "ge-drawer-overflow");
|
|
2998
|
+
if (!child(drawer, ".ge-drawer-more")) {
|
|
2999
|
+
createTool(drawer, t("tool.more"), "ge-drawer-more", "bi bi-three-dots", function() {
|
|
3000
|
+
toggleClass(drawer, "ge-drawer-expanded");
|
|
3001
|
+
});
|
|
3002
|
+
}
|
|
3003
|
+
for (var i = tools.length - 1; i >= 0 && drawerOverflows(drawer, tools); i--) {
|
|
3004
|
+
addClass(tools[i], "ge-tool-overflow");
|
|
3005
|
+
}
|
|
3006
|
+
toggleClass(drawer, "ge-drawer-expanded", expanded);
|
|
3007
|
+
}
|
|
3008
|
+
function drawerOverflows(drawer, tools) {
|
|
3009
|
+
var style = window.getComputedStyle(drawer);
|
|
3010
|
+
var limit = drawer.getBoundingClientRect().right - parseFloat(style.borderRightWidth) - parseFloat(style.paddingRight);
|
|
3011
|
+
return tools.some(function(tool) {
|
|
3012
|
+
var rects = tool.getClientRects();
|
|
3013
|
+
return rects.length > 0 && rects[0].right > limit + 0.5;
|
|
3014
|
+
});
|
|
3015
|
+
}
|
|
2827
3016
|
function createTool(drawer, title, className, iconClass, eventHandlers) {
|
|
2828
3017
|
var tool = element("a", { title, "class": className });
|
|
2829
3018
|
tool.appendChild(element("i", { "class": iconClass }));
|
|
@@ -4323,7 +4512,7 @@ GridEditor.t = translate;
|
|
|
4323
4512
|
GridEditor._plainHtml = plainHtml;
|
|
4324
4513
|
GridEditor.Sortable = null;
|
|
4325
4514
|
GridEditor.bootstrap = null;
|
|
4326
|
-
GridEditor.version = false ? "dev" : "8.
|
|
4515
|
+
GridEditor.version = false ? "dev" : "8.4.0";
|
|
4327
4516
|
GridEditor.locales = {
|
|
4328
4517
|
en: {
|
|
4329
4518
|
"tool.move": "Move",
|
|
@@ -4349,6 +4538,9 @@ GridEditor.locales = {
|
|
|
4349
4538
|
"tool.edit_source": "Edit Source Code",
|
|
4350
4539
|
"tool.preview": "Preview",
|
|
4351
4540
|
"tool.more": "More",
|
|
4541
|
+
"group.rows": "Rows",
|
|
4542
|
+
"group.content": "Content",
|
|
4543
|
+
"group.select": "Add",
|
|
4352
4544
|
"panel.title": "{kind} settings",
|
|
4353
4545
|
"panel.close": "Close",
|
|
4354
4546
|
"panel.done": "Done",
|