CartoDB/cartodb20

View on GitHub
lib/assets/javascripts/dashboard/statics/helpers/url.js

Summary

Maintainability
D
2 days
Test Coverage
module.exports = {
  getUrlParams: function (conversion, location) {
    var urlTokens;

    conversion = conversion || {};
    location = location || window.location;
    urlTokens = _getUrlTokens.call(this, location);

    return urlTokens.length
      ? _buildParams.call(this, conversion, urlTokens)
      : {};
  },

  getPage: function () {
    var pathTokens = window.location.pathname.split('/');
    var lastTokenIndex = pathTokens.length - 1;
    return pathTokens[lastTokenIndex];
  },

  getVizID: function (page /* optional */) {
    var url = window.location.pathname;
    var vizStr = '/viz/';

    page = page || this.getPage();

    return url.substring(
      url.indexOf(vizStr) + vizStr.length,
      url.indexOf('/' + page)
    );
  }
};

function _getUrlTokens (location) {
  return location.search.slice(1).split('&');
}

function _buildParams (conversion, urlTokens) {
  var URL_PARAM_TO_DECODE = 0;
  var NUMBER_OF_PARAM_TOKENS = 2;
  var params = {};
  var i = 0;

  for (i; i < urlTokens.length; ++i) {
    var urlParams = urlTokens[i].split('=');
    var urlParamToDecode = urlParams[URL_PARAM_TO_DECODE];
    var callback = conversion[urlParamToDecode] || function defaultValue (value) {
      return value;
    };

    if (urlParams.length === NUMBER_OF_PARAM_TOKENS) {
      params[urlParamToDecode] = _decodeParam(urlParams, callback);
    }
  }

  return params;
}

function _decodeParam (urlParams, callback) {
  var URL_PARAM_URI = 1;
  var decodedParam = decodeURIComponent(urlParams[URL_PARAM_URI]);

  return callback(decodedParam);
}