Skip to content
Snippets Groups Projects
Select Git revision
  • ef8ef78c5168be8cbd886118caf298c828338fb4
  • master default protected
  • 1.31
  • 4.38.3
  • 4.38.2
  • 4.38.1
  • 4.38.0
  • 4.37.2
  • 4.37.1
  • 4.37.0
  • 4.36.0
  • 4.35.0
  • 4.34.1
  • 4.34.0
  • 4.33.1
  • 4.33.0
  • 4.32.2
  • 4.32.1
  • 4.32.0
  • 4.31.0
  • 4.30.1
  • 4.30.0
  • 4.29.1
23 results

script.mjs

Blame
  • 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;
    }