OC.L10N.register( "files", { "File could not be found" : "No fue posible encontrar el archivo", "Move or copy" : "Mover o copiar", "Download" : "Descargar", "Delete" : "Borrar", "Tags" : "Etiquetas", "Show list view" : "Mostrar vista de lista", "Show grid view" : "Mostrar vista de cuadrícula", "Home" : "Inicio", "Close" : "Cerrar", "Could not create folder \"{dir}\"" : "No fue posible crear la carpeta \"{dir}\"", "This will stop your current uploads." : "Se detendrán las cargas en curso", "Upload cancelled." : "Carga cancelada.", "Processing files …" : "Procesando archivos ...", "…" : "...", "Unable to upload {filename} as it is a directory or has 0 bytes" : "No fue posible cargar {filename} ya que es una carpeta o tiene un tamaño de 0 bytes", "Not enough free space, you are uploading {size1} but only {size2} is left" : "No tienes suficiente espacio disponible, Estás cargando {size1} pero sólo cuentas con {size2} disponible", "Target folder \"{dir}\" does not exist any more" : "La carpeta destino \"{dir}\" ya no existe", "Not enough free space" : "No cuentas con suficiente espacio libre", "An unknown error has occurred" : "Ha ocurrido un error desconocido", "File could not be uploaded" : "No se ha podido subir el archivo", "Uploading …" : "Cargando...", "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} de {totalSize} ({bitrate})", "Uploading that item is not supported" : "No es posible cargar este archivo", "Target folder does not exist any more" : "La carpeta destino ya no existe", "Operation is blocked by access control" : "Esta operación está bloqueada por el control de accesos", "Error when assembling chunks, status code {status}" : "Se presentó un error al ensamblar los bloques, código de estatus {status}", "Actions" : "Acciones", "Rename" : "Renombrar", "Move" : "Mover", "Copy" : "Copiar", "Choose target folder" : "Elegir carpeta destino", "Edit locally" : "Editar localmente", "Open" : "Abrir", "Delete file" : "Borrar archivo", "Delete folder" : "Borrar carpeta", "Disconnect storage" : "Desconectar almacenamiento", "Leave this share" : "Dejar este recurso compartido", "Could not load info for file \"{file}\"" : "No fue posible cargar información para el archivo \"{file}\"", "Files" : "Archivos", "Details" : "Detalles", "Please select tag(s) to add to the selection" : "Seleccione la(s) etiqueta(s) para añadir a la selección", "Apply tag(s) to selection" : "Aplicar etiqueta(s) a selección", "Select directory \"{dirName}\"" : "Seleccione carpeta \"{dirName}\"", "Select file \"{fileName}\"" : "Seleccione archivo \"{fileName}\"", "Pending" : "Pendiente", "Unable to determine date" : "No fue posible determinar la fecha", "This operation is forbidden" : "Esta operación está prohibida", "This directory is unavailable, please check the logs or contact the administrator" : "Esta carpeta no está disponible, por favor verfica las bitácoras o contacta al administrador", "Storage is temporarily not available" : "El almacenamiento no está disponible temporalmente ", "Could not move \"{file}\", target exists" : "No fue posible mover \"{file}\", el destino ya existe", "Could not move \"{file}\"" : "No fue posible mover \"{file}\"", "copy" : "copiar", "Could not copy \"{file}\", target exists" : "No se pudo copiar \"{file}\", el destino ya existe", "Could not copy \"{file}\"" : "No se pudo copiar \"{file}\"", "Copied {origin} inside {destination}" : "{origin} fue copiado dentro de {destination}", "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} y otros {nbfiles} archivos fueron copiados dentro de {destination}", "Failed to redirect to client" : "Fallo al redirigir al cliente", "{newName} already exists" : "{newName} ya existe", "Could not rename \"{fileName}\", it does not exist any more" : "No fue posible renombrar \"{fileName}\", ya no existe", "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "El nombre \"{targetName}\" ya está en uso en la carpeta \"{dir}\". Por favor elege un nombre diferete. ", "Could not rename \"{fileName}\"" : "No fue posible renombrar \"{fileName}\"", "Could not create file \"{file}\"" : "No fue posible crear el archivo \"{file}\"", "Could not create file \"{file}\" because it already exists" : "No fue posible crear el archivo\"{file}\" porque ya existe", "Could not create folder \"{dir}\" because it already exists" : "No fue posible crear la carpeta \"{dir}\" porque ya existe", "Could not fetch file details \"{file}\"" : "No se pudo recuperar detalles de archivo \"{file}\"", "Error deleting file \"{fileName}\"." : "Se presentó un error al borrar el archivo \"{fileName}\".", "No search results in other folders for {tag}{filter}{endtag}" : "No se encontraron resultados en otras carpetas para {tag}{filter}{endtag}", "Enter more than two characters to search in other folders" : "Ingrese al menos dos caracteres para buscar en otras carpetas", "Name" : "Nombre", "Size" : "Tamaño", "Modified" : "Modificado", "_%n folder_::_%n folders_" : ["%n carpeta","%n carpetas","%n carpetas"], "_%n file_::_%n files_" : ["%n archivo","%n archivos","%n archivos"], "{dirs} and {files}" : "{dirs} y {files}", "_including %n hidden_::_including %n hidden_" : ["incluyendo %n oculto","incluyendo %n ocultos","incluyendo %n ocultos"], "You do not have permission to upload or create files here" : "No tiene permiso para crear o cargar archivos aquí", "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Cargando %n archivos","Cargando %n archivos"], "New" : "Nuevo", "New file/folder menu" : "Menú de carpeta/archivo nuevo", "Select file range" : "Seleccione rango de archivos", "{used}%" : "{used}%", "{used} of {quota} used" : "{used} de {quota} usados", "{used} used" : "{used} usados", "\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido. ", "File name cannot be empty." : "El nombre de archivo no puede estar vacío.", "\"/\" is not allowed inside a file name." : "No se permite el uso del caracter \"/\" en el nombre del archivo.", "\"{name}\" is not an allowed filetype" : "\"{name}\" es un tipo de archivo no permitido", "Storage of {owner} is full, files cannot be updated or synced anymore!" : "El espacio de {owner} está lleno. ¡Los archivos ya no se pueden actualizar o sincronizar!", "Group folder \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "¡La carpeta de grupo \"{mountPoint}\" está llena, los archivos ya no pueden ser actualizados o sincronizados!.", "External storage \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "¡El almacenamiento externo \"{mountPoint}\" está lleno, los archivos ya no pueden ser actualizados o sincronizados!.", "Your storage is full, files cannot be updated or synced anymore!" : "Tu almacenamiento está lleno. ¡No se puede actualizar o sincronizar ningún archivo más!", "Storage of {owner} is almost full ({usedSpacePercent}%)." : "El almacenamiento de {owner} está casi lleno ({usedSpacePercent}%).", "Group folder \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "La carpeta de grupo \"{mountPoint}\" está casi llena ({usedSpacePercent}%)", "External storage \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "El almacenamiento externo \"{mountPoint}\" está casi lleno ({usedSpacePercent}%).", "Your storage is almost full ({usedSpacePercent}%)." : "Tu almacenamiento está casi lleno ({usedSpacePercent}%).", "_matches \"{filter}\"_::_match \"{filter}\"_" : ["coincide \"{filter}\"","coinciden \"{filter}\"","coinciden \"{filter}\""], "View in folder" : "Ver en la carpeta", "Direct link was copied (only works for users who have access to this file/folder)" : "Copiar enlace directo (solo funciona para usuarios que tienen acceso a este archivo/carpeta)", "Path" : "Ruta", "_%n byte_::_%n bytes_" : ["%n byte","%n bytes","%n bytes"], "Favorited" : "Marcado como favorito", "Favorite" : "Favorito", "Copy direct link (only works for users who have access to this file/folder)" : "Copiar liga directa (sólo funciona para usuarios que tienen acceso a este archivo/carpeta)", "New folder" : "Carpeta nueva", "Create new folder" : "Crear nueva carpeta", "Upload file" : "Cargar archivo", "Recent" : "Reciente", "Not favorited" : "No es un favorito", "Remove from favorites" : "Eliminar de favoritos", "Add to favorites" : "Agregar a favoritos", "An error occurred while trying to update the tags" : "Se presentó un error al intentar actualizar la etiqueta", "Added to favorites" : "Agregado a los favoritos", "Removed from favorites" : "Eliminado de los favoritos", "You added {file} to your favorites" : "Agregaste {file} a tus favoritos", "You removed {file} from your favorites" : "Eliminaste {file} de tus favoritos", "Favorites" : "Favoritos", "File changes" : "Cambios al archivo", "Created by {user}" : "Creado por {user}", "Changed by {user}" : "Cambiado por {user}", "Deleted by {user}" : "Borrado por {user}", "Restored by {user}" : "Restaurado por {user}", "Renamed by {user}" : "Renombrado por {user}", "Moved by {user}" : "Movido por {user}", "\"remote user\"" : "\"usuario remoto\"", "You created {file}" : "Creaste {file}", "You created an encrypted file in {file}" : "Creaste un archivo encriptado en {file}", "{user} created {file}" : "{user} creó {file}", "{user} created an encrypted file in {file}" : "{user} creó un archivo encriptado en {file}", "{file} was created in a public folder" : "{file} fue creado en una carpeta pública", "You changed {file}" : "Cambiaste {file}", "You changed an encrypted file in {file}" : "Cambiaste un archivo encriptado en {file}", "{user} changed {file}" : "{user} cambió {file}", "{user} changed an encrypted file in {file}" : "{user} cambió un archivo encriptado en {file}", "You deleted {file}" : "Borraste {file}", "You deleted an encrypted file in {file}" : "Borraste un archivo encriptado en {file}", "{user} deleted {file}" : "{user} borró {file}", "{user} deleted an encrypted file in {file}" : "{user} borró un archivo encriptado en {file}", "You restored {file}" : "Restauraste {file}", "{user} restored {file}" : "{user} restauró {file}", "You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Has renombrado {oldfile} (oculto) a {newfile} (oculto)", "You renamed {oldfile} (hidden) to {newfile}" : "Has renombrado {oldfile} (oculto) a {newfile}", "You renamed {oldfile} to {newfile} (hidden)" : "Has renombrado {oldfile} a {newfile} (oculto)", "You renamed {oldfile} to {newfile}" : "Renombraste {oldfile} como {newfile}", "{user} renamed {oldfile} (hidden) to {newfile} (hidden)" : "{user} renombró {oldfile} (oculto) a {newfile} (oculto)", "{user} renamed {oldfile} (hidden) to {newfile}" : "{user} renombró {oldfile} (oculto) a {newfile}", "{user} renamed {oldfile} to {newfile} (hidden)" : "{user} renombró {oldfile} a {newfile} (oculto)", "{user} renamed {oldfile} to {newfile}" : "{user} renombró {oldfile} como {newfile}", "You moved {oldfile} to {newfile}" : "Moviste {oldfile} a {newfile}", "{user} moved {oldfile} to {newfile}" : "{user} movió {oldfile} a {newfile}", "A file has been added to or removed from your favorites" : "Un archivo ha sido agregado o eliminado de tus favoritos", "A file or folder has been changed" : "Un archivo o carpeta ha sido cambiado", "A favorite file or folder has been changed" : "Un archivo o carpeta favorito ha sido cam
/*
 * SonarQube
 * Copyright (C) 2009-2017 SonarSource SA
 * mailto:info AT sonarsource DOT com
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 3 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */
import moment from 'moment';
import React from 'react';
import { Link } from 'react-router';
import { getComponentDrilldownUrl, getComponentIssuesUrl } from '../../helpers/urls';

const ISSUE_MEASURES = [
  'violations',
  'new_violations',
  'blocker_violations',
  'critical_violations',
  'major_violations',
  'minor_violations',
  'info_violations',
  'new_blocker_violations',
  'new_critical_violations',
  'new_major_violations',
  'new_minor_violations',
  'new_info_violations',
  'open_issues',
  'reopened_issues',
  'confirmed_issues',
  'false_positive_issues',
  'code_smells',
  'new_code_smells',
  'bugs',
  'new_bugs',
  'vulnerabilities',
  'new_vulnerabilities'
];

export const DrilldownLink = React.createClass({
  isIssueMeasure () {
    return ISSUE_MEASURES.indexOf(this.props.metric) !== -1;
  },

  propsToIssueParams () {
    const params = {};

    if (this.props.periodDate) {
      params.createdAfter = moment(this.props.periodDate).format('YYYY-MM-DDTHH:mm:ssZZ');
    }

    switch (this.props.metric) {
      case 'blocker_violations':
      case 'new_blocker_violations':
        Object.assign(params, { resolved: 'false', severities: 'BLOCKER' });
        break;
      case 'critical_violations':
      case 'new_critical_violations':
        Object.assign(params, { resolved: 'false', severities: 'CRITICAL' });
        break;
      case 'major_violations':
      case 'new_major_violations':
        Object.assign(params, { resolved: 'false', severities: 'MAJOR' });
        break;
      case 'minor_violations':
      case 'new_minor_violations':
        Object.assign(params, { resolved: 'false', severities: 'MINOR' });
        break;
      case 'info_violations':
      case 'new_info_violations':
        Object.assign(params, { resolved: 'false', severities: 'INFO' });
        break;
      case 'open_issues':
        Object.assign(params, { resolved: 'false', statuses: 'OPEN' });
        break;
      case 'reopened_issues':
        Object.assign(params, { resolved: 'false', statuses: 'REOPENED' });
        break;
      case 'confirmed_issues':
        Object.assign(params, { resolved: 'false', statuses: 'CONFIRMED' });
        break;
      case 'false_positive_issues':
        Object.assign(params, { resolutions: 'FALSE-POSITIVE' });
        break;
      case 'code_smells':
      case 'new_code_smells':
        Object.assign(params, { resolved: 'false', types: 'CODE_SMELL' });
        break;
      case 'bugs':
      case 'new_bugs':
        Object.assign(params, { resolved: 'false', types: 'BUG' });
        break;
      case 'vulnerabilities':
      case 'new_vulnerabilities':
        Object.assign(params, { resolved: 'false', types: 'VULNERABILITY' });
        break;
      default:
        Object.assign(params, { resolved: 'false' });
    }
    return params;
  },

  renderIssuesLink () {
    const url = getComponentIssuesUrl(
        this.props.component,
        this.propsToIssueParams());

    return (
        <Link to={url} className={this.props.className}>{this.props.children}</Link>
    );
  },

  render () {
    if (this.isIssueMeasure()) {
      return this.renderIssuesLink();
    }

    const url = getComponentDrilldownUrl(this.props.component, this.props.metric);
    return <Link to={url} className={this.props.className}>{this.props.children}</Link>;
  }
});