Skip to content
Snippets Groups Projects
Select Git revision
  • fcf07a0a39d7cef1c5ad7cc16212efa5d9363f0f
  • main default protected
  • renovate/lock-file-maintenance
  • demo protected
  • person-select-custom
  • dbp-translation-component
  • icon-set-mapping
  • port-i18next-parser
  • remove-sentry
  • favorites-and-recent-files
  • revert-6c632dc6
  • lit2
  • advertisement
  • wc-part
  • automagic
  • publish
  • wip-cleanup
  • demo-file-handling
18 results

rollup.utils.js

Blame
  • utils.js 4.77 KiB
    import env from './env.js';
    
    /**
     * Parses a link header
     *
     * The node module parse-link-header didn't work, so https://gist.github.com/niallo/3109252 became handy
     *
     * @param header
     */
    export const parseLinkHeader = (header) => {
        if (header.length === 0) {
            throw new Error("input must not be of zero length");
        }
    
        // Split parts by comma
        const parts = header.split(',');
        const links = {};
    
        // Parse each part into a named link
        for(let i=0; i<parts.length; i++) {
            const section = parts[i].split(';');
            if (section.length !== 2) {
                throw new Error("section could not be split on ';'");
            }
            const url = section[0].replace(/<(.*)>/, '$1').trim();
            const name = section[1].replace(/rel="(.*)"/, '$1').trim();
            links[name] = url;
        }
    
        return links;
    };
    
    /**
     * Reads a setting
     *
     * @param key
     * @returns {*}
     */
    export const setting = (key) => {
        return env[key];
    };
    
    export const getAPiUrl = (path = "", withPrefix = true) => {
        return env.apiBaseUrl + (withPrefix ? env.apiUrlPrefix : "") + path;
    };
    
    /**
     * Parses the base url from an url
     *
     * @param url
     * @returns {string}
     */
    export const parseBaseUrl = (url) => {
        const pathArray = url.split('/');
        const protocol = pathArray[0];
        const host = pathArray[2];
        return protocol + '//' + host;
    };
    
    /**
     * Converts a string list to a data array for Select2
     *
     * @param list
     * @returns {Array}
     */
    export const stringListToSelect2DataArray = (list) => {
        let data = [];
        list.forEach((item) => {data.push({id: item, text: item})});
        return data;
    };
    
    /**
     * Does generic Base64 Encoding with support for 16-bit encoded strings
     * @see https://www.base64encoder.io/javascript/
     *
     * @param str
     * @returns {string}
     */
    export const base64EncodeUnicode = (str) => {
        // First we escape the string using encodeURIComponent to get the UTF-8 encoding of the characters,
        // then we convert the percent encodings into raw bytes, and finally feed it to btoa() function.
        const utf8Bytes = encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
            return String.fromCharCode('0x' + p1);
        });
    
        return btoa(utf8Bytes);
    };
    
    /**
     * Like customElements.define() but tries to display an error in case the browser doesn't
     * support everything we need.
     *
     * Returns false in case define failed, true otherwise.
     *
     * @returns {boolean}
     */
    export const defineCustomElement = (name, constructor, options) => {
        // Checks taken from https://github.com/webcomponents/webcomponentsjs/blob/master/webcomponents-loader.js
        if (!('attachShadow' in Element.prototype && 'getRootNode' in Element.prototype && window.customElements)) {
            var elements = document.getElementsByTagName(name);
            for(var i=0; i < elements.length; i++) {
                elements[i].innerHTML = "<span style='border: 1px solid red; font-size: 0.8em; "
                    + "opacity: 0.5; padding: 0.2em;'>☹ Your browser is not supported ☹</span>";
            }
           return false;
        }
        customElements.define(name, constructor, options);
        return true;
    };
    
    /**
     * Creates a random id
     *
     * taken from: https://stackoverflow.com/a/1349426/1581487
     *
     * @param length
     * @returns {string}
     */
    export const makeId = (length) => {
        let result           = '';
        const characters       = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
        const charactersLength = characters.length;
        for ( let i = 0; i < length; i++ ) {
            result += characters.charAt(Math.floor(Math.random() * charactersLength));
        }
    
        return result;
    };
    
    /**
     * Pads a number with a 0 so it has two digits
     *
     * @param n
     * @returns {string}
     */
    export const pad10 = (n) => { return n < 10 ? '0' + n : n };
    
    /**
     * Converts a date object or string to a local iso datetime with stripped seconds and timezone for the datetime-local input
     *
     * @param date
     * @returns {string}
     */
    export const dateToStrippedIsoDT = (date) => {
        if (!(date instanceof Date)) {
            date = new Date(date);
        }
    
        return `${date.getFullYear()}-${pad10(date.getMonth()+1)}-${pad10(date.getDate())}T${pad10(date.getHours())}:${pad10(date.getMinutes())}`;
    };
    
    /**
     * Converts a date object or string to a local date string the date input
     *
     * @param date
     * @returns {string}
     */
    export const dateToInputDateString = (date) => {
        if (!(date instanceof Date)) {
            date = new Date(date);
        }
    
        return `${date.getFullYear()}-${pad10(date.getMonth()+1)}-${pad10(date.getDate())}`;
    };
    
    /**
     * Converts a date object or string to a local time string the time input
     *
     * @param date
     * @returns {string}
     */
    export const dateToInputTimeString = (date) => {
        if (!(date instanceof Date)) {
            date = new Date(date);
        }
    
        return `${pad10(date.getHours())}:${pad10(date.getMinutes())}`;
    };