"development/issues/closed/143.js" did not exist on "28692bb074b63387622cdb99a515ae905ee3bd1d"
Select Git revision
Monster.DOM.Assembler.html
script.js 3.33 KiB
'use strict';
/**
* @author schukai GmbH
*/
import {extend} from "../../data/extend.js";
import {assignToNamespace, Monster} from "../../namespace.js";
import {
ATTRIBUTE_CLASS,
ATTRIBUTE_ID,
ATTRIBUTE_NONCE,
ATTRIBUTE_SRC,
ATTRIBUTE_TITLE,
ATTRIBUTE_TYPE,
TAG_SCRIPT
} from "../constants.js";
import {KEY_DOCUMENT, referenceSymbol, Resource} from "../resource.js";
/**
* This class is used by the resource manager to embed scripts.
*
* You can call the method via the monster namespace `new Monster.DOM.Resource.Script()`.
*
* ```
* <script type="module">
* import {Monster} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.30.1/dist/monster.js';
* new Monster.DOM.Resource.Script()
* </script>
* ```
*
* Alternatively, you can also integrate this function individually.
*
* ```
* <script type="module">
* import {Script} from 'https://cdn.jsdelivr.net/npm/@schukai/monster@1.30.1/dist/modules/dom/resource/script.js';
* new Script()
* </script>
* ```
*
* @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',
})
}
/**
*
* @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;
}
assignToNamespace('Monster.DOM.Resource', Script);
export {Monster, Script}