Skip to content
Snippets Groups Projects
Select Git revision
  • 4916c16276daa812a21a15beba38ab3d6640f1e3
  • 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

Monster.DOM.Assembler.html

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