HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/RMourik/bassol.nl/CMS/CMSScripts/CMSModules/CMS/UrlHelper.js
/**
 * UrlHelper module
 * Adds functionality for manipulation with URL and query.
 */

cmsdefine(['Underscore'], function (_) {
    'use strict';
    
        /**
         * Gets value of query parameter from given query string.
         *
         * @param {string} queryString - URL query string, leading question mark is optional
         * @param {string} name - Name of query parameter
         * @return {Object} Value of query parameter, if exist, null otherwise
         */
        var getValue = function (queryString, name) {
            return getParams(queryString)[name];
        },


        /**
         * Gets value of query parameter from given query string
         * @param  {String} queryString   URL query string, leading question mark is optional
         * @param  {name}   parameterName Name of query parameter to return
         * @return {Integer}              Number if the parameter exists and is a number
         * @return {NaN}                  NaN if the parameter exists and it is not a number
         * @return {Null}                 Null if the parameter does not exist
         */
        getValueAsInt = function(queryString, parameterName) {
            return parseInt(getParams(queryString)[parameterName], 10);
        },


        /**
         * Gets string value of query parameter from given query string.
         *
         * @param {string} queryString - URL query string, leading question mark is optional
         * @param {string} name - Name of query parameter
         * @param {string} defaultValue - Default value if parameter does not exist
         * @return {string} Value of query parameter, if exist, default value otherwise
         */
        getString = function(queryString, name, defaultValue) {
            return getValue(queryString, name) || defaultValue;
        },
        

        /**
         * Sets value of query parameter for given query string. If parameter already exists, it is rewritten. If value is set to be null or undefined, parameter is removed.
         *
         * @param {string} queryString - URL query string, leading question mark is optional
         * @param {string} name - Name of query parameter
         * @param {string} value - Value to be set
         * @return {string} Updated query string
         */
        setValue = function(queryString, name, value) {
            var params = getParams(queryString);
            if (!value) {
                return removeParameter(queryString, name);
            }
            params[name] = value;
            return buildQueryString(params);
        },


        /**
         * Get object containing all query parameters from given query string.
         *
         * @param {string} queryString - URL query string, leading question mark is optional
         * @return {Object} Object containing key/value pairs representing query parameters
         */
        getParams = function (queryString) {
            // If whole url was passed, remove part before query string
            if (queryString.indexOf('?') !== -1) {
                queryString = getQueryString(queryString);
            }

            var result = {},
                regularExpression = /([^&=]+)=([^&]*)/g,
                temp;
            
            while (temp = regularExpression.exec(queryString)) {
                result[decodeURIComponent(temp[1])] = decodeURIComponent(temp[2]);
            }

            return result;
        },


        /**
         * Removes given parameters from given query string.
         *
         * @param {string} queryString - URL query string, leading question mark is optional
         * @param {Array} paramsToRemove - Array containing parameter names which should be removed
         * @return {string} update query string without removed parameters
         */
        removeParameters = function(queryString, paramsToRemove) {
            var params = getParams(queryString);
            return buildQueryString(_.omit(params, paramsToRemove));
        },
        

        /**
         * Removes given parameter from given query string.
         *
         * @param {string} queryString - URL query string, leading question mark is optional
         * @param {string} paramToRemove - Name of parameter to be removed
         * @return {string} update query string without removed parameter
         */
        removeParameter = function(queryString, paramToRemove) {
            return removeParameters(queryString, [paramToRemove]);
        },


        /**
         * Build query string from given parameters object.
         *
         * @param {Object} params - Object containing key/value pairs representing query parameters
         * @return {string} Empty string, if given params object does not have any property, built query string otherwise
         */
        buildQueryString = function (params) {
            var completedParams = [];
            
            for (var key in params) {
                if (params.hasOwnProperty(key)) {
                    completedParams.push(key + '=' + params[key]);
                }
            }
            
            if (completedParams.length) {
                return '?' + completedParams.join('&');
            }

            return '';
        },


        /**
         * Removes leading question mark from given query string, if present.
         * If whole URL is given, its query string is returned.
         *
         * @param {string} url - URL or URL query string, leading question mark is optional
         * @return {string} Query string without leading question mark
         */
        getQueryString = function (url) {
            var questionMarkPosition = url.indexOf('?');

            if (questionMarkPosition === -1) {
                return "";
            }

            return url.slice(questionMarkPosition + 1);
        };
    

    // Expose UrlHelper API
    return {
        getParameter: getValue,
        getParameterAsInt: getValueAsInt,
        getParameterString: getString,
        setParameter: setValue,
        removeParameters: removeParameters,
        removeParameter: removeParameter,
        getParameters: getParams,
        buildQueryString: buildQueryString,
        getQueryString: getQueryString
    };
});