/**
 * @archivo url.js
 * URL del @módulo
 * /
importar documento desde 'global/document';
importar ventana desde 'global/window';

/ **
 * @typedef {Objeto} url:URLObjeto
 *
 * Protocolo @property {cadena}
 * El protocolo de la url que se analizó.
 *
 * @property {cadena} nombre de host
 * El nombre de host de la URL que se analizó.
 *
 * @propiedad {cadena} puerto
 * El puerto de la URL que se analizó.
 *
 * @property {cadena} nombre de ruta
 * El nombre de ruta de la URL que se analizó.
 *
 * @propiedad {cadena} búsqueda
 * La consulta de búsqueda de la URL que se analizó.
 *
 * @property {cadena} hash
 * El hash de la URL que se analizó.
 *
 * @propiedad {cadena} host
 * El host de la URL que se analizó.
 * /

/ **
 * Resolver y analizar los elementos de una URL.
 *
 * @función
 * @param {Cadena} URL
 * La url a analizar
 *
 * @return {url:URLOobjeto}
 * Un objeto de detalles de URL
 * /
exportar const parseUrl = function(url) {
  // Este método completo se puede reemplazar con URL una vez que podamos eliminar IE11

  const props = ['protocolo', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];

  // agrega la URL a un ancla y deja que el navegador analice la URL
  const a = documento.createElement('a');

  a.href = url;

  // Copia las propiedades de URL específicas a un nuevo objeto
  // Esto también es necesario para IE porque el ancla pierde su
  // propiedades cuando se elimina del dom
  const detalles = {};

  para (sea i = 0; i < accesorios.longitud; i++) {
    detalles[accesorios[i]] = a[accesorios[i]];
  }

  // IE agrega el puerto a la propiedad del host a diferencia de todos los demás. Si
  // se agrega un identificador de puerto para puertos estándar, elimínelo.
  if (detalles.protocolo === 'http:') {
    detalles.host = detalles.host.replace(/:80$/, '');
  }

  if (detalles.protocolo === 'https:') {
    detalles.host = detalles.host.replace(/:443$/, '');
  }

  if (!detalles.protocolo) {
    detalles.protocolo = ventana.ubicación.protocolo;
  }

  /* estambul ignorar si */
  if (!detalles.host) {
    detalles.host = ventana.ubicación.host;
  }

  detalles de devolución;
};

/ **
 * Obtenga la versión absoluta de la URL relativa. Se utiliza para indicarle a Flash la URL correcta.
 *
 * @función
 * @param {cadena} URL
 * URL para hacer absoluta
 *
 * @return {cadena}
 * URL absoluta
 *
 * @ver http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue
 * /
exportar const getAbsoluteURL = function(url) {
  // Comprobar si es una URL absoluta
  si (!url.match(/^https?:\/\//)) {
    // Convertir a URL absoluta. Flash alojado fuera del sitio necesita una URL absoluta.
    // agrega la URL a un ancla y deja que el navegador analice la URL
    const a = documento.createElement('a');

    a.href = url;

    URL = a.href;
  }

  URL de retorno;
};

/ **
 * Devuelve la extensión del nombre del archivo pasado. Devolverá una cadena vacía.
 * si pasa una ruta no válida.
 *
 * @función
 * @param {cadena} ruta
 * La ruta del nombre del archivo como '/ruta/al/archivo.mp4'
 *
 * @return {cadena}
 * La extensión en minúsculas o una cadena vacía si no
 * se pudo encontrar la extensión.
 * /
export const getFileExtension = función (ruta) {
  if (tipo de ruta === 'cadena') {
    const splitPathRe = /^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/ \?]+)))(?:[\/]*|[\?].*)$/;
    const pathParts = splitPathRe.exec(ruta);

    if (partesruta) {
      devuelve pathParts.pop().toLowerCase();
    }
  }

  devolver '';
};

/ **
 * Devuelve si la URL pasada es una solicitud de dominio cruzado o no.
 *
 * @función
 * @param {cadena} URL
 * La url a comprobar.
 *
 * @param {Objeto} [winLoc]
 * el dominio contra el cual verificar la URL, por defecto es ventana.ubicación
 *
 * @param {cadena} [winLoc.protocolo]
 * El protocolo de ubicación de ventana por defecto es window.location.protocol
 *
 * @param {cadena} [winLoc.host]
 * El host de ubicación de la ventana por defecto es window.location.host
 *
 * @return {booleano}
 * Si se trata de una solicitud de dominio cruzado o no.
 * /
export const isCrossOrigin = function(url, winLoc = window.ubicación) {
  const urlInfo = parseUrl(url);

  // Las direcciones URL relativas del protocolo IE8 devolverán ':' para el protocolo
  const srcProtocol = urlInfo.protocol === ':' ? winLoc.protocolo: urlInfo.protocolo;

  // Comprobar si la url es de otro dominio/origen
  // IE8 no conoce location.origin, por lo que no confiaremos en él aquí
  const crossOrigin = (srcProtocol + urlInfo.host) !== (winLoc.protocol + winLoc.host);

  volver origen cruzado;
};