Source: utility/location-tools.js

'use strict';

/** Namespace common functions to parse and manipulate URLs
 * @module locationTools
 */

//
// Utility
//

/** Manipulate/parse the location bar of the browser
 *
 * This is here because we have a couple of places where we want to remove
 * query parameters from the location bar.  This simplifies and helps us
 * maintain DRY.
 *
 * I call this `LocationTools`, because I do not want to call it simply `Location`,
 * because that seems woefully prone to naming colission.
 */
class LocationTools {
  /* eslint-disable class-methods-use-this */
  /** Remove query parameters from the location bar
   *
   * (This is done via the `history` object)
   */
  removeParams(...remove) {
    const params = new URLSearchParams(window.location.search);
    remove.forEach(param => params.delete(param));
    const query = params.toString();
    // Only add the `?` if there are items in our parsed dictionary
    const locationQuery = (query !== '') ? '?' + query : ''; // eslint-disable-line no-negated-condition
    const url =
      location.origin +
      location.pathname +
      locationQuery +
      location.hash;

    history.replaceState({}, '', url);
  }
  /* eslint-enable */

  /* eslint-disable class-methods-use-this */
  /** Get the current location without hash
   * @return {external:Location#hrefSansHash}
   */
  uriAndQueryString() {
    return location.origin +
      location.pathname +
      location.search;
  }
  /* eslint-enable */

  /* eslint-disable class-methods-use-this */
  /** Get query parameters string after the initial "?"
   * Chiefly used to set cookies later read by our backend
   * @return {string}
   */
  noQuestionSearchString() {
    return window.location.search.indexOf('?') === 0 ?
      window.location.search.substr(1) : window.location.search;
  }
  /* eslint-enable */

  /* eslint-disable class-methods-use-this */
  /** Return the domain (removes the subdomain from the domain)
   * Note: this will not work if we ever use public suffixes such as co.uk
   * If that is the case, we should use something like https://github.com/lupomontero/psl
   * @return {string}
   */
  domain() {
    const splitDomain = window.location.hostname.split('.');

    if (splitDomain.length > 2) splitDomain.shift();

    return splitDomain.join('.');
  }
  /* eslint-enable */

}

/** Instance of the class of this module
 * @type {module:locationTools~LocationTools}
 */
export const locationTools = new LocationTools();