@themarioga/grid-editor 7.2.0 → 8.0.0-beta.2
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 +101 -0
- package/README.md +96 -30
- package/UPGRADING.md +86 -0
- package/dist/grideditor.bundle.min.js +3 -3
- package/dist/grideditor.css +149 -6
- package/dist/grideditor.d.ts +18 -0
- package/dist/grideditor.esm.js +257 -48
- package/dist/grideditor.jquery.js +0 -13
- package/dist/grideditor.jquery.min.js +1 -1
- package/dist/grideditor.jquery.min.js.map +3 -3
- package/dist/grideditor.js +257 -48
- 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 +80 -6
- package/dist/locales/grideditor.es.js +80 -6
- package/dist/locales/grideditor.es.min.js +1 -1
- package/dist/locales/grideditor.es.min.js.map +2 -2
- package/dist/plugins/grideditor.accordion.min.js.map +2 -2
- package/dist/plugins/grideditor.alignment.esm.js +11 -38
- package/dist/plugins/grideditor.alignment.js +11 -38
- package/dist/plugins/grideditor.alignment.min.js +1 -1
- package/dist/plugins/grideditor.alignment.min.js.map +3 -3
- package/dist/plugins/grideditor.card.min.js.map +1 -1
- package/dist/plugins/grideditor.ckeditor.esm.js +0 -5
- package/dist/plugins/grideditor.ckeditor.js +0 -5
- package/dist/plugins/grideditor.ckeditor.min.js +1 -1
- package/dist/plugins/grideditor.ckeditor.min.js.map +3 -3
- package/dist/plugins/grideditor.clipboard.min.js.map +1 -1
- package/dist/plugins/grideditor.codemirror-inline.min.js.map +1 -1
- package/dist/plugins/grideditor.codemirror.min.js.map +1 -1
- package/dist/plugins/grideditor.elements.min.js.map +2 -2
- package/dist/plugins/grideditor.gutters.min.js.map +1 -1
- package/dist/plugins/grideditor.order.min.js.map +1 -1
- package/dist/plugins/grideditor.popup.min.js.map +1 -1
- package/dist/plugins/grideditor.sections.min.js.map +2 -2
- package/dist/plugins/grideditor.style.esm.js +1926 -0
- package/dist/plugins/grideditor.style.js +1923 -0
- package/dist/plugins/grideditor.style.min.js +4 -0
- package/dist/plugins/grideditor.style.min.js.map +7 -0
- package/dist/plugins/grideditor.summernote.min.js.map +2 -2
- package/dist/plugins/grideditor.tabs.min.js.map +2 -2
- package/dist/plugins/grideditor.tinymce.esm.js +1 -8
- package/dist/plugins/grideditor.tinymce.js +1 -8
- package/dist/plugins/grideditor.tinymce.min.js +1 -1
- package/dist/plugins/grideditor.tinymce.min.js.map +3 -3
- package/docs/events.md +4 -6
- package/docs/locale-keys.md +99 -15
- package/docs/plugins.md +47 -23
- package/example/ckeditor.html +0 -5
- package/example/index.html +17 -2
- package/example/style.html +163 -0
- package/example/utilities.html +21 -16
- package/package.json +1 -1
- package/src/js/dom.js +1 -2
- package/src/js/grideditor.jquery.js +7 -28
- package/src/js/grideditor.js +336 -67
- package/src/js/locales/grideditor.es.js +80 -6
- package/src/js/plugins/grideditor.alignment.js +21 -50
- package/src/js/plugins/grideditor.ckeditor.js +10 -23
- package/src/js/plugins/grideditor.style.js +185 -0
- package/src/js/plugins/grideditor.summernote.js +4 -5
- package/src/js/plugins/grideditor.tinymce.js +4 -17
- package/src/js/style/accordion.js +168 -0
- package/src/js/style/catalog.js +76 -0
- package/src/js/style/custom.js +84 -0
- package/src/js/style/display.js +229 -0
- package/src/js/style/drawerflow.js +118 -0
- package/src/js/style/fields.js +382 -0
- package/src/js/style/flex.js +156 -0
- package/src/js/{plugins/grideditor.float.js → style/float.js} +6 -16
- package/src/js/style/options.js +60 -0
- package/src/js/style/sections.js +298 -0
- package/src/js/{plugins/grideditor.spacing.js → style/spacing.js} +7 -19
- package/src/js/style/sticky.js +39 -0
- package/src/js/{plugins/grideditor.textalign.js → style/textalign.js} +6 -14
- package/src/js/text/grideditor.text.js +1 -1
- package/src/less/grideditor.less +151 -10
- package/types/grideditor.d.ts +18 -0
- package/dist/plugins/grideditor.float.esm.js +0 -34
- package/dist/plugins/grideditor.float.js +0 -41
- package/dist/plugins/grideditor.float.min.js +0 -1
- package/dist/plugins/grideditor.float.min.js.map +0 -7
- package/dist/plugins/grideditor.spacing.esm.js +0 -318
- package/dist/plugins/grideditor.spacing.js +0 -323
- package/dist/plugins/grideditor.spacing.min.js +0 -1
- package/dist/plugins/grideditor.spacing.min.js.map +0 -7
- package/dist/plugins/grideditor.textalign.esm.js +0 -40
- package/dist/plugins/grideditor.textalign.js +0 -47
- package/dist/plugins/grideditor.textalign.min.js +0 -1
- package/dist/plugins/grideditor.textalign.min.js.map +0 -7
- package/dist/plugins/grideditor.visibility.esm.js +0 -158
- package/dist/plugins/grideditor.visibility.js +0 -163
- package/dist/plugins/grideditor.visibility.min.js +0 -1
- package/dist/plugins/grideditor.visibility.min.js.map +0 -7
- package/src/js/plugins/grideditor.visibility.js +0 -171
package/dist/grideditor.js
CHANGED
|
@@ -342,7 +342,6 @@
|
|
|
342
342
|
var VIEW_KEYS = [ALL_VIEW].concat(BREAKPOINTS.map(function(tier) {
|
|
343
343
|
return tier.key;
|
|
344
344
|
}));
|
|
345
|
-
var LEGACY_VIEW_INDEXES = ["lg", "sm", "xs"];
|
|
346
345
|
var MAX_COL_SIZE = 12;
|
|
347
346
|
var MAX_COL_OFFSET = 11;
|
|
348
347
|
var FLEX_SIZES = ["equal", "auto"];
|
|
@@ -415,10 +414,6 @@
|
|
|
415
414
|
// Scroll the page when a drag reaches its edge
|
|
416
415
|
}
|
|
417
416
|
};
|
|
418
|
-
var REMOVED_SETTINGS = {
|
|
419
|
-
sortable_options: "drag",
|
|
420
|
-
resizable_options: "resize"
|
|
421
|
-
};
|
|
422
417
|
var warned = {};
|
|
423
418
|
var editorCounter = 0;
|
|
424
419
|
var instances = /* @__PURE__ */ new WeakMap();
|
|
@@ -572,7 +567,7 @@
|
|
|
572
567
|
"element_classes": [],
|
|
573
568
|
// Preset class toggles on an element's settings panel
|
|
574
569
|
// content_types, text_tools and text_classes are the text editor
|
|
575
|
-
// plugins' settings
|
|
570
|
+
// plugins' settings: see grideditor.text.js
|
|
576
571
|
"container_classes": [],
|
|
577
572
|
// The same, on a container's panel
|
|
578
573
|
"pane_classes": [],
|
|
@@ -620,14 +615,6 @@
|
|
|
620
615
|
Object.keys(NESTED_SETTINGS).forEach(function(name) {
|
|
621
616
|
settings[name] = Object.assign({}, NESTED_SETTINGS[name], settings[name]);
|
|
622
617
|
});
|
|
623
|
-
Object.keys(REMOVED_SETTINGS).forEach(function(name) {
|
|
624
|
-
if (optionsOrMethod && optionsOrMethod[name] !== void 0) {
|
|
625
|
-
warn(translate(settings, "warning.setting_removed", {
|
|
626
|
-
setting: name,
|
|
627
|
-
replacement: REMOVED_SETTINGS[name]
|
|
628
|
-
}));
|
|
629
|
-
}
|
|
630
|
-
});
|
|
631
618
|
var canvas, mainControls, wrapper, addRowGroup, addContainerGroup, layoutDropdown, htmlTextArea;
|
|
632
619
|
var curView = settings.default_view;
|
|
633
620
|
var confirmDialog = null;
|
|
@@ -660,6 +647,7 @@
|
|
|
660
647
|
instance.settings = settingsCopy();
|
|
661
648
|
removeConfirmModal();
|
|
662
649
|
removeSettingsPanels();
|
|
650
|
+
removeDialog();
|
|
663
651
|
mainControls.remove();
|
|
664
652
|
createMainControls();
|
|
665
653
|
reset();
|
|
@@ -1610,6 +1598,9 @@
|
|
|
1610
1598
|
if (openSettingsState && !attached(openSettingsState.node)) {
|
|
1611
1599
|
closeSettings();
|
|
1612
1600
|
}
|
|
1601
|
+
if (dialogState && dialogState.home && !attached(dialogState.home)) {
|
|
1602
|
+
closeDialog();
|
|
1603
|
+
}
|
|
1613
1604
|
runFilter(true);
|
|
1614
1605
|
addClass(canvas, "ge-editing");
|
|
1615
1606
|
toggleClass(canvas, "ge-drag-drawer", settings.drag_handle === "drawer");
|
|
@@ -1633,9 +1624,11 @@
|
|
|
1633
1624
|
plugins("onBeforeDeinit");
|
|
1634
1625
|
closeSizePicker();
|
|
1635
1626
|
hideDropMarker();
|
|
1627
|
+
closeDialog();
|
|
1636
1628
|
all(canvas, ".ge-tools-drawer").forEach(function(drawer) {
|
|
1637
1629
|
drawer.remove();
|
|
1638
1630
|
});
|
|
1631
|
+
pluginFields.clear();
|
|
1639
1632
|
unwrapTexts();
|
|
1640
1633
|
plugins("onDeinit");
|
|
1641
1634
|
clearPreviews(canvas);
|
|
@@ -1671,6 +1664,7 @@
|
|
|
1671
1664
|
deinit();
|
|
1672
1665
|
removeConfirmModal();
|
|
1673
1666
|
removeSettingsPanels();
|
|
1667
|
+
removeDialog();
|
|
1674
1668
|
mainControls.remove();
|
|
1675
1669
|
htmlTextArea.remove();
|
|
1676
1670
|
lifetime.abort();
|
|
@@ -1767,6 +1761,12 @@
|
|
|
1767
1761
|
setUtility,
|
|
1768
1762
|
utilityField,
|
|
1769
1763
|
bareStyle,
|
|
1764
|
+
// The host's own style, under the preview
|
|
1765
|
+
hostStyle,
|
|
1766
|
+
setHostStyle,
|
|
1767
|
+
// A modal of the editor's own, over the settings
|
|
1768
|
+
openDialog,
|
|
1769
|
+
closeDialog,
|
|
1770
1770
|
rowFromLayout: rowFromLayoutValue,
|
|
1771
1771
|
nodeHtml,
|
|
1772
1772
|
// A text editor has rewritten a content area, so whatever the
|
|
@@ -2003,6 +2003,7 @@
|
|
|
2003
2003
|
renderUtilities(section);
|
|
2004
2004
|
});
|
|
2005
2005
|
}
|
|
2006
|
+
renderPluginFields(node);
|
|
2006
2007
|
refreshPreviews(node);
|
|
2007
2008
|
}
|
|
2008
2009
|
function utilityNodes(scope) {
|
|
@@ -2069,6 +2070,61 @@
|
|
|
2069
2070
|
dropEmptyStyle(node);
|
|
2070
2071
|
});
|
|
2071
2072
|
}
|
|
2073
|
+
function hostDeclaration(node) {
|
|
2074
|
+
var scratch = document.createElement("div");
|
|
2075
|
+
var was = {};
|
|
2076
|
+
scratch.style.cssText = node.style.cssText;
|
|
2077
|
+
try {
|
|
2078
|
+
was = JSON.parse(node.getAttribute(PREVIEW_ATTR)) || {};
|
|
2079
|
+
} catch (error) {
|
|
2080
|
+
}
|
|
2081
|
+
Object.keys(was).forEach(function(property) {
|
|
2082
|
+
var before = was[property];
|
|
2083
|
+
if (before && before[0]) {
|
|
2084
|
+
scratch.style.setProperty(property, before[0], before[1]);
|
|
2085
|
+
} else {
|
|
2086
|
+
scratch.style.removeProperty(property);
|
|
2087
|
+
}
|
|
2088
|
+
});
|
|
2089
|
+
return scratch.style;
|
|
2090
|
+
}
|
|
2091
|
+
function hostStyle(node, property) {
|
|
2092
|
+
var declaration = hostDeclaration(node);
|
|
2093
|
+
if (property === void 0) {
|
|
2094
|
+
return declaration.cssText;
|
|
2095
|
+
}
|
|
2096
|
+
return {
|
|
2097
|
+
value: declaration.getPropertyValue(property),
|
|
2098
|
+
priority: declaration.getPropertyPriority(property)
|
|
2099
|
+
};
|
|
2100
|
+
}
|
|
2101
|
+
function setHostStyle(node, property, value, priority) {
|
|
2102
|
+
value = value === null || value === void 0 ? "" : String(value).trim();
|
|
2103
|
+
if (priority === void 0) {
|
|
2104
|
+
priority = hostStyle(node, property).priority;
|
|
2105
|
+
}
|
|
2106
|
+
if (value !== "") {
|
|
2107
|
+
var check = document.createElement("div").style;
|
|
2108
|
+
check.setProperty(property, value, priority || "");
|
|
2109
|
+
if (check.getPropertyValue(property) === "") {
|
|
2110
|
+
return false;
|
|
2111
|
+
}
|
|
2112
|
+
}
|
|
2113
|
+
var previewed = node.hasAttribute(PREVIEW_ATTR);
|
|
2114
|
+
if (previewed) {
|
|
2115
|
+
clearPreviews(node);
|
|
2116
|
+
}
|
|
2117
|
+
if (value === "") {
|
|
2118
|
+
node.style.removeProperty(property);
|
|
2119
|
+
} else {
|
|
2120
|
+
node.style.setProperty(property, value, priority || "");
|
|
2121
|
+
}
|
|
2122
|
+
dropEmptyStyle(node);
|
|
2123
|
+
if (previewed) {
|
|
2124
|
+
refreshPreviews(node);
|
|
2125
|
+
}
|
|
2126
|
+
return true;
|
|
2127
|
+
}
|
|
2072
2128
|
function createUtilitiesSection(node) {
|
|
2073
2129
|
var kind = kindOf(node);
|
|
2074
2130
|
var fields = familiesFor(kind).filter(function(family) {
|
|
@@ -2125,8 +2181,25 @@
|
|
|
2125
2181
|
}
|
|
2126
2182
|
var field = createField(node, family);
|
|
2127
2183
|
renderField(field, node);
|
|
2184
|
+
pluginFields.set(field, node);
|
|
2128
2185
|
return field;
|
|
2129
2186
|
}
|
|
2187
|
+
var pluginFields = /* @__PURE__ */ new Map();
|
|
2188
|
+
function renderPluginFields(node) {
|
|
2189
|
+
pluginFields.forEach(function(fieldNode, field) {
|
|
2190
|
+
if (!field.isConnected) {
|
|
2191
|
+
pluginFields.delete(field);
|
|
2192
|
+
return;
|
|
2193
|
+
}
|
|
2194
|
+
if (node && fieldNode !== node) {
|
|
2195
|
+
return;
|
|
2196
|
+
}
|
|
2197
|
+
if (closest(field, ".ge-utilities")) {
|
|
2198
|
+
return;
|
|
2199
|
+
}
|
|
2200
|
+
renderField(field, fieldNode);
|
|
2201
|
+
});
|
|
2202
|
+
}
|
|
2130
2203
|
function renderUtilities(section) {
|
|
2131
2204
|
var node = sectionNodes.get(section);
|
|
2132
2205
|
children(section, ".ge-utilities-toggle").forEach(function(toggle2) {
|
|
@@ -2670,12 +2743,50 @@
|
|
|
2670
2743
|
});
|
|
2671
2744
|
classGroup.appendChild(btn);
|
|
2672
2745
|
});
|
|
2746
|
+
pluginSections(container).forEach(function(section) {
|
|
2747
|
+
detailsDiv.appendChild(section);
|
|
2748
|
+
});
|
|
2673
2749
|
var utilities = createUtilitiesSection(container);
|
|
2674
2750
|
if (utilities) {
|
|
2675
2751
|
detailsDiv.appendChild(utilities);
|
|
2676
2752
|
}
|
|
2677
2753
|
return detailsDiv;
|
|
2678
2754
|
}
|
|
2755
|
+
function pluginSections(node) {
|
|
2756
|
+
var kind = kindOf(node);
|
|
2757
|
+
var mode = panelMode();
|
|
2758
|
+
var sections = [];
|
|
2759
|
+
[CONTAINERS, FEATURES, UTILITIES].forEach(function(registry) {
|
|
2760
|
+
Object.keys(registry).forEach(function(name) {
|
|
2761
|
+
var plugin = registry[name];
|
|
2762
|
+
var section = plugin.panelSection ? plugin.panelSection(node, kind) : null;
|
|
2763
|
+
if (!section || !section.body) {
|
|
2764
|
+
return;
|
|
2765
|
+
}
|
|
2766
|
+
var holder = element("div", { "class": "ge-panel-section", "data-ge-plugin": name });
|
|
2767
|
+
if (mode === "offcanvas" || mode === "modal") {
|
|
2768
|
+
holder.appendChild(section.body);
|
|
2769
|
+
} else {
|
|
2770
|
+
var label = t(section.labelKey);
|
|
2771
|
+
var open = holder.appendChild(element("button", {
|
|
2772
|
+
type: "button",
|
|
2773
|
+
"class": "btn btn-sm btn-outline-secondary ge-panel-section-open"
|
|
2774
|
+
}, label));
|
|
2775
|
+
hide(section.body);
|
|
2776
|
+
holder.appendChild(section.body);
|
|
2777
|
+
open.addEventListener("click", function() {
|
|
2778
|
+
openDialog(
|
|
2779
|
+
section.titleKey ? t(section.titleKey, { kind: kindLabel(node) }) : label,
|
|
2780
|
+
section.body,
|
|
2781
|
+
open
|
|
2782
|
+
);
|
|
2783
|
+
});
|
|
2784
|
+
}
|
|
2785
|
+
sections.push(holder);
|
|
2786
|
+
});
|
|
2787
|
+
});
|
|
2788
|
+
return sections;
|
|
2789
|
+
}
|
|
2679
2790
|
var PANEL_MODES = ["offcanvas", "popover", "modal", "inline"];
|
|
2680
2791
|
var settingsPanels = {};
|
|
2681
2792
|
var openSettingsState = null;
|
|
@@ -2723,7 +2834,7 @@
|
|
|
2723
2834
|
addClass(node, "ge-settings-target");
|
|
2724
2835
|
var signal = { signal: listening.signal };
|
|
2725
2836
|
document.addEventListener("keydown", function(e) {
|
|
2726
|
-
if (e.key === "Escape") {
|
|
2837
|
+
if (e.key === "Escape" && !dialogState) {
|
|
2727
2838
|
closeSettings();
|
|
2728
2839
|
}
|
|
2729
2840
|
}, signal);
|
|
@@ -2746,15 +2857,20 @@
|
|
|
2746
2857
|
openSettingsState.observer.observe(details);
|
|
2747
2858
|
}
|
|
2748
2859
|
on(document, "mousedown touchstart", function(e) {
|
|
2749
|
-
if (!panel.contains(e.target) && !gear.contains(e.target)) {
|
|
2860
|
+
if (!dialogState && !panel.contains(e.target) && !gear.contains(e.target)) {
|
|
2750
2861
|
closeSettings();
|
|
2751
2862
|
}
|
|
2752
2863
|
}, signal);
|
|
2753
2864
|
} else {
|
|
2754
|
-
showModal(panel)
|
|
2865
|
+
showModal(panel, function() {
|
|
2866
|
+
if (openSettingsState && openSettingsState.mode === "modal") {
|
|
2867
|
+
closeSettings();
|
|
2868
|
+
}
|
|
2869
|
+
});
|
|
2755
2870
|
}
|
|
2756
2871
|
}
|
|
2757
2872
|
function closeSettings() {
|
|
2873
|
+
closeDialog();
|
|
2758
2874
|
var open = openSettingsState;
|
|
2759
2875
|
if (!open) {
|
|
2760
2876
|
return;
|
|
@@ -2832,10 +2948,9 @@
|
|
|
2832
2948
|
settingsPanels[mode].remove();
|
|
2833
2949
|
}
|
|
2834
2950
|
});
|
|
2835
|
-
|
|
2836
|
-
|
|
2837
|
-
|
|
2838
|
-
}
|
|
2951
|
+
Object.keys(settingsPanels).forEach(function(mode) {
|
|
2952
|
+
removeBackdrop(settingsPanels[mode]);
|
|
2953
|
+
});
|
|
2839
2954
|
settingsPanels = {};
|
|
2840
2955
|
}
|
|
2841
2956
|
function placePopover(panel, gear) {
|
|
@@ -2866,25 +2981,30 @@
|
|
|
2866
2981
|
left: Math.max(gap, Math.min(tool.left + tool.width / 2 - left - 8, width - 24))
|
|
2867
2982
|
});
|
|
2868
2983
|
}
|
|
2869
|
-
|
|
2870
|
-
function showModal(panel) {
|
|
2984
|
+
function showModal(panel, dismissed) {
|
|
2871
2985
|
var Modal = modalLibrary();
|
|
2986
|
+
var state = modalState.get(panel);
|
|
2987
|
+
if (!state) {
|
|
2988
|
+
state = { wanted: null, busy: false, backdrop: null, dismissed };
|
|
2989
|
+
modalState.set(panel, state);
|
|
2990
|
+
}
|
|
2991
|
+
state.dismissed = dismissed;
|
|
2872
2992
|
if (!Modal) {
|
|
2873
|
-
|
|
2874
|
-
|
|
2875
|
-
|
|
2876
|
-
|
|
2877
|
-
|
|
2993
|
+
if (!state.backdrop) {
|
|
2994
|
+
state.backdrop = element("div", { "class": "modal-backdrop fade show ge-settings-backdrop" });
|
|
2995
|
+
state.backdrop.addEventListener("click", function() {
|
|
2996
|
+
state.dismissed();
|
|
2997
|
+
});
|
|
2998
|
+
document.body.appendChild(state.backdrop);
|
|
2999
|
+
}
|
|
2878
3000
|
addClass(panel, "show");
|
|
2879
3001
|
panel.style.display = "block";
|
|
2880
3002
|
panel.removeAttribute("aria-hidden");
|
|
2881
3003
|
return;
|
|
2882
3004
|
}
|
|
2883
3005
|
var modal = Modal.getOrCreateInstance(panel);
|
|
2884
|
-
|
|
2885
|
-
|
|
2886
|
-
state = { wanted: null, busy: false };
|
|
2887
|
-
modalState.set(panel, state);
|
|
3006
|
+
if (!state.watched) {
|
|
3007
|
+
state.watched = true;
|
|
2888
3008
|
trackModal(panel);
|
|
2889
3009
|
panel.addEventListener("hide.bs.modal", function() {
|
|
2890
3010
|
if (state.wanted === "open") {
|
|
@@ -2901,9 +3021,9 @@
|
|
|
2901
3021
|
panel.addEventListener("hidden.bs.modal", function() {
|
|
2902
3022
|
state.busy = false;
|
|
2903
3023
|
if (state.wanted === "open") {
|
|
2904
|
-
showModal(panel);
|
|
2905
|
-
} else
|
|
2906
|
-
|
|
3024
|
+
showModal(panel, state.dismissed);
|
|
3025
|
+
} else {
|
|
3026
|
+
state.dismissed();
|
|
2907
3027
|
}
|
|
2908
3028
|
});
|
|
2909
3029
|
}
|
|
@@ -2915,23 +3035,117 @@
|
|
|
2915
3035
|
}
|
|
2916
3036
|
function hideModal(panel) {
|
|
2917
3037
|
var Modal = modalLibrary();
|
|
3038
|
+
var state = modalState.get(panel);
|
|
3039
|
+
if (!state) {
|
|
3040
|
+
return;
|
|
3041
|
+
}
|
|
3042
|
+
state.wanted = "closed";
|
|
2918
3043
|
if (!Modal) {
|
|
2919
|
-
if (
|
|
2920
|
-
|
|
2921
|
-
|
|
3044
|
+
if (state.backdrop) {
|
|
3045
|
+
state.backdrop.remove();
|
|
3046
|
+
state.backdrop = null;
|
|
2922
3047
|
}
|
|
2923
3048
|
removeClass(panel, "show");
|
|
2924
3049
|
panel.style.removeProperty("display");
|
|
2925
3050
|
panel.setAttribute("aria-hidden", "true");
|
|
2926
3051
|
return;
|
|
2927
3052
|
}
|
|
2928
|
-
var state = modalState.get(panel) || { wanted: null, busy: false };
|
|
2929
|
-
state.wanted = "closed";
|
|
2930
3053
|
if (!state.busy && hasClass(panel, "show")) {
|
|
2931
3054
|
state.busy = true;
|
|
2932
3055
|
Modal.getOrCreateInstance(panel).hide();
|
|
2933
3056
|
}
|
|
2934
3057
|
}
|
|
3058
|
+
function removeBackdrop(panel) {
|
|
3059
|
+
var state = modalState.get(panel);
|
|
3060
|
+
if (state && state.backdrop) {
|
|
3061
|
+
state.backdrop.remove();
|
|
3062
|
+
state.backdrop = null;
|
|
3063
|
+
}
|
|
3064
|
+
}
|
|
3065
|
+
var dialogPanel = null;
|
|
3066
|
+
var dialogState = null;
|
|
3067
|
+
function dialog() {
|
|
3068
|
+
if (dialogPanel) {
|
|
3069
|
+
return dialogPanel;
|
|
3070
|
+
}
|
|
3071
|
+
dialogPanel = create('<div class="modal fade ge-dialog" tabindex="-1" role="dialog" aria-hidden="true"><div class="modal-dialog modal-dialog-centered modal-dialog-scrollable"><div class="modal-content"><div class="modal-header"><h5 class="modal-title ge-dialog-title"></h5></div><div class="modal-body ge-dialog-body"></div><div class="modal-footer"></div></div></div></div>');
|
|
3072
|
+
one(dialogPanel, ".modal-header").appendChild(element("button", {
|
|
3073
|
+
type: "button",
|
|
3074
|
+
"class": "btn-close ge-dialog-close",
|
|
3075
|
+
"aria-label": t("panel.close")
|
|
3076
|
+
}));
|
|
3077
|
+
one(dialogPanel, ".modal-footer").appendChild(element("button", {
|
|
3078
|
+
type: "button",
|
|
3079
|
+
"class": "btn btn-primary ge-dialog-close"
|
|
3080
|
+
}, t("panel.done")));
|
|
3081
|
+
delegate(dialogPanel, "click", ".ge-dialog-close", function(e) {
|
|
3082
|
+
e.preventDefault();
|
|
3083
|
+
closeDialog();
|
|
3084
|
+
});
|
|
3085
|
+
return document.body.appendChild(dialogPanel);
|
|
3086
|
+
}
|
|
3087
|
+
function openDialog(title, body, opener) {
|
|
3088
|
+
closeDialog();
|
|
3089
|
+
var panel = dialog();
|
|
3090
|
+
var listening = new AbortController();
|
|
3091
|
+
dialogState = {
|
|
3092
|
+
body,
|
|
3093
|
+
home: body.parentElement,
|
|
3094
|
+
next: body.nextElementSibling,
|
|
3095
|
+
opener: opener || document.activeElement,
|
|
3096
|
+
listening
|
|
3097
|
+
};
|
|
3098
|
+
one(panel, ".ge-dialog-title").textContent = title;
|
|
3099
|
+
one(panel, ".ge-dialog-body").appendChild(body);
|
|
3100
|
+
show(body);
|
|
3101
|
+
if (!modalLibrary()) {
|
|
3102
|
+
document.addEventListener("keydown", function(e) {
|
|
3103
|
+
if (e.key === "Escape") {
|
|
3104
|
+
closeDialog();
|
|
3105
|
+
}
|
|
3106
|
+
}, { signal: listening.signal });
|
|
3107
|
+
}
|
|
3108
|
+
Object.keys(settingsPanels).forEach(function(mode) {
|
|
3109
|
+
addClass(settingsPanels[mode], "ge-under-dialog");
|
|
3110
|
+
});
|
|
3111
|
+
showModal(panel, function() {
|
|
3112
|
+
closeDialog();
|
|
3113
|
+
});
|
|
3114
|
+
}
|
|
3115
|
+
function closeDialog() {
|
|
3116
|
+
var open = dialogState;
|
|
3117
|
+
if (!open) {
|
|
3118
|
+
return;
|
|
3119
|
+
}
|
|
3120
|
+
dialogState = null;
|
|
3121
|
+
open.listening.abort();
|
|
3122
|
+
hideModal(dialogPanel);
|
|
3123
|
+
Object.keys(settingsPanels).forEach(function(mode) {
|
|
3124
|
+
removeClass(settingsPanels[mode], "ge-under-dialog");
|
|
3125
|
+
});
|
|
3126
|
+
hide(open.body);
|
|
3127
|
+
if (open.home && attached(open.home)) {
|
|
3128
|
+
if (open.next && open.next.parentElement === open.home) {
|
|
3129
|
+
open.home.insertBefore(open.body, open.next);
|
|
3130
|
+
} else {
|
|
3131
|
+
open.home.appendChild(open.body);
|
|
3132
|
+
}
|
|
3133
|
+
} else {
|
|
3134
|
+
open.body.remove();
|
|
3135
|
+
}
|
|
3136
|
+
if (open.opener && attached(open.opener) && open.opener.focus) {
|
|
3137
|
+
open.opener.focus();
|
|
3138
|
+
}
|
|
3139
|
+
}
|
|
3140
|
+
function removeDialog() {
|
|
3141
|
+
closeDialog();
|
|
3142
|
+
if (!dialogPanel) {
|
|
3143
|
+
return;
|
|
3144
|
+
}
|
|
3145
|
+
removeBackdrop(dialogPanel);
|
|
3146
|
+
retireModal(dialogPanel);
|
|
3147
|
+
dialogPanel = null;
|
|
3148
|
+
}
|
|
2935
3149
|
function kindLabel(node) {
|
|
2936
3150
|
var kind = kindOf(node);
|
|
2937
3151
|
if (CONTAINERS[kind] && CONTAINERS[kind].labelKey) {
|
|
@@ -3780,10 +3994,6 @@
|
|
|
3780
3994
|
one(layoutDropdown, "button").textContent = t(labelKeyFor(view));
|
|
3781
3995
|
}
|
|
3782
3996
|
function viewKey(view) {
|
|
3783
|
-
if (typeof view == "number") {
|
|
3784
|
-
warnOnceHere("changeView-index", "changeView(" + view + "): layout modes are identified by breakpoint key now, so pass one of " + JSON.stringify(VIEW_KEYS) + ". Numeric indexes still work, but they mean what they meant in 2.x (" + LEGACY_VIEW_INDEXES.join(", ") + ") and will be dropped.");
|
|
3785
|
-
return LEGACY_VIEW_INDEXES[view] || null;
|
|
3786
|
-
}
|
|
3787
3997
|
return VIEW_KEYS.indexOf(view) === -1 ? null : view;
|
|
3788
3998
|
}
|
|
3789
3999
|
function changeView(view) {
|
|
@@ -3802,6 +4012,7 @@
|
|
|
3802
4012
|
renderUtilities(section);
|
|
3803
4013
|
});
|
|
3804
4014
|
});
|
|
4015
|
+
renderPluginFields(null);
|
|
3805
4016
|
refreshPreviews(canvas);
|
|
3806
4017
|
plugins("onViewChange", key);
|
|
3807
4018
|
emit("view-change", { canvas, breakpoint: key, from, to: key });
|
|
@@ -3890,7 +4101,7 @@
|
|
|
3890
4101
|
GridEditor._plainHtml = plainHtml;
|
|
3891
4102
|
GridEditor.Sortable = null;
|
|
3892
4103
|
GridEditor.bootstrap = null;
|
|
3893
|
-
GridEditor.version = false ? "dev" : "
|
|
4104
|
+
GridEditor.version = false ? "dev" : "8.0.0-beta.2";
|
|
3894
4105
|
GridEditor.locales = {
|
|
3895
4106
|
en: {
|
|
3896
4107
|
"tool.move": "Move",
|
|
@@ -3960,14 +4171,12 @@
|
|
|
3960
4171
|
"utility.inherit": "Inherit: {value} (from {breakpoint})",
|
|
3961
4172
|
"utility.varies": "Changes at {breakpoints}; choosing here replaces that",
|
|
3962
4173
|
"error.sortable_missing": "SortableJS not available! Make sure you loaded the Sortable js file; dragging is off without it.",
|
|
3963
|
-
"warning.setting_removed": "The {setting} setting was removed in 4.0. Use {replacement} instead.",
|
|
3964
4174
|
"warning.already_editing": "This element already has an editor: that one is handed back, with the options it was made with.",
|
|
3965
4175
|
"warning.destroyed": "{method}() was called on an editor that has been destroyed, and does nothing.",
|
|
3966
4176
|
"warning.duplicate_build": "grideditor.js was loaded twice: the first GridEditor is kept.",
|
|
3967
|
-
"warning.plugin_6x": 'The "{name}" plugin is written for grid-editor 6 and is not loaded. Plugins register on GridEditor since 7.0: see UPGRADING.md.',
|
|
3968
4177
|
"warning.adapter_no_jquery": "grideditor.jquery.js needs jQuery 4, and there is no jQuery on the page: the jQuery API is not there.",
|
|
3969
4178
|
"error.tinymce_missing": "tinyMCE not available! Make sure you loaded the tinyMCE js file.",
|
|
3970
|
-
"error.ckeditor_missing": "CKEditor 5 not available! Make sure you loaded its ckeditor5.umd.js file
|
|
4179
|
+
"error.ckeditor_missing": "CKEditor 5 not available! Make sure you loaded its ckeditor5.umd.js file.",
|
|
3971
4180
|
"error.summernote_missing": "Summernote not available! Make sure you loaded jQuery and the Summernote js file."
|
|
3972
4181
|
}
|
|
3973
4182
|
};
|