diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-07-17 17:10:25 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-17 17:10:25 -0400 |
commit | fafa746a632b1907d9cca262f689d7bec4e0f940 (patch) | |
tree | f328ef581376cbda0b9d99bd9c3f7892de50a3c1 /ext/js/templates/template-renderer-frame-api.js | |
parent | 74381302c7a658dc3fd5e6c3a76842dd430341bb (diff) |
Sandbox script folders (#1837)
* Move scripts
* Update paths
* Fix ordering
* Simplify eslint rules
Diffstat (limited to 'ext/js/templates/template-renderer-frame-api.js')
-rw-r--r-- | ext/js/templates/template-renderer-frame-api.js | 109 |
1 files changed, 0 insertions, 109 deletions
diff --git a/ext/js/templates/template-renderer-frame-api.js b/ext/js/templates/template-renderer-frame-api.js deleted file mode 100644 index f234c8e0..00000000 --- a/ext/js/templates/template-renderer-frame-api.js +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) 2020-2021 Yomichan Authors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. - */ - -class TemplateRendererFrameApi { - constructor(templateRenderer) { - this._templateRenderer = templateRenderer; - this._windowMessageHandlers = new Map([ - ['render', {async: false, handler: this._onRender.bind(this)}], - ['renderMulti', {async: false, handler: this._onRenderMulti.bind(this)}], - ['getModifiedData', {async: false, handler: this._onGetModifiedData.bind(this)}] - ]); - } - - prepare() { - window.addEventListener('message', this._onWindowMessage.bind(this), false); - this._postMessage(window.parent, 'ready', {}, null); - } - - // Private - - _onWindowMessage(e) { - const {source, data: {action, params, id}} = e; - const messageHandler = this._windowMessageHandlers.get(action); - if (typeof messageHandler === 'undefined') { return; } - - this._onWindowMessageInner(messageHandler, action, params, source, id); - } - - async _onWindowMessageInner({handler, async}, action, params, source, id) { - let response; - try { - let result = handler(params); - if (async) { - result = await result; - } - response = {result}; - } catch (error) { - response = {error: this._serializeError(error)}; - } - - if (typeof id === 'undefined') { return; } - this._postMessage(source, `${action}.response`, response, id); - } - - _onRender({template, data, type}) { - return this._templateRenderer.render(template, data, type); - } - - _onRenderMulti({items}) { - return this._serializeMulti(this._templateRenderer.renderMulti(items)); - } - - _onGetModifiedData({data, type}) { - const result = this._templateRenderer.getModifiedData(data, type); - return this._clone(result); - } - - _serializeError(error) { - try { - if (typeof error === 'object' && error !== null) { - return { - name: error.name, - message: error.message, - stack: error.stack, - data: error.data - }; - } - } catch (e) { - // NOP - } - return { - value: error, - hasValue: true - }; - } - - _serializeMulti(array) { - for (let i = 0, ii = array.length; i < ii; ++i) { - const value = array[i]; - const {error} = value; - if (typeof error !== 'undefined') { - value.error = this._serializeError(error); - } - } - return array; - } - - _clone(value) { - return JSON.parse(JSON.stringify(value)); - } - - _postMessage(target, action, params, id) { - return target.postMessage({action, params, id}, '*'); - } -} |