@contentstack/live-preview-utils 1.4.2 → 2.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/README.md +1 -1
- package/dist/legacy/compare.cjs +115 -0
- package/dist/legacy/compare.cjs.map +1 -0
- package/dist/legacy/compare.d.cts +3 -0
- package/dist/legacy/compare.d.ts +3 -0
- package/dist/legacy/compare.js +80 -0
- package/dist/legacy/compare.js.map +1 -0
- package/dist/legacy/contentstack-live-preview-HOC.cjs +200 -0
- package/dist/legacy/contentstack-live-preview-HOC.cjs.map +1 -0
- package/dist/legacy/contentstack-live-preview-HOC.d.cts +26 -0
- package/dist/legacy/contentstack-live-preview-HOC.d.ts +26 -0
- package/dist/legacy/contentstack-live-preview-HOC.js +169 -0
- package/dist/legacy/contentstack-live-preview-HOC.js.map +1 -0
- package/dist/legacy/index.cjs +58 -0
- package/dist/legacy/index.cjs.map +1 -0
- package/dist/legacy/index.d.cts +7 -0
- package/dist/legacy/index.d.ts +7 -0
- package/dist/legacy/index.js +23 -0
- package/dist/legacy/index.js.map +1 -0
- package/dist/legacy/live-preview.cjs +511 -0
- package/dist/legacy/live-preview.cjs.map +1 -0
- package/dist/legacy/live-preview.d.cts +42 -0
- package/dist/{src → legacy}/live-preview.d.ts +5 -3
- package/dist/legacy/live-preview.js +495 -0
- package/dist/legacy/live-preview.js.map +1 -0
- package/dist/legacy/styles/compare.cjs +56 -0
- package/dist/legacy/styles/compare.cjs.map +1 -0
- package/dist/legacy/styles/compare.d.cts +3 -0
- package/dist/legacy/styles/compare.d.ts +3 -0
- package/dist/legacy/styles/compare.js +31 -0
- package/dist/legacy/styles/compare.js.map +1 -0
- package/dist/legacy/styles/live_preview.cjs +120 -0
- package/dist/legacy/styles/live_preview.cjs.map +1 -0
- package/dist/legacy/styles/live_preview.d.cts +8 -0
- package/dist/legacy/styles/live_preview.d.ts +8 -0
- package/dist/legacy/styles/live_preview.js +95 -0
- package/dist/legacy/styles/live_preview.js.map +1 -0
- package/dist/legacy/utils/camelCase.cjs +64 -0
- package/dist/legacy/utils/camelCase.cjs.map +1 -0
- package/dist/legacy/utils/camelCase.d.cts +3 -0
- package/dist/legacy/utils/camelCase.d.ts +3 -0
- package/dist/legacy/utils/camelCase.js +43 -0
- package/dist/legacy/utils/camelCase.js.map +1 -0
- package/dist/legacy/utils/compare.cjs +43 -0
- package/dist/legacy/utils/compare.cjs.map +1 -0
- package/dist/legacy/utils/compare.d.cts +3 -0
- package/dist/legacy/utils/compare.d.ts +3 -0
- package/dist/legacy/utils/compare.js +18 -0
- package/dist/legacy/utils/compare.js.map +1 -0
- package/dist/legacy/utils/defaults.cjs +59 -0
- package/dist/legacy/utils/defaults.cjs.map +1 -0
- package/dist/legacy/utils/defaults.d.cts +5 -0
- package/dist/legacy/utils/defaults.d.ts +5 -0
- package/dist/legacy/utils/defaults.js +34 -0
- package/dist/legacy/utils/defaults.js.map +1 -0
- package/dist/legacy/utils/handlePageTraversal.cjs +47 -0
- package/dist/legacy/utils/handlePageTraversal.cjs.map +1 -0
- package/dist/legacy/utils/handlePageTraversal.d.cts +3 -0
- package/dist/legacy/utils/handlePageTraversal.d.ts +3 -0
- package/dist/legacy/utils/handlePageTraversal.js +22 -0
- package/dist/legacy/utils/handlePageTraversal.js.map +1 -0
- package/dist/legacy/utils/handleUserConfig.cjs +124 -0
- package/dist/legacy/utils/handleUserConfig.cjs.map +1 -0
- package/dist/legacy/utils/handleUserConfig.d.cts +8 -0
- package/dist/legacy/utils/handleUserConfig.d.ts +8 -0
- package/dist/legacy/utils/handleUserConfig.js +98 -0
- package/dist/legacy/utils/handleUserConfig.js.map +1 -0
- package/dist/legacy/utils/index.cjs +241 -0
- package/dist/legacy/utils/index.cjs.map +1 -0
- package/dist/legacy/utils/index.d.cts +12 -0
- package/dist/legacy/utils/index.d.ts +12 -0
- package/dist/legacy/utils/index.js +209 -0
- package/dist/legacy/utils/index.js.map +1 -0
- package/dist/legacy/utils/public-logger.cjs +46 -0
- package/dist/legacy/utils/public-logger.cjs.map +1 -0
- package/dist/legacy/utils/public-logger.d.cts +8 -0
- package/dist/{src → legacy}/utils/public-logger.d.ts +3 -2
- package/dist/legacy/utils/public-logger.js +21 -0
- package/dist/legacy/utils/public-logger.js.map +1 -0
- package/dist/legacy/utils/types.cjs +19 -0
- package/dist/legacy/utils/types.cjs.map +1 -0
- package/dist/legacy/utils/types.d.cts +99 -0
- package/dist/{src → legacy}/utils/types.d.ts +19 -18
- package/dist/legacy/utils/types.js +1 -0
- package/dist/legacy/utils/types.js.map +1 -0
- package/dist/modern/compare.cjs +115 -0
- package/dist/modern/compare.cjs.map +1 -0
- package/dist/modern/compare.d.cts +3 -0
- package/dist/modern/compare.d.ts +3 -0
- package/dist/modern/compare.js +80 -0
- package/dist/modern/compare.js.map +1 -0
- package/dist/modern/contentstack-live-preview-HOC.cjs +200 -0
- package/dist/modern/contentstack-live-preview-HOC.cjs.map +1 -0
- package/dist/modern/contentstack-live-preview-HOC.d.cts +26 -0
- package/dist/modern/contentstack-live-preview-HOC.d.ts +26 -0
- package/dist/modern/contentstack-live-preview-HOC.js +169 -0
- package/dist/modern/contentstack-live-preview-HOC.js.map +1 -0
- package/dist/modern/index.cjs +58 -0
- package/dist/modern/index.cjs.map +1 -0
- package/dist/modern/index.d.cts +7 -0
- package/dist/modern/index.d.ts +7 -0
- package/dist/modern/index.js +23 -0
- package/dist/modern/index.js.map +1 -0
- package/dist/modern/live-preview.cjs +509 -0
- package/dist/modern/live-preview.cjs.map +1 -0
- package/dist/modern/live-preview.d.cts +42 -0
- package/dist/modern/live-preview.d.ts +42 -0
- package/dist/modern/live-preview.js +493 -0
- package/dist/modern/live-preview.js.map +1 -0
- package/dist/modern/styles/compare.cjs +56 -0
- package/dist/modern/styles/compare.cjs.map +1 -0
- package/dist/modern/styles/compare.d.cts +3 -0
- package/dist/modern/styles/compare.d.ts +3 -0
- package/dist/modern/styles/compare.js +31 -0
- package/dist/modern/styles/compare.js.map +1 -0
- package/dist/modern/styles/live_preview.cjs +120 -0
- package/dist/modern/styles/live_preview.cjs.map +1 -0
- package/dist/modern/styles/live_preview.d.cts +8 -0
- package/dist/modern/styles/live_preview.d.ts +8 -0
- package/dist/modern/styles/live_preview.js +95 -0
- package/dist/modern/styles/live_preview.js.map +1 -0
- package/dist/modern/utils/camelCase.cjs +63 -0
- package/dist/modern/utils/camelCase.cjs.map +1 -0
- package/dist/modern/utils/camelCase.d.cts +3 -0
- package/dist/modern/utils/camelCase.d.ts +3 -0
- package/dist/modern/utils/camelCase.js +42 -0
- package/dist/modern/utils/camelCase.js.map +1 -0
- package/dist/modern/utils/compare.cjs +43 -0
- package/dist/modern/utils/compare.cjs.map +1 -0
- package/dist/modern/utils/compare.d.cts +3 -0
- package/dist/modern/utils/compare.d.ts +3 -0
- package/dist/modern/utils/compare.js +18 -0
- package/dist/modern/utils/compare.js.map +1 -0
- package/dist/modern/utils/defaults.cjs +59 -0
- package/dist/modern/utils/defaults.cjs.map +1 -0
- package/dist/modern/utils/defaults.d.cts +5 -0
- package/dist/modern/utils/defaults.d.ts +5 -0
- package/dist/modern/utils/defaults.js +34 -0
- package/dist/modern/utils/defaults.js.map +1 -0
- package/dist/modern/utils/handlePageTraversal.cjs +47 -0
- package/dist/modern/utils/handlePageTraversal.cjs.map +1 -0
- package/dist/modern/utils/handlePageTraversal.d.cts +3 -0
- package/dist/modern/utils/handlePageTraversal.d.ts +3 -0
- package/dist/modern/utils/handlePageTraversal.js +22 -0
- package/dist/modern/utils/handlePageTraversal.js.map +1 -0
- package/dist/modern/utils/handleUserConfig.cjs +123 -0
- package/dist/modern/utils/handleUserConfig.cjs.map +1 -0
- package/dist/modern/utils/handleUserConfig.d.cts +8 -0
- package/dist/modern/utils/handleUserConfig.d.ts +8 -0
- package/dist/modern/utils/handleUserConfig.js +97 -0
- package/dist/modern/utils/handleUserConfig.js.map +1 -0
- package/dist/modern/utils/index.cjs +240 -0
- package/dist/modern/utils/index.cjs.map +1 -0
- package/dist/modern/utils/index.d.cts +12 -0
- package/dist/modern/utils/index.d.ts +12 -0
- package/dist/modern/utils/index.js +208 -0
- package/dist/modern/utils/index.js.map +1 -0
- package/dist/modern/utils/public-logger.cjs +46 -0
- package/dist/modern/utils/public-logger.cjs.map +1 -0
- package/dist/modern/utils/public-logger.d.cts +8 -0
- package/dist/modern/utils/public-logger.d.ts +8 -0
- package/dist/modern/utils/public-logger.js +21 -0
- package/dist/modern/utils/public-logger.js.map +1 -0
- package/dist/modern/utils/types.cjs +19 -0
- package/dist/modern/utils/types.cjs.map +1 -0
- package/dist/modern/utils/types.d.cts +99 -0
- package/dist/modern/utils/types.d.ts +99 -0
- package/dist/modern/utils/types.js +1 -0
- package/dist/modern/utils/types.js.map +1 -0
- package/package.json +35 -10
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/dist/main.css +0 -89
- package/dist/main.css.map +0 -1
- package/dist/mustache.d.ts +0 -2
- package/dist/mustache.d.ts.map +0 -1
- package/dist/setupJest.d.ts +0 -1
- package/dist/setupJest.d.ts.map +0 -1
- package/dist/src/contentstack-live-preview-HOC.d.ts +0 -44
- package/dist/src/contentstack-live-preview-HOC.d.ts.map +0 -1
- package/dist/src/index.d.ts +0 -5
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/live-preview.d.ts.map +0 -1
- package/dist/src/utils/defaults.d.ts +0 -3
- package/dist/src/utils/defaults.d.ts.map +0 -1
- package/dist/src/utils/handleUserConfig.d.ts +0 -6
- package/dist/src/utils/handleUserConfig.d.ts.map +0 -1
- package/dist/src/utils/index.d.ts +0 -10
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/public-logger.d.ts.map +0 -1
- package/dist/src/utils/types.d.ts.map +0 -1
|
@@ -0,0 +1,511 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/live-preview.ts
|
|
21
|
+
var live_preview_exports = {};
|
|
22
|
+
__export(live_preview_exports, {
|
|
23
|
+
default: () => LivePreview
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(live_preview_exports);
|
|
26
|
+
var import_utils = require("./utils/index.cjs");
|
|
27
|
+
var import_public_logger = require("./utils/public-logger.cjs");
|
|
28
|
+
var import_handleUserConfig = require("./utils/handleUserConfig.cjs");
|
|
29
|
+
var import_defaults = require("./utils/defaults.cjs");
|
|
30
|
+
var import_live_preview = require("./styles/live_preview.cjs");
|
|
31
|
+
var LivePreview = class {
|
|
32
|
+
constructor(initData = import_defaults.userInitData) {
|
|
33
|
+
/**
|
|
34
|
+
* @hideconstructor
|
|
35
|
+
*/
|
|
36
|
+
this.config = {
|
|
37
|
+
ssr: true,
|
|
38
|
+
enable: true,
|
|
39
|
+
runScriptsOnUpdate: false,
|
|
40
|
+
cleanCslpOnProduction: true,
|
|
41
|
+
hash: "",
|
|
42
|
+
editButton: {
|
|
43
|
+
enable: true,
|
|
44
|
+
exclude: [],
|
|
45
|
+
position: "top",
|
|
46
|
+
includeByQueryParameter: true
|
|
47
|
+
},
|
|
48
|
+
stackDetails: {
|
|
49
|
+
apiKey: "",
|
|
50
|
+
environment: "",
|
|
51
|
+
branch: "main",
|
|
52
|
+
contentTypeUid: "",
|
|
53
|
+
entryUid: ""
|
|
54
|
+
},
|
|
55
|
+
clientUrlParams: {
|
|
56
|
+
protocol: "https",
|
|
57
|
+
host: "app.contentstack.com",
|
|
58
|
+
port: 443,
|
|
59
|
+
url: "https://app.contentstack.com:443"
|
|
60
|
+
},
|
|
61
|
+
stackSdk: {
|
|
62
|
+
live_preview: {},
|
|
63
|
+
headers: {
|
|
64
|
+
api_key: ""
|
|
65
|
+
},
|
|
66
|
+
environment: ""
|
|
67
|
+
},
|
|
68
|
+
onChange: () => {
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
this.tooltip = null;
|
|
72
|
+
// this tooltip is responsible to redirect user to Contentstack edit page
|
|
73
|
+
this.currentElementBesideTooltip = null;
|
|
74
|
+
// this element helps to move tooltip with the scroll
|
|
75
|
+
this.isHoveringOnTooltip = false;
|
|
76
|
+
this.hideInterval = null;
|
|
77
|
+
this.tooltipChild = {
|
|
78
|
+
singular: null,
|
|
79
|
+
multiple: null
|
|
80
|
+
};
|
|
81
|
+
this.tooltipCurrentChild = "singular";
|
|
82
|
+
this.createCslpTooltip = () => {
|
|
83
|
+
if (!document.getElementById("cslp-tooltip") && this.config.editButton.enable) {
|
|
84
|
+
const tooltip = document.createElement("button");
|
|
85
|
+
const tooltipInnerContainer = document.createElement("div");
|
|
86
|
+
tooltipInnerContainer.classList.add(
|
|
87
|
+
(0, import_live_preview.livePreviewStyles)()["cslp-tooltip-inner-container"]
|
|
88
|
+
);
|
|
89
|
+
tooltip.classList.add((0, import_live_preview.livePreviewStyles)()["cslp-tooltip"]);
|
|
90
|
+
tooltip.classList.add((0, import_live_preview.livePreviewStyles)()["cslp-tooltip"]);
|
|
91
|
+
tooltip.setAttribute("data-test-id", "cs-cslp-tooltip");
|
|
92
|
+
tooltip.id = "cslp-tooltip";
|
|
93
|
+
tooltipInnerContainer.id = "cslp-tooltip-inner-container";
|
|
94
|
+
tooltip.addEventListener("mouseover", () => {
|
|
95
|
+
this.toggleHoveringOnEditButton(true);
|
|
96
|
+
});
|
|
97
|
+
tooltip.addEventListener("mouseleave", (e) => {
|
|
98
|
+
this.toggleHoveringOnEditButton(false);
|
|
99
|
+
this.removeEditButtonStyle(e);
|
|
100
|
+
});
|
|
101
|
+
window.document.body.insertAdjacentElement("beforeend", tooltip);
|
|
102
|
+
this.tooltipChild.singular = (0, import_utils.createSingularEditButton)(
|
|
103
|
+
this.scrollHandler
|
|
104
|
+
);
|
|
105
|
+
this.tooltipChild.multiple = (0, import_utils.createMultipleEditButton)(
|
|
106
|
+
this.scrollHandler,
|
|
107
|
+
this.linkClickHandler
|
|
108
|
+
);
|
|
109
|
+
tooltipInnerContainer.innerHTML = "";
|
|
110
|
+
tooltipInnerContainer.appendChild(this.tooltipChild.singular);
|
|
111
|
+
tooltip.appendChild(tooltipInnerContainer);
|
|
112
|
+
this.tooltip = tooltip;
|
|
113
|
+
}
|
|
114
|
+
this.updateTooltipPosition();
|
|
115
|
+
};
|
|
116
|
+
this.toggleHoveringOnEditButton = (isHoveringOnTooltip) => {
|
|
117
|
+
this.isHoveringOnTooltip = isHoveringOnTooltip;
|
|
118
|
+
};
|
|
119
|
+
(0, import_handleUserConfig.handleInitData)(initData, this.config);
|
|
120
|
+
this.addEditStyleOnHover = this.addEditStyleOnHover.bind(this);
|
|
121
|
+
this.removeEditButtonStyle = this.removeEditButtonStyle.bind(this);
|
|
122
|
+
this.generateRedirectUrl = this.generateRedirectUrl.bind(this);
|
|
123
|
+
this.scrollHandler = this.scrollHandler.bind(this);
|
|
124
|
+
this.linkClickHandler = this.linkClickHandler.bind(this);
|
|
125
|
+
this.handleUserChange = this.handleUserChange.bind(this);
|
|
126
|
+
this.setOnChangeCallback = this.setOnChangeCallback.bind(this);
|
|
127
|
+
this.resolveIncomingMessage = this.resolveIncomingMessage.bind(this);
|
|
128
|
+
this.createCslpTooltip = this.createCslpTooltip.bind(this);
|
|
129
|
+
this.requestDataSync = this.requestDataSync.bind(this);
|
|
130
|
+
this.updateTooltipPosition = this.updateTooltipPosition.bind(this);
|
|
131
|
+
this.removeDataCslp = this.removeDataCslp.bind(this);
|
|
132
|
+
this.toggleHoveringOnEditButton = this.toggleHoveringOnEditButton.bind(this);
|
|
133
|
+
this.hideTooltip = this.hideTooltip.bind(this);
|
|
134
|
+
if (initData.debug) {
|
|
135
|
+
import_public_logger.PublicLogger.debug(
|
|
136
|
+
"Contentstack Live Preview Debugging mode: config --",
|
|
137
|
+
this.config
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
if (this.config.enable) {
|
|
141
|
+
if (typeof document !== void 0 && document.readyState === "complete") {
|
|
142
|
+
this.requestDataSync();
|
|
143
|
+
} else {
|
|
144
|
+
window.addEventListener("load", this.requestDataSync);
|
|
145
|
+
}
|
|
146
|
+
window.addEventListener("message", this.resolveIncomingMessage);
|
|
147
|
+
window.addEventListener("scroll", this.updateTooltipPosition);
|
|
148
|
+
if (this.config.editButton.enable) {
|
|
149
|
+
window.addEventListener("mouseover", this.addEditStyleOnHover);
|
|
150
|
+
}
|
|
151
|
+
if (this.config.ssr) {
|
|
152
|
+
window.addEventListener("load", (e) => {
|
|
153
|
+
const allATags = document.querySelectorAll("a");
|
|
154
|
+
allATags.forEach((tag) => {
|
|
155
|
+
const docOrigin = document.location.origin;
|
|
156
|
+
if (tag.href && tag.href.includes(docOrigin)) {
|
|
157
|
+
const newUrl = (0, import_utils.addLivePreviewQueryTags)(tag.href);
|
|
158
|
+
tag.href = newUrl;
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
window.addEventListener("click", (event) => {
|
|
163
|
+
const target = event.target;
|
|
164
|
+
const targetHref = target.href;
|
|
165
|
+
const docOrigin = document.location.origin;
|
|
166
|
+
if (targetHref && targetHref.includes(docOrigin) && !targetHref.includes("live_preview")) {
|
|
167
|
+
const newUrl = (0, import_utils.addLivePreviewQueryTags)(target.href);
|
|
168
|
+
event.target.href = newUrl || target.href;
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
} else if (this.config.cleanCslpOnProduction) {
|
|
173
|
+
this.removeDataCslp();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
addEditStyleOnHover(e) {
|
|
177
|
+
var _a, _b;
|
|
178
|
+
let trigger = true;
|
|
179
|
+
const eventTargets = e.composedPath();
|
|
180
|
+
for (const eventTarget of eventTargets) {
|
|
181
|
+
const element = eventTarget;
|
|
182
|
+
if (element.nodeName === "BODY")
|
|
183
|
+
break;
|
|
184
|
+
if (typeof (element == null ? void 0 : element.getAttribute) !== "function")
|
|
185
|
+
continue;
|
|
186
|
+
const cslpTag = element.getAttribute("data-cslp");
|
|
187
|
+
if (trigger && cslpTag) {
|
|
188
|
+
if (this.hideInterval) {
|
|
189
|
+
clearInterval(this.hideInterval);
|
|
190
|
+
this.hideInterval = null;
|
|
191
|
+
}
|
|
192
|
+
if (this.currentElementBesideTooltip) {
|
|
193
|
+
this.currentElementBesideTooltip.classList.remove(
|
|
194
|
+
(0, import_live_preview.livePreviewStyles)()["cslp-edit-mode"]
|
|
195
|
+
);
|
|
196
|
+
this.currentElementBesideTooltip.removeEventListener(
|
|
197
|
+
"mouseleave",
|
|
198
|
+
this.removeEditButtonStyle
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
element.classList.add((0, import_live_preview.livePreviewStyles)()["cslp-edit-mode"]);
|
|
202
|
+
this.currentElementBesideTooltip = element;
|
|
203
|
+
this.currentElementBesideTooltip.addEventListener(
|
|
204
|
+
"mouseleave",
|
|
205
|
+
this.removeEditButtonStyle
|
|
206
|
+
);
|
|
207
|
+
if (this.updateTooltipPosition()) {
|
|
208
|
+
(_a = this.tooltip) == null ? void 0 : _a.setAttribute("current-data-cslp", cslpTag);
|
|
209
|
+
(_b = this.tooltip) == null ? void 0 : _b.setAttribute(
|
|
210
|
+
"current-href",
|
|
211
|
+
element.getAttribute("href") ?? ""
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
trigger = false;
|
|
215
|
+
} else if (!trigger) {
|
|
216
|
+
element.classList.remove((0, import_live_preview.livePreviewStyles)()["cslp-edit-mode"]);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
removeEditButtonStyle(e) {
|
|
221
|
+
if (!this.currentElementBesideTooltip || !this.tooltip)
|
|
222
|
+
return false;
|
|
223
|
+
let trigger = true;
|
|
224
|
+
const eventTargets = e.composedPath();
|
|
225
|
+
for (const eventTarget of eventTargets) {
|
|
226
|
+
const element = eventTarget;
|
|
227
|
+
if (element.nodeName === "BODY")
|
|
228
|
+
break;
|
|
229
|
+
if (typeof (element == null ? void 0 : element.getAttribute) !== "function")
|
|
230
|
+
continue;
|
|
231
|
+
const cslpTag = element.getAttribute("data-cslp");
|
|
232
|
+
if (trigger && cslpTag) {
|
|
233
|
+
this.hideInterval = setInterval(this.hideTooltip, 500);
|
|
234
|
+
trigger = false;
|
|
235
|
+
} else if (!trigger) {
|
|
236
|
+
element.classList.remove((0, import_live_preview.livePreviewStyles)()["cslp-edit-mode"]);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
hideTooltip() {
|
|
241
|
+
if (!this.currentElementBesideTooltip || !this.tooltip || this.isHoveringOnTooltip)
|
|
242
|
+
return false;
|
|
243
|
+
this.currentElementBesideTooltip.classList.remove(
|
|
244
|
+
(0, import_live_preview.livePreviewStyles)()["cslp-edit-mode"]
|
|
245
|
+
);
|
|
246
|
+
this.currentElementBesideTooltip.removeEventListener(
|
|
247
|
+
"mouseleave",
|
|
248
|
+
this.removeEditButtonStyle
|
|
249
|
+
);
|
|
250
|
+
this.currentElementBesideTooltip = null;
|
|
251
|
+
this.tooltip.style.top = "-100%";
|
|
252
|
+
}
|
|
253
|
+
generateRedirectUrl(content_type_uid, locale = "en-us", entry_uid, preview_field) {
|
|
254
|
+
if (!this.config.stackDetails.apiKey) {
|
|
255
|
+
throw `To use edit tags, you must provide the stack API key. Specify the API key while initializing the Live Preview SDK.
|
|
256
|
+
|
|
257
|
+
ContentstackLivePreview.init({
|
|
258
|
+
...,
|
|
259
|
+
stackDetails: {
|
|
260
|
+
apiKey: 'your-api-key'
|
|
261
|
+
},
|
|
262
|
+
...
|
|
263
|
+
})`;
|
|
264
|
+
}
|
|
265
|
+
if (!this.config.stackDetails.environment) {
|
|
266
|
+
throw `To use edit tags, you must provide the preview environment. Specify the preview environment while initializing the Live Preview SDK.
|
|
267
|
+
|
|
268
|
+
ContentstackLivePreview.init({
|
|
269
|
+
...,
|
|
270
|
+
stackDetails: {
|
|
271
|
+
environment: 'Your-environment'
|
|
272
|
+
},
|
|
273
|
+
...
|
|
274
|
+
})`;
|
|
275
|
+
}
|
|
276
|
+
const protocol = String(this.config.clientUrlParams.protocol);
|
|
277
|
+
const host = String(this.config.clientUrlParams.host);
|
|
278
|
+
const port = String(this.config.clientUrlParams.port);
|
|
279
|
+
const environment = String(this.config.stackDetails.environment);
|
|
280
|
+
const branch = String(this.config.stackDetails.branch || "main");
|
|
281
|
+
const urlHash = `!/stack/${this.config.stackDetails.apiKey}/content-type/${content_type_uid}/${locale ?? "en-us"}/entry/${entry_uid}/edit`;
|
|
282
|
+
const url = new URL(`${protocol}://${host}`);
|
|
283
|
+
url.port = port;
|
|
284
|
+
url.hash = urlHash;
|
|
285
|
+
url.searchParams.append("branch", branch);
|
|
286
|
+
url.searchParams.append("preview-field", preview_field);
|
|
287
|
+
url.searchParams.append("preview-locale", locale ?? "en-us");
|
|
288
|
+
url.searchParams.append("preview-environment", environment);
|
|
289
|
+
return `${url.origin}/${url.hash}${url.search}`;
|
|
290
|
+
}
|
|
291
|
+
scrollHandler() {
|
|
292
|
+
if (!this.tooltip)
|
|
293
|
+
return;
|
|
294
|
+
const cslpTag = this.tooltip.getAttribute("current-data-cslp");
|
|
295
|
+
if (cslpTag) {
|
|
296
|
+
const [content_type_uid, entry_uid, locale, ...field] = cslpTag.split(".");
|
|
297
|
+
if (window.location !== window.parent.location) {
|
|
298
|
+
window.parent.postMessage(
|
|
299
|
+
{
|
|
300
|
+
from: "live-preview",
|
|
301
|
+
type: "scroll",
|
|
302
|
+
data: {
|
|
303
|
+
field: field.join("."),
|
|
304
|
+
content_type_uid,
|
|
305
|
+
entry_uid,
|
|
306
|
+
locale
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
"*"
|
|
310
|
+
);
|
|
311
|
+
} else {
|
|
312
|
+
try {
|
|
313
|
+
const redirectUrl = this.generateRedirectUrl(
|
|
314
|
+
content_type_uid,
|
|
315
|
+
locale,
|
|
316
|
+
entry_uid,
|
|
317
|
+
field.join(".")
|
|
318
|
+
);
|
|
319
|
+
window.open(redirectUrl, "_blank");
|
|
320
|
+
} catch (error) {
|
|
321
|
+
import_public_logger.PublicLogger.error(error);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
linkClickHandler() {
|
|
327
|
+
if (!this.tooltip)
|
|
328
|
+
return;
|
|
329
|
+
const hrefAttribute = this.tooltip.getAttribute("current-href");
|
|
330
|
+
if (hrefAttribute) {
|
|
331
|
+
window.location.assign(hrefAttribute);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
handleUserChange(editEntrySearchParams) {
|
|
335
|
+
this.config.stackSdk.live_preview = {
|
|
336
|
+
...this.config.stackSdk.live_preview,
|
|
337
|
+
...editEntrySearchParams,
|
|
338
|
+
live_preview: editEntrySearchParams.hash
|
|
339
|
+
};
|
|
340
|
+
this.config.onChange();
|
|
341
|
+
}
|
|
342
|
+
setOnChangeCallback(onChangeCallback) {
|
|
343
|
+
this.config.onChange = onChangeCallback;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* It is the live preview hash.
|
|
347
|
+
* This hash could be used when data is fetched manually.
|
|
348
|
+
*/
|
|
349
|
+
get hash() {
|
|
350
|
+
return this.config.hash;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Sets the live preview hash from the query param which is
|
|
354
|
+
* accessible via `hash` property.
|
|
355
|
+
* @param params query param in an object form
|
|
356
|
+
*/
|
|
357
|
+
setConfigFromParams(params = {}) {
|
|
358
|
+
if (typeof params !== "object")
|
|
359
|
+
throw new TypeError(
|
|
360
|
+
"Live preview SDK: query param must be an object"
|
|
361
|
+
);
|
|
362
|
+
const urlParams = new URLSearchParams(params);
|
|
363
|
+
const live_preview = urlParams.get("live_preview");
|
|
364
|
+
if (live_preview) {
|
|
365
|
+
this.config.hash = live_preview;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
resolveIncomingMessage(e) {
|
|
369
|
+
if (typeof e.data !== "object")
|
|
370
|
+
return;
|
|
371
|
+
if (e.data.from !== "live-preview")
|
|
372
|
+
return;
|
|
373
|
+
switch (e.data.type) {
|
|
374
|
+
case "client-data-send": {
|
|
375
|
+
const { contentTypeUid, entryUid } = this.config.stackDetails;
|
|
376
|
+
const { hash } = e.data.data;
|
|
377
|
+
this.setConfigFromParams({ live_preview: hash });
|
|
378
|
+
if (!this.config.ssr) {
|
|
379
|
+
this.handleUserChange({
|
|
380
|
+
content_type_uid: contentTypeUid,
|
|
381
|
+
entry_uid: entryUid,
|
|
382
|
+
hash
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
break;
|
|
386
|
+
}
|
|
387
|
+
case "init-ack": {
|
|
388
|
+
const { contentTypeUid, entryUid } = e.data.data;
|
|
389
|
+
this.config.stackDetails.contentTypeUid = contentTypeUid;
|
|
390
|
+
this.config.stackDetails.entryUid = entryUid;
|
|
391
|
+
break;
|
|
392
|
+
}
|
|
393
|
+
case "history": {
|
|
394
|
+
switch (e.data.data.type) {
|
|
395
|
+
case "forward": {
|
|
396
|
+
window.history.forward();
|
|
397
|
+
break;
|
|
398
|
+
}
|
|
399
|
+
case "backward": {
|
|
400
|
+
window.history.back();
|
|
401
|
+
break;
|
|
402
|
+
}
|
|
403
|
+
case "reload": {
|
|
404
|
+
window.history.go();
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
break;
|
|
408
|
+
}
|
|
409
|
+
default: {
|
|
410
|
+
const exhaustiveCheck = e.data;
|
|
411
|
+
return exhaustiveCheck;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
// Request parent for data sync when document loads
|
|
416
|
+
requestDataSync() {
|
|
417
|
+
this.createCslpTooltip();
|
|
418
|
+
window.parent.postMessage(
|
|
419
|
+
{
|
|
420
|
+
from: "live-preview",
|
|
421
|
+
type: "init",
|
|
422
|
+
data: {
|
|
423
|
+
config: {
|
|
424
|
+
shouldReload: this.config.ssr,
|
|
425
|
+
href: window.location.href,
|
|
426
|
+
sdkVersion: "2.0.0"
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
},
|
|
430
|
+
"*"
|
|
431
|
+
);
|
|
432
|
+
if (!this.config.ssr) {
|
|
433
|
+
setInterval(() => {
|
|
434
|
+
window.parent.postMessage(
|
|
435
|
+
{
|
|
436
|
+
from: "live-preview",
|
|
437
|
+
type: "check-entry-page",
|
|
438
|
+
data: {
|
|
439
|
+
href: window.location.href
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
"*"
|
|
443
|
+
);
|
|
444
|
+
}, 1500);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
updateTooltipPosition() {
|
|
448
|
+
var _a;
|
|
449
|
+
if (!this.currentElementBesideTooltip || !this.tooltip)
|
|
450
|
+
return false;
|
|
451
|
+
const currentRectOfElement = this.currentElementBesideTooltip.getBoundingClientRect();
|
|
452
|
+
const currentRectOfParentOfElement = (_a = this.tooltip.parentElement) == null ? void 0 : _a.getBoundingClientRect();
|
|
453
|
+
if (currentRectOfElement && currentRectOfParentOfElement) {
|
|
454
|
+
let {
|
|
455
|
+
upperBoundOfTooltip,
|
|
456
|
+
// eslint-disable-next-line prefer-const
|
|
457
|
+
leftBoundOfTooltip
|
|
458
|
+
} = (0, import_utils.getEditButtonPosition)(
|
|
459
|
+
this.currentElementBesideTooltip,
|
|
460
|
+
this.config.editButton.position
|
|
461
|
+
);
|
|
462
|
+
if (upperBoundOfTooltip < 0) {
|
|
463
|
+
if (currentRectOfElement.top < 0)
|
|
464
|
+
upperBoundOfTooltip = currentRectOfElement.top;
|
|
465
|
+
else
|
|
466
|
+
upperBoundOfTooltip = 0;
|
|
467
|
+
}
|
|
468
|
+
this.tooltip.style.top = upperBoundOfTooltip + "px";
|
|
469
|
+
this.tooltip.style.zIndex = this.currentElementBesideTooltip.style.zIndex || "200";
|
|
470
|
+
this.tooltip.style.left = leftBoundOfTooltip + "px";
|
|
471
|
+
if (this.tooltipChild.singular && this.tooltipChild.multiple) {
|
|
472
|
+
if (this.currentElementBesideTooltip.hasAttribute("href")) {
|
|
473
|
+
if (this.tooltipCurrentChild !== "multiple") {
|
|
474
|
+
const tooltipInnerContainer = this.tooltip.querySelector(
|
|
475
|
+
`div.${(0, import_live_preview.livePreviewStyles)()["cslp-tooltip-inner-container"]}`
|
|
476
|
+
);
|
|
477
|
+
if (tooltipInnerContainer) {
|
|
478
|
+
tooltipInnerContainer.innerHTML = "";
|
|
479
|
+
tooltipInnerContainer.appendChild(
|
|
480
|
+
this.tooltipChild.multiple
|
|
481
|
+
);
|
|
482
|
+
this.tooltipCurrentChild = "multiple";
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
} else if (this.tooltipCurrentChild !== "singular") {
|
|
486
|
+
const tooltipInnerContainer = this.tooltip.querySelector(
|
|
487
|
+
`div.${(0, import_live_preview.livePreviewStyles)()["cslp-tooltip-inner-container"]}`
|
|
488
|
+
);
|
|
489
|
+
if (tooltipInnerContainer) {
|
|
490
|
+
tooltipInnerContainer.innerHTML = "";
|
|
491
|
+
tooltipInnerContainer.appendChild(
|
|
492
|
+
this.tooltipChild.singular
|
|
493
|
+
);
|
|
494
|
+
this.tooltipCurrentChild = "singular";
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
return true;
|
|
499
|
+
}
|
|
500
|
+
return false;
|
|
501
|
+
}
|
|
502
|
+
// remove attributes when livePreview is false
|
|
503
|
+
removeDataCslp() {
|
|
504
|
+
const nodes = document.querySelectorAll("[data-cslp]");
|
|
505
|
+
nodes.forEach((node) => {
|
|
506
|
+
node.removeAttribute("data-cslp");
|
|
507
|
+
node.removeAttribute("data-cslp-button-position");
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
};
|
|
511
|
+
//# sourceMappingURL=live-preview.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/live-preview.ts"],"sourcesContent":["import {\n createSingularEditButton,\n createMultipleEditButton,\n addLivePreviewQueryTags,\n shouldRenderEditButton,\n getEditButtonPosition,\n} from \"./utils\";\nimport { PublicLogger } from \"./utils/public-logger\";\nimport {\n IConfig,\n IEditButtonPosition,\n IEditEntrySearchParams,\n IInitData,\n ILivePreviewReceivePostMessages,\n} from \"./utils/types\";\nimport { handleInitData } from \"./utils/handleUserConfig\";\nimport { userInitData } from \"./utils/defaults\";\nimport { livePreviewStyles } from \"./styles/live_preview\";\n\nexport default class LivePreview {\n /**\n * @hideconstructor\n */\n\n private config: IConfig = {\n ssr: true,\n enable: true,\n runScriptsOnUpdate: false,\n cleanCslpOnProduction: true,\n hash: \"\",\n\n editButton: {\n enable: true,\n exclude: [],\n position: \"top\",\n includeByQueryParameter: true,\n },\n stackDetails: {\n apiKey: \"\",\n environment: \"\",\n branch: \"main\",\n contentTypeUid: \"\",\n entryUid: \"\",\n },\n\n clientUrlParams: {\n protocol: \"https\",\n host: \"app.contentstack.com\",\n port: 443,\n url: \"https://app.contentstack.com:443\",\n },\n stackSdk: {\n live_preview: {},\n headers: {\n api_key: \"\",\n },\n environment: \"\",\n },\n\n onChange: () => {\n // this is intentional\n },\n };\n\n private tooltip: HTMLButtonElement | null = null; // this tooltip is responsible to redirect user to Contentstack edit page\n private currentElementBesideTooltip: HTMLElement | null = null; // this element helps to move tooltip with the scroll\n private isHoveringOnTooltip = false;\n private hideInterval: ReturnType<typeof setInterval> | null = null;\n\n private tooltipChild: {\n singular: HTMLDivElement | null;\n multiple: HTMLDivElement | null;\n } = {\n singular: null,\n multiple: null,\n };\n private tooltipCurrentChild: \"multiple\" | \"singular\" = \"singular\";\n\n constructor(initData: Partial<IInitData> = userInitData) {\n handleInitData(initData, this.config);\n\n this.addEditStyleOnHover = this.addEditStyleOnHover.bind(this);\n this.removeEditButtonStyle = this.removeEditButtonStyle.bind(this);\n this.generateRedirectUrl = this.generateRedirectUrl.bind(this);\n this.scrollHandler = this.scrollHandler.bind(this);\n this.linkClickHandler = this.linkClickHandler.bind(this);\n this.handleUserChange = this.handleUserChange.bind(this);\n this.setOnChangeCallback = this.setOnChangeCallback.bind(this);\n this.resolveIncomingMessage = this.resolveIncomingMessage.bind(this);\n this.createCslpTooltip = this.createCslpTooltip.bind(this);\n this.requestDataSync = this.requestDataSync.bind(this);\n this.updateTooltipPosition = this.updateTooltipPosition.bind(this);\n this.removeDataCslp = this.removeDataCslp.bind(this);\n this.toggleHoveringOnEditButton =\n this.toggleHoveringOnEditButton.bind(this);\n this.hideTooltip = this.hideTooltip.bind(this);\n\n // @ts-ignore\n if (initData.debug) {\n PublicLogger.debug(\n \"Contentstack Live Preview Debugging mode: config --\",\n this.config\n );\n }\n\n if (this.config.enable) {\n if (\n typeof document !== undefined &&\n document.readyState === \"complete\"\n ) {\n this.requestDataSync();\n } else {\n window.addEventListener(\"load\", this.requestDataSync);\n }\n window.addEventListener(\"message\", this.resolveIncomingMessage);\n window.addEventListener(\"scroll\", this.updateTooltipPosition);\n // render the hover outline only when edit button enable\n if (this.config.editButton.enable) {\n window.addEventListener(\"mouseover\", this.addEditStyleOnHover);\n }\n\n if (this.config.ssr) {\n window.addEventListener(\"load\", (e) => {\n const allATags = document.querySelectorAll(\"a\");\n allATags.forEach((tag) => {\n const docOrigin: string = document.location.origin;\n if (tag.href && tag.href.includes(docOrigin)) {\n const newUrl = addLivePreviewQueryTags(tag.href);\n tag.href = newUrl;\n }\n });\n });\n\n // Setting the query params to all the click events related to current domain\n window.addEventListener(\"click\", (event: any) => {\n const target: any = event.target;\n const targetHref: string | any = target.href;\n const docOrigin: string = document.location.origin;\n if (\n targetHref &&\n targetHref.includes(docOrigin) &&\n !targetHref.includes(\"live_preview\")\n ) {\n const newUrl = addLivePreviewQueryTags(target.href);\n event.target.href = newUrl || target.href;\n }\n });\n }\n } else if (this.config.cleanCslpOnProduction) {\n this.removeDataCslp();\n }\n }\n\n private addEditStyleOnHover(e: MouseEvent) {\n let trigger = true;\n const eventTargets = e.composedPath();\n\n for (const eventTarget of eventTargets) {\n const element = eventTarget as HTMLElement;\n if (element.nodeName === \"BODY\") break;\n if (typeof element?.getAttribute !== \"function\") continue;\n\n const cslpTag = element.getAttribute(\"data-cslp\");\n\n if (trigger && cslpTag) {\n if (this.hideInterval) {\n clearInterval(this.hideInterval);\n this.hideInterval = null;\n }\n if (this.currentElementBesideTooltip) {\n this.currentElementBesideTooltip.classList.remove(\n livePreviewStyles()[\"cslp-edit-mode\"]\n );\n this.currentElementBesideTooltip.removeEventListener(\n \"mouseleave\",\n this.removeEditButtonStyle\n );\n }\n element.classList.add(livePreviewStyles()[\"cslp-edit-mode\"]);\n this.currentElementBesideTooltip = element;\n this.currentElementBesideTooltip.addEventListener(\n \"mouseleave\",\n this.removeEditButtonStyle\n );\n\n if (this.updateTooltipPosition()) {\n this.tooltip?.setAttribute(\"current-data-cslp\", cslpTag);\n this.tooltip?.setAttribute(\n \"current-href\",\n element.getAttribute(\"href\") ?? \"\"\n );\n }\n\n trigger = false;\n } else if (!trigger) {\n element.classList.remove(livePreviewStyles()[\"cslp-edit-mode\"]);\n }\n }\n }\n\n private removeEditButtonStyle(e: MouseEvent) {\n if (!this.currentElementBesideTooltip || !this.tooltip) return false;\n let trigger = true;\n const eventTargets = e.composedPath();\n\n for (const eventTarget of eventTargets) {\n const element = eventTarget as HTMLElement;\n if (element.nodeName === \"BODY\") break;\n if (typeof element?.getAttribute !== \"function\") continue;\n\n const cslpTag = element.getAttribute(\"data-cslp\");\n\n if (trigger && cslpTag) {\n this.hideInterval = setInterval(this.hideTooltip, 500);\n trigger = false;\n } else if (!trigger) {\n element.classList.remove(livePreviewStyles()[\"cslp-edit-mode\"]);\n }\n }\n }\n\n private hideTooltip() {\n if (\n !this.currentElementBesideTooltip ||\n !this.tooltip ||\n this.isHoveringOnTooltip\n )\n return false;\n this.currentElementBesideTooltip.classList.remove(\n livePreviewStyles()[\"cslp-edit-mode\"]\n );\n this.currentElementBesideTooltip.removeEventListener(\n \"mouseleave\",\n this.removeEditButtonStyle\n );\n this.currentElementBesideTooltip = null;\n this.tooltip.style.top = \"-100%\";\n }\n\n private generateRedirectUrl(\n content_type_uid: string,\n locale = \"en-us\",\n entry_uid: string,\n preview_field: string\n ): string {\n if (!this.config.stackDetails.apiKey) {\n throw `To use edit tags, you must provide the stack API key. Specify the API key while initializing the Live Preview SDK.\n\n ContentstackLivePreview.init({\n ...,\n stackDetails: {\n apiKey: 'your-api-key'\n },\n ...\n })`;\n }\n\n if (!this.config.stackDetails.environment) {\n throw `To use edit tags, you must provide the preview environment. Specify the preview environment while initializing the Live Preview SDK.\n\n ContentstackLivePreview.init({\n ...,\n stackDetails: {\n environment: 'Your-environment'\n },\n ...\n })`;\n }\n\n const protocol = String(this.config.clientUrlParams.protocol);\n const host = String(this.config.clientUrlParams.host);\n const port = String(this.config.clientUrlParams.port);\n const environment = String(this.config.stackDetails.environment);\n const branch = String(this.config.stackDetails.branch || \"main\");\n\n const urlHash = `!/stack/${\n this.config.stackDetails.apiKey\n }/content-type/${content_type_uid}/${\n locale ?? \"en-us\"\n }/entry/${entry_uid}/edit`;\n\n const url = new URL(`${protocol}://${host}`);\n url.port = port;\n url.hash = urlHash;\n url.searchParams.append(\"branch\", branch);\n url.searchParams.append(\"preview-field\", preview_field);\n url.searchParams.append(\"preview-locale\", locale ?? \"en-us\");\n url.searchParams.append(\"preview-environment\", environment);\n\n return `${url.origin}/${url.hash}${url.search}`;\n }\n\n private scrollHandler() {\n if (!this.tooltip) return;\n\n const cslpTag = this.tooltip.getAttribute(\"current-data-cslp\");\n\n if (cslpTag) {\n const [content_type_uid, entry_uid, locale, ...field] =\n cslpTag.split(\".\");\n\n // check if opened inside an iframe\n if (window.location !== window.parent.location) {\n window.parent.postMessage(\n {\n from: \"live-preview\",\n type: \"scroll\",\n data: {\n field: field.join(\".\"),\n content_type_uid,\n entry_uid,\n locale,\n },\n },\n \"*\"\n );\n } else {\n try {\n const redirectUrl = this.generateRedirectUrl(\n content_type_uid,\n locale,\n entry_uid,\n field.join(\".\")\n );\n\n window.open(redirectUrl, \"_blank\");\n } catch (error) {\n PublicLogger.error(error);\n }\n }\n }\n }\n\n private linkClickHandler() {\n if (!this.tooltip) return;\n const hrefAttribute = this.tooltip.getAttribute(\"current-href\");\n\n if (hrefAttribute) {\n window.location.assign(hrefAttribute);\n }\n }\n\n private handleUserChange(editEntrySearchParams: IEditEntrySearchParams) {\n // here we provide contentTypeUid and EntryUid to the StackDelivery SDK.\n this.config.stackSdk.live_preview = {\n ...this.config.stackSdk.live_preview,\n ...editEntrySearchParams,\n live_preview: editEntrySearchParams.hash,\n };\n this.config.onChange();\n }\n\n setOnChangeCallback(onChangeCallback: () => void): void {\n this.config.onChange = onChangeCallback;\n }\n\n /**\n * It is the live preview hash.\n * This hash could be used when data is fetched manually.\n */\n get hash(): string {\n return this.config.hash;\n }\n\n /**\n * Sets the live preview hash from the query param which is\n * accessible via `hash` property.\n * @param params query param in an object form\n */\n setConfigFromParams(\n params: ConstructorParameters<typeof URLSearchParams>[0] = {}\n ): void {\n if (typeof params !== \"object\")\n throw new TypeError(\n \"Live preview SDK: query param must be an object\"\n );\n\n const urlParams = new URLSearchParams(params);\n const live_preview = urlParams.get(\"live_preview\");\n\n if (live_preview) {\n this.config.hash = live_preview;\n }\n }\n\n private resolveIncomingMessage(\n e: MessageEvent<ILivePreviewReceivePostMessages>\n ) {\n if (typeof e.data !== \"object\") return;\n\n if (e.data.from !== \"live-preview\") return;\n\n switch (e.data.type) {\n case \"client-data-send\": {\n const { contentTypeUid, entryUid } = this.config.stackDetails;\n const { hash } = e.data.data;\n\n this.setConfigFromParams({ live_preview: hash });\n\n if (!this.config.ssr) {\n this.handleUserChange({\n content_type_uid: contentTypeUid,\n entry_uid: entryUid,\n hash: hash,\n });\n }\n break;\n }\n case \"init-ack\": {\n const { contentTypeUid, entryUid } = e.data.data;\n\n this.config.stackDetails.contentTypeUid = contentTypeUid;\n this.config.stackDetails.entryUid = entryUid;\n break;\n }\n case \"history\": {\n switch (e.data.data.type) {\n case \"forward\": {\n window.history.forward();\n break;\n }\n case \"backward\": {\n window.history.back();\n break;\n }\n case \"reload\": {\n window.history.go();\n }\n }\n break;\n }\n default: {\n // ensure that the switch statement is exhaustive\n const exhaustiveCheck: never = e.data;\n return exhaustiveCheck; // TODO: add debug message while we are in development mode.\n }\n }\n }\n\n private createCslpTooltip = () => {\n if (\n !document.getElementById(\"cslp-tooltip\") &&\n this.config.editButton.enable\n ) {\n const tooltip = document.createElement(\"button\");\n const tooltipInnerContainer = document.createElement(\"div\");\n tooltipInnerContainer.classList.add(\n livePreviewStyles()[\"cslp-tooltip-inner-container\"]\n );\n tooltip.classList.add(livePreviewStyles()[\"cslp-tooltip\"]);\n tooltip.classList.add(livePreviewStyles()[\"cslp-tooltip\"]);\n tooltip.setAttribute(\"data-test-id\", \"cs-cslp-tooltip\");\n tooltip.id = \"cslp-tooltip\";\n tooltipInnerContainer.id = \"cslp-tooltip-inner-container\";\n tooltip.addEventListener(\"mouseover\", () => {\n this.toggleHoveringOnEditButton(true);\n });\n tooltip.addEventListener(\"mouseleave\", (e: MouseEvent) => {\n this.toggleHoveringOnEditButton(false);\n this.removeEditButtonStyle(e);\n });\n window.document.body.insertAdjacentElement(\"beforeend\", tooltip);\n this.tooltipChild.singular = createSingularEditButton(\n this.scrollHandler\n );\n this.tooltipChild.multiple = createMultipleEditButton(\n this.scrollHandler,\n this.linkClickHandler\n );\n\n tooltipInnerContainer.innerHTML = \"\";\n tooltipInnerContainer.appendChild(this.tooltipChild.singular);\n tooltip.appendChild(tooltipInnerContainer);\n this.tooltip = tooltip;\n }\n this.updateTooltipPosition();\n };\n\n private toggleHoveringOnEditButton = (isHoveringOnTooltip: boolean) => {\n this.isHoveringOnTooltip = isHoveringOnTooltip;\n };\n\n // Request parent for data sync when document loads\n private requestDataSync() {\n // add edit tooltip\n this.createCslpTooltip();\n\n window.parent.postMessage(\n {\n from: \"live-preview\",\n type: \"init\",\n data: {\n config: {\n shouldReload: this.config.ssr,\n href: window.location.href,\n sdkVersion: process.env.PACKAGE_VERSION,\n },\n },\n },\n \"*\"\n );\n\n // set timeout for client side (use to show warning: You are not editing this page)\n if (!this.config.ssr) {\n setInterval(() => {\n window.parent.postMessage(\n {\n from: \"live-preview\",\n type: \"check-entry-page\",\n data: {\n href: window.location.href,\n },\n },\n \"*\"\n );\n }, 1500);\n }\n }\n\n private updateTooltipPosition() {\n if (!this.currentElementBesideTooltip || !this.tooltip) return false;\n\n const currentRectOfElement =\n this.currentElementBesideTooltip.getBoundingClientRect();\n const currentRectOfParentOfElement =\n this.tooltip.parentElement?.getBoundingClientRect();\n\n if (currentRectOfElement && currentRectOfParentOfElement) {\n let {\n upperBoundOfTooltip,\n // eslint-disable-next-line prefer-const\n leftBoundOfTooltip,\n }: IEditButtonPosition = getEditButtonPosition(\n this.currentElementBesideTooltip,\n this.config.editButton.position\n );\n\n // if scrolled and element is still visible, make sure tooltip is also visible\n if (upperBoundOfTooltip < 0) {\n if (currentRectOfElement.top < 0)\n upperBoundOfTooltip = currentRectOfElement.top;\n else upperBoundOfTooltip = 0;\n }\n\n this.tooltip.style.top = upperBoundOfTooltip + \"px\";\n this.tooltip.style.zIndex =\n this.currentElementBesideTooltip.style.zIndex || \"200\";\n this.tooltip.style.left = leftBoundOfTooltip + \"px\";\n\n if (this.tooltipChild.singular && this.tooltipChild.multiple) {\n if (this.currentElementBesideTooltip.hasAttribute(\"href\")) {\n if (this.tooltipCurrentChild !== \"multiple\") {\n const tooltipInnerContainer =\n this.tooltip.querySelector(\n `div.${\n livePreviewStyles()[\n \"cslp-tooltip-inner-container\"\n ]\n }`\n );\n if (tooltipInnerContainer) {\n tooltipInnerContainer.innerHTML = \"\";\n tooltipInnerContainer.appendChild(\n this.tooltipChild.multiple\n );\n this.tooltipCurrentChild = \"multiple\";\n }\n }\n } else if (this.tooltipCurrentChild !== \"singular\") {\n const tooltipInnerContainer = this.tooltip.querySelector(\n `div.${\n livePreviewStyles()[\"cslp-tooltip-inner-container\"]\n }`\n );\n if (tooltipInnerContainer) {\n tooltipInnerContainer.innerHTML = \"\";\n tooltipInnerContainer.appendChild(\n this.tooltipChild.singular\n );\n this.tooltipCurrentChild = \"singular\";\n }\n }\n }\n return true;\n }\n\n return false;\n }\n\n // remove attributes when livePreview is false\n private removeDataCslp() {\n const nodes = document.querySelectorAll(\"[data-cslp]\");\n\n nodes.forEach((node) => {\n node.removeAttribute(\"data-cslp\");\n node.removeAttribute(\"data-cslp-button-position\");\n });\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { IInitData } from './utils/types.cjs';
|
|
2
|
+
|
|
3
|
+
declare class LivePreview {
|
|
4
|
+
/**
|
|
5
|
+
* @hideconstructor
|
|
6
|
+
*/
|
|
7
|
+
private config;
|
|
8
|
+
private tooltip;
|
|
9
|
+
private currentElementBesideTooltip;
|
|
10
|
+
private isHoveringOnTooltip;
|
|
11
|
+
private hideInterval;
|
|
12
|
+
private tooltipChild;
|
|
13
|
+
private tooltipCurrentChild;
|
|
14
|
+
constructor(initData?: Partial<IInitData>);
|
|
15
|
+
private addEditStyleOnHover;
|
|
16
|
+
private removeEditButtonStyle;
|
|
17
|
+
private hideTooltip;
|
|
18
|
+
private generateRedirectUrl;
|
|
19
|
+
private scrollHandler;
|
|
20
|
+
private linkClickHandler;
|
|
21
|
+
private handleUserChange;
|
|
22
|
+
setOnChangeCallback(onChangeCallback: () => void): void;
|
|
23
|
+
/**
|
|
24
|
+
* It is the live preview hash.
|
|
25
|
+
* This hash could be used when data is fetched manually.
|
|
26
|
+
*/
|
|
27
|
+
get hash(): string;
|
|
28
|
+
/**
|
|
29
|
+
* Sets the live preview hash from the query param which is
|
|
30
|
+
* accessible via `hash` property.
|
|
31
|
+
* @param params query param in an object form
|
|
32
|
+
*/
|
|
33
|
+
setConfigFromParams(params?: ConstructorParameters<typeof URLSearchParams>[0]): void;
|
|
34
|
+
private resolveIncomingMessage;
|
|
35
|
+
private createCslpTooltip;
|
|
36
|
+
private toggleHoveringOnEditButton;
|
|
37
|
+
private requestDataSync;
|
|
38
|
+
private updateTooltipPosition;
|
|
39
|
+
private removeDataCslp;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export { LivePreview as default };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { IInitData } from
|
|
2
|
-
|
|
1
|
+
import { IInitData } from './utils/types.js';
|
|
2
|
+
|
|
3
|
+
declare class LivePreview {
|
|
3
4
|
/**
|
|
4
5
|
* @hideconstructor
|
|
5
6
|
*/
|
|
@@ -37,4 +38,5 @@ export default class LivePreview {
|
|
|
37
38
|
private updateTooltipPosition;
|
|
38
39
|
private removeDataCslp;
|
|
39
40
|
}
|
|
40
|
-
|
|
41
|
+
|
|
42
|
+
export { LivePreview as default };
|