@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.js
CHANGED
|
@@ -445,6 +445,10 @@
|
|
|
445
445
|
return params && params[name] !== void 0 ? params[name] : placeholder;
|
|
446
446
|
});
|
|
447
447
|
}
|
|
448
|
+
function hasString(settings, key) {
|
|
449
|
+
var locales = GridEditor.locales;
|
|
450
|
+
return (settings.locale_strings || {})[key] !== void 0 || (locales[settings.locale] || {})[key] !== void 0 || locales.en[key] !== void 0;
|
|
451
|
+
}
|
|
448
452
|
function warn(message) {
|
|
449
453
|
if (window.console && window.console.warn) {
|
|
450
454
|
window.console.warn("grid-editor: " + message);
|
|
@@ -573,6 +577,10 @@
|
|
|
573
577
|
// Drag the toolbar's buttons onto the canvas. 'auto' follows drag_handle
|
|
574
578
|
"toolbar_overflow": "menu",
|
|
575
579
|
// What doesn't fit on one line: 'menu' behind a button, 'wrap' onto another line
|
|
580
|
+
"drawer_overflow": "menu",
|
|
581
|
+
// The same for the drawers' tools: 'menu' behind a button, 'wrap' onto another line
|
|
582
|
+
"toolbar_groups": false,
|
|
583
|
+
// The add buttons in categories, one shown at a time, picked with tabs
|
|
576
584
|
"active_target": false,
|
|
577
585
|
// A click in a column makes it where the toolbar's buttons add
|
|
578
586
|
"element_tools": [],
|
|
@@ -640,6 +648,10 @@
|
|
|
640
648
|
var toolbarLifetime = null;
|
|
641
649
|
var closeOverflowMenu = function() {
|
|
642
650
|
};
|
|
651
|
+
var refitToolbar = function() {
|
|
652
|
+
};
|
|
653
|
+
var addButtons = [];
|
|
654
|
+
var toolbarGroup = null;
|
|
643
655
|
var warnedHere = {};
|
|
644
656
|
var sortables = [];
|
|
645
657
|
var instanceId = ++editorCounter;
|
|
@@ -1036,6 +1048,7 @@
|
|
|
1036
1048
|
htmlTextArea = element("textarea", { "class": "ge-html-output" });
|
|
1037
1049
|
canvas.parentNode.insertBefore(htmlTextArea, canvas);
|
|
1038
1050
|
createMainControls();
|
|
1051
|
+
watchDrawers();
|
|
1039
1052
|
var signal = { signal: lifetime.signal };
|
|
1040
1053
|
window.addEventListener("scroll", onScroll, signal);
|
|
1041
1054
|
delegate(canvas, "click", ".ge-content", onContentClick, signal);
|
|
@@ -1059,6 +1072,10 @@
|
|
|
1059
1072
|
return;
|
|
1060
1073
|
}
|
|
1061
1074
|
var region = closest(e.target, targetSelector());
|
|
1075
|
+
if (region && region === activeTarget && (e.target === region || e.target === child(region, ".ge-tools-drawer"))) {
|
|
1076
|
+
changeTarget(null);
|
|
1077
|
+
return;
|
|
1078
|
+
}
|
|
1062
1079
|
changeTarget(region && region !== canvas && canvas.contains(region) ? region : null);
|
|
1063
1080
|
}, signal);
|
|
1064
1081
|
document.addEventListener("keydown", function(e) {
|
|
@@ -1090,6 +1107,7 @@
|
|
|
1090
1107
|
addClass(wrapper, "ge-toolbar-menu");
|
|
1091
1108
|
start = wrapper.appendChild(element("div", { "class": "ge-toolbar-start" }));
|
|
1092
1109
|
}
|
|
1110
|
+
addButtons = [];
|
|
1093
1111
|
addRowGroup = start.appendChild(element("div", { "class": "ge-addRowGroup btn-group" }));
|
|
1094
1112
|
addContainerGroup = element("div", { "class": "ge-addContainerGroup btn-group ms-1" });
|
|
1095
1113
|
settings.new_row_layouts.forEach(function(layout) {
|
|
@@ -1116,6 +1134,7 @@
|
|
|
1116
1134
|
}
|
|
1117
1135
|
});
|
|
1118
1136
|
addRowGroup.appendChild(btn);
|
|
1137
|
+
addButtons.push({ button: btn, home: addRowGroup, group: "rows" });
|
|
1119
1138
|
btn.appendChild(create('<i class="bi bi-plus"></i>'));
|
|
1120
1139
|
var sizes = grouped ? rowColsIcon(layout) : layout;
|
|
1121
1140
|
var icon = '<div class="row ge-row-icon">';
|
|
@@ -1147,6 +1166,7 @@
|
|
|
1147
1166
|
}, { parent: canvas, source: "tool" });
|
|
1148
1167
|
});
|
|
1149
1168
|
addContainerGroup.appendChild(button);
|
|
1169
|
+
addButtons.push({ button, home: addContainerGroup, group: toolbarGroupOf(definition.group) || "content" });
|
|
1150
1170
|
});
|
|
1151
1171
|
var endItems = [];
|
|
1152
1172
|
Object.keys(FEATURES).forEach(function(name) {
|
|
@@ -1156,6 +1176,7 @@
|
|
|
1156
1176
|
endItems.push(button);
|
|
1157
1177
|
} else {
|
|
1158
1178
|
addContainerGroup.appendChild(button);
|
|
1179
|
+
addButtons.push({ button, home: addContainerGroup, group: toolbarGroupOf(item.group) || name });
|
|
1159
1180
|
}
|
|
1160
1181
|
});
|
|
1161
1182
|
});
|
|
@@ -1209,11 +1230,81 @@
|
|
|
1209
1230
|
end.appendChild(button);
|
|
1210
1231
|
});
|
|
1211
1232
|
}
|
|
1233
|
+
if (settings.toolbar_groups) {
|
|
1234
|
+
createGroupTabs(start);
|
|
1235
|
+
}
|
|
1212
1236
|
if (overflowMenu) {
|
|
1213
1237
|
createOverflowMenu(start);
|
|
1214
1238
|
}
|
|
1215
1239
|
makeToolbarDraggable();
|
|
1216
1240
|
}
|
|
1241
|
+
var CORE_GROUPS = [
|
|
1242
|
+
{ name: "rows", labelKey: "group.rows" },
|
|
1243
|
+
{ name: "content", labelKey: "group.content" }
|
|
1244
|
+
];
|
|
1245
|
+
function toolbarGroupOf(value) {
|
|
1246
|
+
return typeof value === "string" && value.trim() !== "" ? value : null;
|
|
1247
|
+
}
|
|
1248
|
+
function createGroupTabs(start) {
|
|
1249
|
+
var names = CORE_GROUPS.map(function(group) {
|
|
1250
|
+
return group.name;
|
|
1251
|
+
});
|
|
1252
|
+
addButtons.forEach(function(entry) {
|
|
1253
|
+
if (names.indexOf(entry.group) < 0) {
|
|
1254
|
+
names.push(entry.group);
|
|
1255
|
+
}
|
|
1256
|
+
});
|
|
1257
|
+
names = names.filter(function(name) {
|
|
1258
|
+
return addButtons.some(function(entry) {
|
|
1259
|
+
return entry.group === name;
|
|
1260
|
+
});
|
|
1261
|
+
});
|
|
1262
|
+
if (names.length < 2) {
|
|
1263
|
+
return;
|
|
1264
|
+
}
|
|
1265
|
+
var tabs = element("div", { "class": "ge-toolbar-groups btn-group", role: "tablist", "aria-label": t("group.select") });
|
|
1266
|
+
start.insertBefore(tabs, start.firstChild);
|
|
1267
|
+
var stash = mainControls.appendChild(element("div", { "class": "ge-toolbar-stash", hidden: "hidden" }));
|
|
1268
|
+
names.forEach(function(name) {
|
|
1269
|
+
var tab = tabs.appendChild(element("button", {
|
|
1270
|
+
type: "button",
|
|
1271
|
+
"class": "btn btn-sm btn-outline-primary",
|
|
1272
|
+
role: "tab",
|
|
1273
|
+
"data-ge-group": name
|
|
1274
|
+
}, groupLabel(name)));
|
|
1275
|
+
tab.addEventListener("click", function() {
|
|
1276
|
+
showGroup(name);
|
|
1277
|
+
});
|
|
1278
|
+
});
|
|
1279
|
+
showGroup(names.indexOf(toolbarGroup) >= 0 ? toolbarGroup : names[0]);
|
|
1280
|
+
function showGroup(name) {
|
|
1281
|
+
toolbarGroup = name;
|
|
1282
|
+
addButtons.forEach(function(entry) {
|
|
1283
|
+
(entry.group === name ? entry.home : stash).appendChild(entry.button);
|
|
1284
|
+
});
|
|
1285
|
+
children(tabs).forEach(function(tab) {
|
|
1286
|
+
var chosen = tab.getAttribute("data-ge-group") === name;
|
|
1287
|
+
toggleClass(tab, "active", chosen);
|
|
1288
|
+
tab.setAttribute("aria-selected", chosen ? "true" : "false");
|
|
1289
|
+
});
|
|
1290
|
+
refitToolbar();
|
|
1291
|
+
}
|
|
1292
|
+
}
|
|
1293
|
+
function groupLabel(name) {
|
|
1294
|
+
var key = "group." + name;
|
|
1295
|
+
if (hasString(settings, key)) {
|
|
1296
|
+
return t(key);
|
|
1297
|
+
}
|
|
1298
|
+
var first = addButtons.filter(function(entry) {
|
|
1299
|
+
return entry.group === name;
|
|
1300
|
+
})[0];
|
|
1301
|
+
return first.button.getAttribute("title") || name;
|
|
1302
|
+
}
|
|
1303
|
+
function shownAddButtons() {
|
|
1304
|
+
return addButtons.filter(function(entry) {
|
|
1305
|
+
return !closest(entry.button, ".ge-toolbar-stash");
|
|
1306
|
+
});
|
|
1307
|
+
}
|
|
1217
1308
|
function removeMainControls() {
|
|
1218
1309
|
if (toolbarLifetime) {
|
|
1219
1310
|
toolbarLifetime.abort();
|
|
@@ -1221,6 +1312,8 @@
|
|
|
1221
1312
|
toolbarLifetime = null;
|
|
1222
1313
|
closeOverflowMenu = function() {
|
|
1223
1314
|
};
|
|
1315
|
+
refitToolbar = function() {
|
|
1316
|
+
};
|
|
1224
1317
|
mainControls.remove();
|
|
1225
1318
|
}
|
|
1226
1319
|
function createOverflowMenu(start) {
|
|
@@ -1229,12 +1322,9 @@
|
|
|
1229
1322
|
var toggle2 = one(more, "button");
|
|
1230
1323
|
var panel = one(more, ".ge-toolbar-overflow");
|
|
1231
1324
|
var spares = all(panel, ".btn-group");
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
homes.push({ button, home: group, spare: spares[index] });
|
|
1236
|
-
});
|
|
1237
|
-
});
|
|
1325
|
+
function spareOf(home) {
|
|
1326
|
+
return home === addRowGroup ? spares[0] : spares[1];
|
|
1327
|
+
}
|
|
1238
1328
|
toggle2.setAttribute("title", t("tool.more"));
|
|
1239
1329
|
toggle2.setAttribute("aria-haspopup", "true");
|
|
1240
1330
|
toggle2.setAttribute("aria-expanded", "false");
|
|
@@ -1261,6 +1351,7 @@
|
|
|
1261
1351
|
closeOverflowMenu = function() {
|
|
1262
1352
|
openOverflow(false);
|
|
1263
1353
|
};
|
|
1354
|
+
refitToolbar = fit;
|
|
1264
1355
|
fit();
|
|
1265
1356
|
if (window.ResizeObserver) {
|
|
1266
1357
|
var pending = false;
|
|
@@ -1288,6 +1379,7 @@
|
|
|
1288
1379
|
toggle2.setAttribute("aria-expanded", open ? "true" : "false");
|
|
1289
1380
|
}
|
|
1290
1381
|
function fit() {
|
|
1382
|
+
var homes = shownAddButtons();
|
|
1291
1383
|
homes.forEach(function(entry) {
|
|
1292
1384
|
entry.home.appendChild(entry.button);
|
|
1293
1385
|
});
|
|
@@ -1298,7 +1390,8 @@
|
|
|
1298
1390
|
}
|
|
1299
1391
|
addClass(more, "ge-needed");
|
|
1300
1392
|
for (var i = homes.length - 1; i >= 0 && start.scrollWidth > start.clientWidth; i--) {
|
|
1301
|
-
|
|
1393
|
+
var into = spareOf(homes[i].home);
|
|
1394
|
+
into.insertBefore(homes[i].button, into.firstChild);
|
|
1302
1395
|
}
|
|
1303
1396
|
}
|
|
1304
1397
|
}
|
|
@@ -2825,6 +2918,102 @@
|
|
|
2825
2918
|
}
|
|
2826
2919
|
return createTool(drawer, t("tool.move"), "ge-move", "bi bi-arrows-move");
|
|
2827
2920
|
}
|
|
2921
|
+
var FITTED_DRAWERS = ".ge-tools-drawer:not(.ge-text-drawer):not(.ge-pane-drawer):not(.ge-code-inline)";
|
|
2922
|
+
function watchDrawers() {
|
|
2923
|
+
if (settings.drawer_overflow === "wrap" || !window.ResizeObserver || !window.MutationObserver) {
|
|
2924
|
+
return;
|
|
2925
|
+
}
|
|
2926
|
+
var due = /* @__PURE__ */ new Set();
|
|
2927
|
+
var frame = null;
|
|
2928
|
+
function schedule(drawer) {
|
|
2929
|
+
due.add(drawer);
|
|
2930
|
+
if (frame === null) {
|
|
2931
|
+
frame = window.requestAnimationFrame(flush);
|
|
2932
|
+
}
|
|
2933
|
+
}
|
|
2934
|
+
function flush() {
|
|
2935
|
+
frame = null;
|
|
2936
|
+
var drawers = Array.from(due);
|
|
2937
|
+
due.clear();
|
|
2938
|
+
drawers.forEach(function(drawer) {
|
|
2939
|
+
if (!drawer.isConnected) {
|
|
2940
|
+
drawerResizes.unobserve(drawer);
|
|
2941
|
+
return;
|
|
2942
|
+
}
|
|
2943
|
+
fitDrawer(drawer);
|
|
2944
|
+
});
|
|
2945
|
+
}
|
|
2946
|
+
var drawerResizes = new window.ResizeObserver(function(entries) {
|
|
2947
|
+
entries.forEach(function(entry) {
|
|
2948
|
+
schedule(entry.target);
|
|
2949
|
+
});
|
|
2950
|
+
});
|
|
2951
|
+
var mutations = new window.MutationObserver(function(records) {
|
|
2952
|
+
records.forEach(function(record) {
|
|
2953
|
+
var target = record.target;
|
|
2954
|
+
if (record.type === "attributes") {
|
|
2955
|
+
var parent = target.parentNode;
|
|
2956
|
+
if (parent && parent.nodeType === 1 && parent.matches(FITTED_DRAWERS)) {
|
|
2957
|
+
schedule(parent);
|
|
2958
|
+
}
|
|
2959
|
+
return;
|
|
2960
|
+
}
|
|
2961
|
+
if (target.nodeType === 1 && target.matches(FITTED_DRAWERS)) {
|
|
2962
|
+
schedule(target);
|
|
2963
|
+
return;
|
|
2964
|
+
}
|
|
2965
|
+
record.addedNodes.forEach(function(node) {
|
|
2966
|
+
if (node.nodeType !== 1) {
|
|
2967
|
+
return;
|
|
2968
|
+
}
|
|
2969
|
+
selfAndAll(node, FITTED_DRAWERS).forEach(function(drawer) {
|
|
2970
|
+
addClass(drawer, "ge-drawer-fit");
|
|
2971
|
+
drawerResizes.observe(drawer);
|
|
2972
|
+
schedule(drawer);
|
|
2973
|
+
});
|
|
2974
|
+
});
|
|
2975
|
+
});
|
|
2976
|
+
});
|
|
2977
|
+
mutations.observe(canvas, { childList: true, subtree: true, attributes: true, attributeFilter: ["style"] });
|
|
2978
|
+
lifetime.signal.addEventListener("abort", function() {
|
|
2979
|
+
mutations.disconnect();
|
|
2980
|
+
drawerResizes.disconnect();
|
|
2981
|
+
if (frame !== null) {
|
|
2982
|
+
window.cancelAnimationFrame(frame);
|
|
2983
|
+
}
|
|
2984
|
+
});
|
|
2985
|
+
}
|
|
2986
|
+
function fitDrawer(drawer) {
|
|
2987
|
+
var tools = children(drawer, "a").filter(function(tool) {
|
|
2988
|
+
return !hasClass(tool, "ge-drawer-more");
|
|
2989
|
+
});
|
|
2990
|
+
var expanded = hasClass(drawer, "ge-drawer-expanded");
|
|
2991
|
+
removeClass(drawer, "ge-drawer-overflow ge-drawer-expanded");
|
|
2992
|
+
tools.forEach(function(tool) {
|
|
2993
|
+
removeClass(tool, "ge-tool-overflow");
|
|
2994
|
+
});
|
|
2995
|
+
if (!drawerOverflows(drawer, tools)) {
|
|
2996
|
+
return;
|
|
2997
|
+
}
|
|
2998
|
+
addClass(drawer, "ge-drawer-overflow");
|
|
2999
|
+
if (!child(drawer, ".ge-drawer-more")) {
|
|
3000
|
+
createTool(drawer, t("tool.more"), "ge-drawer-more", "bi bi-three-dots", function() {
|
|
3001
|
+
toggleClass(drawer, "ge-drawer-expanded");
|
|
3002
|
+
});
|
|
3003
|
+
}
|
|
3004
|
+
for (var i = tools.length - 1; i >= 0 && drawerOverflows(drawer, tools); i--) {
|
|
3005
|
+
addClass(tools[i], "ge-tool-overflow");
|
|
3006
|
+
}
|
|
3007
|
+
toggleClass(drawer, "ge-drawer-expanded", expanded);
|
|
3008
|
+
}
|
|
3009
|
+
function drawerOverflows(drawer, tools) {
|
|
3010
|
+
var style = window.getComputedStyle(drawer);
|
|
3011
|
+
var limit = drawer.getBoundingClientRect().right - parseFloat(style.borderRightWidth) - parseFloat(style.paddingRight);
|
|
3012
|
+
return tools.some(function(tool) {
|
|
3013
|
+
var rects = tool.getClientRects();
|
|
3014
|
+
return rects.length > 0 && rects[0].right > limit + 0.5;
|
|
3015
|
+
});
|
|
3016
|
+
}
|
|
2828
3017
|
function createTool(drawer, title, className, iconClass, eventHandlers) {
|
|
2829
3018
|
var tool = element("a", { title, "class": className });
|
|
2830
3019
|
tool.appendChild(element("i", { "class": iconClass }));
|
|
@@ -4324,7 +4513,7 @@
|
|
|
4324
4513
|
GridEditor._plainHtml = plainHtml;
|
|
4325
4514
|
GridEditor.Sortable = null;
|
|
4326
4515
|
GridEditor.bootstrap = null;
|
|
4327
|
-
GridEditor.version = false ? "dev" : "8.
|
|
4516
|
+
GridEditor.version = false ? "dev" : "8.4.0";
|
|
4328
4517
|
GridEditor.locales = {
|
|
4329
4518
|
en: {
|
|
4330
4519
|
"tool.move": "Move",
|
|
@@ -4350,6 +4539,9 @@
|
|
|
4350
4539
|
"tool.edit_source": "Edit Source Code",
|
|
4351
4540
|
"tool.preview": "Preview",
|
|
4352
4541
|
"tool.more": "More",
|
|
4542
|
+
"group.rows": "Rows",
|
|
4543
|
+
"group.content": "Content",
|
|
4544
|
+
"group.select": "Add",
|
|
4353
4545
|
"panel.title": "{kind} settings",
|
|
4354
4546
|
"panel.close": "Close",
|
|
4355
4547
|
"panel.done": "Done",
|