Select Git revision

Volker Schukai authored
script.mjs 3.16 KiB
/**
* Copyright schukai GmbH and contributors 2022. All Rights Reserved.
* Node module: @schukai/monster
* This file is licensed under the AGPLv3 License.
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
*/
import {extend} from "../../data/extend.mjs";
import {
ATTRIBUTE_CLASS,
ATTRIBUTE_ID,
ATTRIBUTE_NONCE,
ATTRIBUTE_SRC,
ATTRIBUTE_TITLE,
ATTRIBUTE_TYPE,
TAG_SCRIPT
} from "../constants.mjs";
import {KEY_DOCUMENT, referenceSymbol, Resource} from "../resource.mjs";
import {instanceSymbol} from '../../constants.mjs';
export {Script}
/**
* This class is used by the resource manager to embed scripts.
*
* @license AGPLv3
* @since 1.25.0
* @copyright schukai GmbH
* @memberOf Monster.DOM.Resource
* @summary A Resource class
*/
class Script extends Resource {
/**
* @property {boolean} async=true {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-async}
* @property {string} crossOrigin=anonymous {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-crossorigin}
* @property {boolean} defer=false {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-defer}
* @property {string} integrity {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-integrity}
* @property {boolean} nomodule {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-nomodule}
* @property {string} nonce {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-nonce}
* @property {string} referrerpolicy {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-referrerpolicy}
* @property {string} type {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-type}
*/
get defaults() {
return extend({}, super.defaults, {
async: true,
crossOrigin: 'anonymous',
defer: false,
integrity: undefined,
nomodule: false,
nonce: undefined,
referrerpolicy: undefined,
type: 'text/javascript',
})
}
/**
* This method is called by the `instanceof` operator.
* @returns {symbol}
* @since 2.1.0
*/
static get [instanceSymbol]() {
return Symbol.for("@schukai/monster/dom/resource/script");
}
/**
*
* @return {Monster.DOM.Resource.Script}
*/
create() {
createElement.call(this);
return this;
}
/**
* @return {string}
*/
static getURLAttribute() {
return ATTRIBUTE_SRC
}
}
/**
* @private
* @return {Monster.DOM.Resource.Script}
*/
function createElement() {
const self = this;
const document = self.getOption(KEY_DOCUMENT);
self[referenceSymbol] = document.createElement(TAG_SCRIPT);
for (let key of ['crossOrigin', 'defer', 'async', 'integrity', 'nomodule', ATTRIBUTE_NONCE, 'referrerpolicy', ATTRIBUTE_TYPE, ATTRIBUTE_SRC, ATTRIBUTE_ID, ATTRIBUTE_CLASS, ATTRIBUTE_TITLE]) {
if (self.getOption(key) !== undefined) {
self[referenceSymbol][key] = self.getOption(key);
}
}
return self;
}