@gaoding/editor-sdk
Version:
稿定编辑器对外 SDK
1,636 lines • 80.3 kB
JavaScript
var MessageType;
(function(MessageType2) {
MessageType2["Call"] = "call";
MessageType2["Reply"] = "reply";
MessageType2["Syn"] = "syn";
MessageType2["SynAck"] = "synAck";
MessageType2["Ack"] = "ack";
})(MessageType || (MessageType = {}));
var Resolution;
(function(Resolution2) {
Resolution2["Fulfilled"] = "fulfilled";
Resolution2["Rejected"] = "rejected";
})(Resolution || (Resolution = {}));
var ErrorCode;
(function(ErrorCode2) {
ErrorCode2["ConnectionDestroyed"] = "ConnectionDestroyed";
ErrorCode2["ConnectionTimeout"] = "ConnectionTimeout";
ErrorCode2["NotInIframe"] = "NotInIframe";
ErrorCode2["NoIframeSrc"] = "NoIframeSrc";
})(ErrorCode || (ErrorCode = {}));
var NativeErrorName;
(function(NativeErrorName2) {
NativeErrorName2["DataCloneError"] = "DataCloneError";
})(NativeErrorName || (NativeErrorName = {}));
var NativeEventType;
(function(NativeEventType2) {
NativeEventType2["Message"] = "message";
})(NativeEventType || (NativeEventType = {}));
var createDestructor = () => {
const callbacks = [];
let destroyed = false;
return {
destroy(error) {
destroyed = true;
callbacks.forEach((callback) => {
callback(error);
});
},
onDestroy(callback) {
destroyed ? callback() : callbacks.push(callback);
}
};
};
var createLogger = (debug) => {
return (...args) => {
if (debug) {
console.log("[Penpal]", ...args);
}
};
};
const DEFAULT_PORT_BY_PROTOCOL = {
"http:": "80",
"https:": "443"
};
const URL_REGEX = /^(https?:)?\/\/([^/:]+)?(:(\d+))?/;
const opaqueOriginSchemes = ["file:", "data:"];
var getOriginFromSrc = (src) => {
if (src && opaqueOriginSchemes.find((scheme) => src.startsWith(scheme))) {
return "null";
}
const location = document.location;
const regexResult = URL_REGEX.exec(src);
let protocol;
let hostname;
let port;
if (regexResult) {
protocol = regexResult[1] ? regexResult[1] : location.protocol;
hostname = regexResult[2];
port = regexResult[4];
} else {
protocol = location.protocol;
hostname = location.hostname;
port = location.port;
}
const portSuffix = port && port !== DEFAULT_PORT_BY_PROTOCOL[protocol] ? `:${port}` : "";
return `${protocol}//${hostname}${portSuffix}`;
};
const serializeError = ({ name: name2, message, stack }) => ({
name: name2,
message,
stack
});
const deserializeError = (obj) => {
const deserializedError = new Error();
Object.keys(obj).forEach((key) => deserializedError[key] = obj[key]);
return deserializedError;
};
var connectCallReceiver = (info, methods, log) => {
const { localName, local, remote, originForSending, originForReceiving } = info;
let destroyed = false;
const handleMessageEvent = (event) => {
if (event.source !== remote || event.data.penpal !== MessageType.Call) {
return;
}
if (event.origin !== originForReceiving) {
log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);
return;
}
const callMessage = event.data;
const { methodName, args, id: id2 } = callMessage;
log(`${localName}: Received ${methodName}() call`);
const createPromiseHandler = (resolution) => {
return (returnValue) => {
log(`${localName}: Sending ${methodName}() reply`);
if (destroyed) {
log(`${localName}: Unable to send ${methodName}() reply due to destroyed connection`);
return;
}
const message = {
penpal: MessageType.Reply,
id: id2,
resolution,
returnValue
};
if (resolution === Resolution.Rejected && returnValue instanceof Error) {
message.returnValue = serializeError(returnValue);
message.returnValueIsError = true;
}
try {
remote.postMessage(message, originForSending);
} catch (err) {
if (err.name === NativeErrorName.DataCloneError) {
const errorReplyMessage = {
penpal: MessageType.Reply,
id: id2,
resolution: Resolution.Rejected,
returnValue: serializeError(err),
returnValueIsError: true
};
remote.postMessage(errorReplyMessage, originForSending);
}
throw err;
}
};
};
new Promise((resolve) => resolve(methods[methodName].apply(methods, args))).then(createPromiseHandler(Resolution.Fulfilled), createPromiseHandler(Resolution.Rejected));
};
local.addEventListener(NativeEventType.Message, handleMessageEvent);
return () => {
destroyed = true;
local.removeEventListener(NativeEventType.Message, handleMessageEvent);
};
};
let id = 0;
var generateId = () => ++id;
var connectCallSender = (callSender, info, methodNames, destroyConnection, log) => {
const { localName, local, remote, originForSending, originForReceiving } = info;
let destroyed = false;
log(`${localName}: Connecting call sender`);
const createMethodProxy = (methodName) => {
return (...args) => {
log(`${localName}: Sending ${methodName}() call`);
let iframeRemoved;
try {
if (remote.closed) {
iframeRemoved = true;
}
} catch (e) {
iframeRemoved = true;
}
if (iframeRemoved) {
destroyConnection();
}
if (destroyed) {
const error = new Error(`Unable to send ${methodName}() call due to destroyed connection`);
error.code = ErrorCode.ConnectionDestroyed;
throw error;
}
return new Promise((resolve, reject) => {
const id2 = generateId();
const handleMessageEvent = (event) => {
if (event.source !== remote || event.data.penpal !== MessageType.Reply || event.data.id !== id2) {
return;
}
if (event.origin !== originForReceiving) {
log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);
return;
}
const replyMessage = event.data;
log(`${localName}: Received ${methodName}() reply`);
local.removeEventListener(NativeEventType.Message, handleMessageEvent);
let returnValue = replyMessage.returnValue;
if (replyMessage.returnValueIsError) {
returnValue = deserializeError(returnValue);
}
(replyMessage.resolution === Resolution.Fulfilled ? resolve : reject)(returnValue);
};
local.addEventListener(NativeEventType.Message, handleMessageEvent);
const callMessage = {
penpal: MessageType.Call,
id: id2,
methodName,
args
};
remote.postMessage(callMessage, originForSending);
});
};
};
methodNames.reduce((api, methodName) => {
api[methodName] = createMethodProxy(methodName);
return api;
}, callSender);
return () => {
destroyed = true;
};
};
var handleAckMessageFactory = (methods, childOrigin, originForSending, destructor, log) => {
const { destroy, onDestroy } = destructor;
let destroyCallReceiver;
let receiverMethodNames;
const callSender = {};
return (event) => {
if (event.origin !== childOrigin) {
log(`Parent: Handshake - Received ACK message from origin ${event.origin} which did not match expected origin ${childOrigin}`);
return;
}
log("Parent: Handshake - Received ACK");
const info = {
localName: "Parent",
local: window,
remote: event.source,
originForSending,
originForReceiving: childOrigin
};
if (destroyCallReceiver) {
destroyCallReceiver();
}
destroyCallReceiver = connectCallReceiver(info, methods, log);
onDestroy(destroyCallReceiver);
if (receiverMethodNames) {
receiverMethodNames.forEach((receiverMethodName) => {
delete callSender[receiverMethodName];
});
}
receiverMethodNames = event.data.methodNames;
const destroyCallSender = connectCallSender(callSender, info, receiverMethodNames, destroy, log);
onDestroy(destroyCallSender);
return callSender;
};
};
var handleSynMessageFactory = (log, methods, childOrigin, originForSending) => {
return (event) => {
if (event.origin !== childOrigin) {
log(`Parent: Handshake - Received SYN message from origin ${event.origin} which did not match expected origin ${childOrigin}`);
return;
}
log("Parent: Handshake - Received SYN, responding with SYN-ACK");
const synAckMessage = {
penpal: MessageType.SynAck,
methodNames: Object.keys(methods)
};
event.source.postMessage(synAckMessage, originForSending);
};
};
const CHECK_IFRAME_IN_DOC_INTERVAL = 6e4;
var monitorIframeRemoval = (iframe, destructor) => {
const { destroy, onDestroy } = destructor;
const checkIframeInDocIntervalId = setInterval(() => {
if (!iframe.isConnected) {
clearInterval(checkIframeInDocIntervalId);
destroy();
}
}, CHECK_IFRAME_IN_DOC_INTERVAL);
onDestroy(() => {
clearInterval(checkIframeInDocIntervalId);
});
};
var startConnectionTimeout = (timeout, callback) => {
let timeoutId;
if (timeout !== void 0) {
timeoutId = window.setTimeout(() => {
const error = new Error(`Connection timed out after ${timeout}ms`);
error.code = ErrorCode.ConnectionTimeout;
callback(error);
}, timeout);
}
return () => {
clearTimeout(timeoutId);
};
};
var validateIframeHasSrcOrSrcDoc = (iframe) => {
if (!iframe.src && !iframe.srcdoc) {
const error = new Error("Iframe must have src or srcdoc property defined.");
error.code = ErrorCode.NoIframeSrc;
throw error;
}
};
var connectToChild = (options) => {
let { iframe, methods = {}, childOrigin, timeout, debug = false } = options;
const log = createLogger(debug);
const destructor = createDestructor();
const { onDestroy, destroy } = destructor;
if (!childOrigin) {
validateIframeHasSrcOrSrcDoc(iframe);
childOrigin = getOriginFromSrc(iframe.src);
}
const originForSending = childOrigin === "null" ? "*" : childOrigin;
const handleSynMessage = handleSynMessageFactory(log, methods, childOrigin, originForSending);
const handleAckMessage = handleAckMessageFactory(methods, childOrigin, originForSending, destructor, log);
const promise = new Promise((resolve, reject) => {
const stopConnectionTimeout = startConnectionTimeout(timeout, destroy);
const handleMessage = (event) => {
if (event.source !== iframe.contentWindow || !event.data) {
return;
}
if (event.data.penpal === MessageType.Syn) {
handleSynMessage(event);
return;
}
if (event.data.penpal === MessageType.Ack) {
const callSender = handleAckMessage(event);
if (callSender) {
stopConnectionTimeout();
resolve(callSender);
}
return;
}
};
window.addEventListener(NativeEventType.Message, handleMessage);
log("Parent: Awaiting handshake");
monitorIframeRemoval(iframe, destructor);
onDestroy((error) => {
window.removeEventListener(NativeEventType.Message, handleMessage);
if (!error) {
error = new Error("Connection destroyed");
error.code = ErrorCode.ConnectionDestroyed;
}
reject(error);
});
});
return {
promise,
destroy() {
destroy();
}
};
};
const version$1 = "2.2.6";
const env = {
TEMPLATE_EDITOR_URL: "https://open.gaoding.com/design",
MOBILE_TEMPLATE_EDITOR_URL: "https://open.gaoding.com/h5/design",
KOUTU_EDITOR_URL: "https://open.gaoding.com/clip",
IMAGE_EDITOR_URL: "https://open.gaoding.com/design/image",
OPEN_PLATFORM_ORIGIN: "https://open.gaoding.com",
get VERSION() {
return version$1;
}
};
var __async$7 = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
function createIframeModal(frame, onClose) {
const wrapper = document.createElement("div");
wrapper.style.cssText = `
position: relative;
width: calc(100vw - 100px);
min-width: 1280px;
height: calc(100vh - 80px);
min-height: 604px;
margin: 50px auto;
background: rgb(255, 255, 255);
display: block;
`;
const btn = document.createElement("div");
btn.style.cssText = `
font-size: 13px;
width: 42px;
height: 42px;
text-align: right;
position: absolute;
right: -42px;
top: 0px;
background: no-repeat rgb(0, 0, 0);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
`;
const btnIcon = document.createElement("img");
btnIcon.src = "https://st-gdx.dancf.com/gaodingx/34555636/design/20190509-142237-249d.png";
btnIcon.style.cssText = "display: block; width: 24px;";
btn.appendChild(btnIcon);
const modal = document.createElement("div");
modal.style.cssText = `
position: fixed;
left: 0px;
top: 0px;
width: 100%;
height: 100%;
z-index: 1000;
`;
modal.className = "gaoding-editor-iframe-dialog";
wrapper.appendChild(btn);
wrapper.appendChild(frame);
modal.appendChild(wrapper);
wrapper.appendChild(frame);
const mask = document.createElement("div");
mask.style.cssText = `
position: fixed;
inset: 0px;
z-index: 999;
background-color: rgb(0, 0, 0);
opacity: 0.5;
`;
let isOpen = false;
let overflowValue = "";
function toggleScrollSwitch() {
const dom = document.querySelector(".gaoding-editor-iframe-dialog");
if (!dom)
return;
if (isOpen) {
overflowValue = document.documentElement.style.overflow;
document.documentElement.style.overflow = "hidden";
} else {
document.documentElement.style.overflow = overflowValue;
}
}
function close() {
return __async$7(this, null, function* () {
var _a, _b;
if (onClose) {
const res = yield onClose();
if (res === false)
return;
}
isOpen = false;
toggleScrollSwitch();
(_a = mask.parentElement) == null ? void 0 : _a.removeChild(mask);
(_b = modal.parentElement) == null ? void 0 : _b.removeChild(modal);
});
}
function open() {
if (isOpen)
return;
isOpen = true;
document.body.appendChild(mask);
document.body.appendChild(modal);
toggleScrollSwitch();
}
btn.addEventListener("click", close);
return {
open,
close
};
}
function createConnect(options) {
const iframe = document.createElement("iframe");
iframe.style.cssText = `
display: block;
width: 100%;
height: 100%;
${options.css}
`;
iframe.referrerPolicy = "strict-origin-when-cross-origin";
iframe.className = "gaoding-iframe";
iframe.setAttribute("frameborder", "0");
let child = null;
function update(url, query) {
return __async$7(this, null, function* () {
const q = Object.assign({}, query, { app_id: options.appId, v: env.VERSION });
const uri = `${url}?${Object.entries(q).filter(([_, v]) => v !== void 0).map(([k, v]) => `${k}=${v}`).join("&")}`;
if (!query) {
iframe.src = url;
return;
}
iframe.src = uri;
if (child) {
child.destroy();
}
child = connectToChild({
iframe,
methods: options.methods
});
});
}
let modal = null;
if (!options.container) {
modal = createIframeModal(iframe, options.onClose);
}
function insert() {
if (modal) {
return modal.open();
}
const parent = typeof options.container === "string" ? document.body.querySelector(options.container) : options.container;
if (!parent)
throw new Error(`\u65E0\u6548\u7684 container ${options.container}`);
parent.appendChild(iframe);
}
function remove() {
if (modal == null ? void 0 : modal.close) {
return modal.close();
}
if (iframe.parentElement) {
iframe.parentElement.removeChild(iframe);
}
}
function restetContainer(container) {
modal = createIframeModal(iframe, options.onClose);
options.container = container;
}
return {
remove,
insert,
update,
iframe,
restetContainer,
getService() {
return __async$7(this, null, function* () {
return child.promise;
});
}
};
}
var __defProp$2 = Object.defineProperty;
var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField$1 = (obj, key, value) => {
__defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
return value;
};
var __async$6 = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
class Event {
constructor() {
__publicField$1(this, "events");
this.events = {};
}
add(name2, fn) {
if (!fn)
return () => {
};
const hooks = this.get(name2);
hooks.push(fn);
this.events[name2] = hooks;
return () => this.off(name2, fn);
}
on(name2, fn) {
return this.add(name2, fn);
}
once(name2, fn) {
const off = this.add(name2, (...args) => {
off();
fn(...args);
});
return off;
}
off(name2, fn) {
const hooks = this.get(name2);
if (hooks) {
const index = hooks.findIndex((f) => f === fn);
index !== -1 && hooks.splice(index, 1);
}
}
get(name2) {
return this.events[name2] || [];
}
invoke(name2, ...args) {
const evnets = [...this.get(name2)];
for (const hook of evnets) {
hook(...args);
}
}
emit(name2, ...args) {
this.invoke(name2, ...args);
}
asyncInvoke(name2, ...args) {
return __async$6(this, null, function* () {
const evnets = [...this.get(name2)];
for (const hook of evnets) {
yield hook(...args);
}
});
}
asyncInvokeAll(name2, ...args) {
return __async$6(this, null, function* () {
yield Promise.all(this.get(name2).map((hook) => hook(...args)));
});
}
}
var __async$5 = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
function copyFile(file) {
return __async$5(this, null, function* () {
const filename = file instanceof File ? file.name : `${file.type}`;
return new File([yield file.arrayBuffer()], filename, { type: file.type });
});
}
function assert(condition, message) {
if (!condition) {
throw new Error(message);
}
}
var __async$4 = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
function createTemplateEditor(config) {
const event = new Event();
let canva = null;
let load = false;
const tempCallbacks = [];
function cleanCallBack() {
tempCallbacks.forEach((fn) => fn());
tempCallbacks.length = 0;
}
const iframeManager = createConnect({
appId: config.appId,
container: config.container,
onClose() {
return __async$4(this, null, function* () {
if (config.onCloseModal) {
const res = yield config.onCloseModal();
if (res === false)
return false;
}
event.emit("close");
});
},
methods: {
emit(name2, ...args) {
return __async$4(this, null, function* () {
event.emit(name2, ...args);
});
},
onload() {
return __async$4(this, null, function* () {
event.emit("load");
});
},
onSelectTemplate(info) {
return __async$4(this, null, function* () {
event.emit("select.template", info);
return false;
});
},
onTemplateLoad() {
return __async$4(this, null, function* () {
canva = yield createCanva();
event.emit("template.load");
});
},
getUseRightToken(info) {
return __async$4(this, null, function* () {
if (!config.getUseRightCert)
return false;
const token = yield config.getUseRightCert(info);
if (token instanceof Error) {
return {
message: token.message
};
}
return token;
});
},
getUserCode() {
return __async$4(this, null, function* () {
if (!config.authorize)
return false;
try {
return yield config.authorize();
} catch (error) {
close();
}
});
}
}
});
function createCanva() {
return __async$4(this, null, function* () {
const servcie = yield iframeManager.getService();
return {
addImage(url, options) {
return __async$4(this, null, function* () {
servcie.addImage(url, options);
});
}
};
});
}
function createDesign(options = {}) {
if (options.categoryId) {
assert(["number", "string"].includes(typeof options.categoryId), "categoryId \u53C2\u6570\u7C7B\u578B\u6709\u8BEF");
}
cleanCallBack();
load = false;
const params = {
version: config.authorize ? "TE002" : "TE001",
buttonText: options.okText || "\u4FDD\u5B58"
};
if (options.templateId) {
params.id = options.templateId;
} else {
params.mode = "create";
if (options.size) {
params.width = options.size.width;
params.height = options.size.height;
}
}
if (options.categoryId) {
params.filterId = options.categoryId;
}
iframeManager.update(env.TEMPLATE_EDITOR_URL, params);
event.once("load", () => __async$4(this, null, function* () {
load = true;
const e = yield iframeManager.getService();
yield e.init({
appId: config.appId,
version: config.authorize ? "TE002" : "TE001",
fileTypes: options.fileTypes,
disableModules: options.disableModules,
v: env.VERSION,
filterPaidMaterial: options.filterPaidMaterial,
categoryId: options.categoryId
});
event.emit("editor.load");
}));
iframeManager.insert();
return new Promise((resolve) => {
tempCallbacks.push(event.once("save", (v) => resolve(v)));
tempCallbacks.push(event.once("close", () => resolve(false)));
});
}
function editDesign(options) {
if (options.categories) {
assert(Array.isArray(options.categories), "categories \u53C2\u6570\u5FC5\u987B\u662F number \u6570\u7EC4\u7C7B\u578B");
assert(options.categories.map((c) => +c).filter(Boolean).length === options.categories.length, "categories \u53C2\u6570\u5FC5\u987B\u662F number \u6570\u7EC4\u7C7B\u578B");
}
cleanCallBack();
load = false;
iframeManager.update(env.TEMPLATE_EDITOR_URL, {
id: options.id,
buttonText: options.okText || "\u4FDD\u5B58",
mode: "user",
version: config.authorize ? "TE002" : "TE001"
});
event.once("load", () => __async$4(this, null, function* () {
var _a;
load = true;
const e = yield iframeManager.getService();
yield e.init({
appId: config.appId,
version: config.authorize ? "TE002" : "TE001",
disableModules: options.disableModules,
categoryId: (_a = options.categories) == null ? void 0 : _a.join(","),
v: env.VERSION,
filterPaidMaterial: options.filterPaidMaterial,
fileTypes: options.fileTypes
});
event.emit("editor.load");
}));
iframeManager.insert();
return new Promise((resolve) => {
tempCallbacks.push(event.once("save", (v) => resolve(v)));
tempCallbacks.push(event.once("close", () => resolve(false)));
});
}
function openTemplateList(options) {
if (options.categories) {
assert(Array.isArray(options.categories), "categories \u53C2\u6570\u5FC5\u987B\u662F number \u6570\u7EC4\u7C7B\u578B");
assert(options.categories.map((c) => +c).filter(Boolean).length === options.categories.length, "categories \u53C2\u6570\u5FC5\u987B\u662F number \u6570\u7EC4\u7C7B\u578B");
}
load = false;
cleanCallBack();
iframeManager.update(env.OPEN_PLATFORM_ORIGIN + "/template/search", {
app_id: config.appId,
version: config.authorize ? "TE002" : "TE001"
});
event.once("load", () => __async$4(this, null, function* () {
load = true;
const e = yield iframeManager.getService();
e.init({
appId: config.appId,
v: env.VERSION,
version: config.authorize ? "TE002" : "TE001",
categories: options.categories
});
}));
if (options.onSelectTemplate) {
tempCallbacks.push(event.add("select.template", options.onSelectTemplate));
}
iframeManager.insert();
return new Promise((resolve) => {
tempCallbacks.push(event.once("select.template", (v) => resolve(v)));
tempCallbacks.push(event.once("close", () => resolve(false)));
});
}
function close() {
event.emit("close");
iframeManager.remove();
}
function onSave(fn) {
event.add("save", fn);
}
function onClose(fn) {
event.add("close", fn);
}
function onLoad(fn) {
event.add("editor.load", fn);
}
function onTemplateLoad(fn) {
event.add("template.load", fn);
}
return {
get canva() {
return canva;
},
get isLoad() {
return load;
},
openTemplateList,
close,
onSave,
onTemplateLoad,
onClose,
onLoad,
editDesign,
createDesign
};
}
var __async$3 = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
function createMobileTemplateEditor(config) {
assert(!!config, "createTemplateEditor \u9700\u8981\u4F20\u5165\u53C2\u6570\u624D\u80FD\u4F7F\u7528");
assert(typeof config.authorize === "function", "authorize \u5FC5\u73B0\u662F\u4E2A function");
assert(typeof config.container === "string", "\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570 container");
assert(typeof config.getUseRightCert === "function", "\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570 getUseRightCert");
const event = new Event();
let load = false;
const tempCallbacks = [];
function cleanCallBack() {
tempCallbacks.forEach((fn) => fn());
tempCallbacks.length = 0;
}
const iframeManager = createConnect({
appId: config.appId,
container: config.container,
css: "min-height: 100vh;",
methods: {
emit(name2, ...args) {
return __async$3(this, null, function* () {
event.emit(name2, ...args);
});
},
onload() {
return __async$3(this, null, function* () {
event.emit("load");
});
},
onSelectTemplate(info) {
return __async$3(this, null, function* () {
event.emit("select.template", info);
return false;
});
},
onTemplateLoad() {
return __async$3(this, null, function* () {
event.emit("template.load");
});
},
getUseRightCert(info) {
return __async$3(this, null, function* () {
if (!config.getUseRightCert)
return false;
const token = yield config.getUseRightCert(info);
if (token instanceof Error) {
return {
message: token.message
};
}
return token;
});
},
getUserCode() {
return __async$3(this, null, function* () {
if (!config.authorize)
return false;
try {
return yield config.authorize();
} catch (error) {
close();
}
});
}
}
});
function createDesign(options) {
return __async$3(this, null, function* () {
cleanCallBack();
load = false;
const code = yield config.authorize();
const params = {
version: "TE002",
user_code: code
};
if (options.templateId) {
params.id = options.templateId;
}
iframeManager.update(env.MOBILE_TEMPLATE_EDITOR_URL, params);
event.once("load", () => __async$3(this, null, function* () {
load = true;
const e = yield iframeManager.getService();
yield e.init({
appId: config.appId,
version: "TE002"
});
event.emit("editor.load");
}));
iframeManager.insert();
return new Promise((resolve) => {
tempCallbacks.push(event.once("save", (v) => resolve(v)));
tempCallbacks.push(event.once("close", () => resolve(false)));
});
});
}
function editDesign(options) {
return __async$3(this, null, function* () {
cleanCallBack();
load = false;
const code = yield config.authorize();
iframeManager.update(env.MOBILE_TEMPLATE_EDITOR_URL, {
id: options.id,
mode: "user",
user_code: code,
version: "TE002"
});
event.once("load", () => __async$3(this, null, function* () {
load = true;
const e = yield iframeManager.getService();
yield e.init({
appId: config.appId,
version: "TE002",
v: env.VERSION
});
event.emit("editor.load");
}));
iframeManager.insert();
return new Promise((resolve) => {
tempCallbacks.push(event.once("save", (v) => resolve(v)));
tempCallbacks.push(event.once("close", () => resolve(false)));
});
});
}
function openTemplateList(options) {
load = false;
cleanCallBack();
iframeManager.update(env.OPEN_PLATFORM_ORIGIN + "/mt/templates", {
app_id: config.appId,
version: "TE002"
});
event.once("load", () => __async$3(this, null, function* () {
load = true;
const e = yield iframeManager.getService();
e.init({
appId: config.appId,
v: env.VERSION,
version: "TE002"
});
}));
if (options.onSelectTemplate) {
tempCallbacks.push(event.add("select.template", options.onSelectTemplate));
}
iframeManager.insert();
return new Promise((resolve) => {
tempCallbacks.push(event.once("select.template", (v) => resolve(v)));
tempCallbacks.push(event.once("close", () => resolve(false)));
});
}
function close() {
event.emit("close");
iframeManager.remove();
}
function onSave(fn) {
event.add("save", fn);
}
function onClose(fn) {
event.add("close", fn);
}
function onLoad(fn) {
event.add("editor.load", fn);
}
function onTemplateLoad(fn) {
event.add("template.load", fn);
}
return {
get isLoad() {
return load;
},
openTemplateList,
close,
onSave,
onTemplateLoad,
onClose,
onLoad,
editDesign,
createDesign
};
}
var axios$2 = { exports: {} };
var bind$2 = function bind(fn, thisArg) {
return function wrap() {
var args = new Array(arguments.length);
for (var i = 0; i < args.length; i++) {
args[i] = arguments[i];
}
return fn.apply(thisArg, args);
};
};
var bind$1 = bind$2;
var toString = Object.prototype.toString;
function isArray(val) {
return toString.call(val) === "[object Array]";
}
function isUndefined(val) {
return typeof val === "undefined";
}
function isBuffer(val) {
return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && typeof val.constructor.isBuffer === "function" && val.constructor.isBuffer(val);
}
function isArrayBuffer(val) {
return toString.call(val) === "[object ArrayBuffer]";
}
function isFormData(val) {
return typeof FormData !== "undefined" && val instanceof FormData;
}
function isArrayBufferView(val) {
var result;
if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView) {
result = ArrayBuffer.isView(val);
} else {
result = val && val.buffer && val.buffer instanceof ArrayBuffer;
}
return result;
}
function isString(val) {
return typeof val === "string";
}
function isNumber(val) {
return typeof val === "number";
}
function isObject(val) {
return val !== null && typeof val === "object";
}
function isPlainObject(val) {
if (toString.call(val) !== "[object Object]") {
return false;
}
var prototype = Object.getPrototypeOf(val);
return prototype === null || prototype === Object.prototype;
}
function isDate(val) {
return toString.call(val) === "[object Date]";
}
function isFile(val) {
return toString.call(val) === "[object File]";
}
function isBlob(val) {
return toString.call(val) === "[object Blob]";
}
function isFunction(val) {
return toString.call(val) === "[object Function]";
}
function isStream(val) {
return isObject(val) && isFunction(val.pipe);
}
function isURLSearchParams(val) {
return typeof URLSearchParams !== "undefined" && val instanceof URLSearchParams;
}
function trim(str) {
return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, "");
}
function isStandardBrowserEnv() {
if (typeof navigator !== "undefined" && (navigator.product === "ReactNative" || navigator.product === "NativeScript" || navigator.product === "NS")) {
return false;
}
return typeof window !== "undefined" && typeof document !== "undefined";
}
function forEach(obj, fn) {
if (obj === null || typeof obj === "undefined") {
return;
}
if (typeof obj !== "object") {
obj = [obj];
}
if (isArray(obj)) {
for (var i = 0, l = obj.length; i < l; i++) {
fn.call(null, obj[i], i, obj);
}
} else {
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
fn.call(null, obj[key], key, obj);
}
}
}
}
function merge() {
var result = {};
function assignValue(val, key) {
if (isPlainObject(result[key]) && isPlainObject(val)) {
result[key] = merge(result[key], val);
} else if (isPlainObject(val)) {
result[key] = merge({}, val);
} else if (isArray(val)) {
result[key] = val.slice();
} else {
result[key] = val;
}
}
for (var i = 0, l = arguments.length; i < l; i++) {
forEach(arguments[i], assignValue);
}
return result;
}
function extend(a, b, thisArg) {
forEach(b, function assignValue(val, key) {
if (thisArg && typeof val === "function") {
a[key] = bind$1(val, thisArg);
} else {
a[key] = val;
}
});
return a;
}
function stripBOM(content) {
if (content.charCodeAt(0) === 65279) {
content = content.slice(1);
}
return content;
}
var utils$d = {
isArray,
isArrayBuffer,
isBuffer,
isFormData,
isArrayBufferView,
isString,
isNumber,
isObject,
isPlainObject,
isUndefined,
isDate,
isFile,
isBlob,
isFunction,
isStream,
isURLSearchParams,
isStandardBrowserEnv,
forEach,
merge,
extend,
trim,
stripBOM
};
var utils$c = utils$d;
function encode(val) {
return encodeURIComponent(val).replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+").replace(/%5B/gi, "[").replace(/%5D/gi, "]");
}
var buildURL$2 = function buildURL(url, params, paramsSerializer) {
if (!params) {
return url;
}
var serializedParams;
if (paramsSerializer) {
serializedParams = paramsSerializer(params);
} else if (utils$c.isURLSearchParams(params)) {
serializedParams = params.toString();
} else {
var parts = [];
utils$c.forEach(params, function serialize(val, key) {
if (val === null || typeof val === "undefined") {
return;
}
if (utils$c.isArray(val)) {
key = key + "[]";
} else {
val = [val];
}
utils$c.forEach(val, function parseValue(v) {
if (utils$c.isDate(v)) {
v = v.toISOString();
} else if (utils$c.isObject(v)) {
v = JSON.stringify(v);
}
parts.push(encode(key) + "=" + encode(v));
});
});
serializedParams = parts.join("&");
}
if (serializedParams) {
var hashmarkIndex = url.indexOf("#");
if (hashmarkIndex !== -1) {
url = url.slice(0, hashmarkIndex);
}
url += (url.indexOf("?") === -1 ? "?" : "&") + serializedParams;
}
return url;
};
var utils$b = utils$d;
function InterceptorManager$1() {
this.handlers = [];
}
InterceptorManager$1.prototype.use = function use(fulfilled, rejected, options) {
this.handlers.push({
fulfilled,
rejected,
synchronous: options ? options.synchronous : false,
runWhen: options ? options.runWhen : null
});
return this.handlers.length - 1;
};
InterceptorManager$1.prototype.eject = function eject(id2) {
if (this.handlers[id2]) {
this.handlers[id2] = null;
}
};
InterceptorManager$1.prototype.forEach = function forEach2(fn) {
utils$b.forEach(this.handlers, function forEachHandler(h) {
if (h !== null) {
fn(h);
}
});
};
var InterceptorManager_1 = InterceptorManager$1;
var utils$a = utils$d;
var normalizeHeaderName$1 = function normalizeHeaderName(headers, normalizedName) {
utils$a.forEach(headers, function processHeader(value, name2) {
if (name2 !== normalizedName && name2.toUpperCase() === normalizedName.toUpperCase()) {
headers[normalizedName] = value;
delete headers[name2];
}
});
};
var enhanceError$2 = function enhanceError(error, config, code, request2, response) {
error.config = config;
if (code) {
error.code = code;
}
error.request = request2;
error.response = response;
error.isAxiosError = true;
error.toJSON = function toJSON() {
return {
message: this.message,
name: this.name,
description: this.description,
number: this.number,
fileName: this.fileName,
lineNumber: this.lineNumber,
columnNumber: this.columnNumber,
stack: this.stack,
config: this.config,
code: this.code
};
};
return error;
};
var enhanceError$1 = enhanceError$2;
var createError$2 = function createError(message, config, code, request2, response) {
var error = new Error(message);
return enhanceError$1(error, config, code, request2, response);
};
var createError$1 = createError$2;
var settle$1 = function settle(resolve, reject, response) {
var validateStatus2 = response.config.validateStatus;
if (!response.status || !validateStatus2 || validateStatus2(response.status)) {
resolve(response);
} else {
reject(createError$1("Request failed with status code " + response.status, response.config, null, response.request, response));
}
};
var utils$9 = utils$d;
var cookies$1 = utils$9.isStandardBrowserEnv() ? function standardBrowserEnv() {
return {
write: function write(name2, value, expires, path, domain, secure) {
var cookie = [];
cookie.push(name2 + "=" + encodeURIComponent(value));
if (utils$9.isNumber(expires)) {
cookie.push("expires=" + new Date(expires).toGMTString());
}
if (utils$9.isString(path)) {
cookie.push("path=" + path);
}
if (utils$9.isString(domain)) {
cookie.push("domain=" + domain);
}
if (secure === true) {
cookie.push("secure");
}
document.cookie = cookie.join("; ");
},
read: function read(name2) {
var match = document.cookie.match(new RegExp("(^|;\\s*)(" + name2 + ")=([^;]*)"));
return match ? decodeURIComponent(match[3]) : null;
},
remove: function remove(name2) {
this.write(name2, "", Date.now() - 864e5);
}
};
}() : function nonStandardBrowserEnv() {
return {
write: function write() {
},
read: function read() {
return null;
},
remove: function remove() {
}
};
}();
var isAbsoluteURL$1 = function isAbsoluteURL(url) {
return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
};
var combineURLs$1 = function combineURLs(baseURL, relativeURL) {
return relativeURL ? baseURL.replace(/\/+$/, "") + "/" + relativeURL.replace(/^\/+/, "") : baseURL;
};
var isAbsoluteURL2 = isAbsoluteURL$1;
var combineURLs2 = combineURLs$1;
var buildFullPath$1 = function buildFullPath(baseURL, requestedURL) {
if (baseURL && !isAbsoluteURL2(requestedURL)) {
return combineURLs2(baseURL, requestedURL);
}
return requestedURL;
};
var utils$8 = utils$d;
var ignoreDuplicateOf = [
"age",
"authorization",
"content-length",
"content-type",
"etag",
"expires",
"from",
"host",
"if-modified-since",
"if-unmodified-since",
"last-modified",
"location",
"max-forwards",
"proxy-authorization",
"referer",
"retry-after",
"user-agent"
];
var parseHeaders$1 = function parseHeaders(headers) {
var parsed = {};
var key;
var val;
var i;
if (!headers) {
return parsed;
}
utils$8.forEach(headers.split("\n"), function parser(line) {
i = line.indexOf(":");
key = utils$8.trim(line.substr(0, i)).toLowerCase();
val = utils$8.trim(line.substr(i + 1));
if (key) {
if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
return;
}
if (key === "set-cookie") {
parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
} else {
parsed[key] = parsed[key] ? parsed[key] + ", " + val : val;
}
}
});
return parsed;
};
var utils$7 = utils$d;
var isURLSameOrigin$1 = utils$7.isStandardBrowserEnv() ? function standardBrowserEnv2() {
var msie = /(msie|trident)/i.test(navigator.userAgent);
var urlParsingNode = document.createElement("a");
var originURL;
function resolveURL(url) {
var href = url;
if (msie) {
urlParsingNode.setAttribute("href", href);
href = urlParsingNode.href;
}
urlParsingNode.setAttribute("href", href);
return {
href: urlParsingNode.href,
protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, "") : "",
host: urlParsingNode.host,
search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, "") : "",
hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, "") : "",
hostname: urlParsingNode.hostname,
port: urlParsingNode.port,
pathname: urlParsingNode.pathname.charAt(0) === "/" ? urlParsingNode.pathname : "/" + urlParsingNode.pathname
};
}
originURL = resolveURL(window.location.href);
return function isURLSameOrigin2(requestURL) {
var parsed = utils$7.isString(requestURL) ? resolveURL(requestURL) : requestURL;
return parsed.protocol === originURL.protocol && parsed.host === originURL.host;
};
}() : function nonStandardBrowserEnv2() {
return function isURLSameOrigin2() {
return true;
};
}();
var utils$6 = utils$d;
var settle2 = settle$1;
var cookies = cookies$1;
var buildURL$1 = buildURL$2;
var buildFullPath2 = buildFullPath$1;
var parseHeaders2 = parseHeaders$1;
var isURLSameOrigin = isURLSameOrigin$1;
var createError2 = createError$2;
var xhr = function xhrAdapter(config) {
return new Promise(function dispatchXhrRequest(resolve, reject) {
var requestData = config.data;
var requestHeaders = config.headers;
var responseType = config.responseType;
if (utils$6.isFormData(requestData)) {
delete requestHeaders["Content-Type"];
}
var request2 = new XMLHttpRequest();
if (config.auth) {
var username = config.auth.username || "";
var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : "";
requestHeaders.Authorization = "Basic " + btoa(username + ":" + password);
}
var fullPath = buildFullPath2(config.baseURL, config.url);
request2.open(config.method.toUpperCase(), buildURL$1(fullPath, config.params, config.paramsSerializer), true);
request2.timeout = config.timeout;
function onloadend() {
if (!request2) {
return;
}
var responseHeaders = "getAllResponseHeaders" in request2 ? parseHeaders2(request2.getAllResponseHeaders()) : null;
var responseData = !responseType || responseType === "text" || responseType === "json" ? request2.responseText : request2.response;
var response = {
data: responseData,
status: request2.status,
statusText: request2.statusText,
headers: responseHeaders,
config,
request: request2
};
settle2(resolve, reject, response);
request2 = null;
}
if ("onloadend" in request2) {
request2.onloadend = onloadend;
} else {
request2.onreadystatechange = function handleLoad() {
if (!request2 || request2.readyState !== 4) {
return;
}
if (request2.status === 0 && !(request2.responseURL && request2.responseURL.indexOf("file:") === 0)) {
return;
}
setTimeout(onloadend);
};
}
request2.onabort = function handleAbort() {
if (!request2) {
return;
}
reject(createError2("Request aborted", config, "ECONNABORTED", request2));
request2 = null;
};
request2.onerror = function handleError() {
reject(createError2("Network Error", config, null, request2));
request2 = null;
};
request2.ontimeout = function handleTimeout() {
var timeoutErrorMessage = "timeout of " + config.timeout + "ms exceeded";
if (config.timeoutErrorMessage) {
timeoutErrorMessage = config.timeoutErrorMessage;
}
reject(createError2(timeoutErrorMessage, config, config.transitional && config.transitional.clarifyTimeoutError ? "ETIMEDOUT" : "ECONNABORTED", request2));
request2 = null;
};
if (utils$6.isStandardBrowserEnv()) {
var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : void 0;
if (xsrfValue) {
requestHeaders[config.xsrfHeaderName] = xsrfValue;
}
}
if ("setRequestHeader" in request2) {
utils$6.forEach(requestHeaders, function setRequestHeader(val, key) {
if (typeof requestData === "undefined" && key.toLowerCase() === "content-type") {
delete requestHeaders[key];
} else {
request2.setRequestHeader(key, val);
}
});
}
if (!utils$6.isUndefined(config.withCredentials)) {
request2.withCredentials = !!config.withCredentials;
}
if (responseType && responseType !== "json") {
request2.responseType = config.responseType;
}
if (typeof config.onDownloadProgress === "function") {
request2.addEventListener("progress", config.onDownloadProgress);
}
if (typeof config.onUploadProgress === "function" && request2.upload) {
request2.upload.addEventListener("progress", config.onUploadProgress);
}
if (config.cancelToken) {
config.cancelToken.promise.then(function onCanceled(cancel) {
if (!request2) {
return;
}
request2.abort();
reject(cancel);
request2 = null;
});
}
if (!requestData) {
requestData = null;
}
request2.send(requestData);
});
};
var utils$5 = utils$d;
var normalizeHeaderName2 = normalizeHeaderName$1;
var enhanceError2 = enhanceError$2;
var DEFAULT_CONTENT_TYPE = {
"Content-Type": "application/x-www-form-urlencoded"
};
function setContentTypeIfUnset(headers, value) {
if (!utils$5.isUndefined(headers) && utils$5.isUndefined(headers["Content-Type"])) {
headers["Content-Type"] = value;
}
}
function getDefaultAdapter() {
var adapter;
if (typeof XMLHttpRequest !== "undefined") {
adapter = xhr;
} else if (typeof process !== "undefined" && Object.prototype.toString.call(process) === "[object process]") {
adapter = xhr;
}
return adapter;
}
function stringifySafely(rawValue, parser, encoder) {
if (utils$5.isString(rawValue)) {
try {
(parser || JSON.parse)(rawValue);
return utils$5.trim(rawValue);
} catch (e) {
if (e.name !== "SyntaxError") {
throw e;
}
}
}
return (encoder ||