phoenix_live_view 0.17.2 → 0.17.3
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 +18 -1
- package/README.md +14 -14
- package/assets/js/phoenix_live_view/constants.js +1 -0
- package/assets/js/phoenix_live_view/js.js +41 -29
- package/assets/js/phoenix_live_view/live_socket.js +5 -4
- package/assets/js/phoenix_live_view/rendered.js +21 -9
- package/assets/js/phoenix_live_view/utils.js +4 -1
- package/assets/js/phoenix_live_view/view.js +10 -7
- package/package.json +1 -1
- package/priv/static/phoenix_live_view.cjs.js +80 -49
- package/priv/static/phoenix_live_view.cjs.js.map +2 -2
- package/priv/static/phoenix_live_view.esm.js +80 -49
- package/priv/static/phoenix_live_view.esm.js.map +2 -2
- package/priv/static/phoenix_live_view.js +80 -49
- package/priv/static/phoenix_live_view.min.js +5 -5
|
@@ -75,6 +75,7 @@ var COMPONENTS = "c";
|
|
|
75
75
|
var EVENTS = "e";
|
|
76
76
|
var REPLY = "r";
|
|
77
77
|
var TITLE = "t";
|
|
78
|
+
var TEMPLATES = "p";
|
|
78
79
|
|
|
79
80
|
// js/phoenix_live_view/entry_uploader.js
|
|
80
81
|
var EntryUploader = class {
|
|
@@ -126,7 +127,10 @@ var EntryUploader = class {
|
|
|
126
127
|
|
|
127
128
|
// js/phoenix_live_view/utils.js
|
|
128
129
|
var logError = (msg, obj) => console.error && console.error(msg, obj);
|
|
129
|
-
var isCid = (cid) =>
|
|
130
|
+
var isCid = (cid) => {
|
|
131
|
+
let type = typeof cid;
|
|
132
|
+
return type === "number" || type === "string" && /^(0|[1-9]\d*)$/.test(cid);
|
|
133
|
+
};
|
|
130
134
|
function detectDuplicateIds() {
|
|
131
135
|
let ids = new Set();
|
|
132
136
|
let elems = document.querySelectorAll("*[id]");
|
|
@@ -1660,7 +1664,7 @@ var Rendered = class {
|
|
|
1660
1664
|
recursiveToString(rendered, components = rendered[COMPONENTS], onlyCids) {
|
|
1661
1665
|
onlyCids = onlyCids ? new Set(onlyCids) : null;
|
|
1662
1666
|
let output = { buffer: "", components, onlyCids };
|
|
1663
|
-
this.toOutputBuffer(rendered, output);
|
|
1667
|
+
this.toOutputBuffer(rendered, null, output);
|
|
1664
1668
|
return output.buffer;
|
|
1665
1669
|
}
|
|
1666
1670
|
componentCIDs(diff) {
|
|
@@ -1686,8 +1690,8 @@ var Rendered = class {
|
|
|
1686
1690
|
for (let cid in newc) {
|
|
1687
1691
|
newc[cid] = this.cachedFindComponent(cid, newc[cid], oldc, newc, cache);
|
|
1688
1692
|
}
|
|
1689
|
-
for (
|
|
1690
|
-
oldc[
|
|
1693
|
+
for (let cid in newc) {
|
|
1694
|
+
oldc[cid] = newc[cid];
|
|
1691
1695
|
}
|
|
1692
1696
|
diff[COMPONENTS] = newc;
|
|
1693
1697
|
}
|
|
@@ -1756,33 +1760,43 @@ var Rendered = class {
|
|
|
1756
1760
|
isNewFingerprint(diff = {}) {
|
|
1757
1761
|
return !!diff[STATIC];
|
|
1758
1762
|
}
|
|
1759
|
-
|
|
1763
|
+
templateStatic(part, templates) {
|
|
1764
|
+
if (typeof part === "number") {
|
|
1765
|
+
return templates[part];
|
|
1766
|
+
} else {
|
|
1767
|
+
return part;
|
|
1768
|
+
}
|
|
1769
|
+
}
|
|
1770
|
+
toOutputBuffer(rendered, templates, output) {
|
|
1760
1771
|
if (rendered[DYNAMICS]) {
|
|
1761
|
-
return this.comprehensionToBuffer(rendered, output);
|
|
1772
|
+
return this.comprehensionToBuffer(rendered, templates, output);
|
|
1762
1773
|
}
|
|
1763
1774
|
let { [STATIC]: statics } = rendered;
|
|
1775
|
+
statics = this.templateStatic(statics, templates);
|
|
1764
1776
|
output.buffer += statics[0];
|
|
1765
1777
|
for (let i = 1; i < statics.length; i++) {
|
|
1766
|
-
this.dynamicToBuffer(rendered[i - 1], output);
|
|
1778
|
+
this.dynamicToBuffer(rendered[i - 1], templates, output);
|
|
1767
1779
|
output.buffer += statics[i];
|
|
1768
1780
|
}
|
|
1769
1781
|
}
|
|
1770
|
-
comprehensionToBuffer(rendered, output) {
|
|
1782
|
+
comprehensionToBuffer(rendered, templates, output) {
|
|
1771
1783
|
let { [DYNAMICS]: dynamics, [STATIC]: statics } = rendered;
|
|
1784
|
+
statics = this.templateStatic(statics, templates);
|
|
1785
|
+
let compTemplates = rendered[TEMPLATES];
|
|
1772
1786
|
for (let d = 0; d < dynamics.length; d++) {
|
|
1773
1787
|
let dynamic = dynamics[d];
|
|
1774
1788
|
output.buffer += statics[0];
|
|
1775
1789
|
for (let i = 1; i < statics.length; i++) {
|
|
1776
|
-
this.dynamicToBuffer(dynamic[i - 1], output);
|
|
1790
|
+
this.dynamicToBuffer(dynamic[i - 1], compTemplates, output);
|
|
1777
1791
|
output.buffer += statics[i];
|
|
1778
1792
|
}
|
|
1779
1793
|
}
|
|
1780
1794
|
}
|
|
1781
|
-
dynamicToBuffer(rendered, output) {
|
|
1795
|
+
dynamicToBuffer(rendered, templates, output) {
|
|
1782
1796
|
if (typeof rendered === "number") {
|
|
1783
1797
|
output.buffer += this.recursiveCIDToString(output.components, rendered, output.onlyCids);
|
|
1784
1798
|
} else if (isObject(rendered)) {
|
|
1785
|
-
this.toOutputBuffer(rendered, output);
|
|
1799
|
+
this.toOutputBuffer(rendered, templates, output);
|
|
1786
1800
|
} else {
|
|
1787
1801
|
output.buffer += rendered;
|
|
1788
1802
|
}
|
|
@@ -1968,18 +1982,20 @@ var JS = {
|
|
|
1968
1982
|
this.addOrRemoveClasses(sourceEl, [], names, transition, time, view);
|
|
1969
1983
|
}
|
|
1970
1984
|
},
|
|
1971
|
-
exec_transition(eventType, phxEvent, view, sourceEl, { time, to,
|
|
1985
|
+
exec_transition(eventType, phxEvent, view, sourceEl, { time, to, transition }) {
|
|
1972
1986
|
let els = to ? dom_default.all(document, to) : [sourceEl];
|
|
1987
|
+
let [transition_start, running, transition_end] = transition;
|
|
1973
1988
|
els.forEach((el) => {
|
|
1974
|
-
this.addOrRemoveClasses(el,
|
|
1975
|
-
|
|
1989
|
+
let onStart = () => this.addOrRemoveClasses(el, transition_start.concat(running), []);
|
|
1990
|
+
let onDone = () => this.addOrRemoveClasses(el, transition_end, transition_start.concat(running));
|
|
1991
|
+
view.transition(time, onStart, onDone);
|
|
1976
1992
|
});
|
|
1977
1993
|
},
|
|
1978
1994
|
exec_toggle(eventType, phxEvent, view, sourceEl, { to, display, ins, outs, time }) {
|
|
1979
1995
|
if (to) {
|
|
1980
|
-
dom_default.all(document, to, (el) => this.toggle(eventType, view, el, display, ins
|
|
1996
|
+
dom_default.all(document, to, (el) => this.toggle(eventType, view, el, display, ins, outs, time));
|
|
1981
1997
|
} else {
|
|
1982
|
-
this.toggle(eventType, view, sourceEl, display, ins
|
|
1998
|
+
this.toggle(eventType, view, sourceEl, display, ins, outs, time);
|
|
1983
1999
|
}
|
|
1984
2000
|
},
|
|
1985
2001
|
exec_show(eventType, phxEvent, view, sourceEl, { to, display, transition, time }) {
|
|
@@ -1997,37 +2013,45 @@ var JS = {
|
|
|
1997
2013
|
}
|
|
1998
2014
|
},
|
|
1999
2015
|
show(eventType, view, el, display, transition, time) {
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
this.toggle(eventType, view, el, display, transition, [], time);
|
|
2003
|
-
} else if (!isVisible) {
|
|
2004
|
-
this.toggle(eventType, view, el, display, [], [], null);
|
|
2016
|
+
if (!this.isVisible(el)) {
|
|
2017
|
+
this.toggle(eventType, view, el, display, transition, null, time);
|
|
2005
2018
|
}
|
|
2006
2019
|
},
|
|
2007
2020
|
hide(eventType, view, el, display, transition, time) {
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
this.toggle(eventType, view, el, display, [], transition, time);
|
|
2011
|
-
} else if (isVisible) {
|
|
2012
|
-
this.toggle(eventType, view, el, display, [], [], time);
|
|
2021
|
+
if (this.isVisible(el)) {
|
|
2022
|
+
this.toggle(eventType, view, el, display, null, transition, time);
|
|
2013
2023
|
}
|
|
2014
2024
|
},
|
|
2015
|
-
toggle(eventType, view, el, display,
|
|
2016
|
-
|
|
2025
|
+
toggle(eventType, view, el, display, ins, outs, time) {
|
|
2026
|
+
let [inClasses, inStartClasses, inEndClasses] = ins || [[], [], []];
|
|
2027
|
+
let [outClasses, outStartClasses, outEndClasses] = outs || [[], [], []];
|
|
2028
|
+
if (inClasses.length > 0 || outClasses.length > 0) {
|
|
2017
2029
|
if (this.isVisible(el)) {
|
|
2018
|
-
|
|
2019
|
-
|
|
2030
|
+
let onStart = () => {
|
|
2031
|
+
this.addOrRemoveClasses(el, outStartClasses, inClasses.concat(inStartClasses).concat(inEndClasses));
|
|
2032
|
+
window.requestAnimationFrame(() => {
|
|
2033
|
+
this.addOrRemoveClasses(el, outClasses, []);
|
|
2034
|
+
window.requestAnimationFrame(() => this.addOrRemoveClasses(el, outEndClasses, outStartClasses));
|
|
2035
|
+
});
|
|
2036
|
+
};
|
|
2037
|
+
view.transition(time, onStart, () => {
|
|
2038
|
+
this.addOrRemoveClasses(el, [], outClasses.concat(outEndClasses));
|
|
2020
2039
|
dom_default.putSticky(el, "toggle", (currentEl) => currentEl.style.display = "none");
|
|
2021
|
-
this.addOrRemoveClasses(el, [], out_classes);
|
|
2022
2040
|
});
|
|
2023
2041
|
} else {
|
|
2024
2042
|
if (eventType === "remove") {
|
|
2025
2043
|
return;
|
|
2026
2044
|
}
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2045
|
+
let onStart = () => {
|
|
2046
|
+
this.addOrRemoveClasses(el, inStartClasses, outClasses.concat(outStartClasses).concat(outEndClasses));
|
|
2047
|
+
dom_default.putSticky(el, "toggle", (currentEl) => currentEl.style.display = display || "block");
|
|
2048
|
+
window.requestAnimationFrame(() => {
|
|
2049
|
+
this.addOrRemoveClasses(el, inClasses, []);
|
|
2050
|
+
window.requestAnimationFrame(() => this.addOrRemoveClasses(el, inEndClasses, inStartClasses));
|
|
2051
|
+
});
|
|
2052
|
+
};
|
|
2053
|
+
view.transition(time, onStart, () => {
|
|
2054
|
+
this.addOrRemoveClasses(el, [], inClasses.concat(inEndClasses));
|
|
2031
2055
|
});
|
|
2032
2056
|
}
|
|
2033
2057
|
} else {
|
|
@@ -2036,9 +2060,11 @@ var JS = {
|
|
|
2036
2060
|
}
|
|
2037
2061
|
},
|
|
2038
2062
|
addOrRemoveClasses(el, adds, removes, transition, time, view) {
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2063
|
+
let [transition_run, transition_start, transition_end] = transition || [[], [], []];
|
|
2064
|
+
if (transition_run.length > 0) {
|
|
2065
|
+
let onStart = () => this.addOrRemoveClasses(el, transition_start.concat(transition_run), []);
|
|
2066
|
+
let onDone = () => this.addOrRemoveClasses(el, adds.concat(transition_end), removes.concat(transition_run).concat(transition_start));
|
|
2067
|
+
return view.transition(time, onStart, onDone);
|
|
2042
2068
|
}
|
|
2043
2069
|
window.requestAnimationFrame(() => {
|
|
2044
2070
|
let [prevAdds, prevRemoves] = dom_default.getSticky(el, "classes", [[], []]);
|
|
@@ -2060,8 +2086,8 @@ var JS = {
|
|
|
2060
2086
|
let style = window.getComputedStyle(el);
|
|
2061
2087
|
return !(style.opacity === 0 || style.display === "none");
|
|
2062
2088
|
},
|
|
2063
|
-
isToggledOut(el,
|
|
2064
|
-
return !this.isVisible(el) || this.hasAllClasses(el,
|
|
2089
|
+
isToggledOut(el, outClasses) {
|
|
2090
|
+
return !this.isVisible(el) || this.hasAllClasses(el, outClasses);
|
|
2065
2091
|
}
|
|
2066
2092
|
};
|
|
2067
2093
|
var js_default = JS;
|
|
@@ -2202,15 +2228,15 @@ var View = class {
|
|
|
2202
2228
|
log(kind, msgCallback) {
|
|
2203
2229
|
this.liveSocket.log(this, kind, msgCallback);
|
|
2204
2230
|
}
|
|
2205
|
-
transition(time, onDone = function() {
|
|
2231
|
+
transition(time, onStart, onDone = function() {
|
|
2206
2232
|
}) {
|
|
2207
|
-
this.liveSocket.transition(time, onDone);
|
|
2233
|
+
this.liveSocket.transition(time, onStart, onDone);
|
|
2208
2234
|
}
|
|
2209
2235
|
withinTargets(phxTarget, callback) {
|
|
2210
2236
|
if (phxTarget instanceof HTMLElement || phxTarget instanceof SVGElement) {
|
|
2211
2237
|
return this.liveSocket.owner(phxTarget, (view) => callback(view, phxTarget));
|
|
2212
2238
|
}
|
|
2213
|
-
if (
|
|
2239
|
+
if (isCid(phxTarget)) {
|
|
2214
2240
|
let targets = dom_default.findComponentNodeList(this.el, phxTarget);
|
|
2215
2241
|
if (targets.length === 0) {
|
|
2216
2242
|
logError(`no component found matching phx-target of ${phxTarget}`);
|
|
@@ -2714,7 +2740,11 @@ var View = class {
|
|
|
2714
2740
|
targetComponentID(target, targetCtx) {
|
|
2715
2741
|
if (isCid(targetCtx)) {
|
|
2716
2742
|
return targetCtx;
|
|
2717
|
-
}
|
|
2743
|
+
}
|
|
2744
|
+
let cidOrSelector = target.getAttribute(this.binding("target"));
|
|
2745
|
+
if (isCid(cidOrSelector)) {
|
|
2746
|
+
return parseInt(cidOrSelector);
|
|
2747
|
+
} else if (targetCtx && cidOrSelector !== null) {
|
|
2718
2748
|
return this.closestComponentID(targetCtx);
|
|
2719
2749
|
} else {
|
|
2720
2750
|
return null;
|
|
@@ -2990,7 +3020,7 @@ var View = class {
|
|
|
2990
3020
|
return dom_default.all(this.el, `form[${phxChange}]`).filter((form) => form.id && this.ownsElement(form)).filter((form) => form.elements.length > 0).filter((form) => form.getAttribute(this.binding(PHX_AUTO_RECOVER)) !== "ignore").map((form) => {
|
|
2991
3021
|
let newForm = template.content.querySelector(`form[id="${form.id}"][${phxChange}="${form.getAttribute(phxChange)}"]`);
|
|
2992
3022
|
if (newForm) {
|
|
2993
|
-
return [form, newForm, this.
|
|
3023
|
+
return [form, newForm, this.targetComponentID(newForm)];
|
|
2994
3024
|
} else {
|
|
2995
3025
|
return [form, null, null];
|
|
2996
3026
|
}
|
|
@@ -3152,9 +3182,9 @@ var LiveSocket = class {
|
|
|
3152
3182
|
requestDOMUpdate(callback) {
|
|
3153
3183
|
this.transitions.after(callback);
|
|
3154
3184
|
}
|
|
3155
|
-
transition(time, onDone = function() {
|
|
3185
|
+
transition(time, onStart, onDone = function() {
|
|
3156
3186
|
}) {
|
|
3157
|
-
this.transitions.addTransition(time, onDone);
|
|
3187
|
+
this.transitions.addTransition(time, onStart, onDone);
|
|
3158
3188
|
}
|
|
3159
3189
|
onChannel(channel, event, cb) {
|
|
3160
3190
|
channel.on(event, (data) => {
|
|
@@ -3290,7 +3320,7 @@ var LiveSocket = class {
|
|
|
3290
3320
|
return view;
|
|
3291
3321
|
}
|
|
3292
3322
|
owner(childEl, callback) {
|
|
3293
|
-
let view = maybe(childEl.closest(PHX_VIEW_SELECTOR), (el) => this.getViewByEl(el));
|
|
3323
|
+
let view = maybe(childEl.closest(PHX_VIEW_SELECTOR), (el) => this.getViewByEl(el)) || this.main;
|
|
3294
3324
|
if (view) {
|
|
3295
3325
|
callback(view);
|
|
3296
3326
|
}
|
|
@@ -3700,7 +3730,8 @@ var TransitionSet = class {
|
|
|
3700
3730
|
this.pushPendingOp(callback);
|
|
3701
3731
|
}
|
|
3702
3732
|
}
|
|
3703
|
-
addTransition(time, onDone) {
|
|
3733
|
+
addTransition(time, onStart, onDone) {
|
|
3734
|
+
onStart();
|
|
3704
3735
|
let timer = setTimeout(() => {
|
|
3705
3736
|
this.transitions.delete(timer);
|
|
3706
3737
|
onDone();
|