Source: lib/url.js

'use strict';

/* url相关 */

/** @module url */

/**
 * 获取url链接里的参数
 * @param {String} name  参数名
 * @return {String} 参数对应的值
 * @example
 * var name = url.getUrlParam('name');
 */
function getUrlParam(name) {
    // eslint-disable-next-line
    const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    const r = window.location.search.substr(1).match(reg); // search,查询?后面的参数,并匹配正则
    if (r != null)
        return unescape(r[2]);
    return null;
}

/**
 * getUrlParamsStr,获取当前url链接里的所有参数的数组
 * @return {String} 所有参数的字符串.
 */
function getUrlParamsStr() {
    return window.location.search == '' ? '' : location.search.slice(1);
}

/**
 * parseJson2Str,将json转换成url参数
 * @param {Object} json - 要转换的json对象
 * @return {String} 转换出来的字符串
 * @example
 * var str = url.parseJson2Str({name:2});
 * console.log(str);
 */
function parseJson2Str(json) {
    return Object.keys(json).map(function (key) {
        let value = json[key];
        return encodeURIComponent(key) + '=' + encodeURIComponent(value);
    }).join('&');
}

/**
 * parseStr2Json,将str参数转换成json
 * @param {String} str - 要转换的str字符串
 * @return {Object} 转换出来的json
 * @example
 * var json = url.parseStr2Json('name=2'}');
 * console.log(json);
 */
function parseStr2Json(str = '') {
    let arr = str.split('&'), res = {};
    for (let i = 0; i < arr.length; i++) {
        if(arr[i]){
            res[arr[i].split('=')[0]] = arr[i].split('=')[1];
        }
    }
    return res;
}

/**
 * 将url转换成json信息
 * @param {String} url 要转换的url
 * @return {Object} 转换出来的json
 * @example
 * var data = url.parseURL('http://www.baidu.com/s/cd?data=1');
 * console.log(data);
 * //输出
 * {
     "source": "http://www.baidu.com/s/cd?data=1",
      protocol": "http",
      "host": "www.baidu.com",
      "port": "",
      query": "?data=1",
      "params": {
          "data": "1"
      },
      "file": "cd",
      "hash": "",
      "path": "/s/cd",
      "relative": "/s/cd?data=1",
      "segments": [
         "s",
         "cd"
      ]
 }
 */
function parseURL(url) {
    let a = document.createElement('a');
    a.href = url;
    return {
        source: url,
        protocol: a.protocol.replace(':', ''),
        host: a.hostname,
        port: a.port,
        query: a.search,
        params: (function () {
            let ret = {},
                // eslint-disable-next-line
                seg = a.search.replace(/^\?/, '').split('&'),
                len = seg.length, i = 0, s; //len = 2
            for (; i < len; i++) {
                if (!seg[i]) {
                    continue;
                }
                s = seg[i].split('=');
                ret[s[0]] = s[1];
            }
            return ret;
        })(),
        file: (a.pathname.match(/\/([^\/?#]+)$/i) || [, ''])[1],// eslint-disable-line
        hash: a.hash.replace('#', ''),// eslint-disable-line
        path: a.pathname.replace(/^([^\/])/, '/$1'),// eslint-disable-line
        relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [, ''])[1],// eslint-disable-line
        segments: a.pathname.replace(/^\//, '').split('/')// eslint-disable-line
    };
}

export {
    getUrlParam,
    getUrlParamsStr,
    parseJson2Str,
    parseStr2Json,
    parseURL
};