@themarioga/grid-editor 6.0.0-beta.5 → 7.0.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/AUTO_SAVE.md +2 -2
- package/BUILDING.md +45 -29
- package/CHANGELOG.md +54 -0
- package/README.md +140 -89
- package/UPGRADING.md +146 -2
- package/dist/grideditor.bundle.min.js +14 -0
- package/dist/grideditor.d.ts +335 -0
- package/dist/grideditor.esm.js +3977 -0
- package/dist/grideditor.jquery.js +253 -0
- package/dist/grideditor.jquery.min.js +1 -0
- package/dist/grideditor.jquery.min.js.map +7 -0
- package/dist/grideditor.js +3983 -0
- package/dist/grideditor.min.js +6 -0
- package/dist/grideditor.min.js.map +7 -0
- package/dist/locales/grideditor.es.esm.js +158 -0
- package/dist/locales/grideditor.es.js +164 -170
- package/dist/locales/grideditor.es.min.js +6 -2
- package/dist/locales/grideditor.es.min.js.map +7 -1
- package/dist/plugins/grideditor.accordion.esm.js +294 -0
- package/dist/plugins/grideditor.accordion.js +286 -180
- package/dist/plugins/grideditor.accordion.min.js +1 -2
- package/dist/plugins/grideditor.accordion.min.js.map +7 -1
- package/dist/plugins/grideditor.alignment.esm.js +55 -0
- package/dist/plugins/grideditor.alignment.js +58 -77
- package/dist/plugins/grideditor.alignment.min.js +1 -2
- package/dist/plugins/grideditor.alignment.min.js.map +7 -1
- package/dist/plugins/grideditor.card.esm.js +73 -0
- package/dist/plugins/grideditor.card.js +74 -64
- package/dist/plugins/grideditor.card.min.js +1 -2
- package/dist/plugins/grideditor.card.min.js.map +7 -1
- package/dist/plugins/grideditor.ckeditor.esm.js +500 -0
- package/dist/plugins/grideditor.ckeditor.js +482 -493
- package/dist/plugins/grideditor.ckeditor.min.js +1 -2
- package/dist/plugins/grideditor.ckeditor.min.js.map +7 -1
- package/dist/plugins/grideditor.clipboard.esm.js +326 -0
- package/dist/plugins/grideditor.clipboard.js +298 -235
- package/dist/plugins/grideditor.clipboard.min.js +1 -2
- package/dist/plugins/grideditor.clipboard.min.js.map +7 -1
- package/dist/plugins/grideditor.codemirror-inline.esm.js +205 -0
- package/dist/plugins/grideditor.codemirror-inline.js +188 -168
- package/dist/plugins/grideditor.codemirror-inline.min.js +1 -2
- package/dist/plugins/grideditor.codemirror-inline.min.js.map +7 -1
- package/dist/plugins/grideditor.codemirror.esm.js +63 -0
- package/dist/plugins/grideditor.codemirror.js +60 -71
- package/dist/plugins/grideditor.codemirror.min.js +1 -2
- package/dist/plugins/grideditor.codemirror.min.js.map +7 -1
- package/dist/plugins/grideditor.elements.esm.js +271 -0
- package/dist/plugins/grideditor.elements.js +256 -149
- package/dist/plugins/grideditor.elements.min.js +1 -2
- package/dist/plugins/grideditor.elements.min.js.map +7 -1
- package/dist/plugins/grideditor.float.esm.js +34 -0
- package/dist/plugins/grideditor.float.js +37 -52
- package/dist/plugins/grideditor.float.min.js +1 -2
- package/dist/plugins/grideditor.float.min.js.map +7 -1
- package/dist/plugins/grideditor.gutters.esm.js +143 -0
- package/dist/plugins/grideditor.gutters.js +134 -131
- package/dist/plugins/grideditor.gutters.min.js +1 -2
- package/dist/plugins/grideditor.gutters.min.js.map +7 -1
- package/dist/plugins/grideditor.order.esm.js +189 -0
- package/dist/plugins/grideditor.order.js +170 -182
- package/dist/plugins/grideditor.order.min.js +1 -2
- package/dist/plugins/grideditor.order.min.js.map +7 -1
- package/dist/plugins/grideditor.popup.esm.js +187 -0
- package/dist/plugins/grideditor.popup.js +183 -134
- package/dist/plugins/grideditor.popup.min.js +1 -2
- package/dist/plugins/grideditor.popup.min.js.map +7 -1
- package/dist/plugins/grideditor.sections.esm.js +271 -0
- package/dist/plugins/grideditor.sections.js +250 -173
- package/dist/plugins/grideditor.sections.min.js +1 -2
- package/dist/plugins/grideditor.sections.min.js.map +7 -1
- package/dist/plugins/grideditor.spacing.esm.js +318 -0
- package/dist/plugins/grideditor.spacing.js +296 -272
- package/dist/plugins/grideditor.spacing.min.js +1 -2
- package/dist/plugins/grideditor.spacing.min.js.map +7 -1
- package/dist/plugins/grideditor.summernote.esm.js +509 -0
- package/dist/plugins/grideditor.summernote.js +491 -471
- package/dist/plugins/grideditor.summernote.min.js +1 -2
- package/dist/plugins/grideditor.summernote.min.js.map +7 -1
- package/dist/plugins/grideditor.tabs.esm.js +237 -0
- package/dist/plugins/grideditor.tabs.js +233 -139
- package/dist/plugins/grideditor.tabs.min.js +1 -2
- package/dist/plugins/grideditor.tabs.min.js.map +7 -1
- package/dist/plugins/grideditor.textalign.esm.js +40 -0
- package/dist/plugins/grideditor.textalign.js +43 -56
- package/dist/plugins/grideditor.textalign.min.js +1 -2
- package/dist/plugins/grideditor.textalign.min.js.map +7 -1
- package/dist/plugins/grideditor.tinymce.esm.js +519 -0
- package/dist/plugins/grideditor.tinymce.js +500 -534
- package/dist/plugins/grideditor.tinymce.min.js +1 -2
- package/dist/plugins/grideditor.tinymce.min.js.map +7 -1
- package/dist/plugins/grideditor.visibility.esm.js +158 -0
- package/dist/plugins/grideditor.visibility.js +140 -149
- package/dist/plugins/grideditor.visibility.min.js +1 -2
- package/dist/plugins/grideditor.visibility.min.js.map +7 -1
- package/docs/events.md +47 -21
- package/docs/locale-keys.md +7 -4
- package/docs/plugins.md +49 -27
- package/example/adapter.html +112 -0
- package/example/attributes.html +85 -61
- package/example/autocols.html +9 -9
- package/example/autosave.html +13 -14
- package/example/basic.html +4 -5
- package/example/breakpoints.html +5 -6
- package/example/ckeditor.html +4 -5
- package/example/clipboard.html +11 -10
- package/example/codemirror.html +9 -7
- package/example/containers.html +7 -8
- package/example/custom_editor.html +53 -34
- package/example/elements.html +10 -11
- package/example/index.html +16 -2
- package/example/locale.html +6 -7
- package/example/plugins.html +44 -29
- package/example/summernote.html +6 -5
- package/example/utilities.html +17 -13
- package/example/wrap_content.html +9 -9
- package/package.json +43 -12
- package/src/js/dom.js +401 -0
- package/src/js/grideditor.classic.js +16 -0
- package/src/js/grideditor.jquery.js +325 -0
- package/src/js/{jquery.grideditor.js → grideditor.js} +1284 -1124
- package/src/js/locales/grideditor.es.js +163 -158
- package/src/js/plugins/grideditor.accordion.js +97 -77
- package/src/js/plugins/grideditor.alignment.js +5 -7
- package/src/js/plugins/grideditor.card.js +23 -23
- package/src/js/plugins/grideditor.ckeditor.js +107 -106
- package/src/js/plugins/grideditor.clipboard.js +49 -37
- package/src/js/plugins/grideditor.codemirror-inline.js +50 -37
- package/src/js/plugins/grideditor.codemirror.js +9 -10
- package/src/js/plugins/grideditor.elements.js +57 -33
- package/src/js/plugins/grideditor.float.js +4 -6
- package/src/js/plugins/grideditor.gutters.js +20 -15
- package/src/js/plugins/grideditor.order.js +28 -25
- package/src/js/plugins/grideditor.popup.js +63 -51
- package/src/js/plugins/grideditor.sections.js +39 -32
- package/src/js/plugins/grideditor.spacing.js +42 -45
- package/src/js/plugins/grideditor.summernote.js +112 -76
- package/src/js/plugins/grideditor.tabs.js +65 -57
- package/src/js/plugins/grideditor.textalign.js +4 -6
- package/src/js/plugins/grideditor.tinymce.js +147 -139
- package/src/js/plugins/grideditor.visibility.js +24 -25
- package/src/js/register.js +18 -0
- package/src/js/text/grideditor.text.js +81 -106
- package/types/grideditor.d.ts +335 -0
- package/dist/jquery.grideditor.bundle.min.js +0 -10
- package/dist/jquery.grideditor.js +0 -4927
- package/dist/jquery.grideditor.min.js +0 -2
- package/dist/jquery.grideditor.min.js.map +0 -1
|
@@ -1,299 +1,323 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
1
|
+
(() => {
|
|
2
|
+
// src/js/register.js
|
|
3
|
+
var GridEditor = window.GridEditor;
|
|
4
|
+
if (!GridEditor || typeof GridEditor.get !== "function") {
|
|
5
|
+
throw new Error("grid-editor: load grideditor.js (or grideditor.bundle.min.js) before its plugins, its locales and grideditor.jquery.js");
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// src/js/dom.js
|
|
9
|
+
function all(root, selector) {
|
|
10
|
+
return root ? Array.prototype.slice.call(root.querySelectorAll(selector)) : [];
|
|
11
|
+
}
|
|
12
|
+
function selfAndAll(root, selector) {
|
|
13
|
+
if (!root) {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
var found = all(root, selector);
|
|
17
|
+
if (root.nodeType === 1 && root.matches(selector)) {
|
|
18
|
+
found.unshift(root);
|
|
19
|
+
}
|
|
20
|
+
return found;
|
|
21
|
+
}
|
|
22
|
+
function children(node, selector) {
|
|
23
|
+
if (!node) {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
return Array.prototype.filter.call(node.children, function(each) {
|
|
27
|
+
return !selector || each.matches(selector);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function child(node, selector) {
|
|
31
|
+
return children(node, selector)[0] || null;
|
|
32
|
+
}
|
|
33
|
+
function is(node, selector) {
|
|
34
|
+
return !!node && node.nodeType === 1 && node.matches(selector);
|
|
35
|
+
}
|
|
36
|
+
function element(tag, attributes, text) {
|
|
37
|
+
var node = document.createElement(tag);
|
|
38
|
+
Object.keys(attributes || {}).forEach(function(name) {
|
|
39
|
+
var value = attributes[name];
|
|
40
|
+
if (value !== null && value !== void 0 && value !== false) {
|
|
41
|
+
node.setAttribute(name, value);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
if (text !== void 0 && text !== null) {
|
|
45
|
+
node.textContent = text;
|
|
46
|
+
}
|
|
47
|
+
return node;
|
|
48
|
+
}
|
|
49
|
+
function hasClass(node, name) {
|
|
50
|
+
return !!node && node.nodeType === 1 && node.classList.contains(name);
|
|
51
|
+
}
|
|
52
|
+
function css(node, styles) {
|
|
53
|
+
Object.keys(styles).forEach(function(property) {
|
|
54
|
+
var value = styles[property];
|
|
55
|
+
if (typeof value === "number" && !UNITLESS[property]) {
|
|
56
|
+
value = value + "px";
|
|
57
|
+
}
|
|
58
|
+
node.style.setProperty(property, value === null || value === void 0 ? "" : String(value));
|
|
59
|
+
});
|
|
60
|
+
return node;
|
|
61
|
+
}
|
|
62
|
+
var UNITLESS = { opacity: true, "z-index": true, "flex-grow": true, "flex-shrink": true, order: true };
|
|
63
|
+
var defaultDisplays = {};
|
|
64
|
+
function defaultDisplay(node) {
|
|
65
|
+
var tag = node.nodeName;
|
|
66
|
+
if (!defaultDisplays[tag]) {
|
|
67
|
+
var probe = document.body.appendChild(document.createElement(tag));
|
|
68
|
+
defaultDisplays[tag] = getComputedStyle(probe).display;
|
|
69
|
+
probe.remove();
|
|
70
|
+
if (defaultDisplays[tag] === "none") {
|
|
71
|
+
defaultDisplays[tag] = "block";
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return defaultDisplays[tag];
|
|
75
|
+
}
|
|
76
|
+
function show(node) {
|
|
77
|
+
node.style.removeProperty("display");
|
|
78
|
+
if (getComputedStyle(node).display === "none") {
|
|
79
|
+
node.style.display = defaultDisplay(node);
|
|
80
|
+
}
|
|
81
|
+
return node;
|
|
82
|
+
}
|
|
83
|
+
function hide(node) {
|
|
84
|
+
node.style.display = "none";
|
|
85
|
+
return node;
|
|
86
|
+
}
|
|
87
|
+
function toggle(node, state) {
|
|
88
|
+
if (state === void 0) {
|
|
89
|
+
state = !visible(node);
|
|
90
|
+
}
|
|
91
|
+
return state ? show(node) : hide(node);
|
|
92
|
+
}
|
|
93
|
+
function visible(node) {
|
|
94
|
+
return !!(node.offsetWidth || node.offsetHeight || node.getClientRects().length);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// src/js/plugins/grideditor.spacing.js
|
|
98
|
+
Object.assign(GridEditor.locales.en, {
|
|
99
|
+
"utility.padding": "Padding",
|
|
100
|
+
"utility.margin": "Margin",
|
|
101
|
+
"utility.side_all": "All sides",
|
|
102
|
+
"utility.side_x": "Left and right",
|
|
103
|
+
"utility.side_y": "Top and bottom",
|
|
104
|
+
"utility.side_t": "Top",
|
|
105
|
+
"utility.side_b": "Bottom",
|
|
106
|
+
"utility.side_s": "Start",
|
|
107
|
+
"utility.side_e": "End",
|
|
108
|
+
"utility.spacing_gutter": "A column's side padding is its gutter: changing it changes the gutter"
|
|
109
|
+
});
|
|
110
|
+
var VALUES = ["0", "1", "2", "3", "4", "5"];
|
|
111
|
+
var SCALE = ["0", ".25rem", ".5rem", "1rem", "1.5rem", "3rem"];
|
|
112
|
+
var SIDES = ["", "x", "y", "t", "e", "b", "s"];
|
|
113
|
+
var SET = {
|
|
114
|
+
"": ["top", "right", "bottom", "left"],
|
|
115
|
+
x: ["left", "right"],
|
|
116
|
+
y: ["top", "bottom"],
|
|
117
|
+
t: ["top"],
|
|
118
|
+
e: ["right"],
|
|
119
|
+
b: ["bottom"],
|
|
120
|
+
s: ["left"]
|
|
121
|
+
};
|
|
122
|
+
var INFIXES = ["", "sm", "md", "lg", "xl", "xxl"];
|
|
123
|
+
var PROPERTIES = { p: "padding", m: "margin" };
|
|
124
|
+
function pattern(key) {
|
|
125
|
+
return new RegExp("^" + key + "[xytbse]?-(?:(?:sm|md|lg|xl|xxl)-)?(?:[0-5]|auto)$");
|
|
126
|
+
}
|
|
127
|
+
GridEditor.utilities.spacing = function(ge) {
|
|
128
|
+
var options = Object.assign({ values: VALUES, scale: SCALE }, ge.settings.utilities.spacing);
|
|
129
|
+
var patterns = { p: pattern("p"), m: pattern("m") };
|
|
71
130
|
function applies(node, kind) {
|
|
72
|
-
|
|
73
|
-
node.is('[data-ge-container]');
|
|
131
|
+
return kind === "row" || kind === "column" || kind === "element" || is(node, "[data-ge-container]");
|
|
74
132
|
}
|
|
75
|
-
|
|
76
133
|
function classes(node) {
|
|
77
|
-
|
|
134
|
+
return (node.getAttribute("class") || "").split(/\s+/);
|
|
78
135
|
}
|
|
79
|
-
|
|
80
136
|
function carries(node, key) {
|
|
81
|
-
|
|
137
|
+
return classes(node).some(function(name) {
|
|
138
|
+
return patterns[key].test(name);
|
|
139
|
+
});
|
|
82
140
|
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* The class of one family that decides a side at a breakpoint: the
|
|
86
|
-
* widest breakpoint up to it that has one, as { tier, value }.
|
|
87
|
-
*/
|
|
88
141
|
function source(node, family, tier) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
for (var
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
142
|
+
var names = classes(node);
|
|
143
|
+
var values = family.charAt(0) === "m" ? VALUES.concat(["auto"]) : VALUES;
|
|
144
|
+
for (var i = tier; i >= 0; i--) {
|
|
145
|
+
for (var v = 0; v < values.length; v++) {
|
|
146
|
+
var name = family + (INFIXES[i] ? "-" + INFIXES[i] : "") + "-" + values[v];
|
|
147
|
+
if (names.indexOf(name) !== -1) {
|
|
148
|
+
return { tier: i, value: values[v] };
|
|
149
|
+
}
|
|
97
150
|
}
|
|
98
|
-
|
|
99
|
-
|
|
151
|
+
}
|
|
152
|
+
return null;
|
|
100
153
|
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* What padding or margin is on each side with none of the plugin's
|
|
104
|
-
* classes: the editor's frame for a row or a column, the host's css
|
|
105
|
-
* for anything else. Read by taking the classes off for a moment,
|
|
106
|
-
* since that is the only way to ask the browser.
|
|
107
|
-
*/
|
|
108
154
|
function without(node, key) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
155
|
+
var original = node.getAttribute("class");
|
|
156
|
+
var style;
|
|
157
|
+
var bare = {};
|
|
158
|
+
node.setAttribute("class", classes(node).filter(function(name) {
|
|
159
|
+
return !patterns[key].test(name);
|
|
160
|
+
}).join(" "));
|
|
161
|
+
style = getComputedStyle(node);
|
|
162
|
+
["top", "right", "bottom", "left"].forEach(function(side) {
|
|
163
|
+
bare[side] = style.getPropertyValue(PROPERTIES[key] + "-" + side);
|
|
164
|
+
});
|
|
165
|
+
if (original === null) {
|
|
166
|
+
node.removeAttribute("class");
|
|
167
|
+
} else {
|
|
168
|
+
node.setAttribute("class", original);
|
|
169
|
+
}
|
|
170
|
+
return bare;
|
|
121
171
|
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Each side the way Bootstrap's css settles it: the class from the
|
|
125
|
-
* widest breakpoint wins, and within one breakpoint the side written
|
|
126
|
-
* later in the css. A side no class reaches shows what it is without
|
|
127
|
-
* any, over a wider breakpoint's class that is live in a wide window.
|
|
128
|
-
*/
|
|
129
172
|
function sides(node, key, breakpoint) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
['top', 'right', 'bottom', 'left'].forEach(function(set) {
|
|
148
|
-
var winner = winners[set];
|
|
149
|
-
|
|
150
|
-
if (!winner) {
|
|
151
|
-
neutral = neutral || without(node, key);
|
|
152
|
-
styles[PROPERTIES[key] + '-' + set] = neutral[set];
|
|
153
|
-
} else {
|
|
154
|
-
styles[PROPERTIES[key] + '-' + set] = winner.value === 'auto' ? 'auto' : options.scale[winner.value];
|
|
155
|
-
}
|
|
173
|
+
var tier = ge.breakpoints.indexOf(breakpoint);
|
|
174
|
+
var winners = {};
|
|
175
|
+
var styles = {};
|
|
176
|
+
var neutral = null;
|
|
177
|
+
SIDES.forEach(function(side, order) {
|
|
178
|
+
var found = source(node, key + side, tier);
|
|
179
|
+
if (!found) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
SET[side].forEach(function(set) {
|
|
183
|
+
var current = winners[set];
|
|
184
|
+
if (!current || found.tier > current.tier || found.tier === current.tier && order > current.order) {
|
|
185
|
+
winners[set] = { tier: found.tier, order, value: found.value };
|
|
186
|
+
}
|
|
156
187
|
});
|
|
157
|
-
|
|
158
|
-
|
|
188
|
+
});
|
|
189
|
+
["top", "right", "bottom", "left"].forEach(function(set) {
|
|
190
|
+
var winner = winners[set];
|
|
191
|
+
if (!winner) {
|
|
192
|
+
neutral = neutral || without(node, key);
|
|
193
|
+
styles[PROPERTIES[key] + "-" + set] = neutral[set];
|
|
194
|
+
} else {
|
|
195
|
+
styles[PROPERTIES[key] + "-" + set] = winner.value === "auto" ? "auto" : options.scale[winner.value];
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
return styles;
|
|
159
199
|
}
|
|
160
|
-
|
|
161
|
-
/** The side a group's select starts on: the first that has a class, or all. */
|
|
162
200
|
function startingSide(node, key) {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
201
|
+
var names = classes(node).filter(function(name) {
|
|
202
|
+
return patterns[key].test(name);
|
|
203
|
+
});
|
|
204
|
+
var found = SIDES.filter(function(side) {
|
|
205
|
+
return names.some(function(name) {
|
|
206
|
+
return name.indexOf(key + side + "-") === 0;
|
|
166
207
|
});
|
|
167
|
-
|
|
168
|
-
|
|
208
|
+
});
|
|
209
|
+
return found.length ? found[0] : "";
|
|
169
210
|
}
|
|
170
|
-
|
|
171
211
|
function sideLabel(side) {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
212
|
+
switch (side) {
|
|
213
|
+
case "x":
|
|
214
|
+
return ge.t("utility.side_x");
|
|
215
|
+
case "y":
|
|
216
|
+
return ge.t("utility.side_y");
|
|
217
|
+
case "t":
|
|
218
|
+
return ge.t("utility.side_t");
|
|
219
|
+
case "b":
|
|
220
|
+
return ge.t("utility.side_b");
|
|
221
|
+
case "s":
|
|
222
|
+
return ge.t("utility.side_s");
|
|
223
|
+
case "e":
|
|
224
|
+
return ge.t("utility.side_e");
|
|
225
|
+
default:
|
|
226
|
+
return ge.t("utility.side_all");
|
|
227
|
+
}
|
|
181
228
|
}
|
|
182
|
-
|
|
183
|
-
/** A padding or margin group: its name, the side, and the field of that side's family. */
|
|
184
229
|
function group(node, key, labelText) {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
var
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
})
|
|
202
|
-
.appendTo(box)
|
|
203
|
-
;
|
|
204
|
-
field.appendTo(box);
|
|
205
|
-
|
|
206
|
-
return box;
|
|
230
|
+
var box = element("div", { "class": "ge-spacing-group", "data-ge-spacing": key });
|
|
231
|
+
var side = element("select", { "class": "ge-spacing-side form-select form-select-sm" });
|
|
232
|
+
box.appendChild(element("span", { "class": "ge-utility-label" }, labelText));
|
|
233
|
+
SIDES.forEach(function(value) {
|
|
234
|
+
side.appendChild(element("option", { value }, sideLabel(value)));
|
|
235
|
+
});
|
|
236
|
+
var field = ge.utilityField(node, key + startingSide(node, key));
|
|
237
|
+
side.value = field.getAttribute("data-ge-family").slice(1);
|
|
238
|
+
side.addEventListener("change", function() {
|
|
239
|
+
var next = ge.utilityField(node, key + this.value);
|
|
240
|
+
field.replaceWith(next);
|
|
241
|
+
field = next;
|
|
242
|
+
});
|
|
243
|
+
box.appendChild(side);
|
|
244
|
+
box.appendChild(field);
|
|
245
|
+
return box;
|
|
207
246
|
}
|
|
208
|
-
|
|
209
|
-
var NODES = '.row, .column, .ge-element, [data-ge-container]';
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* Keep each drawer on its node's edges. A drawer is pulled out over the
|
|
213
|
-
* editor's frame by as much as the frame pads the node, and a padding
|
|
214
|
-
* class replaces the frame, so a padded node's drawer is pulled out by
|
|
215
|
-
* its real padding instead. And a column padded at the sides gets a word
|
|
216
|
-
* about what that does to its gutter.
|
|
217
|
-
*/
|
|
247
|
+
var NODES = ".row, .column, .ge-element, [data-ge-container]";
|
|
218
248
|
function mark(scope) {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
249
|
+
selfAndAll(scope, NODES).forEach(function(node) {
|
|
250
|
+
var drawer = child(node, ".ge-tools-drawer");
|
|
251
|
+
if (!drawer || !applies(node, ge.kindOf(node))) {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
if (carries(node, "p")) {
|
|
255
|
+
var style = getComputedStyle(node);
|
|
256
|
+
css(drawer, {
|
|
257
|
+
"margin-top": "-" + style.paddingTop,
|
|
258
|
+
"margin-left": "-" + style.paddingLeft,
|
|
259
|
+
"margin-right": "-" + style.paddingRight,
|
|
260
|
+
width: "calc(100% + " + style.paddingLeft + " + " + style.paddingRight + ")"
|
|
261
|
+
});
|
|
262
|
+
} else {
|
|
263
|
+
css(drawer, { "margin-top": "", "margin-left": "", "margin-right": "", width: "" });
|
|
264
|
+
}
|
|
265
|
+
if (hasClass(node, "column")) {
|
|
266
|
+
var padded = classes(node).some(function(name) {
|
|
267
|
+
return /^p[xse]?-/.test(name) && patterns.p.test(name);
|
|
268
|
+
});
|
|
269
|
+
all(drawer, ".ge-spacing-gutter").forEach(function(note) {
|
|
270
|
+
toggle(note, padded);
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
});
|
|
244
274
|
}
|
|
245
|
-
|
|
246
275
|
function families(key, labelKey) {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
return
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
}
|
|
276
|
+
var values = key === "m" ? VALUES.concat(["auto"]) : VALUES;
|
|
277
|
+
var offered = options.values.concat(key === "m" ? ["auto"] : []);
|
|
278
|
+
return SIDES.map(function(side) {
|
|
279
|
+
return {
|
|
280
|
+
name: key + side,
|
|
281
|
+
prefix: key + side,
|
|
282
|
+
values,
|
|
283
|
+
appliesTo: ["row", "column", "text", "element", "container"],
|
|
284
|
+
labelKey,
|
|
285
|
+
panel: false,
|
|
286
|
+
choices: function() {
|
|
287
|
+
return values.filter(function(value) {
|
|
288
|
+
return offered.indexOf(value) !== -1;
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
});
|
|
263
293
|
}
|
|
264
|
-
|
|
265
294
|
return {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
return styles;
|
|
293
|
-
},
|
|
294
|
-
|
|
295
|
-
onRefresh: mark,
|
|
295
|
+
families: families("p", "utility.padding").concat(families("m", "utility.margin")),
|
|
296
|
+
panel: function(node, kind) {
|
|
297
|
+
if (!applies(node, kind)) {
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
var box = element("div", { "class": "ge-spacing" });
|
|
301
|
+
box.appendChild(group(node, "p", ge.t("utility.padding")));
|
|
302
|
+
box.appendChild(group(node, "m", ge.t("utility.margin")));
|
|
303
|
+
if (kind === "column") {
|
|
304
|
+
box.appendChild(element("small", { "class": "ge-spacing-gutter" }, ge.t("utility.spacing_gutter")));
|
|
305
|
+
}
|
|
306
|
+
return box;
|
|
307
|
+
},
|
|
308
|
+
preview: function(node, kind, breakpoint) {
|
|
309
|
+
if (!applies(node, kind)) {
|
|
310
|
+
return {};
|
|
311
|
+
}
|
|
312
|
+
var styles = {};
|
|
313
|
+
["p", "m"].forEach(function(key) {
|
|
314
|
+
if (carries(node, key)) {
|
|
315
|
+
Object.assign(styles, sides(node, key, breakpoint));
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
return styles;
|
|
319
|
+
},
|
|
320
|
+
onRefresh: mark
|
|
296
321
|
};
|
|
297
|
-
};
|
|
298
|
-
|
|
299
|
-
})(jQuery);
|
|
322
|
+
};
|
|
323
|
+
})();
|