diff --git a/.babelrc b/.babelrc new file mode 100644 index 00000000..d431ef8f --- /dev/null +++ b/.babelrc @@ -0,0 +1,12 @@ +{ + "presets": [ + [ + "env", + { + "targets": { + "browsers": ["> 1%", "last 2 versions", "not ie <= 11"] + } + } + ] + ] +} diff --git a/.bowerrc b/.bowerrc deleted file mode 100644 index cbc6fdd1..00000000 --- a/.bowerrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "directory": "js/vendor" -} diff --git a/.editorconfig b/.editorconfig index b6205c3e..198996b9 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,16 +1,9 @@ -# EditorConfig is awesome: http://EditorConfig.org - -# top-most EditorConfig file root = true -# Unix-style newlines with a newline ending every file [*] +charset = utf-8 +indent_style = tab +indent_size = 4 end_of_line = lf insert_final_newline = true -charset = utf-8 - -# Matches multiple files with brace expansion notation -# Set default charset -[*.{html,js,css}] -indent_style = tab - +trim_trailing_whitespace = true diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..31213019 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,53 @@ +module.exports = { + root: true, + env: { + browser: true, + es6: true, + node: true, + jest: true + }, + globals: { + t: false, + n: false, + OC: false, + OCA: false + }, + parserOptions: { + parser: 'babel-eslint' + }, + extends: [ + 'eslint:recommended', + 'plugin:node/recommended', + 'plugin:vue/recommended', + 'standard' + ], + plugins: ['vue', 'node'], + rules: { + // space before function () + 'space-before-function-paren': ['error', 'never'], + // curly braces always space + 'object-curly-spacing': ['error', 'always'], + // stay consistent with array brackets + 'array-bracket-newline': ['error', 'consistent'], + // 1tbs brace style + 'brace-style': 'error', + // tabs only + indent: ['error', 'tab'], + 'no-tabs': 0, + // es6 import/export and require + 'node/no-unpublished-require': ['off'], + 'node/no-unsupported-features': ['off'], + // vue format + 'vue/html-indent': ['error', 'tab'], + 'vue/max-attributes-per-line': [ + 'error', + { + singleline: 3, + multiline: { + max: 3, + allowFirstLine: true + } + } + ] + } +}; diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index de86bdae..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": "eslint:recommended", - "rules": { - "eqeqeq": ["warn", "smart"], - "no-console": "warn", - "no-loop-func": "warn", - "no-unused-vars": "warn", - - "block-spacing": "error", - "camelcase": "error", - "comma-spacing": "error", - "comma-style": "error", - "curly": ["error", "multi-line", "consistent"], - "indent": ["error", "tab"], - "no-alert": "error", - "no-mixed-spaces-and-tabs": ["error", "smart-tabs"], - "no-trailing-spaces": "error", - "quotes": ["error", "single", "avoid-escape"], - "semi": "error", - "space-before-blocks": "error" - }, - "env": { - "browser": true, - "jquery": true - }, - "globals": { - "angular": false, - "vCard": false, - "_": false, - "OC": false, - "t": false, - "n": false, - "dav": false, - "OCA": false - } -} diff --git a/.gitignore b/.gitignore index 890455ec..0322ebfc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,13 @@ -node_modules -build -js/public -js/vendor -css/vendor -css/style.css -coverage -npm-debug.log -package-lock.json +.DS_Store +node_modules/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln \ No newline at end of file diff --git a/.npmignore b/.npmignore new file mode 100644 index 00000000..b512c09d --- /dev/null +++ b/.npmignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 00000000..f053ebf7 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1 @@ +module.exports = {}; diff --git a/.stylelintrc b/.stylelintrc index ce743ad9..3d88cf73 100644 --- a/.stylelintrc +++ b/.stylelintrc @@ -1,22 +1,22 @@ { - "extends": "stylelint-config-recommended-scss", - "rules": { - "indentation": "tab", - "selector-type-no-unknown": null, - "number-leading-zero": null, - "rule-empty-line-before": ["always", { - "ignore": ["after-comment", "inside-block"] - }], - "declaration-empty-line-before": ["never", { - "ignore": ["after-declaration"] - }], - "comment-empty-line-before": null, - "selector-type-case": null, - "selector-list-comma-newline-after": null, - "no-descending-specificity": null, - "string-quotes": "single", - }, - "plugins": [ - "stylelint-scss" - ] + "extends": "stylelint-config-recommended-scss", + "rules": { + "indentation": "tab", + "selector-type-no-unknown": null, + "number-leading-zero": null, + "rule-empty-line-before": ["always", { + "ignore": ["after-comment", "inside-block"] + }], + "declaration-empty-line-before": ["never", { + "ignore": ["after-declaration"] + }], + "comment-empty-line-before": null, + "selector-type-case": null, + "selector-list-comma-newline-after": null, + "no-descending-specificity": null, + "string-quotes": "single" + }, + "plugins": [ + "stylelint-scss" + ] } diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index e111d2b4..00000000 --- a/.travis.yml +++ /dev/null @@ -1,90 +0,0 @@ -sudo: false -dist: trusty -language: php -php: - - 7.0 - - 7.1 -# - 7.2 -env: - global: - - CORE_BRANCH=master - - NIGHTLY=FALSE - matrix: - - DB=pgsql - -branches: - only: - - master - - /^stable\d+(\.\d+)?$/ - - /^v\d++(\.\d+)?+(\.\d+)?+(\.\d+)?$/ - -matrix: - include: - - php: 7.0 - env: DB=pgsql CORE_BRANCH=stable12 - - php: 7.1 - env: DB=pgsql CORE_BRANCH=stable12 - - php: 7.0 - env: DB=pgsql CORE_BRANCH=stable13 - - php: 7.1 - env: DB=pgsql CORE_BRANCH=stable13 -# - php: 7.2 -# env: DB=pgsql CORE_BRANCH=stable13 - fast_finish: true - -before_install: - - export DISPLAY=:99.0 - - sh -e /etc/init.d/xvfb start - - nvm install 7.6 - - npm install -g npm@latest - - make - - make appstore - # install nextcloud - - cd ../ - - git clone https://github.com/nextcloud/server.git --recursive --depth 1 -b $CORE_BRANCH core - - mv contacts core/apps/ - -before_script: - - if [[ "$DB" == 'pgsql' ]]; then createuser -U travis -s oc_autotest; fi - - if [[ "$DB" == 'mysql' ]]; then mysql -u root -e 'create database oc_autotest;'; fi - - if [[ "$DB" == 'mysql' ]]; then mysql -u root -e "CREATE USER 'oc_autotest'@'localhost' IDENTIFIED BY '';"; fi - - if [[ "$DB" == 'mysql' ]]; then mysql -u root -e "grant all on oc_autotest.* to 'oc_autotest'@'localhost';"; fi - # fill nextcloud with default configs and enable contacts - - cd core - - mkdir data - - ./occ maintenance:install --database-name oc_autotest --database-user oc_autotest --admin-user admin --admin-pass admin --database $DB --database-pass='' - - ./occ app:enable contacts - - ./occ background:cron # enable default cron - - php -S localhost:8080 & - - cd apps/contacts - -script: - - make test - - # Upload the nightly to ftp server - - if [[ "$NIGHTLY" = "TRUE" ]]; then curl --ftp-create-dirs -T /home/travis/build/nextcloud/core/apps/contacts/build/artifacts/appstore/contacts.tar.gz -u $FTP_LOGIN:$FTP_PW ftp://upload.portknox.de/htdocs/contacts/nextcloud_contacts_nightly_build_$(date +%Y-%m-%d).tar.gz; fi - -after_failure: - - cat ../../data/nextcloud.log - -after_success: - # codecov has issues when not run exactly in the cloned folder on travis, so - # revert everything - - cd ../../../ - - mv core/apps/contacts . - - cd contacts - - node_modules/codecov/bin/codecov - -deploy: - provider: releases - api_key: - secure: IBNQc4MsBqOc6bj2fD1PnMFfELFpP2GqpZjmBsqP43dWixo8vZzafg7JwlsfnuC0rfcOE/2NwHQl43d+37sXMbMl+ZXgz2ax/wOyLAS2PK/EQEDkzYOdI0E/8u2D7V7m9LlCQ8MOGSGmjYwFcDLzcmgU8AOWg4N85ktpOkaiVF1287Rr+wcRZ0o4/VTVvykYzfKDIBaACAX+EaXtpBtD0cTr1lFN4vKuUma2+iX+MyPVZcvIbCWv2bTzqXzfkT3NagZuFXcooXhvPGFoOb8AisxRSoVP48Vpt8ziG+7wDFlIrNe+fjNJxOEMDEP8cYljoUU6MaOxcm012s/CqHjWBuTI5MRAWlH4w9YJ/1BhFoSJOUb21401zp255puPZJ+Vq8i720F21xm7g7Vc/1NsEAwmTzLgaG8cnV98SonITVDuR4qIaMWpHwTMhap6sHMW7UfH4QnCKypo1mgITFdjM9ANYbcfF8GBfrK4MZtuw75AcLoytFia+KnAOO7OpC93eo6Czcqu6ILOBz1XNWZcFQJTrkLKkFslZLhSSrgPrTL4Py0zVmBurxdOmoZkDcxyKmk/1ggQmZKhh7OS1TGW/7tckscwMhukLwnQiXBCQJ7VWAJ/2eaolym1+fDbqJ4z8t9q2KEfZyqlYAL4VxPqQzxwO9O19ej1WtncvpFHlQw= - file: build/artifacts/appstore/contacts.tar.gz - skip_cleanup: true - on: - repo: nextcloud/contacts - tags: true - php: 7.0 - -addons: - firefox: "latest" diff --git a/Makefile b/Makefile index a9f79072..274f50a7 100644 --- a/Makefile +++ b/Makefile @@ -1,182 +1,46 @@ -# This file is licensed under the Affero General Public License version 3 or -# later. See the COPYING file. -# @author Bernhard Posselt -# @copyright Bernhard Posselt 2016 +all: dev-setup lint build-js-production test -# Generic Makefile for building and packaging an Nextcloud app which uses npm and -# Composer. -# -# Dependencies: -# * make -# * which -# * curl: used if phpunit and composer are not installed to fetch them from the web -# * tar: for building the archive -# * npm: for building and testing everything JS -# -# If no composer.json is in the app root directory, the Composer step -# will be skipped. The same goes for the package.json which can be located in -# the app root or the js/ directory. -# -# The npm command by launches the npm build script: -# -# npm run build -# -# The npm test command launches the npm test script: -# -# npm run test -# -# The idea behind this is to be completely testing and build tool agnostic. All -# build tools and additional package managers should be installed locally in -# your project, since this won't pollute people's global namespace. -# -# The following npm scripts in your package.json install and update the bower -# and npm dependencies and use gulp as build system (notice how everything is -# run from the node_modules folder): -# -# "scripts": { -# "test": "node node_modules/gulp-cli/bin/gulp.js karma", -# "prebuild": "npm install && node_modules/bower/bin/bower install && node_modules/bower/bin/bower update", -# "build": "node node_modules/gulp-cli/bin/gulp.js" -# }, +# Dev env management +dev-setup: clean clean-dev npm-init -app_name=$(notdir $(CURDIR)) -project_directory=$(CURDIR)/../$(app_name) -build_tools_directory=$(CURDIR)/build/tools -source_build_directory=$(CURDIR)/build/artifacts/source -source_package_name=$(source_build_directory)/$(app_name) -appstore_build_directory=$(CURDIR)/build/artifacts/appstore -appstore_package_name=$(appstore_build_directory)/$(app_name) -npm=$(shell which npm 2> /dev/null) -composer=$(shell which composer 2> /dev/null) +npm-init: + npm install -all: build +npm-update: + npm update -# Fetches the PHP and JS dependencies and compiles the JS. If no composer.json -# is present, the composer step is skipped, if no package.json or js/package.json -# is present, the npm step is skipped -.PHONY: build -build: -ifneq (,$(wildcard $(CURDIR)/composer.json)) - make composer -endif -ifneq (,$(wildcard $(CURDIR)/package.json)) - make npm -endif -ifneq (,$(wildcard $(CURDIR)/js/package.json)) - make npm -endif +# Building +build-js: + npm run dev -# Installs and updates the composer dependencies. If composer is not installed -# a copy is fetched from the web -.PHONY: composer -composer: -ifeq (, $(composer)) - @echo "No composer command available, downloading a copy from the web" - mkdir -p $(build_tools_directory) - curl -sS https://getcomposer.org/installer | php - mv composer.phar $(build_tools_directory) - php $(build_tools_directory)/composer.phar install --prefer-dist - php $(build_tools_directory)/composer.phar update --prefer-dist -else - composer install --prefer-dist - composer update --prefer-dist -endif - -# We need to build css files for Nextcloud 11 -# variables.scss is necessary and not provided by stable11 => download it -.PHONY: css -css: -ifeq (,$(wildcard $(CURDIR)/build/css/variables.scss)) - curl --silent --create-dirs -o $(CURDIR)/build/css/variables.scss https://raw.githubusercontent.com/nextcloud/server/master/core/css/variables.scss - npm run scss-compile -else - npm run scss-compile -endif - -# Installs npm dependencies -.PHONY: npm -npm: -ifeq (,$(wildcard $(CURDIR)/package.json)) - cd js && $(npm) run build -else +build-js-production: npm run build - make css -endif -# Removes the appstore build -.PHONY: clean -clean: - rm -rf ./build +watch-js: + npm run watch -# Same as clean but also removes dependencies installed by composer, bower and -# npm -.PHONY: distclean -distclean: clean - rm -rf vendor - rm -rf node_modules - rm -rf js/vendor - rm -rf js/node_modules - -# Builds the source and appstore package -.PHONY: dist -dist: - make source - make appstore - -# Builds the source package -.PHONY: source -source: - rm -rf $(source_build_directory) - mkdir -p $(source_build_directory) - tar cvzf $(source_package_name).tar.gz ../$(app_name) \ - --exclude-vcs \ - --exclude="../$(app_name)/build" \ - --exclude="../$(app_name)/js/node_modules" \ - --exclude="../$(app_name)/node_modules" \ - --exclude="../$(app_name)/*.log" \ - --exclude="../$(app_name)/js/*.log" \ - -# Builds the source package for the app store, ignores php and js tests -.PHONY: appstore -appstore: - rm -rf $(appstore_build_directory) - mkdir -p $(appstore_build_directory) - tar cvzf $(appstore_package_name).tar.gz \ - --exclude-vcs \ - $(project_directory)/appinfo \ - $(project_directory)/css \ - $(project_directory)/img \ - $(project_directory)/l10n \ - $(project_directory)/lib \ - $(project_directory)/templates \ - $(project_directory)/js/public \ - $(project_directory)/js/vendor \ - $(project_directory)/js/dav/dav.js - -# Command for running JS and PHP tests. Works for package.json files in the js/ -# and root directory. If phpunit is not installed systemwide, a copy is fetched -# from the internet -.PHONY: test +# Testing test: -ifneq (,$(wildcard $(CURDIR)/js/package.json)) - cd js && $(npm) run test -endif -ifneq (,$(wildcard $(CURDIR)/package.json)) - $(npm) run test -endif -# hotfix to prevent travis from using phpunix 6.x - @echo "No phpunit command available, downloading a copy from the web" - mkdir -p $(build_tools_directory) - curl -sSL https://phar.phpunit.de/phpunit-5.7.9.phar -o $(build_tools_directory)/phpunit.phar - php $(build_tools_directory)/phpunit.phar -c phpunit.xml --coverage-clover build/php-unit.clover - php $(build_tools_directory)/phpunit.phar -c phpunit.integration.xml --coverage-clover build/php-integration.clover + npm run test + +test-watch: + npm run test:watch + +test-coverage: + npm run test:coverage + +# Linting +lint: + npm run lint + +lint-fix: + npm run lint:fix + +# Cleaning +clean: + rm -f js/contacts.js + rm -f js/contacts.js.map + +clean-dev: + rm -rf node_modules -# watch out for changes and rebuild -.PHONY: watch -watch: -ifneq (,$(wildcard $(CURDIR)/js/package.json)) - cd js && $(npm) run watch -endif -ifneq (,$(wildcard $(CURDIR)/package.json)) - $(npm) run watch -endif diff --git a/README.md b/README.md index f795bce4..62cd4009 100644 --- a/README.md +++ b/README.md @@ -1,74 +1,23 @@ -# Nextcloud Contacts +# contacts -![Downloads](https://img.shields.io/github/downloads/nextcloud/contacts/total.svg) -[![irc](https://img.shields.io/badge/IRC-%23nextcloud--contacts%20on%20freenode-blue.svg)](https://webchat.freenode.net/?channels=nextcloud-contacts) -[![Build Status](https://travis-ci.org/nextcloud/contacts.svg?branch=master)](https://travis-ci.org/nextcloud/contacts) -[![Code coverage](https://img.shields.io/codecov/c/github/nextcloud/contacts.svg?maxAge=2592000)](https://codecov.io/gh/nextcloud/contacts/) +> A contacts app for Nextcloud. Easily sync contacts from various devices, share and edit them online. -**A contacts app for [Nextcloud](https://nextcloud.com). Easily sync contacts from various devices with your Nextcloud and edit them online.** +## Build Setup -![](https://raw.githubusercontent.com/nextcloud/screenshots/master/apps/Contacts/contacts.png) +``` bash +# set up and build for production +make -## Why is this so awesome? +# install dependencies +make dev-setup -* :rocket: **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come. -* :tada: **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar. -* :busts_in_silhouette: **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem! -* :see_no_evil: **We’re not reinventing the wheel!** Based on the great and open SabreDAV library. +# build for dev and watch changes +make watch-js -## Installation +# build for dev +make build-js -In your Nextcloud, simply navigate to »Apps«, choose the category »Organization«, find the Contacts app and enable it. -Then open the Contacts app from the app menu. +# build for production with minification +make build-js-production +``` -## Support - -If you need assistance or want to ask a question about Contacts, you are welcome to [ask for support](https://help.nextcloud.com) in our Forums or the [IRC-Channel](https://webchat.freenode.net/?channels=nextcloud-contacts). If you have found a bug, feel free to open a new Issue on GitHub. Keep in mind, that this repository only manages the frontend. If you find bugs or have problems with the CardDAV-Backend, you should ask the guys at [Nextcloud server](https://github.com/nextcloud/server) for help! - -## Maintainers: - -- [Hendrik Leppelsack](https://github.com/Henni) -- [Jan-Christoph Borchardt](https://github.com/jancborchardt) -- [John Molakvoæ](https://github.com/skjnldsv) - -If you'd like to join, just go through the [issue list](https://github.com/nextcloud/contacts/issues) and fix some. :) - -### Nightly builds - -Instead of setting everything up manually, you can just [download the nightly builds](https://nightly.portknox.net/contacts/?C=M;O=D) instead. These builds are updated every 24 hours, and are pre-configured with all the needed dependencies. - -1. Download -2. Extract the tar archive to 'path-to-nextcloud/apps' -3. Navigate to »Apps«, choose the category »Productivity«, find the Contacts app and enable it. - -The nightly builds are provided by [Portknox.net](https://portknox.net) - -## Building the app - -The app can be built by using the provided Makefile by running: - - make - -This requires the following things to be present: -* make -* which -* tar: for building the archive -* curl: used if phpunit and composer are not installed to fetch them from the web -* npm: for building and testing everything JS - -## Running tests -You can use the provided Makefile to run all tests by using: - - make test - -This will run the PHP unit and integration tests and if a package.json is present in the **js/** folder will execute **npm run test** - -Of course you can also install [PHPUnit](http://phpunit.de/getting-started.html) and use the configurations directly: - - phpunit -c phpunit.xml - -or: - - phpunit -c phpunit.integration.xml - -for integration tests diff --git a/appinfo/routes.php b/appinfo/routes.php index 7baabeb0..afbdb045 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -1,25 +1,30 @@ * - * This file is licensed under the Affero General Public License version 3 or - * later. See the COPYING file. + * @author John Molakvoæ + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . * - * @author Hendrik Leppelsack - * @copyright Hendrik Leppelsack 2015 */ -/** - * Create your routes in here. The name is the lowercase name of the controller - * without the controller part, the stuff after the hash is the method. - * e.g. page#index -> OCA\Contacts\Controller\PageController->index() - * - * The controller class has to be registered in the application.php file since - * it's instantiated in there - */ return [ - 'routes' => [ - ['name' => 'page#index', 'url' => '/', 'verb' => 'GET'], - ['name' => 'page#do_echo', 'url' => '/echo', 'verb' => 'POST'], - ] + 'routes' => [ + ['name' => 'page#index', 'url' => '/', 'verb' => 'GET'], + ['name' => 'page#indexGroup', 'url' => '/{group}', 'verb' => 'GET'], + ['name' => 'page#indexContact', 'url' => '/{group}/{contact}', 'verb' => 'GET'] + ] ]; diff --git a/coverage/clover.xml b/coverage/clover.xml new file mode 100644 index 00000000..ba6f4ea8 --- /dev/null +++ b/coverage/clover.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/coverage/coverage-final.json @@ -0,0 +1 @@ +{} diff --git a/coverage/lcov-report/base.css b/coverage/lcov-report/base.css new file mode 100644 index 00000000..7090209c --- /dev/null +++ b/coverage/lcov-report/base.css @@ -0,0 +1,223 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* yellow */ +.cbranch-no { background: yellow !important; color: #111; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +.highlighted, +.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ + background: #C21F39 !important; +} +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } + +.medium .chart { border:1px solid #666; } +.medium .cover-fill { background: #666; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + +span.cline-neutral { background: #eaeaea; } +.medium { background: #eaeaea; } + +.coverage-summary td.empty { + opacity: .5; + padding-top: 4px; + padding-bottom: 4px; + line-height: 1; + color: #888; +} + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/coverage/lcov-report/block-navigation.js b/coverage/lcov-report/block-navigation.js new file mode 100644 index 00000000..0c719038 --- /dev/null +++ b/coverage/lcov-report/block-navigation.js @@ -0,0 +1,63 @@ +var jumpToCode = (function init () { + // Classes of code we would like to highlight + var missingCoverageClasses = [ '.cbranch-no', '.cstat-no', '.fstat-no' ]; + + // We don't want to select elements that are direct descendants of another match + var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` + + // Selecter that finds elements on the page to which we can jump + var selector = notSelector + missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` + + // The NodeList of matching elements + var missingCoverageElements = document.querySelectorAll(selector); + + var currentIndex; + + function toggleClass(index) { + missingCoverageElements.item(currentIndex).classList.remove('highlighted'); + missingCoverageElements.item(index).classList.add('highlighted'); + } + + function makeCurrent(index) { + toggleClass(index); + currentIndex = index; + missingCoverageElements.item(index) + .scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' }); + } + + function goToPrevious() { + var nextIndex = 0; + if (typeof currentIndex !== 'number' || currentIndex === 0) { + nextIndex = missingCoverageElements.length - 1; + } else if (missingCoverageElements.length > 1) { + nextIndex = currentIndex - 1; + } + + makeCurrent(nextIndex); + } + + function goToNext() { + var nextIndex = 0; + + if (typeof currentIndex === 'number' && currentIndex < (missingCoverageElements.length - 1)) { + nextIndex = currentIndex + 1; + } + + makeCurrent(nextIndex); + } + + return function jump(event) { + switch (event.which) { + case 78: // n + case 74: // j + goToNext(); + break; + case 66: // b + case 75: // k + case 80: // p + goToPrevious(); + break; + } + }; +}()); +window.addEventListener('keydown', jumpToCode); diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html new file mode 100644 index 00000000..ef650b67 --- /dev/null +++ b/coverage/lcov-report/index.html @@ -0,0 +1,84 @@ + + + + Code coverage report for All files + + + + + + + +
+
+

+ All files +

+
+
+ Unknown% + Statements + 0/0 +
+
+ Unknown% + Branches + 0/0 +
+
+ Unknown% + Functions + 0/0 +
+
+ Unknown% + Lines + 0/0 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+
+ + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
+
+
+ + + + + + + + diff --git a/coverage/lcov-report/prettify.css b/coverage/lcov-report/prettify.css new file mode 100644 index 00000000..b317a7cd --- /dev/null +++ b/coverage/lcov-report/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/coverage/lcov-report/prettify.js b/coverage/lcov-report/prettify.js new file mode 100644 index 00000000..ef51e038 --- /dev/null +++ b/coverage/lcov-report/prettify.js @@ -0,0 +1 @@ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/coverage/lcov-report/sort-arrow-sprite.png b/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 00000000..03f704a6 Binary files /dev/null and b/coverage/lcov-report/sort-arrow-sprite.png differ diff --git a/coverage/lcov-report/sorter.js b/coverage/lcov-report/sorter.js new file mode 100644 index 00000000..6c5034e4 --- /dev/null +++ b/coverage/lcov-report/sorter.js @@ -0,0 +1,158 @@ +var addSorting = (function () { + "use strict"; + var cols, + currentSort = { + index: 0, + desc: false + }; + + // returns the summary table element + function getTable() { return document.querySelector('.coverage-summary'); } + // returns the thead element of the summary table + function getTableHeader() { return getTable().querySelector('thead tr'); } + // returns the tbody element of the summary table + function getTableBody() { return getTable().querySelector('tbody'); } + // returns the th element for nth column + function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; } + + // loads all columns + function loadColumns() { + var colNodes = getTableHeader().querySelectorAll('th'), + colNode, + cols = [], + col, + i; + + for (i = 0; i < colNodes.length; i += 1) { + colNode = colNodes[i]; + col = { + key: colNode.getAttribute('data-col'), + sortable: !colNode.getAttribute('data-nosort'), + type: colNode.getAttribute('data-type') || 'string' + }; + cols.push(col); + if (col.sortable) { + col.defaultDescSort = col.type === 'number'; + colNode.innerHTML = colNode.innerHTML + ''; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function (a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function (a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function () { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i =0 ; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function () { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(cols); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/js/dav/lib/template/href.js b/coverage/lcov.info similarity index 100% rename from js/dav/lib/template/href.js rename to coverage/lcov.info diff --git a/css/_animations.scss b/css/_animations.scss deleted file mode 100644 index 27d29e3d..00000000 --- a/css/_animations.scss +++ /dev/null @@ -1,11 +0,0 @@ -@keyframes pulse { - 0% { - box-shadow: 0 0 0 0 rgba(50, 50, 50, .4); - } - 70% { - box-shadow: 0 0 0 15px rgba(50, 50, 50, 0); - } - 100% { - box-shadow: 0 0 0 0 rgba(50, 50, 50, 0); - } -} diff --git a/css/_contactlist.scss b/css/_contactlist.scss deleted file mode 100644 index 6880da30..00000000 --- a/css/_contactlist.scss +++ /dev/null @@ -1,90 +0,0 @@ -.contacts-list { - min-height: 100%; -} - -contactlist .tooltip { - max-width: 75%; -} - -.app-content-list-item-failed { - position: absolute; - right: 15px; - top: 50%; - margin-top: -15px; - opacity: 0.2; - width: 30px; - height: 30px; - z-index: 50; -} - -.app-content-list-item-failed:hover { - opacity: 0.5; -} - -.app-content-list-item-failed ~ .app-content-list-item-line-one, -.app-content-list-item-failed ~ .app-content-list-item-line-two { - padding-right: 50px; -} - -.contact__icon { - display: inline-block; - height: 40px; - width: 40px; - line-height: 40px; - border-radius: 50%; - vertical-align: middle; - margin-right: 10px; - color: white; - text-align: center; - font-size: 1.5em; - text-transform: capitalize; - object-fit: cover; -} - -.icon-group { - background-image: url('../img/group.svg'); -} - -/* Mobile width < 768px */ -@media only screen and (max-width: 768px) { - .contacts-list:not(.mobile-show) { - display: none; - } - - #app-content-wrapper { - .app-content-list { - display: block; - } - .app-content-detail { - display: none; - } - } - - #app-navigation-toggle.showdetails { - transform: translate(-50px, 0); - + #app-content-wrapper { - .app-content-list { - display: none; - } - .app-content-detail { - display: block; - } - } - } - - #app-navigation-toggle-back { - position: fixed; - display: inline-block !important; - top: 45px; - left: 0; - width: 44px; - height: 44px; - z-index: 149; - background-color: rgba(255, 255, 255, .7); - cursor: pointer; - opacity: .6; - transform: rotate(90deg); - } - - /* end of media query */ -} diff --git a/css/_details.scss b/css/_details.scss deleted file mode 100644 index 777ea4a9..00000000 --- a/css/_details.scss +++ /dev/null @@ -1,464 +0,0 @@ -.contact-details-wrapper { - position: relative; - background: $color-main-background; - min-height: 100%; -} - -.wrapper-show { - z-index: 201; -} - -@media only screen and (max-width: 768px) { - .wrapper-show:not(.mobile-show) { - display: none; - } -} - -.contactdetails__header { - height: 100px; - padding-left: 44px; - display: flex; - font-weight: bold; - align-items: center; -} - -.contactdetails__header #details-contact-infos { - width: 80%; - margin: 2px 6px 0; - flex-grow: 1; -} - -.contactdetails__header h2 { - margin: 0; -} - -.contactdetails__header #details-org-container { - display: flex; - flex-wrap: wrap; -} - -.contactdetails__header input[type=text]:active { - background: transparent !important; /* remove :active effect */ -} - -.contactdetails__header .contactdetails__name, -.contactdetails__header .contactdetails__org, -.contactdetails__header .contactdetails__title { - font-size: inherit; - /* Override focus, active & hover! */ - color: #fff !important; /* No vars used on purpose since we use custom BGs */ - text-shadow: 0 0 2px rgba(0, 0, 0, .2); // better readability on bright background colors - background: transparent; - border: none; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - max-width: 100%; - margin: 0; - padding: 4px 5px; -} - -.contactdetails__header .contactdetails__org, -.contactdetails__header .contactdetails__title { - max-width: 50%; - min-width: 150px; -} - -.contactdetails__header .contactdetails__name { - width: 100%; -} - -.contactdetails__header #details-actions div.icon-more-white { - cursor: pointer; - padding: 14px; - width: 44px; - height: 44px; -} - -.contactdetails__header #contact-failed-save { - animation: pulse 1.5s infinite; - border-radius: 50%; -} - -/* fix placeholder color */ -.contactdetails__header .contactdetails__name::-webkit-input-placeholder, -.contactdetails__header .contactdetails__org::-webkit-input-placeholder, -.contactdetails__header .contactdetails__title::-webkit-input-placeholder { /* WebKit, Blink, Edge */ - color: #fff; /* No vars used on purpose since we use custom BGs */ - opacity: .8; -} - -.contactdetails__header .contactdetails__name::-moz-placeholder, -.contactdetails__header .contactdetails__org::-moz-placeholder, -.contactdetails__header .contactdetails__title::-moz-placeholder { /* Mozilla Firefox 19+ */ - color: #fff; /* No vars used on purpose since we use custom BGs */ - opacity: .8; -} - -.contactdetails__header .contactdetails__name:-ms-input-placeholder, -.contactdetails__header .contactdetails__org:-ms-input-placeholder, -.contactdetails__header .contactdetails__title:-ms-input-placeholder { /* Internet Explorer 10-11 */ - color: #fff; /* No vars used on purpose since we use custom BGs */ - opacity: .8; -} - -.contactdetails__header .contactdetails__name:placeholder-shown, -.contactdetails__header .contactdetails__org:placeholder-shown, -.contactdetails__header .contactdetails__title:placeholder-shown { /* Standard (https://drafts.csswg.org/selectors-4/#placeholder) */ - color: #fff; /* No vars used on purpose since we use custom BGs */ - opacity: .8; -} - -avatar { - position: relative; - height: 75px; - width: 75px; - border-radius: 50%; - overflow: hidden; - flex-shrink: 0; -} - -.contactdetails__logo { - height: 75px; - width: 75px; - object-fit: cover; - background-color: transparent; - margin: 0; - cursor: pointer; -} - -.avatar-options { - top: 0; - background-color: rgba(0, 0, 0, 0.2); - display: none; - width: 100%; - height: 100%; - overflow: hidden; -} - -.avatar-options > [class^='icon-'] { - display: none; - opacity: 0.5; - cursor: pointer; - min-width: 20px; - min-height: 20px; -} - -.avatar-options:hover > [class^='icon-'] { - opacity: 0.6; -} - -.avatar-options > [class^='icon-']:hover { - opacity: 0.8; -} - -avatar.avatar--missing .avatar-options { - display: flex; - border-radius: 50%; -} - -avatar:not(.maximized).avatar--missing .avatar-options .icon-upload-white { - display: block; - width: 100%; - height: 100%; -} - -avatar.maximized { - position: fixed; - height: 100%; - width: 100%; - top: 0; - left: 0; - border-radius: 0; - padding: 20px; - background-color: rgba(0, 0, 0, 0.9); - display: flex; - justify-content: center; - z-index: 200; - padding-top: 65px; /* Nextcloud header */ -} - -avatar.maximized img { - width: auto; - height: auto; - border-radius: 0; - max-height: calc(100% - 40px); - max-width: 100%; - align-self: center; - margin-bottom: 40px; -} - -avatar.maximized .avatar-options { - height: 40px; - position: absolute; - top: calc(100% - 40px); - left: 0; - display: flex; - opacity: 1; - padding: 0; - flex-wrap: wrap; - justify-content: space-around; -} - -avatar.maximized .avatar-options > [class^='icon-'] { - min-width: 25%; - display: block; -} - -.contactdetails__header + section { - padding: 20px 20px 100px; -} - -/* GRID */ -$grid-height-unit: 40px; -$grid-input-padding: 7px; -$grid-input-margin: 3px; -$grid-column-width: 380px; -$grid-input-height-with-margin: #{$grid-height-unit - $grid-input-margin * 2}; - -@mixin generate-grid-span($default-unit) { - /* we only supports 10 props of the same type */ - @for $i from 1 through 10 { - &.grid-span-#{$i} { - /* default unit + title + bottom padding */ - grid-row-start: span #{2 + $i * $default-unit}; - } - } -} - -section { - display: grid; - /* unquote is a strange hack to avoid removal of the comma by the scss compiler */ - grid-template-columns: repeat(auto-fit, minmax(unquote('#{$grid-column-width}'), 1fr)); - grid-column-gap: 20px; -} - -/* General details item styles */ -contactdetails { - select, button, input, textarea { - &:disabled { - background-color: transparent !important; - border-color: transparent !important; - opacity: 1 !important; - color: #545454 !important; - } - } - - detailsitem > select:disabled { - background-image: none !important; - &:first-child { - opacity: 0.5 !important; - color: inherit !important; - } - } -} - -propertygroup { - display: block; - &:not(.property-adr){ - /* adr detailsitem already have bottom padding */ - padding-bottom: $grid-height-unit; - } - .propertyGroup__title { - display: flex; - align-items: center; - height: $grid-height-unit; - padding: calc(#{$grid-height-unit} / 4); - margin: 0; - margin-left: 68px; - opacity: .6; - i { - display: block; - vertical-align: middle; - background-size: 16px 16px; - margin-right: 8px; - opacity: .5; - } - #info{ - cursor:pointer; - margin-left: 8px; - } - } - /* GRID SETTINGS */ - @include generate-grid-span(1); - &.property-adr { - @include generate-grid-span(8); - } - &.property-n { - @include generate-grid-span(7); - } - &.property-note { - @include generate-grid-span(5); - } -} - -detailsitem input[type='tel'], -detailsitem input[type='email'], -detailsitem input[type='text'], -detailsitem input[type='url'], -detailsitem textarea, -.select-addressbook select, -.add-field { - width: 245px; - flex-grow: 1; - margin: $grid-input-margin; - height: $grid-input-height-with-margin; - padding: $grid-input-padding; -} - -.add-field { - margin-left: 106px; -} - -detailsitem label, -.select-addressbook label { - margin: $grid-input-margin; - margin-left: 0; - display: inline-block; - width: 100px; - height: $grid-input-height-with-margin; - padding: $grid-input-padding 0; - text-align: right; - opacity: .5; - white-space: nowrap; - overflow: hidden; - overflow-x: hidden; - text-overflow: ellipsis; - vertical-align: middle; -} - -detailsitem { - display: flex; - flex-wrap: wrap; - position: relative; - width: $grid-column-width; - > div { - display: inline-flex; - } - select { - width: 100px; - height: $grid-input-height-with-margin; - padding: $grid-input-padding; - margin: $grid-input-margin; - margin-left: 0; - border: none; - text-align: right; - text-align-last: right; - opacity: .5; - color: $color-main-text; - outline: none; - &:hover, - &:focus, - &:active { - opacity: 1; - } - } - - & .icon-delete { - position: relative; - vertical-align: top; - padding: 16px 10px; - background-color: transparent; - border: none; - opacity: 0; - } - - & input:hover + .icon-delete, - & input:focus + .icon-delete, - & input:active + .icon-delete, - & select:hover + .icon-delete, - & select:focus + .icon-delete, - & select:active + .icon-delete, - &:hover .icon-delete { - opacity: .2; - } - - & .icon-delete:hover, - & .icon-delete:focus, - & .icon-delete:active { - opacity: 1; - } - - & .item-action { - position: absolute; - padding: 10px 5px; - opacity: .5; - right: 30px; - ~ input { - padding-right: 30px; - text-overflow: ellipsis; - } - i { - display: block; - height: 20px; - width: 20px; - } - } - - &.details-item-adr, - &.details-item-n { - padding-bottom: $grid-height-unit; - .icon-delete { - vertical-align: middle; - left: 251px; - } - } - - &.details-item-note label { - vertical-align: top; - } - - /* Failed props */ - &.failed { - box-shadow: inset 2px 0 $color-error; - } - textarea { - height: calc(#{$grid-input-height-with-margin} + (#{$grid-height-unit} * 4)); - } -} - -avatar .icon-error { - position: absolute; - width: 100%; - height: 100%; -} - -avatar:not(.maximized) .icon-error + img { - opacity: 0.5; -} - -/* Prevent delete for last adr/mail/tel item */ -.last-details > detailsitem.details-item-adr .icon-delete, -.last-details > detailsitem.details-item-email .icon-delete, -.last-details > detailsitem.details-item-tel .icon-delete { - display: none; -} - -/* SELECT2 styling */ -detailsitem .select2-container { - width: 245px; -} - -/* Fix for #81 */ -.select2-container-multi .select2-choices .select2-search-choice { - padding-right: 20px; -} - -.select2-container.select2-container-multi .select2-choices span { - display: flex; - flex-wrap: wrap; -} - -.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close { - display: block !important; - right: 4px; - left: auto; - top: 7px; -} - -/* Fix disabled select2 state */ -detailsitem .select2-container[disabled] .select2-choices { - border-color: transparent; - min-height: 100%; - background-color: transparent !important; -} diff --git a/css/_navigation.scss b/css/_navigation.scss deleted file mode 100644 index b3019f2d..00000000 --- a/css/_navigation.scss +++ /dev/null @@ -1,19 +0,0 @@ - -#app-navigation > ul { - height: calc(100% - 68px); -} - -#app-navigation .app-navigation-entry-utils .app-navigation-entry-utils-counter { - padding: 0 12px 0 0; -} - -/* Contacts List */ -#new-contact-button { - margin: 14px auto; /* to have the same height than a contact */ - width: calc(100% - 20px) !important; - text-align: left; - background-position: 10px center; - padding: 10px; - padding-left: 34px; - display: block; -} diff --git a/css/_settings.scss b/css/_settings.scss deleted file mode 100644 index 9e9e1fca..00000000 --- a/css/_settings.scss +++ /dev/null @@ -1,322 +0,0 @@ -.settings-section { - display: block; -} - -.addressBookList form { - width: 100%; - display: inline-flex; -} - -.addressBookList form input.ng-invalid-pattern { - border-color: $color-error !important; -} - -ul.addressBookList > li { - padding: 6px 0; - display: flex; - align-items: center; - flex-wrap: wrap; -} - -ul.addressBookList > li.newAddressBookContainer { - position: relative; -} - -ul.addressBookList > li.newAddressBookContainer .tooltip { - width: 175px; -} - -ul.addressBook-share-list { - margin-top: 8px; - margin-bottom: 12px; - display: flex; - flex-direction: column; - li { - padding: 0 5px; - display: inline-flex; - align-items: center; - .icon { - margin-right: 5px; - opacity: .2; - } - .utils { - display: flex; - .checkbox + label { - padding: 0 !important; - } - } - } -} - -/* override core apps css */ -#app-navigation ul.addressBookList > li span.utils { - position: relative; - padding: 0; - flex-shrink: 0; - height: 20px; -} - -ul.addressBookList li .utils .popovermenu { - margin-right: -5px; -} - -#app-navigation ul.addressBookList li .utils .popovermenu li > button { - width: 100%; -} - -ul.addressBookList li .action { - opacity: 0.3; - display: block; - &:hover { - opacity: 0.5; - } - span { - cursor: pointer; - } -} - -ul.addressBookList li .action > span { - display: inline-block; - width: 24px; - height: 20px; -} - -ul.addressBookList li .action > a { - padding: 10px 14px; -} - -addressBookList input[type='submit'].inline-button, -addressBookList input[type='button'].inline-button { - position: absolute; - right: 0; - padding: 6px 15px; - background-color: transparent; - border: none; - opacity: .5; - margin-right: 0; - cursor: pointer; -} - -ul.addressBookList li[addressbook] > span.addressBookName { - width: calc(100% - 52px); /* -actions width */ - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - padding-left: 7px; - &.disabled { - opacity: 0.3; - } -} - -ul.addressBookList li[addressbook] > .addressBookShares { - width: 100%; -} - -li.addressBook-share-item span.shareeIdentifier, -li.calendar-share-item span.shareeIdentifier { - width: 100%; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - display: inline-block; - vertical-align: top; - opacity: 0.5; -} - -div.addressBookShares ul.dropdown-menu { - border: 1px solid nc-darken($color-main-background, 18%); - border-radius: 0 0 3px 3px; - max-height: 200px; - margin-top: -2px; - overflow-y: auto; - display: flex; - flex-wrap: wrap; - position: absolute; - background-color: $color-main-background; - width: 100%; - z-index: 500; -} - -div.addressBookShares ul.dropdown-menu li > a { - height: 30px !important; - min-height: 30px !important; - line-height: 30px !important; -} - -ul.dropdown-menu li { - width: 100%; - padding: 3px 7px 4px; - cursor: pointer; -} - -ul.dropdown-menu li.active { - background: nc-darken($color-main-background, 6%); -} - -div.app-contacts span.utils { - padding: 0 !important; - float: right; - position: relative !important; - display: inline-flex; -} - -.addressBookUrlContainer { - width: 100%; - position: relative; -} - -input.renameAddressBookInput, -input.newAddressBookInput, -input.shareeInput, -input.addressBookUrl { - width: 100% !important; - margin-right: 0; - padding-right: 30px; - text-overflow: ellipsis; -} - -.select2-drop .select2-search input { - width: 100% !important; - margin-right: 0; -} - -/* Contact import */ -#app-settings-content #upload.button { - width: 100%; - padding: 7px 10px; - padding-left: 34px; - background-position: 10px center; - text-align: left; - margin: 0; - display: block; - margin-bottom: 0; - border-radius: 3px 3px 0 0; -} - -#app-settings-content #upload.button::after { - left: 17px; /* half the padding */ -} - -#app-settings-content #upload.button.no-select { - border-radius: 3px; -} - -contactimport { - margin-bottom: 3px; -} - -contactimport .select2-container { - margin-top: 0; - width: 100%; -} - -contactimport .select2-container::after { - left: 15px; -} - -contactimport .select2-container .select2-choice { - height: 100%; - line-height: 31px; - border-radius: 0 0 3px 3px; - border-top: none !important; -} - -contactimport .select2-drop-active { - border-top: 1px solid nc-darken($color-main-background, 18%); - box-shadow: 0 -1px 5px rgba($color-main-background, .15); - border-radius: 3px 3px 0 0; - margin-top: initial; -} - -contactimport .ui-select-offscreen { - display: none; -} - -contactimport .ui-select-search-hidden { - display: none; -} - -contactimport input[type='search']::-webkit-search-cancel-button { - -webkit-appearance: none; -} - -/* Import screen */ -#import-sidebar { - position: absolute; - width: 250px; - height: 100%; - z-index: 500; - background: rgba(255, 255, 255, 0.6); -} - -#importscreen-wrapper { - position: absolute; - width: 100%; - height: 100%; - top: 0; - display: flex; - justify-content: center; - align-items: start; - background: $color-main-background; - z-index: 500; -} - -#importscreen-content { - width: 300px; - position: relative; - display: flex; - justify-content: space-between; - align-items: center; - flex-wrap: wrap; -} - -#importscreen-title { - flex-basis: 100%; - text-align: center; -} - -#importscreen-percent { - opacity: 0.5; -} - -#importscreen-user { - opacity: 0.5; - padding-top: 5px; -} - -/* Copy nextcloud quota bar */ -#importscreen-progress { - display: block; - width: 100%; - padding: 0; - border: 0 none; - background-color: nc-darken($color-main-background, 10%); - border-radius: 3px; - flex-basis: 100%; - height: 5px; -} - -#importscreen-progress::-webkit-progress-bar { - background: transparent; -} - -#importscreen-progress::-moz-progress-bar { - border-radius: 3px; - background: $color-primary; - transition: 500ms all ease-in-out; -} - -#importscreen-progress::-webkit-progress-value { - border-radius: 3px; - background: $color-primary; - transition: 500ms all ease-in-out; -} - -#importscreen-sidebar-block { - position: absolute; - width: 100%; - height: 100%; - background: $color-main-background; - z-index: 500; - opacity: 0.5; -} diff --git a/css/style.scss b/css/style.scss deleted file mode 100644 index 0b0cb144..00000000 --- a/css/style.scss +++ /dev/null @@ -1,5 +0,0 @@ -@import 'details'; -@import 'contactlist'; -@import 'navigation'; -@import 'settings'; -@import 'animations'; diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index 56d8e7b8..00000000 --- a/gulpfile.js +++ /dev/null @@ -1,85 +0,0 @@ -var gulp = require('gulp'), - concat = require('gulp-concat'), - eslint = require('gulp-eslint'), - stylelint = require('gulp-stylelint'); - ngAnnotate = require('gulp-ng-annotate'), - merge = require('merge-stream'), - KarmaServer = require('karma').Server, - sourcemaps = require('gulp-sourcemaps'); - -var dependencies = require('./vendorScripts.json'); - -gulp.task('build', function() { - return gulp.src([ - 'js/main.js', - 'js/components/**/*.js', - 'js/models/**/*.js', - 'js/services/**/*.js', - 'js/filters/**/*.js' - ]) - // concat (+sourcemaps) - .pipe(sourcemaps.init()) - .pipe(ngAnnotate({ single_quotes: true })) - .pipe(concat('script.js')) - .pipe(sourcemaps.write()) - - .pipe(gulp.dest('js/public')); -}); - -gulp.task('vendor', function() { - let stream = require('merge-stream')();; - - for(let dependency in dependencies.scripts) { - stream.add( - gulp.src(dependencies.scripts[dependency]) - .pipe(gulp.dest(`js/vendor/${dependency}`)) - ); - } - - for(let dependency in dependencies.styles) { - stream.add( - gulp.src(dependencies.styles[dependency]) - .pipe(gulp.dest(`css/vendor/${dependency}`)) - ); - } - - return stream; -}); - -gulp.task('eslint', function() { - return gulp.src([ - 'js/main.js', - 'js/components/**/*.js', - 'js/models/**/*.js', - 'js/services/**/*.js', - 'js/filters/**/*.js' - ]) - .pipe(eslint()) - .pipe(eslint.format()) - .pipe(eslint.failAfterError()); -}); - -gulp.task('stylelint', function() { - return gulp.src('css/*.scss') - .pipe(stylelint({ - reporters: [ - {formatter: 'string', console: true} - ] - })); -}); - -gulp.task('karma', function(done){ - new KarmaServer({ - configFile: __dirname + '/karma.conf.js', - singleRun: true - }, done).start(); -}); - - -gulp.task('default', ['vendor', 'eslint', 'stylelint', 'build']); - -gulp.task('test', ['karma']); - -gulp.task('watch', ['default'], function() { - gulp.watch(['js/**/*.js', '!js/public/**/*.js', 'css/*.scss'], ['eslint', 'stylelint', 'build']); -}); diff --git a/js/components/addressBook/addressBook_controller.js b/js/components/addressBook/addressBook_controller.js deleted file mode 100644 index 6b8a0f0c..00000000 --- a/js/components/addressBook/addressBook_controller.js +++ /dev/null @@ -1,202 +0,0 @@ -angular.module('contactsApp') -.controller('addressbookCtrl', function($scope, AddressBookService) { - var ctrl = this; - - ctrl.t = { - download: t('contacts', 'Download'), - copyURL: t('contacts', 'Copy link'), - clickToCopy: t('contacts', 'Click to copy the link to your clipboard'), - shareAddressbook: t('contacts', 'Toggle sharing'), - deleteAddressbook: t('contacts', 'Delete'), - renameAddressbook: t('contacts', 'Rename'), - shareInputPlaceHolder: t('contacts', 'Share with users or groups'), - delete: t('contacts', 'Delete'), - canEdit: t('contacts', 'can edit'), - close: t('contacts', 'Close'), - enabled: t('contacts', 'Enabled'), - disabled: t('contacts', 'Disabled') - }; - - ctrl.editing = false; - ctrl.enabled = ctrl.addressBook.enabled; - - ctrl.tooltipIsOpen = false; - ctrl.tooltipTitle = ctrl.t.clickToCopy; - ctrl.showInputUrl = false; - - ctrl.clipboardSuccess = function() { - ctrl.tooltipIsOpen = true; - ctrl.tooltipTitle = t('core', 'Copied!'); - _.delay(function() { - ctrl.tooltipIsOpen = false; - ctrl.tooltipTitle = ctrl.t.clickToCopy; - }, 3000); - }; - - ctrl.clipboardError = function() { - ctrl.showInputUrl = true; - if (/iPhone|iPad/i.test(navigator.userAgent)) { - ctrl.InputUrlTooltip = t('core', 'Not supported!'); - } else if (/Mac/i.test(navigator.userAgent)) { - ctrl.InputUrlTooltip = t('core', 'Press ⌘-C to copy.'); - } else { - ctrl.InputUrlTooltip = t('core', 'Press Ctrl-C to copy.'); - } - $('#addressBookUrl_'+ctrl.addressBook.ctag).select(); - }; - - ctrl.renameAddressBook = function() { - AddressBookService.rename(ctrl.addressBook, ctrl.addressBook.displayName); - ctrl.editing = false; - }; - - ctrl.edit = function() { - ctrl.editing = true; - }; - - ctrl.closeMenus = function() { - $scope.$parent.ctrl.openedMenu = false; - }; - - ctrl.openMenu = function(index) { - ctrl.closeMenus(); - $scope.$parent.ctrl.openedMenu = index; - }; - - ctrl.toggleMenu = function(index) { - if ($scope.$parent.ctrl.openedMenu === index) { - ctrl.closeMenus(); - } else { - ctrl.openMenu(index); - } - }; - - ctrl.toggleSharesEditor = function() { - ctrl.editingShares = !ctrl.editingShares; - ctrl.selectedSharee = null; - }; - - /* From Calendar-Rework - js/app/controllers/calendarlistcontroller.js */ - ctrl.findSharee = function (val) { - return $.get( - OC.linkToOCS('apps/files_sharing/api/v1') + 'sharees', - { - format: 'json', - search: val.trim(), - perPage: 200, - itemType: 'principals' - } - ).then(function(result) { - var users = result.ocs.data.exact.users.concat(result.ocs.data.users); - var groups = result.ocs.data.exact.groups.concat(result.ocs.data.groups); - - var userShares = ctrl.addressBook.sharedWith.users; - var userSharesLength = userShares.length; - - var groupsShares = ctrl.addressBook.sharedWith.groups; - var groupsSharesLength = groupsShares.length; - var i, j; - - // Filter out current user - for (i = 0 ; i < users.length; i++) { - if (users[i].value.shareWith === OC.currentUser) { - users.splice(i, 1); - break; - } - } - - // Now filter out all sharees that are already shared with - for (i = 0; i < userSharesLength; i++) { - var shareUser = userShares[i]; - for (j = 0; j < users.length; j++) { - if (users[j].value.shareWith === shareUser.id) { - users.splice(j, 1); - break; - } - } - } - - // Now filter out all groups that are already shared with - for (i = 0; i < groupsSharesLength; i++) { - var sharedGroup = groupsShares[i]; - for (j = 0; j < groups.length; j++) { - if (groups[j].value.shareWith === sharedGroup.id) { - groups.splice(j, 1); - break; - } - } - } - - // Combine users and groups - users = users.map(function(item) { - return { - display: _.escape(item.value.shareWith), - type: OC.Share.SHARE_TYPE_USER, - identifier: item.value.shareWith - }; - }); - - groups = groups.map(function(item) { - return { - display: _.escape(item.value.shareWith) + ' (group)', - type: OC.Share.SHARE_TYPE_GROUP, - identifier: item.value.shareWith - }; - }); - - return groups.concat(users); - }); - }; - - ctrl.onSelectSharee = function (item) { - // Prevent settings to slide down - $('#app-settings-header > button').data('apps-slide-toggle', false); - _.delay(function() { - $('#app-settings-header > button').data('apps-slide-toggle', '#app-settings-content'); - }, 500); - - ctrl.selectedSharee = null; - AddressBookService.share(ctrl.addressBook, item.type, item.identifier, false, false).then(function() { - $scope.$apply(); - }); - - }; - - ctrl.updateExistingUserShare = function(userId, writable) { - AddressBookService.share(ctrl.addressBook, OC.Share.SHARE_TYPE_USER, userId, writable, true).then(function() { - $scope.$apply(); - }); - }; - - ctrl.updateExistingGroupShare = function(groupId, writable) { - AddressBookService.share(ctrl.addressBook, OC.Share.SHARE_TYPE_GROUP, groupId, writable, true).then(function() { - $scope.$apply(); - }); - }; - - ctrl.unshareFromUser = function(userId) { - AddressBookService.unshare(ctrl.addressBook, OC.Share.SHARE_TYPE_USER, userId).then(function() { - $scope.$apply(); - }); - }; - - ctrl.unshareFromGroup = function(groupId) { - AddressBookService.unshare(ctrl.addressBook, OC.Share.SHARE_TYPE_GROUP, groupId).then(function() { - $scope.$apply(); - }); - }; - - ctrl.deleteAddressBook = function() { - AddressBookService.delete(ctrl.addressBook).then(function() { - $scope.$apply(); - }); - }; - - ctrl.toggleState = function() { - AddressBookService.toggleState(ctrl.addressBook).then(function(addressBook) { - ctrl.enabled = addressBook.enabled; - $scope.$apply(); - }); - }; - -}); diff --git a/js/components/addressBook/addressBook_directive.js b/js/components/addressBook/addressBook_directive.js deleted file mode 100644 index c62141db..00000000 --- a/js/components/addressBook/addressBook_directive.js +++ /dev/null @@ -1,14 +0,0 @@ -angular.module('contactsApp') -.directive('addressbook', function() { - return { - restrict: 'A', // has to be an attribute to work with core css - scope: {}, - controller: 'addressbookCtrl', - controllerAs: 'ctrl', - bindToController: { - addressBook: '=data', - list: '=' - }, - templateUrl: OC.linkTo('contacts', 'templates/addressBook.html') - }; -}); diff --git a/js/components/addressBookList/addressBookList_controller.js b/js/components/addressBookList/addressBookList_controller.js deleted file mode 100644 index 092f9f0b..00000000 --- a/js/components/addressBookList/addressBookList_controller.js +++ /dev/null @@ -1,39 +0,0 @@ -angular.module('contactsApp') -.controller('addressbooklistCtrl', function($scope, AddressBookService) { - var ctrl = this; - - ctrl.loading = true; - ctrl.openedMenu = false; - ctrl.addressBookRegex = /^[a-zA-Z0-9À-ÿ\s-_.!?#|()]+$/i; - - AddressBookService.getAll().then(function(addressBooks) { - ctrl.addressBooks = addressBooks; - ctrl.loading = false; - if(ctrl.addressBooks.length === 0) { - AddressBookService.create(t('contacts', 'Contacts')).then(function() { - AddressBookService.getAddressBook(t('contacts', 'Contacts')).then(function(addressBook) { - ctrl.addressBooks.push(addressBook); - $scope.$apply(); - }); - }); - } - }); - - ctrl.t = { - addressBookName : t('contacts', 'Address book name'), - regexError : t('contacts', 'Only these special characters are allowed: -_.!?#|()') - }; - - ctrl.createAddressBook = function() { - if(ctrl.newAddressBookName) { - AddressBookService.create(ctrl.newAddressBookName).then(function() { - AddressBookService.getAddressBook(ctrl.newAddressBookName).then(function(addressBook) { - ctrl.addressBooks.push(addressBook); - $scope.$apply(); - }); - }).catch(function() { - OC.Notification.showTemporary(t('contacts', 'Address book could not be created.')); - }); - } - }; -}); diff --git a/js/components/addressBookList/addressBookList_directive.js b/js/components/addressBookList/addressBookList_directive.js deleted file mode 100644 index a68ac10b..00000000 --- a/js/components/addressBookList/addressBookList_directive.js +++ /dev/null @@ -1,11 +0,0 @@ -angular.module('contactsApp') -.directive('addressbooklist', function() { - return { - restrict: 'EA', // has to be an attribute to work with core css - scope: {}, - controller: 'addressbooklistCtrl', - controllerAs: 'ctrl', - bindToController: {}, - templateUrl: OC.linkTo('contacts', 'templates/addressBookList.html') - }; -}); diff --git a/js/components/avatar/avatar_controller.js b/js/components/avatar/avatar_controller.js deleted file mode 100644 index 04e4bf04..00000000 --- a/js/components/avatar/avatar_controller.js +++ /dev/null @@ -1,66 +0,0 @@ -angular.module('contactsApp') -.controller('avatarCtrl', function(ContactService) { - var ctrl = this; - - ctrl.import = ContactService.import.bind(ContactService); - - ctrl.removePhoto = function() { - ctrl.contact.removeProperty('photo', ctrl.contact.getProperty('photo')); - ContactService.update(ctrl.contact); - $('avatar').removeClass('maximized'); - }; - - ctrl.downloadPhoto = function() { - /* globals ArrayBuffer, Uint8Array */ - var img = document.getElementById('contact-avatar'); - // atob to base64_decode the data-URI - var imageSplit = img.src.split(','); - // "data:image/png;base64" -> "png" - var extension = '.' + imageSplit[0].split(';')[0].split('/')[1]; - var imageData = atob(imageSplit[1]); - // Use typed arrays to convert the binary data to a Blob - var arrayBuffer = new ArrayBuffer(imageData.length); - var view = new Uint8Array(arrayBuffer); - for (var i=0; i 1024*1024) { // 1 MB - OC.Notification.showTemporary(t('contacts', 'The selected image is too big (max 1MB)')); - } else { - var reader = new FileReader(); - - reader.addEventListener('load', function () { - scope.$apply(function() { - scope.contact.photo(reader.result); - ContactService.update(scope.contact); - }); - }, false); - - if (file) { - reader.readAsDataURL(file); - } - } - }); - }, - templateUrl: OC.linkTo('contacts', 'templates/avatar.html') - }; -}); diff --git a/js/components/contact/contact_controller.js b/js/components/contact/contact_controller.js deleted file mode 100644 index aa3dcd4a..00000000 --- a/js/components/contact/contact_controller.js +++ /dev/null @@ -1,35 +0,0 @@ -angular.module('contactsApp') -.controller('contactCtrl', function($route, $routeParams, SortByService) { - var ctrl = this; - - ctrl.t = { - errorMessage : t('contacts', 'This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent.'), - }; - - ctrl.getName = function() { - // If lastName equals to firstName then none of them is set - if (ctrl.contact.lastName() === ctrl.contact.firstName()) { - return ctrl.contact.displayName(); - } - - if (SortByService.getSortByKey() === 'sortLastName') { - return ( - ctrl.contact.lastName() - + (ctrl.contact.firstName() ? ', ' : '') - + ctrl.contact.firstName() + ' ' - + ctrl.contact.additionalNames() - ).trim(); - } - - if (SortByService.getSortByKey() === 'sortFirstName') { - return ( - ctrl.contact.firstName() + ' ' - + ctrl.contact.additionalNames() + ' ' - + ctrl.contact.lastName() - ).trim(); - } - - return ctrl.contact.displayName(); - }; -}); - diff --git a/js/components/contact/contact_directive.js b/js/components/contact/contact_directive.js deleted file mode 100644 index d5dd07aa..00000000 --- a/js/components/contact/contact_directive.js +++ /dev/null @@ -1,12 +0,0 @@ -angular.module('contactsApp') -.directive('contact', function() { - return { - scope: {}, - controller: 'contactCtrl', - controllerAs: 'ctrl', - bindToController: { - contact: '=data' - }, - templateUrl: OC.linkTo('contacts', 'templates/contact.html') - }; -}); diff --git a/js/components/contactDetails/contactDetails_controller.js b/js/components/contactDetails/contactDetails_controller.js deleted file mode 100644 index 7b273992..00000000 --- a/js/components/contactDetails/contactDetails_controller.js +++ /dev/null @@ -1,118 +0,0 @@ -angular.module('contactsApp') -.controller('contactdetailsCtrl', function(ContactService, AddressBookService, vCardPropertiesService, $route, $routeParams, $scope) { - - var ctrl = this; - - ctrl.init = true; - ctrl.loading = false; - ctrl.show = false; - - ctrl.clearContact = function() { - $route.updateParams({ - gid: $routeParams.gid, - uid: undefined - }); - ctrl.show = false; - ctrl.contact = undefined; - }; - - ctrl.uid = $routeParams.uid; - ctrl.t = { - noContacts : t('contacts', 'No contacts in here'), - placeholderName : t('contacts', 'Name'), - placeholderOrg : t('contacts', 'Organization'), - placeholderTitle : t('contacts', 'Title'), - selectField : t('contacts', 'Add field …'), - download : t('contacts', 'Download'), - delete : t('contacts', 'Delete'), - save : t('contacts', 'Save changes'), - addressBook : t('contacts', 'Address book'), - loading : t('contacts', 'Loading contacts …') - }; - - ctrl.fieldDefinitions = vCardPropertiesService.fieldDefinitions; - ctrl.focus = undefined; - ctrl.field = undefined; - ctrl.addressBooks = []; - - AddressBookService.getAll().then(function(addressBooks) { - ctrl.addressBooks = addressBooks; - - if (!angular.isUndefined(ctrl.contact)) { - ctrl.addressBook = _.find(ctrl.addressBooks, function(book) { - return book.displayName === ctrl.contact.addressBookId; - }); - } - ctrl.init = false; - // Start watching for ctrl.uid when we have addressBooks, as they are needed for fetching - // full details. - $scope.$watch('ctrl.uid', function(newValue) { - ctrl.changeContact(newValue); - }); - }); - - - ctrl.changeContact = function(uid) { - if (typeof uid === 'undefined') { - ctrl.show = false; - $('#app-navigation-toggle').removeClass('showdetails'); - return; - } - ctrl.loading = true; - ContactService.getById(ctrl.addressBooks, uid).then(function(contact) { - if (angular.isUndefined(contact)) { - ctrl.clearContact(); - return; - } - ctrl.contact = contact; - ctrl.show = true; - ctrl.loading = false; - $('#app-navigation-toggle').addClass('showdetails'); - - ctrl.addressBook = _.find(ctrl.addressBooks, function(book) { - return book.displayName === ctrl.contact.addressBookId; - }); - }); - }; - - ctrl.deleteContact = function() { - ContactService.delete(ctrl.addressBook, ctrl.contact); - }; - - ctrl.addField = function(field) { - var defaultValue = vCardPropertiesService.getMeta(field).defaultValue || {value: ''}; - ctrl.contact.addProperty(field, defaultValue); - ctrl.focus = field; - ctrl.field = ''; - }; - - ctrl.deleteField = function (field, prop) { - ctrl.contact.removeProperty(field, prop); - ctrl.focus = undefined; - }; - - ctrl.changeAddressBook = function (addressBook, oldAddressBook) { - ContactService.moveContact(ctrl.contact, addressBook, oldAddressBook); - }; - - ctrl.updateContact = function() { - ContactService.queueUpdate(ctrl.contact); - }; - - ctrl.closeMenus = function() { - ctrl.openedMenu = false; - }; - - ctrl.openMenu = function(index) { - ctrl.closeMenus(); - ctrl.openedMenu = index; - }; - - ctrl.toggleMenu = function(index) { - if (ctrl.openedMenu === index) { - ctrl.closeMenus(); - } else { - ctrl.openMenu(index); - } - }; -}); diff --git a/js/components/contactDetails/contactDetails_directive.js b/js/components/contactDetails/contactDetails_directive.js deleted file mode 100644 index 23c67eb6..00000000 --- a/js/components/contactDetails/contactDetails_directive.js +++ /dev/null @@ -1,11 +0,0 @@ -angular.module('contactsApp') -.directive('contactdetails', function() { - return { - priority: 1, - scope: {}, - controller: 'contactdetailsCtrl', - controllerAs: 'ctrl', - bindToController: {}, - templateUrl: OC.linkTo('contacts', 'templates/contactDetails.html') - }; -}); diff --git a/js/components/contactFilter/contactFilter_controller.js b/js/components/contactFilter/contactFilter_controller.js deleted file mode 100644 index 323be238..00000000 --- a/js/components/contactFilter/contactFilter_controller.js +++ /dev/null @@ -1,5 +0,0 @@ -angular.module('contactsApp') -.controller('contactfilterCtrl', function() { - // eslint-disable-next-line no-unused-vars - var ctrl = this; -}); diff --git a/js/components/contactFilter/contactFilter_directive.js b/js/components/contactFilter/contactFilter_directive.js deleted file mode 100644 index 98a5e34e..00000000 --- a/js/components/contactFilter/contactFilter_directive.js +++ /dev/null @@ -1,13 +0,0 @@ -angular.module('contactsApp') -.directive('contactFilter', function() { - return { - restrict: 'A', // has to be an attribute to work with core css - scope: {}, - controller: 'contactfilterCtrl', - controllerAs: 'ctrl', - bindToController: { - contactFilter: '=contactFilter' - }, - templateUrl: OC.linkTo('contacts', 'templates/contactFilter.html') - }; -}); diff --git a/js/components/contactImport/contactImport_controller.js b/js/components/contactImport/contactImport_controller.js deleted file mode 100644 index 8901cf93..00000000 --- a/js/components/contactImport/contactImport_controller.js +++ /dev/null @@ -1,42 +0,0 @@ -angular.module('contactsApp') -.controller('contactimportCtrl', function(ContactService, AddressBookService, $timeout, $scope) { - var ctrl = this; - - ctrl.t = { - importText : t('contacts', 'Import into'), - importingText : t('contacts', 'Importing...'), - selectAddressbook : t('contacts', 'Select your addressbook'), - importdisabled : t('contacts', 'Import is disabled because no writable address book had been found.') - }; - - ctrl.import = ContactService.import.bind(ContactService); - ctrl.loading = true; - ctrl.importText = ctrl.t.importText; - ctrl.importing = false; - ctrl.loadingClass = 'icon-upload'; - - AddressBookService.getAll().then(function(addressBooks) { - ctrl.addressBooks = addressBooks; - ctrl.loading = false; - ctrl.selectedAddressBook = AddressBookService.getDefaultAddressBook(); - }); - - AddressBookService.registerObserverCallback(function() { - $timeout(function() { - $scope.$apply(function() { - ctrl.selectedAddressBook = AddressBookService.getDefaultAddressBook(); - }); - }); - }); - - ctrl.stopHideMenu = function(isOpen) { - if(isOpen) { - // disabling settings bind - $('#app-settings-header > button').data('apps-slide-toggle', false); - } else { - // reenabling it - $('#app-settings-header > button').data('apps-slide-toggle', '#app-settings-content'); - } - }; - -}); diff --git a/js/components/contactImport/contactImport_directive.js b/js/components/contactImport/contactImport_directive.js deleted file mode 100644 index d8ea85e5..00000000 --- a/js/components/contactImport/contactImport_directive.js +++ /dev/null @@ -1,60 +0,0 @@ -angular.module('contactsApp') -.directive('contactimport', function(ContactService, ImportService, $rootScope) { - return { - link: function(scope, element, attrs, ctrl) { - var input = element.find('input'); - input.bind('change', function() { - angular.forEach(input.get(0).files, function(file) { - var reader = new FileReader(); - - reader.addEventListener('load', function () { - scope.$apply(function () { - // Indicate the user we started something - ctrl.importText = ctrl.t.importingText; - ctrl.loadingClass = 'icon-loading-small'; - ctrl.importing = true; - $rootScope.importing = true; - - ContactService.import.call(ContactService, reader.result, file.type, ctrl.selectedAddressBook, function (progress, user) { - if (progress === 1) { - ctrl.importText = ctrl.t.importText; - ctrl.loadingClass = 'icon-upload'; - ctrl.importing = false; - $rootScope.importing = false; - ImportService.importPercent = 0; - ImportService.importing = false; - ImportService.importedUser = ''; - ImportService.selectedAddressBook = ''; - } else { - // Ugly hack, hide sidebar on import & mobile - // Simulate click since we can't directly access snapper - if($(window).width() <= 768 && $('body').hasClass('snapjs-left')) { - $('#app-navigation-toggle').click(); - $('body').removeClass('snapjs-left'); - } - - ImportService.importPercent = parseInt(Math.floor(progress * 100)); - ImportService.importing = true; - ImportService.importedUser = user; - ImportService.selectedAddressBook = ctrl.selectedAddressBook.displayName; - } - scope.$apply(); - - /* Broadcast service update */ - $rootScope.$broadcast('importing', true); - }); - }); - }, false); - - if (file) { - reader.readAsText(file); - } - }); - input.get(0).value = ''; - }); - }, - templateUrl: OC.linkTo('contacts', 'templates/contactImport.html'), - controller: 'contactimportCtrl', - controllerAs: 'ctrl' - }; -}); diff --git a/js/components/contactList/contactList_controller.js b/js/components/contactList/contactList_controller.js deleted file mode 100644 index f13bf76e..00000000 --- a/js/components/contactList/contactList_controller.js +++ /dev/null @@ -1,283 +0,0 @@ -angular.module('contactsApp') -.controller('contactlistCtrl', function($scope, $filter, $route, $routeParams, $timeout, AddressBookService, ContactService, SortByService, vCardPropertiesService, SearchService) { - var ctrl = this; - - ctrl.routeParams = $routeParams; - - ctrl.filteredContacts = []; // the displayed contacts list - ctrl.searchTerm = ''; - ctrl.show = true; - ctrl.invalid = false; - ctrl.limitTo = 25; - - ctrl.sortBy = SortByService.getSortBy(); - - ctrl.t = { - emptySearch : t('contacts', 'No search result for {query}', {query: ctrl.searchTerm}) - }; - - ctrl.resetLimitTo = function () { - ctrl.limitTo = 25; - clearInterval(ctrl.intervalId); - ctrl.intervalId = setInterval( - function () { - if (!ctrl.loading && ctrl.contactList && ctrl.contactList.length > ctrl.limitTo) { - ctrl.limitTo += 25; - $scope.$apply(); - } - }, 300); - }; - - $scope.query = function(contact) { - return contact.matches(SearchService.getSearchTerm()); - }; - - SortByService.subscribe(function(newValue) { - ctrl.sortBy = newValue; - }); - - SearchService.registerObserverCallback(function(ev) { - if (ev.event === 'submitSearch') { - var uid = !_.isEmpty(ctrl.filteredContacts) ? ctrl.filteredContacts[0].uid() : undefined; - ctrl.setSelectedId(uid); - $scope.$apply(); - } - if (ev.event === 'changeSearch') { - ctrl.resetLimitTo(); - ctrl.searchTerm = ev.searchTerm; - ctrl.t.emptySearch = t('contacts', - 'No search result for {query}', - {query: ctrl.searchTerm} - ); - $scope.$apply(); - } - }); - - ctrl.loading = true; - - ContactService.registerObserverCallback(function(ev) { - /* after import at first refresh the contactList */ - if (ev.event === 'importend') { - $scope.$apply(function() { - ctrl.contactList = ev.contacts; - }); - } - /* update route parameters */ - $timeout(function() { - $scope.$apply(function() { - switch(ev.event) { - case 'delete': - ctrl.selectNearestContact(ev.uid); - break; - case 'create': - $route.updateParams({ - gid: $routeParams.gid, - uid: ev.uid - }); - break; - case 'importend': - /* after import select 'All contacts' group and first contact */ - $route.updateParams({ - gid: t('contacts', 'All contacts'), - uid: ctrl.filteredContacts.length !== 0 ? ctrl.filteredContacts[0].uid() : undefined - }); - return; - case 'getFullContacts' || 'update': - break; - default: - // unknown event -> leave callback without action - return; - } - ctrl.contactList = ev.contacts; - }); - }); - }); - - AddressBookService.registerObserverCallback(function(ev) { - $timeout(function() { - $scope.$apply(function() { - switch (ev.event) { - case 'delete': - case 'disable': - ctrl.loading = true; - ContactService.removeContactsFromAddressbook(ev.addressBook, function() { - ContactService.getAll().then(function(contacts) { - ctrl.contactList = contacts; - ctrl.loading = false; - // Only change contact if the selectd one is not in the list anymore - if(ctrl.contactList.findIndex(function(contact) { - return contact.uid() === ctrl.getSelectedId(); - }) === -1) { - ctrl.selectNearestContact(ctrl.getSelectedId()); - } - }); - }); - break; - case 'enable': - ctrl.loading = true; - ContactService.appendContactsFromAddressbook(ev.addressBook, function() { - ContactService.getAll().then(function(contacts) { - ctrl.contactList = contacts; - ctrl.loading = false; - }); - }); - break; - default: - // unknown event -> leave callback without action - return; - - } - }); - }); - }); - - // Get contacts - ContactService.getAll().then(function(contacts) { - if(contacts.length>0) { - $scope.$apply(function() { - ctrl.contactList = contacts; - }); - } else { - ctrl.loading = false; - } - }); - - var getVisibleContacts = function() { - var scrolled = $('.app-content-list').scrollTop(); - var elHeight = $('.contacts-list').children().outerHeight(true); - var listHeight = $('.app-content-list').height(); - - var topContact = Math.round(scrolled/elHeight); - var contactsCount = Math.round(listHeight/elHeight); - - return ctrl.filteredContacts.slice(topContact-1, topContact+contactsCount+1); - }; - - var timeoutId = null; - document.querySelector('.app-content-list').addEventListener('scroll', function () { - clearTimeout(timeoutId); - timeoutId = setTimeout(function () { - var contacts = getVisibleContacts(); - ContactService.getFullContacts(contacts); - }, 250); - }); - - // Wait for ctrl.filteredContacts to be updated, load the contact requested in the URL if any, and - // load full details for the probably initially visible contacts. - // Then kill the watch. - var unbindListWatch = $scope.$watch('ctrl.filteredContacts', function() { - if(ctrl.filteredContacts && ctrl.filteredContacts.length > 0) { - // Check if a specific uid is requested - if($routeParams.uid && $routeParams.gid) { - ctrl.filteredContacts.forEach(function(contact) { - if(contact.uid() === $routeParams.uid) { - ctrl.setSelectedId($routeParams.uid); - ctrl.loading = false; - } - }); - } - // No contact previously loaded, let's load the first of the list if not in mobile mode - if(ctrl.loading && $(window).width() > 768) { - ctrl.setSelectedId(ctrl.filteredContacts[0].uid()); - } - // Get full data for the first 20 contacts of the list - ContactService.getFullContacts(ctrl.filteredContacts.slice(0, 20)); - ctrl.loading = false; - unbindListWatch(); - } - }); - - $scope.$watch('ctrl.routeParams.uid', function(newValue, oldValue) { - // Used for mobile view to clear the url - if(typeof oldValue != 'undefined' && typeof newValue == 'undefined' && $(window).width() <= 768) { - // no contact selected - ctrl.show = true; - return; - } - if(newValue === undefined) { - // we might have to wait until ng-repeat filled the contactList - if(ctrl.filteredContacts && ctrl.filteredContacts.length > 0) { - $route.updateParams({ - gid: $routeParams.gid, - uid: ctrl.filteredContacts[0].uid() - }); - } else { - // watch for next contactList update - var unbindWatch = $scope.$watch('ctrl.filteredContacts', function() { - if(ctrl.filteredContacts && ctrl.filteredContacts.length > 0) { - $route.updateParams({ - gid: $routeParams.gid, - uid: ctrl.filteredContacts[0].uid() - }); - } - unbindWatch(); // unbind as we only want one update - }); - } - } else { - // displaying contact details - ctrl.show = false; - } - }); - - $scope.$watch('ctrl.routeParams.gid', function() { - // we might have to wait until ng-repeat filled the contactList - ctrl.filteredContacts = []; - ctrl.resetLimitTo(); - // not in mobile mode - if($(window).width() > 768) { - // watch for next contactList update - var unbindWatch = $scope.$watch('ctrl.filteredContacts', function() { - if(ctrl.filteredContacts && ctrl.filteredContacts.length > 0) { - $route.updateParams({ - gid: $routeParams.gid, - uid: $routeParams.uid || ctrl.filteredContacts[0].uid() - }); - } - unbindWatch(); // unbind as we only want one update - }); - } - }); - - // Watch if we have an invalid contact - $scope.$watch('ctrl.filteredContacts[0].displayName()', function(displayName) { - ctrl.invalid = (displayName === ''); - }); - - ctrl.hasContacts = function () { - if (!ctrl.contactList) { - return false; - } - return ctrl.contactList.length > 0; - }; - - ctrl.setSelectedId = function (contactId) { - $route.updateParams({ - uid: contactId - }); - }; - - ctrl.getSelectedId = function() { - return $routeParams.uid; - }; - - ctrl.selectNearestContact = function(contactId) { - if (ctrl.filteredContacts.length === 1) { - $route.updateParams({ - gid: $routeParams.gid, - uid: undefined - }); - } else { - for (var i = 0, length = ctrl.filteredContacts.length; i < length; i++) { - // Get nearest contact - if (ctrl.filteredContacts[i].uid() === contactId) { - $route.updateParams({ - gid: $routeParams.gid, - uid: (ctrl.filteredContacts[i+1]) ? ctrl.filteredContacts[i+1].uid() : ctrl.filteredContacts[i-1].uid() - }); - break; - } - } - } - }; - -}); diff --git a/js/components/contactList/contactList_directive.js b/js/components/contactList/contactList_directive.js deleted file mode 100644 index ba0315d1..00000000 --- a/js/components/contactList/contactList_directive.js +++ /dev/null @@ -1,13 +0,0 @@ -angular.module('contactsApp') -.directive('contactlist', function() { - return { - priority: 1, - scope: {}, - controller: 'contactlistCtrl', - controllerAs: 'ctrl', - bindToController: { - addressbook: '=adrbook' - }, - templateUrl: OC.linkTo('contacts', 'templates/contactList.html') - }; -}); diff --git a/js/components/datepicker_directive.js b/js/components/datepicker_directive.js deleted file mode 100644 index a5197e63..00000000 --- a/js/components/datepicker_directive.js +++ /dev/null @@ -1,32 +0,0 @@ -angular.module('contactsApp') -.directive('datepicker', function($timeout) { - var loadDatepicker = function (scope, element, attrs, ngModelCtrl) { - $timeout(function() { - element.datepicker({ - dateFormat:'yy-mm-dd', - minDate: null, - maxDate: null, - constrainInput: false, - onSelect:function (date, dp) { - if (dp.selectedYear < 1000) { - date = '0' + date; - } - if (dp.selectedYear < 100) { - date = '0' + date; - } - if (dp.selectedYear < 10) { - date = '0' + date; - } - ngModelCtrl.$setViewValue(date); - scope.$apply(); - } - }); - }); - }; - return { - restrict: 'A', - require : 'ngModel', - transclude: true, - link : loadDatepicker - }; -}); diff --git a/js/components/detailsItem/detailsItem_controller.js b/js/components/detailsItem/detailsItem_controller.js deleted file mode 100644 index a8808e6e..00000000 --- a/js/components/detailsItem/detailsItem_controller.js +++ /dev/null @@ -1,134 +0,0 @@ -angular.module('contactsApp') -.controller('detailsItemCtrl', function($templateRequest, $filter, vCardPropertiesService, ContactService) { - var ctrl = this; - - ctrl.meta = vCardPropertiesService.getMeta(ctrl.name); - ctrl.type = undefined; - ctrl.isPreferred = false; - ctrl.t = { - poBox : t('contacts', 'Post office box'), - postalCode : t('contacts', 'Postal code'), - city : t('contacts', 'City'), - state : t('contacts', 'State or province'), - country : t('contacts', 'Country'), - address: t('contacts', 'Address'), - newGroup: t('contacts', '(new group)'), - familyName: t('contacts', 'Last name'), - firstName: t('contacts', 'First name'), - additionalNames: t('contacts', 'Additional names'), - honorificPrefix: t('contacts', 'Prefix'), - honorificSuffix: t('contacts', 'Suffix'), - delete: t('contacts', 'Delete') - }; - - ctrl.availableOptions = ctrl.meta.options || []; - if (!_.isUndefined(ctrl.data) && !_.isUndefined(ctrl.data.meta) && !_.isUndefined(ctrl.data.meta.type)) { - // parse type of the property - var array = ctrl.data.meta.type[0].split(','); - array = array.map(function (elem) { - return elem.trim().replace(/\/+$/, '').replace(/\\+$/, '').trim().toUpperCase(); - }); - // the pref value is handled on its own so that we can add some favorite icon to the ui if we want - if (array.indexOf('PREF') >= 0) { - ctrl.isPreferred = true; - array.splice(array.indexOf('PREF'), 1); - } - // simply join the upper cased types together as key - ctrl.type = array.join(','); - var displayName = array.map(function (element) { - return element.charAt(0).toUpperCase() + element.slice(1).toLowerCase(); - }).join(' '); - // in case the type is not yet in the default list of available options we add it - if (!ctrl.availableOptions.some(function(e) { return e.id === ctrl.type; } )) { - ctrl.availableOptions = ctrl.availableOptions.concat([{id: ctrl.type, name: displayName}]); - } - - // Remove duplicate entry - ctrl.availableOptions = _.uniq(ctrl.availableOptions, function(option) { return option.name; }); - if (ctrl.availableOptions.filter(function(option) { return option.id === ctrl.type; }).length === 0) { - // Our default value has been thrown out by the uniq function, let's find a replacement - var optionName = ctrl.meta.options.filter(function(option) { return option.id === ctrl.type; })[0].name; - ctrl.type = ctrl.availableOptions.filter(function(option) { return option.name === optionName; })[0].id; - // We don't want to override the default keys. Compatibility > standardization - // ctrl.data.meta.type[0] = ctrl.type; - // ctrl.model.updateContact(); - } - } - if (!_.isUndefined(ctrl.data) && !_.isUndefined(ctrl.data.namespace)) { - if (!_.isUndefined(ctrl.contact.props['X-ABLABEL'])) { - var val = _.find(this.contact.props['X-ABLABEL'], function(x) { return x.namespace === ctrl.data.namespace; }); - ctrl.type = val.value.toUpperCase(); - if (!_.isUndefined(val)) { - // in case the type is not yet in the default list of available options we add it - if (!ctrl.availableOptions.some(function(e) { return e.id === val.value; } )) { - ctrl.availableOptions = ctrl.availableOptions.concat([{id: val.value.toUpperCase(), name: val.value.toUpperCase()}]); - } - } - } - } - - ctrl.availableGroups = []; - - ContactService.getGroups().then(function(groups) { - ctrl.availableGroups = _.unique(groups); - }); - - ctrl.changeType = function (val) { - if (ctrl.isPreferred) { - val += ',PREF'; - } - ctrl.data.meta = ctrl.data.meta || {}; - ctrl.data.meta.type = ctrl.data.meta.type || []; - ctrl.data.meta.type[0] = val; - ContactService.queueUpdate(ctrl.contact); - }; - - ctrl.dateInputChanged = function () { - ctrl.data.meta = ctrl.data.meta || {}; - - var match = ctrl.data.value.match(/^(\d{4})-(\d{2})-(\d{2})$/); - if (match) { - ctrl.data.meta.value = []; - } else { - ctrl.data.meta.value = ctrl.data.meta.value || []; - ctrl.data.meta.value[0] = 'text'; - } - ContactService.queueUpdate(ctrl.contact); - }; - - ctrl.updateDetailedName = function () { - var fn = ''; - if (ctrl.data.value[3]) { - fn += ctrl.data.value[3] + ' '; - } - if (ctrl.data.value[1]) { - fn += ctrl.data.value[1] + ' '; - } - if (ctrl.data.value[2]) { - fn += ctrl.data.value[2] + ' '; - } - if (ctrl.data.value[0]) { - fn += ctrl.data.value[0] + ' '; - } - if (ctrl.data.value[4]) { - fn += ctrl.data.value[4]; - } - - ctrl.contact.fullName(fn); - ContactService.queueUpdate(ctrl.contact); - }; - - ctrl.updateContact = function() { - ContactService.queueUpdate(ctrl.contact); - }; - - ctrl.getTemplate = function() { - var templateUrl = OC.linkTo('contacts', 'templates/detailItems/' + ctrl.meta.template + '.html'); - return $templateRequest(templateUrl); - }; - - ctrl.deleteField = function () { - ctrl.contact.removeProperty(ctrl.name, ctrl.data); - ContactService.queueUpdate(ctrl.contact); - }; -}); diff --git a/js/components/detailsItem/detailsItem_directive.js b/js/components/detailsItem/detailsItem_directive.js deleted file mode 100644 index b7a2521a..00000000 --- a/js/components/detailsItem/detailsItem_directive.js +++ /dev/null @@ -1,21 +0,0 @@ -angular.module('contactsApp') -.directive('detailsitem', ['$compile', function($compile) { - return { - scope: {}, - controller: 'detailsItemCtrl', - controllerAs: 'ctrl', - bindToController: { - name: '=', - data: '=', - contact: '=model', - index: '=' - }, - link: function(scope, element, attrs, ctrl) { - ctrl.getTemplate().then(function(html) { - var template = angular.element(html); - element.append(template); - $compile(template)(scope); - }); - } - }; -}]); diff --git a/js/components/focus_directive.js b/js/components/focus_directive.js deleted file mode 100644 index d82665ce..00000000 --- a/js/components/focus_directive.js +++ /dev/null @@ -1,23 +0,0 @@ -angular.module('contactsApp') -.directive('focusExpression', function ($timeout) { - return { - restrict: 'A', - link: { - post: function postLink(scope, element, attrs) { - scope.$watch(attrs.focusExpression, function () { - if (attrs.focusExpression) { - if (scope.$eval(attrs.focusExpression)) { - $timeout(function () { - if (element.is('input')) { - element.focus(); - } else { - element.find('input').focus(); - } - }, 100); //need some delay to work with ng-disabled - } - } - }); - } - } - }; -}); diff --git a/js/components/group/group_controller.js b/js/components/group/group_controller.js deleted file mode 100644 index 533b1d59..00000000 --- a/js/components/group/group_controller.js +++ /dev/null @@ -1,5 +0,0 @@ -angular.module('contactsApp') -.controller('groupCtrl', function() { - // eslint-disable-next-line no-unused-vars - var ctrl = this; -}); diff --git a/js/components/group/group_directive.js b/js/components/group/group_directive.js deleted file mode 100644 index 69588b80..00000000 --- a/js/components/group/group_directive.js +++ /dev/null @@ -1,13 +0,0 @@ -angular.module('contactsApp') -.directive('group', function() { - return { - restrict: 'A', // has to be an attribute to work with core css - scope: {}, - controller: 'groupCtrl', - controllerAs: 'ctrl', - bindToController: { - group: '=group' - }, - templateUrl: OC.linkTo('contacts', 'templates/group.html') - }; -}); diff --git a/js/components/groupList/groupList_controller.js b/js/components/groupList/groupList_controller.js deleted file mode 100644 index 08bde897..00000000 --- a/js/components/groupList/groupList_controller.js +++ /dev/null @@ -1,40 +0,0 @@ -angular.module('contactsApp') -.controller('grouplistCtrl', function($scope, $timeout, ContactService, SearchService, $routeParams) { - var ctrl = this; - - ctrl.groups = []; - ctrl.contactFilters = []; - - ContactService.getGroupList().then(function(groups) { - ctrl.groups = groups; - }); - - ContactService.getContactFilters().then(function(contactFilters) { - ctrl.contactFilters = contactFilters; - }); - - ctrl.getSelected = function() { - return $routeParams.gid; - }; - - // Update groupList on contact add/delete/update/groupsUpdate - ContactService.registerObserverCallback(function(ev) { - if (ev.event !== 'getFullContacts') { - $timeout(function () { - $scope.$apply(function() { - ContactService.getGroupList().then(function(groups) { - ctrl.groups = groups; - }); - ContactService.getContactFilters().then(function(contactFilters) { - ctrl.contactFilters = contactFilters; - }); - }); - }); - } - }); - - ctrl.setSelected = function (selectedGroup) { - SearchService.cleanSearch(); - $routeParams.gid = selectedGroup; - }; -}); diff --git a/js/components/groupList/groupList_directive.js b/js/components/groupList/groupList_directive.js deleted file mode 100644 index 42a7ff72..00000000 --- a/js/components/groupList/groupList_directive.js +++ /dev/null @@ -1,11 +0,0 @@ -angular.module('contactsApp') -.directive('grouplist', function() { - return { - restrict: 'EA', // has to be an attribute to work with core css - scope: {}, - controller: 'grouplistCtrl', - controllerAs: 'ctrl', - bindToController: {}, - templateUrl: OC.linkTo('contacts', 'templates/groupList.html') - }; -}); diff --git a/js/components/importScreen/importScreen_controller.js b/js/components/importScreen/importScreen_controller.js deleted file mode 100644 index b4f53d17..00000000 --- a/js/components/importScreen/importScreen_controller.js +++ /dev/null @@ -1,18 +0,0 @@ -angular.module('contactsApp') -.controller('importscreenCtrl', function($scope, ImportService) { - var ctrl = this; - - ctrl.t = { - importingTo : t('contacts', 'Importing into'), - selectAddressbook : t('contacts', 'Select your addressbook') - }; - - // Broadcast update - $scope.$on('importing', function () { - ctrl.selectedAddressBook = ImportService.selectedAddressBook; - ctrl.importedUser = ImportService.importedUser; - ctrl.importing = ImportService.importing; - ctrl.importPercent = ImportService.importPercent; - }); - -}); diff --git a/js/components/importScreen/importScreen_directive.js b/js/components/importScreen/importScreen_directive.js deleted file mode 100644 index 790c6254..00000000 --- a/js/components/importScreen/importScreen_directive.js +++ /dev/null @@ -1,11 +0,0 @@ -angular.module('contactsApp') -.directive('importscreen', function() { - return { - restrict: 'EA', // has to be an attribute to work with core css - scope: {}, - controller: 'importscreenCtrl', - controllerAs: 'ctrl', - bindToController: {}, - templateUrl: OC.linkTo('contacts', 'templates/importScreen.html') - }; -}); diff --git a/js/components/inputresize_directive.js b/js/components/inputresize_directive.js deleted file mode 100644 index b180abfe..00000000 --- a/js/components/inputresize_directive.js +++ /dev/null @@ -1,15 +0,0 @@ -angular.module('contactsApp') -.directive('inputresize', function() { - return { - restrict: 'A', - link : function (scope, element) { - var elInput = element.val(); - element.bind('keydown keyup load focus', function() { - elInput = element.val(); - // If set to 0, the min-width css data is ignored - var length = elInput.length > 1 ? elInput.length : 1; - element.attr('size', length); - }); - } - }; -}); diff --git a/js/components/newContactButton/newContactButton_controller.js b/js/components/newContactButton/newContactButton_controller.js deleted file mode 100644 index c38d8a78..00000000 --- a/js/components/newContactButton/newContactButton_controller.js +++ /dev/null @@ -1,23 +0,0 @@ -angular.module('contactsApp') -.controller('newContactButtonCtrl', function($scope, ContactService, $routeParams, vCardPropertiesService) { - var ctrl = this; - - ctrl.t = { - addContact : t('contacts', 'New contact') - }; - - ctrl.createContact = function() { - ContactService.create().then(function(contact) { - ['tel', 'adr', 'email'].forEach(function(field) { - var defaultValue = vCardPropertiesService.getMeta(field).defaultValue || {value: ''}; - contact.addProperty(field, defaultValue); - } ); - if ([t('contacts', 'All contacts'), t('contacts', 'Not grouped')].indexOf($routeParams.gid) === -1) { - contact.categories([ $routeParams.gid ]); - } else { - contact.categories([]); - } - $('#details-fullName').focus(); - }); - }; -}); diff --git a/js/components/newContactButton/newContactButton_directive.js b/js/components/newContactButton/newContactButton_directive.js deleted file mode 100644 index 65c2ee8a..00000000 --- a/js/components/newContactButton/newContactButton_directive.js +++ /dev/null @@ -1,11 +0,0 @@ -angular.module('contactsApp') -.directive('newcontactbutton', function() { - return { - restrict: 'EA', // has to be an attribute to work with core css - scope: {}, - controller: 'newContactButtonCtrl', - controllerAs: 'ctrl', - bindToController: {}, - templateUrl: OC.linkTo('contacts', 'templates/newContactButton.html') - }; -}); diff --git a/js/components/parsers/telModel_directive.js b/js/components/parsers/telModel_directive.js deleted file mode 100644 index f19dfb54..00000000 --- a/js/components/parsers/telModel_directive.js +++ /dev/null @@ -1,15 +0,0 @@ -angular.module('contactsApp') -.directive('telModel', function() { - return{ - restrict: 'A', - require: 'ngModel', - link: function(scope, element, attr, ngModel) { - ngModel.$formatters.push(function(value) { - return value; - }); - ngModel.$parsers.push(function(value) { - return value; - }); - } - }; -}); diff --git a/js/components/propertyGroup/propertyGroup_controller.js b/js/components/propertyGroup/propertyGroup_controller.js deleted file mode 100644 index 02106924..00000000 --- a/js/components/propertyGroup/propertyGroup_controller.js +++ /dev/null @@ -1,29 +0,0 @@ -angular.module('contactsApp') -.controller('propertyGroupCtrl', function(vCardPropertiesService) { - var ctrl = this; - - ctrl.meta = vCardPropertiesService.getMeta(ctrl.name); - - this.isHidden = function() { - return ctrl.meta.hasOwnProperty('hidden') && ctrl.meta.hidden === true; - }; - - this.getIconClass = function() { - return ctrl.meta.icon || 'icon-contacts-dark'; - }; - - this.getInfoClass = function() { - if (ctrl.meta.hasOwnProperty('info')) { - return 'icon-info'; - - } - }; - - this.getInfoText = function() { - return ctrl.meta.info; - }; - - this.getReadableName = function() { - return ctrl.meta.readableName; - }; -}); diff --git a/js/components/propertyGroup/propertyGroup_directive.js b/js/components/propertyGroup/propertyGroup_directive.js deleted file mode 100644 index d16a5d20..00000000 --- a/js/components/propertyGroup/propertyGroup_directive.js +++ /dev/null @@ -1,20 +0,0 @@ -angular.module('contactsApp') -.directive('propertygroup', function() { - return { - scope: {}, - controller: 'propertyGroupCtrl', - controllerAs: 'ctrl', - bindToController: { - properties: '=data', - name: '=', - contact: '=model' - }, - templateUrl: OC.linkTo('contacts', 'templates/propertyGroup.html'), - link: function(scope, element, attrs, ctrl) { - if(ctrl.isHidden()) { - // TODO replace with class - element.css('display', 'none'); - } - } - }; -}); diff --git a/js/components/select_directive.js b/js/components/select_directive.js deleted file mode 100644 index 3e60d170..00000000 --- a/js/components/select_directive.js +++ /dev/null @@ -1,23 +0,0 @@ -angular.module('contactsApp') -.directive('selectExpression', function ($timeout) { - return { - restrict: 'A', - link: { - post: function postLink(scope, element, attrs) { - scope.$watch(attrs.selectExpression, function () { - if (attrs.selectExpression) { - if (scope.$eval(attrs.selectExpression)) { - $timeout(function () { - if (element.is('input')) { - element.select(); - } else { - element.find('input').select(); - } - }, 100); //need some delay to work with ng-disabled - } - } - }); - } - } - }; -}); diff --git a/js/components/sortBy/sortBy_controller.js b/js/components/sortBy/sortBy_controller.js deleted file mode 100644 index 7ccd4c74..00000000 --- a/js/components/sortBy/sortBy_controller.js +++ /dev/null @@ -1,16 +0,0 @@ -angular.module('contactsApp') -.controller('sortbyCtrl', function(SortByService) { - var ctrl = this; - - var sortText = t('contacts', 'Sort by'); - ctrl.sortText = sortText; - - var sortList = SortByService.getSortByList(); - ctrl.sortList = sortList; - - ctrl.defaultOrder = SortByService.getSortByKey(); - - ctrl.updateSortBy = function() { - SortByService.setSortBy(ctrl.defaultOrder); - }; -}); diff --git a/js/components/sortBy/sortBy_directive.js b/js/components/sortBy/sortBy_directive.js deleted file mode 100644 index faf943a7..00000000 --- a/js/components/sortBy/sortBy_directive.js +++ /dev/null @@ -1,11 +0,0 @@ -angular.module('contactsApp') -.directive('sortby', function() { - return { - priority: 1, - scope: {}, - controller: 'sortbyCtrl', - controllerAs: 'ctrl', - bindToController: {}, - templateUrl: OC.linkTo('contacts', 'templates/sortBy.html') - }; -}); diff --git a/js/dav/.bower.json b/js/dav/.bower.json deleted file mode 100644 index acbb02d5..00000000 --- a/js/dav/.bower.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "dav", - "homepage": "https://github.com/irgendwie/dav", - "_release": "d33ecad1e6", - "_resolution": { - "type": "commit", - "commit": "d33ecad1e64202ec5b35b6911708d1253064b5a7" - }, - "_source": "git@github.com:irgendwie/dav.git", - "_target": "d33ecad1e64202ec5b35b6911708d1253064b5a7", - "_originalSource": "git@github.com:irgendwie/dav.git" -} \ No newline at end of file diff --git a/js/dav/.gitignore b/js/dav/.gitignore deleted file mode 100644 index c54db2af..00000000 --- a/js/dav/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -SabreDAV/ - -/*.zip -/build/ -/coverage/ -/dav.js.map -/dav.min.js -/node_modules/ diff --git a/js/dav/.npmignore b/js/dav/.npmignore deleted file mode 100644 index b3d3f89d..00000000 --- a/js/dav/.npmignore +++ /dev/null @@ -1,11 +0,0 @@ -SabreDAV/ - -/*.zip -/coverage/ -/Makefile -/.git -/.gitignore -/.jshintrc -/.travis.yml -/node_modules -/test diff --git a/js/dav/.travis.yml b/js/dav/.travis.yml deleted file mode 100644 index 46b9de7e..00000000 --- a/js/dav/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -# This is a bit weird since this is really a js project, -# but since we're using sabredav for integration testing -# and since travis doesn't support multiple languages -# and since travis additionally always installs a base node.js, -# the easiest thing to do is pretend to be php. -language: php -php: - - "5.4" -before_install: - - "nvm install iojs-v1.8.1" -install: npm install -script: npm test diff --git a/js/dav/CONTRIBUTING.md b/js/dav/CONTRIBUTING.md deleted file mode 100644 index 6bd75da0..00000000 --- a/js/dav/CONTRIBUTING.md +++ /dev/null @@ -1,57 +0,0 @@ -# Contributing - - - -**Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* - -- [Under the hood](#under-the-hood) -- [Running the tests](#running-the-tests) -- [Publishing a release](#publishing-a-release) -- [Related Material](#related-material) - - - -### Under the hood - -dav uses npm to manage external dependencies. External npm modules get bundled into the browser js binary with the (excellent) [browserify](http://browserify.org/) utility. dav uses the `DOMParser` and `XMLHttpRequest` web apis (to parse xml and send http requests). All of the async library operations use es6 [Promises](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise). - -### Running the tests - -``` -/////////////////////////////////////// -/ suite / command / -/////////////////////////////////////// -/ integration / make test-integration / -/////////////////////////////////////// -/ lint / make lint / -/////////////////////////////////////// -/ unit / make test-unit / -/////////////////////////////////////// -``` - -Things to note: - -+ As of 1.1.1, all of the tests run dav via nodejs. There are no browser tests (yet). -+ You can add helpful debug logs to test output with the `DEBUG` environment variable. - + Filter logs by setting `DEBUG=dav:*`, `DEBUG=dav:request:*`, etc. -+ Integration tests run against [sabredav](http://sabre.io/) - + The server code lives [here](https://github.com/gaye/dav/blob/master/test/integration/server/calendarserver.php) - + There is a make task which downloads a sabredav release from GitHub that `make test-integration` depends on - + The sabredav instance uses sqlite to store dav collections and objects among other things. - + The code that seeds the database lives [here](https://github.com/gaye/dav/blob/master/test/integration/server/bootstrap.js) - -### Publishing a release - -1. Update `package.json` to reflect the new version. Use [semver](http://semver.org/) to help decide what new version number is best. -2. If there are changes to the public api, document them in the README. Then regenerate the `README.md` table of contents with `make toc`. -3. Add a new entry to `HISTORY.md` with the new version number and a description of the changeset. Regenerate the `HISTORY.md` table of contents with `make toc`. -4. Commit the changes to `package.json`, `HISTORY.md`, and (perhaps) `README.md`. Push to GitHub. -5. Run `make && npm publish`. -6. Create a new GitHub release named `v.{MAJOR}.{MINOR}.{PATCH}` with a description of the changeset. Upload the freshly generated zipball `dav.zip`. - -### Related Material - -+ [Amazing webdav docs](http://sabre.io/dav/) -+ [RFC 4791](http://tools.ietf.org/html/rfc4791) -+ [RFC 5545](http://tools.ietf.org/html/rfc5545) -+ [RFC 6352](http://tools.ietf.org/html/rfc6352) diff --git a/js/dav/HISTORY.md b/js/dav/HISTORY.md deleted file mode 100644 index 310d4f97..00000000 --- a/js/dav/HISTORY.md +++ /dev/null @@ -1,271 +0,0 @@ - - -**Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* - -- [1.7.8](#178) -- [1.7.7](#177) -- [1.7.6](#176) -- [1.7.5](#175) -- [1.7.4](#174) -- [1.7.3](#173) -- [1.7.2](#172) -- [1.7.0](#170) -- [1.6.5](#165) -- [1.6.4](#164) -- [1.6.3](#163) -- [1.6.2](#162) -- [1.6.1](#161) -- [1.6.0](#160) -- [1.5.5](#155) -- [1.5.4](#154) -- [1.5.3](#153) -- [1.5.2](#152) -- [1.5.1](#151) -- [1.5.0](#150) -- [1.4.1](#141) -- [1.4.0](#140) -- [1.3.0](#130) -- [1.2.0](#120) -- [1.1.2](#112) -- [1.1.1](#111) -- [1.1.0](#110) -- [1.0.4](#104) -- [1.0.3](#103) -- [1.0.2](#102) -- [1.0.1](#101) -- [1.0.0](#100) -- [0.11.0](#0110) -- [0.10.1](#0101) -- [0.10.0](#0100) -- [0.9.3](#093) -- [0.9.2](#092) -- [0.9.1](#091) -- [0.9.0](#090) -- [0.8.0](#080) -- [0.7.1](#071) -- [0.7.0](#070) -- [0.6.0](#060) -- [0.5.0](#050) -- [0.4.0](#040) -- [0.3.1](#031) -- [0.3.0](#030) -- [0.2.0](#020) -- [0.1.0](#010) - - - -### 1.7.8 - -+ `listCalendars` passes through all calendars that contain iCalendar - objects and not just `VEVENT`s. - -### 1.7.7 - -+ Parser processes href and currentUserPrincipal elements - -### 1.7.6 - -+ Bundle `regeneratorRuntime` and polyfills for `Array.prototype.find` - and `Object.assign` so that consumers don't need babel polyfill. - -### 1.7.5 - -+ Trimmed the binary size to 128k minified -+ Remove babel polyfill -+ Remove handlebars - -### 1.7.4 - -+ Precompile handlebars templates -+ Use custom debug module - -### 1.7.3 - -+ Google CardDAV wasn't working due to a few issues like our url - comparison, Google requiring at least one filter for an addressbook - query, and Google sometimes returning propstats with statuses but no - props. - -### 1.7.2 - -+ Fix outstanding nodejs compatibility issues -+ Expose dav.version - -### 1.7.0 - -+ Remove lodash, json-stringify-safe, don't expose jsonify - -### 1.6.5 - -+ Add brfs as a dependency so that downstream consumers can browserify us - -### 1.6.4 - -+ Workaround https://github.com/substack/brfs/issues/39 - -### 1.6.3 - -+ Convert to use new es6/7 features and transpile with babel - -### 1.6.2 - -+ Export debug library under dav ns - -### 1.6.1 - -+ Don't bundle xmlhttprequest polyfill in browser binary... again - -### 1.6.0 - -+ Add #syncCaldavAccount and #syncCarddavAccount to the public api -+ Expose dav.jsonify and dav.ns -+ Small correctness fix to error case in basic calendar sync - -### 1.5.5 - -+ Bundle XMLHttpRequest polyfill for environments where it's not available - -### 1.5.4 - -+ Fix browser globals - -### 1.5.3 - -+ Don't use window in web workers - -### 1.5.2 - -+ Use xmldom in the browser since it's missing from web workers - -### 1.5.1 - -+ Expose dav browserify configuration to npm consumers - -### 1.5.0 - -+ Decouple requests from the urls they get sent to - -### 1.4.1 - -+ Add missing use strict statement to lib/index.js - -### 1.4.0 - -+ New sandbox interface - -### 1.3.0 - -+ Expose dav.Model, dav.Request, dav.Transport - -### 1.2.0 - -+ Implement client#send - -### 1.1.2 - -+ Trick browserify into not bundling node shims for web apis - -### 1.1.1 - -+ %s/toString/jsonify/ for models - -### 1.1.0 - -+ Support for rfc 6352 carddav - -### 1.0.4 - -+ Implement #toString on models - -### 1.0.3 - -+ Internal DELETE, PUT request refactor - -### 1.0.2 - -+ davinci -> dav - -### 1.0.1 - -+ Fix issues with browserify build - -### 1.0.0 - -+ Update interfaces for pluggable transports, expose transport layer -+ Support for oauth2 authentication -+ Clean up internal multistatus parser - -### 0.11.0 - -+ Support for rfc 6578 webdav sync - -### 0.10.1 - -+ Set request depth to 0 in the "getctag" propfind issued during sync - -### 0.10.0 - -+ Implement time-range filters for calendar queries - -### 0.9.3 - -+ Remove dependencies on ical.js and underscore - -### 0.9.2 - -+ Fix npm package -+ Change npm name to davincijs - -### 0.9.1 - -+ remove nodejs polyfills for DOMParser and XMLHttpRequest from build output -+ generate minified binaries - -### 0.9.0 - -+ Implement davinci.Client interface -+ Add transport layer to decouple request details and sending - -### 0.8.0 - -+ Expose low-level request methods through davinci.request -+ Add hook to requests to override transformResponse - -### 0.7.1 - -+ Expose the underlying, xml parsed dav responses on davinci.Calendar and davinci.CalendarObject models. - -### 0.7.0 - -+ Support providing timezone option to #createAccount and #syncCalendar - -### 0.6.0 - -+ #syncCalendar added to public api -+ The promise returned from #createAccount now resolves with a davinci.Account object instead of an array of davinci.Calendar objects. - -### 0.5.0 - -+ #deleteCalendarObject added to public api - -### 0.4.0 - -+ #updateCalendarObject added to public api -+ Internal api refactoring to expose Request objects - -### 0.3.1 - -+ Patch bug in build due to bug in brfs. - -### 0.3.0 - -+ #createCalendarObject modified to support sandboxing. - -### 0.2.0 - -+ #createCalendarObject added to public api - -### 0.1.0 - -+ #createAccount added to public api -+ #createSandbox added to public api diff --git a/js/dav/LICENSE b/js/dav/LICENSE deleted file mode 100644 index e87a115e..00000000 --- a/js/dav/LICENSE +++ /dev/null @@ -1,363 +0,0 @@ -Mozilla Public License, version 2.0 - -1. Definitions - -1.1. "Contributor" - - means each individual or legal entity that creates, contributes to the - creation of, or owns Covered Software. - -1.2. "Contributor Version" - - means the combination of the Contributions of others (if any) used by a - Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - - means Source Code Form to which the initial Contributor has attached the - notice in Exhibit A, the Executable Form of such Source Code Form, and - Modifications of such Source Code Form, in each case including portions - thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - a. that the initial Contributor has attached the notice described in - Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the terms of - a Secondary License. - -1.6. "Executable Form" - - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - - means a work that combines Covered Software with other material, in a - separate file or files, that is not Covered Software. - -1.8. "License" - - means this document. - -1.9. "Licensable" - - means having the right to grant, to the maximum extent possible, whether - at the time of the initial grant or subsequently, any and all of the - rights conveyed by this License. - -1.10. "Modifications" - - means any of the following: - - a. any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - -1.11. "Patent Claims" of a Contributor - - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the License, - by the making, using, selling, offering for sale, having made, import, - or transfer of either its Contributions or its Contributor Version. - -1.12. "Secondary License" - - means either the GNU General Public License, Version 2.0, the GNU Lesser - General Public License, Version 2.1, the GNU Affero General Public - License, Version 3.0, or any later versions of those licenses. - -1.13. "Source Code Form" - - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that controls, is - controlled by, or is under common control with You. For purposes of this - definition, "control" means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by contract or - otherwise, or (b) ownership of more than fifty percent (50%) of the - outstanding shares or beneficial ownership of such entity. - - -2. License Grants and Conditions - -2.1. Grants - - Each Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for - sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - - The licenses granted in Section 2.1 with respect to any Contribution - become effective for each Contribution on the date the Contributor first - distributes such Contribution. - -2.3. Limitations on Grant Scope - - The licenses granted in this Section 2 are the only rights granted under - this License. No additional rights or licenses will be implied from the - distribution or licensing of Covered Software under this License. - Notwithstanding Section 2.1(b) above, no patent license is granted by a - Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - - c. under Patent Claims infringed by Covered Software in the absence of - its Contributions. - - This License does not grant any rights in the trademarks, service marks, - or logos of any Contributor (except as may be necessary to comply with - the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - - No Contributor makes additional grants as a result of Your choice to - distribute the Covered Software under a subsequent version of this - License (see Section 10.2) or under the terms of a Secondary License (if - permitted under the terms of Section 3.3). - -2.5. Representation - - Each Contributor represents that the Contributor believes its - Contributions are its original creation(s) or it has sufficient rights to - grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - - This License is not intended to limit any rights You have under - applicable copyright doctrines of fair use, fair dealing, or other - equivalents. - -2.7. Conditions - - Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in - Section 2.1. - - -3. Responsibilities - -3.1. Distribution of Source Form - - All distribution of Covered Software in Source Code Form, including any - Modifications that You create or to which You contribute, must be under - the terms of this License. You must inform recipients that the Source - Code Form of the Covered Software is governed by the terms of this - License, and how they can obtain a copy of this License. You may not - attempt to alter or restrict the recipients' rights in the Source Code - Form. - -3.2. Distribution of Executable Form - - If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, - as described in Section 3.1, and You must inform recipients of the - Executable Form how they can obtain a copy of such Source Code Form by - reasonable means in a timely manner, at a charge no more than the cost - of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter the - recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - - You may create and distribute a Larger Work under terms of Your choice, - provided that You also comply with the requirements of this License for - the Covered Software. If the Larger Work is a combination of Covered - Software with a work governed by one or more Secondary Licenses, and the - Covered Software is not Incompatible With Secondary Licenses, this - License permits You to additionally distribute such Covered Software - under the terms of such Secondary License(s), so that the recipient of - the Larger Work may, at their option, further distribute the Covered - Software under the terms of either this License or such Secondary - License(s). - -3.4. Notices - - You may not remove or alter the substance of any license notices - (including copyright notices, patent notices, disclaimers of warranty, or - limitations of liability) contained within the Source Code Form of the - Covered Software, except that You may alter any license notices to the - extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - - You may choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of Covered - Software. However, You may do so only on Your own behalf, and not on - behalf of any Contributor. You must make it absolutely clear that any - such warranty, support, indemnity, or liability obligation is offered by - You alone, and You hereby agree to indemnify every Contributor for any - liability incurred by such Contributor as a result of warranty, support, - indemnity or liability terms You offer. You may include additional - disclaimers of warranty and limitations of liability specific to any - jurisdiction. - -4. Inability to Comply Due to Statute or Regulation - - If it is impossible for You to comply with any of the terms of this License - with respect to some or all of the Covered Software due to statute, - judicial order, or regulation then You must: (a) comply with the terms of - this License to the maximum extent possible; and (b) describe the - limitations and the code they affect. Such description must be placed in a - text file included with all distributions of the Covered Software under - this License. Except to the extent prohibited by statute or regulation, - such description must be sufficiently detailed for a recipient of ordinary - skill to be able to understand it. - -5. Termination - -5.1. The rights granted under this License will terminate automatically if You - fail to comply with any of its terms. However, if You become compliant, - then the rights granted under this License from a particular Contributor - are reinstated (a) provisionally, unless and until such Contributor - explicitly and finally terminates Your grants, and (b) on an ongoing - basis, if such Contributor fails to notify You of the non-compliance by - some reasonable means prior to 60 days after You have come back into - compliance. Moreover, Your grants from a particular Contributor are - reinstated on an ongoing basis if such Contributor notifies You of the - non-compliance by some reasonable means, this is the first time You have - received notice of non-compliance with this License from such - Contributor, and You become compliant prior to 30 days after Your receipt - of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent - infringement claim (excluding declaratory judgment actions, - counter-claims, and cross-claims) alleging that a Contributor Version - directly or indirectly infringes any patent, then the rights granted to - You by any and all Contributors for the Covered Software under Section - 2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user - license agreements (excluding distributors and resellers) which have been - validly granted by You or Your distributors under this License prior to - termination shall survive termination. - -6. Disclaimer of Warranty - - Covered Software is provided under this License on an "as is" basis, - without warranty of any kind, either expressed, implied, or statutory, - including, without limitation, warranties that the Covered Software is free - of defects, merchantable, fit for a particular purpose or non-infringing. - The entire risk as to the quality and performance of the Covered Software - is with You. Should any Covered Software prove defective in any respect, - You (not any Contributor) assume the cost of any necessary servicing, - repair, or correction. This disclaimer of warranty constitutes an essential - part of this License. No use of any Covered Software is authorized under - this License except under this disclaimer. - -7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including - negligence), contract, or otherwise, shall any Contributor, or anyone who - distributes Covered Software as permitted above, be liable to You for any - direct, indirect, special, incidental, or consequential damages of any - character including, without limitation, damages for lost profits, loss of - goodwill, work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses, even if such party shall have been - informed of the possibility of such damages. This limitation of liability - shall not apply to liability for death or personal injury resulting from - such party's negligence to the extent applicable law prohibits such - limitation. Some jurisdictions do not allow the exclusion or limitation of - incidental or consequential damages, so this exclusion and limitation may - not apply to You. - -8. Litigation - - Any litigation relating to this License may be brought only in the courts - of a jurisdiction where the defendant maintains its principal place of - business and such litigation shall be governed by laws of that - jurisdiction, without reference to its conflict-of-law provisions. Nothing - in this Section shall prevent a party's ability to bring cross-claims or - counter-claims. - -9. Miscellaneous - - This License represents the complete agreement concerning the subject - matter hereof. If any provision of this License is held to be - unenforceable, such provision shall be reformed only to the extent - necessary to make it enforceable. Any law or regulation which provides that - the language of a contract shall be construed against the drafter shall not - be used to construe this License against a Contributor. - - -10. Versions of the License - -10.1. New Versions - - Mozilla Foundation is the license steward. Except as provided in Section - 10.3, no one other than the license steward has the right to modify or - publish new versions of this License. Each version will be given a - distinguishing version number. - -10.2. Effect of New Versions - - You may distribute the Covered Software under the terms of the version - of the License under which You originally received the Covered Software, - or under the terms of any subsequent version published by the license - steward. - -10.3. Modified Versions - - If you create software not governed by this License, and you want to - create a new license for such software, you may create and use a - modified version of this License if you rename the license and remove - any references to the name of the license steward (except to note that - such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary - Licenses If You choose to distribute Source Code Form that is - Incompatible With Secondary Licenses under the terms of this version of - the License, the notice described in Exhibit B of this License must be - attached. - -Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the - terms of the Mozilla Public License, v. - 2.0. If a copy of the MPL was not - distributed with this file, You can - obtain one at - http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular file, -then You may include the notice in a location (such as a LICENSE file in a -relevant directory) where a recipient would be likely to look for such a -notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice - - This Source Code Form is "Incompatible - With Secondary Licenses", as defined by - the Mozilla Public License, v. 2.0. - diff --git a/js/dav/Makefile b/js/dav/Makefile deleted file mode 100644 index 4ef8d4ab..00000000 --- a/js/dav/Makefile +++ /dev/null @@ -1,60 +0,0 @@ -HBS := $(shell find lib/template/ -name "*.hbs") -JS := $(shell find lib/ -name "*.js") - -SABRE_DAV_VERSION=2.0.1 -SABRE_DAV_RELEASE=sabredav-$(SABRE_DAV_VERSION) -SABRE_DAV_ZIPBALL=$(SABRE_DAV_RELEASE).zip - -dav.zip: dav.js dav.min.js dav.js.map - zip dav dav.js dav.js.map dav.min.js - -dav.min.js dav.js.map: dav.js node_modules - ./node_modules/.bin/uglifyjs dav.js \ - --lint \ - --screw-ie8 \ - --output ./dav.min.js \ - --source-map ./dav.js.map - -dav.js: build node_modules - rm -rf dav.js /tmp/dav.js - ./node_modules/.bin/browserify --standalone dav ./build/index.js > /tmp/dav.js - cat lib/polyfill/*.js /tmp/dav.js > dav.js - -build: $(JS) $(HBS) node_modules - rm -rf build/ - ./node_modules/.bin/babel lib \ - --modules common \ - --out-dir build \ - --stage 4 - -node_modules: package.json - npm install - -.PHONY: clean -clean: - rm -rf *.zip SabreDAV build coverage dav.* node_modules test/integration/server/SabreDAV - -.PHONY: test -test: test-unit test-integration - -.PHONY: test-unit -test-unit: node_modules - ./node_modules/.bin/mocha test/unit - -.PHONY: test-integration -test-integration: node_modules test/integration/server/SabreDAV - ./node_modules/.bin/mocha test/integration - -.PHONY: toc -toc: node_modules - ./node_modules/.bin/doctoc CONTRIBUTING.md - ./node_modules/.bin/doctoc HISTORY.md - ./node_modules/.bin/doctoc README.md - -test/integration/server/SabreDAV: SabreDAV - cp -r SabreDAV test/integration/server/SabreDAV - cd test/integration/server/SabreDAV && cp ../calendarserver.php calendarserver.php - -SabreDAV: - wget -O $(SABRE_DAV_ZIPBALL) https://github.com/fruux/sabre-dav/releases/download/$(SABRE_DAV_VERSION)/$(SABRE_DAV_ZIPBALL) - unzip -q $(SABRE_DAV_ZIPBALL) diff --git a/js/dav/README.md b/js/dav/README.md deleted file mode 100644 index 7c123606..00000000 --- a/js/dav/README.md +++ /dev/null @@ -1,467 +0,0 @@ -dav -=== - -[![Build Status](https://travis-ci.org/gaye/dav.png?branch=master)](https://travis-ci.org/gaye/dav) - -WebDAV, CalDAV, and CardDAV client for nodejs and the browser. - - - -**Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* - -- [API](#api) - - [accounts](#accounts) - - [dav.createAccount(options)](#davcreateaccountoptions) - - [calendars](#calendars) - - [dav.createCalendarObject(calendar, options)](#davcreatecalendarobjectcalendar-options) - - [dav.updateCalendarObject(calendarObject, options)](#davupdatecalendarobjectcalendarobject-options) - - [dav.deleteCalendarObject(calendarObject, options)](#davdeletecalendarobjectcalendarobject-options) - - [dav.syncCalendar(calendar, options)](#davsynccalendarcalendar-options) - - [dav.syncCaldavAccount(account, options)](#davsynccaldavaccountaccount-options) - - [contacts](#contacts) - - [dav.createCard(addressBook, options)](#davcreatecardaddressbook-options) - - [dav.updateCard(card, options)](#davupdatecardcard-options) - - [dav.deleteCard(card, options)](#davdeletecardcard-options) - - [dav.syncAddressBook(addressBook, options)](#davsyncaddressbookaddressbook-options) - - [dav.syncCarddavAccount(account, options)](#davsynccarddavaccountaccount-options) - - [sandbox](#sandbox) - - [dav.Sandbox()](#davsandbox) - - [transport](#transport) - - [dav.transport.Basic(credentials)](#davtransportbasiccredentials) - - [dav.transport.Basic.send(request, options)](#davtransportbasicsendrequest-options) - - [dav.transport.OAuth2(credentials)](#davtransportoauth2credentials) - - [dav.transport.OAuth2.send(request, options)](#davtransportoauth2sendrequest-options) - - [request](#request) - - [dav.request.addressBookQuery(options)](#davrequestaddressbookqueryoptions) - - [dav.request.basic(options)](#davrequestbasicoptions) - - [dav.request.calendarQuery(options)](#davrequestcalendarqueryoptions) - - [dav.request.propfind(options)](#davrequestpropfindoptions) - - [dav.request.syncCollection(options)](#davrequestsynccollectionoptions) - - [Client](#client) - - [dav.Client(xhr, options)](#davclientxhr-options) - - [dav.Client.send(req, options)](#davclientsendreq-options) - - [etc](#etc) - - [dav.ns](#davns) - - [Example Usage](#example-usage) - - [Using the lower-level webdav request api](#using-the-lower-level-webdav-request-api) -- [Debugging](#debugging) - - - -## API - -### accounts - -#### dav.createAccount(options) - -Perform an initial download of a caldav or carddav account's data. Returns a [Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise) which will be fulfilled with a [dav.Account](https://github.com/gaye/dav/blob/master/lib/model/account.js) object. - -``` -Options: - - (String) accountType - one of 'caldav' or 'carddav'. Defaults to 'caldav'. - (Array.) filters - list of caldav filters to send with request. - (Boolean) loadCollections - whether or not to load dav collections. - (Boolean) loadObjects - whether or not to load dav objects. - (dav.Sandbox) sandbox - optional request sandbox. - (String) server - some url for server (needn't be base url). - (String) timezone - VTIMEZONE calendar object. - (dav.Transport) xhr - request sender. -``` - -### calendars - -#### dav.createCalendarObject(calendar, options) - -Create a calendar object on the parameter calendar. Returns a [Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise) which will be fulfilled when the calendar has been created. - -``` -@param {dav.Calendar} calendar the calendar to put the object on. - -Options: - - (String) data - rfc 5545 VCALENDAR object. - (String) filename - name for the calendar ics file. - (dav.Sandbox) sandbox - optional request sandbox. - (dav.Transport) xhr - request sender. -``` - -#### dav.updateCalendarObject(calendarObject, options) - -Persist updates to the parameter calendar object to the server. Returns a [Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise) which will be fulfilled when the calendar has been updated. - -``` -@param {dav.CalendarObject} calendarObject updated calendar object. - -Options: - - (dav.Sandbox) sandbox - optional request sandbox. - (dav.Transport) xhr - request sender. -``` - -#### dav.deleteCalendarObject(calendarObject, options) - -Delete the parameter calendar object on the server. Returns a [Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise) which will be fulfilled when the calendar has been deleted. - -``` -@param {dav.CalendarObject} calendarObject target calendar object. - -Options: - - (dav.Sandbox) sandbox - optional request sandbox. - (dav.Transport) xhr - request sender. -``` - -#### dav.syncCalendar(calendar, options) - -Fetch changes from the remote server to the parameter calendar. Returns a [Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise) which will be fulfilled with an updated [dav.Calendar](https://github.com/gaye/dav/blob/master/lib/model/calendar.js) object once sync is complete. - -``` -@param {dav.Calendar} calendar the calendar to fetch changes for. - -Options: - - (Array.) filters - list of caldav filters to send with request. - (dav.Sandbox) sandbox - optional request sandbox. - (String) syncMethod - either 'basic' or 'webdav'. If unspecified, will - try to do webdav sync and failover to basic sync if rfc 6578 is not - supported by the server. - (String) timezone - VTIMEZONE calendar object. - (dav.Transport) xhr - request sender. -``` - -#### dav.syncCaldavAccount(account, options) - -Fetch changes from the remote server to the account's calendars. Returns a [Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise) which will be fulfilled with an updated [dav.Account](https://github.com/gaye/dav/blob/master/lib/model/account.js) object once sync is complete. - -``` -@param {dav.Account} account the calendar account to sync. - -Options: - - (dav.Sandbox) sandbox - optional request sandbox. - (dav.Transport) xhr - request sender. -``` - -### contacts - -#### dav.createCard(addressBook, options) - -Create a vcard object on the parameter address book. Returns a [Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise) which will be fulfilled when the vcard has been created. - -``` -@param {dav.AddressBook} addressBook the address book to put the object on. - -Options: - - (String) data - VCARD object. - (String) filename - name for the vcard vcf file. - (dav.Sandbox) sandbox - optional request sandbox. - (dav.Transport) xhr - request sender. -``` - -#### dav.updateCard(card, options) - -Persist updates to the parameter vcard object to the server. Returns a [Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise) which will be fulfilled when the vcard has been updated. - -``` -@param {dav.VCard} card updated vcard object. - -Options: - - (dav.Sandbox) sandbox - optional request sandbox. - (dav.Transport) xhr - request sender. -``` - -#### dav.deleteCard(card, options) - -Delete the parameter vcard object on the server. Returns a [Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise) which will be fulfilled when the vcard has been deleted. - -``` -@param {dav.VCard} card target vcard object. - -Options: - - (dav.Sandbox) sandbox - optional request sandbox. - (dav.Transport) xhr - request sender. -``` - -#### dav.syncAddressBook(addressBook, options) - -Fetch changes from the remote server to the parameter address books. Returns a [Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise) which will be fulfilled with an updated [dav.AddressBook](https://github.com/gaye/dav/blob/master/lib/model/address_book.js) object once sync is complete. - -``` -@param {dav.AddressBook} addressBook the address book to fetch changes for. - -Options: - - (dav.Sandbox) sandbox - optional request sandbox. - (String) syncMethod - either 'basic' or 'webdav'. If unspecified, will - try to do webdav sync and failover to basic sync if rfc 6578 is not - supported by the server. - (dav.Transport) xhr - request sender. -``` -#### dav.syncCarddavAccount(account, options) - -Fetch changes from the remote server to the account's address books. Returns a [Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise) which will be fulfilled with an updated [dav.Account](https://github.com/gaye/dav/blob/master/lib/model/account.js) object once sync is complete. - -``` -@param {dav.Account} account the address book account to sync. - -Options: - - (dav.Sandbox) sandbox - optional request sandbox. - (dav.Transport) xhr - request sender. -``` - -### sandbox - -#### dav.Sandbox() - -Create a request sandbox. There is also a deprecated interface -`dav.createSandbox()`. Add requests to the sandbox like so: - -```js -var sandbox = new dav.Sandbox(); -// sandbox instanceof Sandbox -dav.createAccount({ - username: 'Yoshi', - password: 'babybowsersoscaryomg', - server: 'https://caldav.yoshisstory.com', - sandbox: sandbox // <- Insert sandbox here! -}) -.then(function(calendars) { - // etc, etc. -}); -``` -And abort sandboxed requests as a group with `sandbox.abort()`. - -### transport - -#### dav.transport.Basic(credentials) - -Create a new `dav.transport.Basic` object. This sends dav requests using http basic authentication. - -``` -@param {dav.Credentials} credentials user authorization. -``` - -##### dav.transport.Basic.send(request, options) - -``` -@param {dav.Request} request object with request info. -@return {Promise} a promise that will be resolved with an xhr request after its readyState is 4 or the result of applying an optional request `transformResponse` function to the xhr object after its readyState is 4. - -Options: - - (dav.Sandbox) sandbox - optional request sandbox. -``` - -#### dav.transport.OAuth2(credentials) - -Create a new `dav.transport.OAuth2` object. This sends dav requests authorized via rfc 6749 oauth2. - -``` -@param {dav.Credentials} credentials user authorization. -``` - -##### dav.transport.OAuth2.send(request, options) - -``` -@param {dav.Request} request object with request info. -@return {Promise} a promise that will be resolved with an xhr request after its readyState is 4 or the result of applying an optional request `transformResponse` function to the xhr object after its readyState is 4. - -Options: - - (dav.Sandbox) sandbox - optional request sandbox. -``` - -### request - -#### dav.request.addressBookQuery(options) - -``` -Options: - - (String) depth - optional value for Depth header. - (Array.) props - list of props to request. -``` - -#### dav.request.basic(options) - -``` -Options: - - (String) data - put request body. - (String) method - http method. - (String) etag - cached calendar object etag. -``` - -#### dav.request.calendarQuery(options) - -``` -Options: - - (String) depth - optional value for Depth header. - (Array.) filters - list of filters to send with request. - (Array.) props - list of props to request. - (String) timezone - VTIMEZONE calendar object. -``` - -#### dav.request.propfind(options) - -``` -Options: - - (String) depth - optional value for Depth header. - (Array.) props - list of props to request. -``` - -#### dav.request.syncCollection(options) - -``` -Options: - - (String) depth - option value for Depth header. - (Array.) props - list of props to request. - (Number) syncLevel - indicates scope of the sync report request. - (String) syncToken - synchronization token provided by the server. -``` - -### Client - -#### dav.Client(xhr, options) - -Create a new `dav.Client` object. The client interface allows consumers to set their credentials and transport once and then make authorized requests without passing them to each request. Each of the other, public API methods should be available on `dav.Client` objects. - -``` -@param {dav.Transport} xhr - request sender. - -Options: - - (String) baseUrl - root url to resolve relative request urls with. -``` - -##### dav.Client.send(req, options) - -Send a request using this client's transport (and perhaps baseUrl). - -``` -@param {dav.request.Request} req - dav request. -@return {Promise} a promise that will be resolved with an xhr request after its readyState is 4 or the result of applying an optional request `transformResponse` function to the xhr object after its readyState is 4. - -Options: - - (dav.Sandbox) sandbox - optional request sandbox. - (String) url - relative url for request. -``` - -### etc - -#### dav.ns - -Object that holds various xml namespace constants. - -### Example Usage - -```js -var dav = require('dav'); - -var xhr = new dav.transport.Basic( - new dav.Credentials({ - username: 'xxx', - password: 'xxx' - }) -); - -dav.createAccount({ server: 'http://dav.example.com', xhr: xhr }) -.then(function(account) { - // account instanceof dav.Account - account.calendars.forEach(function(calendar) { - console.log('Found calendar named ' + calendar.displayName); - // etc. - }); -}); - -// Or, using the dav.Client interface: - -var client = new dav.Client(xhr); -// No transport arg -client.createAccount({ - server: 'http://dav.example.com', - accountType: 'carddav' -}) -.then(function(account) { - account.addressBooks.forEach(function(addressBook) { - console.log('Found address book name ' + addressBook.displayName); - // etc. - }); -}); -``` - -#### Using the lower-level webdav request api - -_Caution_: The lower-level request api is undergoing some _major_ reworking with frequent changes which will break consumers upgrading from earlier versions. If you're looking for a stable api and can live with the higher-level CalDAV and/or CardDAV abstractions, I _strongly_ recommend those since that api is largely stable. - -``` -var dav = require('dav'); - -var client = new dav.Client( - new dav.transport.Basic( - new dav.Credentials({ - username: 'xxx', - password: 'xxx' - }) - ), - { - baseUrl: 'https://mail.mozilla.com' - } -); - -var req = dav.request.basic({ - method: 'PUT', - data: 'BEGIN:VCALENDAR\nEND:VCALENDAR', - etag: '12345' -}); - -// req instanceof dav.Request - -client.send(req, '/calendars/123.ics') -.then(function(response) { - // response instanceof XMLHttpRequest -}); -``` - -Or perhaps without the client: - -``` -var dav = require('dav'); - -var xhr = new dav.transport.Basic( - new dav.Credentials({ - username: 'xxx', - password: 'xxx' - }) -); - -// xhr instanceof dav.Transport - -var req = dav.request.basic({ - method: 'PUT', - data: 'BEGIN:VCALENDAR\nEND:VCALENDAR', - etag: '12345' -}); - -// req instanceof dav.Request - -xhr.send(req, 'https://mail.mozilla.com/calendars/123.ics') -.then(function(response) { - // response instanceof XMLHttpRequest -}); -``` - -For more example usages, check out the [suite of integration tests](https://github.com/gaye/dav/tree/master/test/integration). - -## Debugging - -dav can tell you a lot of potentially useful things if you set `dav.debug.enabled = true`. diff --git a/js/dav/dav.js b/js/dav/dav.js deleted file mode 100644 index 2daba158..00000000 --- a/js/dav/dav.js +++ /dev/null @@ -1,7613 +0,0 @@ -/** - * Polyfill from developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/find - */ -if (!Array.prototype.find) { - Array.prototype.find = function(predicate) { - if (this == null) { - throw new TypeError('Array.prototype.find called on null or undefined'); - } - if (typeof predicate !== 'function') { - throw new TypeError('predicate must be a function'); - } - var list = Object(this); - var length = list.length >>> 0; - var thisArg = arguments[1]; - var value; - - for (var i = 0; i < length; i++) { - value = list[i]; - if (predicate.call(thisArg, value, i, list)) { - return value; - } - } - return undefined; - }; -} -/** - * Polyfill from developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign - */ -if (!Object.assign) { - Object.defineProperty(Object, 'assign', { - enumerable: false, - configurable: true, - writable: true, - value: function(target, firstSource) { - 'use strict'; - if (target === undefined || target === null) { - throw new TypeError('Cannot convert first argument to object'); - } - - var to = Object(target); - for (var i = 1; i < arguments.length; i++) { - var nextSource = arguments[i]; - if (nextSource === undefined || nextSource === null) { - continue; - } - nextSource = Object(nextSource); - - var keysArray = Object.keys(Object(nextSource)); - for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) { - var nextKey = keysArray[nextIndex]; - var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); - if (desc !== undefined && desc.enumerable) { - to[nextKey] = nextSource[nextKey]; - } - } - } - return to; - } - }); -} -/** - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * https://raw.github.com/facebook/regenerator/master/LICENSE file. An - * additional grant of patent rights can be found in the PATENTS file in - * the same directory. - */ - -!(function(global) { - "use strict"; - - var hasOwn = Object.prototype.hasOwnProperty; - var undefined; // More compressible than void 0. - var iteratorSymbol = - typeof Symbol === "function" && Symbol.iterator || "@@iterator"; - - var inModule = typeof module === "object"; - var runtime = global.regeneratorRuntime; - if (runtime) { - if (inModule) { - // If regeneratorRuntime is defined globally and we're in a module, - // make the exports object identical to regeneratorRuntime. - module.exports = runtime; - } - // Don't bother evaluating the rest of this file if the runtime was - // already defined globally. - return; - } - - // Define the runtime globally (as expected by generated code) as either - // module.exports (if we're in a module) or a new, empty object. - runtime = global.regeneratorRuntime = inModule ? module.exports : {}; - - function wrap(innerFn, outerFn, self, tryLocsList) { - // If outerFn provided, then outerFn.prototype instanceof Generator. - var generator = Object.create((outerFn || Generator).prototype); - - generator._invoke = makeInvokeMethod( - innerFn, self || null, - new Context(tryLocsList || []) - ); - - return generator; - } - runtime.wrap = wrap; - - // Try/catch helper to minimize deoptimizations. Returns a completion - // record like context.tryEntries[i].completion. This interface could - // have been (and was previously) designed to take a closure to be - // invoked without arguments, but in all the cases we care about we - // already have an existing method we want to call, so there's no need - // to create a new function object. We can even get away with assuming - // the method takes exactly one argument, since that happens to be true - // in every case, so we don't have to touch the arguments object. The - // only additional allocation required is the completion record, which - // has a stable shape and so hopefully should be cheap to allocate. - function tryCatch(fn, obj, arg) { - try { - return { type: "normal", arg: fn.call(obj, arg) }; - } catch (err) { - return { type: "throw", arg: err }; - } - } - - var GenStateSuspendedStart = "suspendedStart"; - var GenStateSuspendedYield = "suspendedYield"; - var GenStateExecuting = "executing"; - var GenStateCompleted = "completed"; - - // Returning this object from the innerFn has the same effect as - // breaking out of the dispatch switch statement. - var ContinueSentinel = {}; - - // Dummy constructor functions that we use as the .constructor and - // .constructor.prototype properties for functions that return Generator - // objects. For full spec compliance, you may wish to configure your - // minifier not to mangle the names of these two functions. - function Generator() {} - function GeneratorFunction() {} - function GeneratorFunctionPrototype() {} - - var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype; - GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; - GeneratorFunctionPrototype.constructor = GeneratorFunction; - GeneratorFunction.displayName = "GeneratorFunction"; - - runtime.isGeneratorFunction = function(genFun) { - var ctor = typeof genFun === "function" && genFun.constructor; - return ctor - ? ctor === GeneratorFunction || - // For the native GeneratorFunction constructor, the best we can - // do is to check its .name property. - (ctor.displayName || ctor.name) === "GeneratorFunction" - : false; - }; - - runtime.mark = function(genFun) { - genFun.__proto__ = GeneratorFunctionPrototype; - genFun.prototype = Object.create(Gp); - return genFun; - }; - - runtime.async = function(innerFn, outerFn, self, tryLocsList) { - return new Promise(function(resolve, reject) { - var generator = wrap(innerFn, outerFn, self, tryLocsList); - var callNext = step.bind(generator, "next"); - var callThrow = step.bind(generator, "throw"); - - function step(method, arg) { - var record = tryCatch(generator[method], generator, arg); - if (record.type === "throw") { - reject(record.arg); - return; - } - - var info = record.arg; - if (info.done) { - resolve(info.value); - } else { - Promise.resolve(info.value).then(callNext, callThrow); - } - } - - callNext(); - }); - }; - - function makeInvokeMethod(innerFn, self, context) { - var state = GenStateSuspendedStart; - - return function invoke(method, arg) { - if (state === GenStateExecuting) { - throw new Error("Generator is already running"); - } - - if (state === GenStateCompleted) { - // Be forgiving, per 25.3.3.3.3 of the spec: - // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume - return doneResult(); - } - - while (true) { - var delegate = context.delegate; - if (delegate) { - if (method === "return" || - (method === "throw" && delegate.iterator[method] === undefined)) { - // A return or throw (when the delegate iterator has no throw - // method) always terminates the yield* loop. - context.delegate = null; - - // If the delegate iterator has a return method, give it a - // chance to clean up. - var returnMethod = delegate.iterator["return"]; - if (returnMethod) { - var record = tryCatch(returnMethod, delegate.iterator, arg); - if (record.type === "throw") { - // If the return method threw an exception, let that - // exception prevail over the original return or throw. - method = "throw"; - arg = record.arg; - continue; - } - } - - if (method === "return") { - // Continue with the outer return, now that the delegate - // iterator has been terminated. - continue; - } - } - - var record = tryCatch( - delegate.iterator[method], - delegate.iterator, - arg - ); - - if (record.type === "throw") { - context.delegate = null; - - // Like returning generator.throw(uncaught), but without the - // overhead of an extra function call. - method = "throw"; - arg = record.arg; - continue; - } - - // Delegate generator ran and handled its own exceptions so - // regardless of what the method was, we continue as if it is - // "next" with an undefined arg. - method = "next"; - arg = undefined; - - var info = record.arg; - if (info.done) { - context[delegate.resultName] = info.value; - context.next = delegate.nextLoc; - } else { - state = GenStateSuspendedYield; - return info; - } - - context.delegate = null; - } - - if (method === "next") { - if (state === GenStateSuspendedYield) { - context.sent = arg; - } else { - delete context.sent; - } - - } else if (method === "throw") { - if (state === GenStateSuspendedStart) { - state = GenStateCompleted; - throw arg; - } - - if (context.dispatchException(arg)) { - // If the dispatched exception was caught by a catch block, - // then let that catch block handle the exception normally. - method = "next"; - arg = undefined; - } - - } else if (method === "return") { - context.abrupt("return", arg); - } - - state = GenStateExecuting; - - var record = tryCatch(innerFn, self, context); - if (record.type === "normal") { - // If an exception is thrown from innerFn, we leave state === - // GenStateExecuting and loop back for another invocation. - state = context.done - ? GenStateCompleted - : GenStateSuspendedYield; - - var info = { - value: record.arg, - done: context.done - }; - - if (record.arg === ContinueSentinel) { - if (context.delegate && method === "next") { - // Deliberately forget the last sent value so that we don't - // accidentally pass it on to the delegate. - arg = undefined; - } - } else { - return info; - } - - } else if (record.type === "throw") { - state = GenStateCompleted; - // Dispatch the exception by looping back around to the - // context.dispatchException(arg) call above. - method = "throw"; - arg = record.arg; - } - } - }; - } - - function defineGeneratorMethod(method) { - Gp[method] = function(arg) { - return this._invoke(method, arg); - }; - } - defineGeneratorMethod("next"); - defineGeneratorMethod("throw"); - defineGeneratorMethod("return"); - - Gp[iteratorSymbol] = function() { - return this; - }; - - Gp.toString = function() { - return "[object Generator]"; - }; - - function pushTryEntry(locs) { - var entry = { tryLoc: locs[0] }; - - if (1 in locs) { - entry.catchLoc = locs[1]; - } - - if (2 in locs) { - entry.finallyLoc = locs[2]; - entry.afterLoc = locs[3]; - } - - this.tryEntries.push(entry); - } - - function resetTryEntry(entry) { - var record = entry.completion || {}; - record.type = "normal"; - delete record.arg; - entry.completion = record; - } - - function Context(tryLocsList) { - // The root entry object (effectively a try statement without a catch - // or a finally block) gives us a place to store values thrown from - // locations where there is no enclosing try statement. - this.tryEntries = [{ tryLoc: "root" }]; - tryLocsList.forEach(pushTryEntry, this); - this.reset(); - } - - runtime.keys = function(object) { - var keys = []; - for (var key in object) { - keys.push(key); - } - keys.reverse(); - - // Rather than returning an object with a next method, we keep - // things simple and return the next function itself. - return function next() { - while (keys.length) { - var key = keys.pop(); - if (key in object) { - next.value = key; - next.done = false; - return next; - } - } - - // To avoid creating an additional object, we just hang the .value - // and .done properties off the next function object itself. This - // also ensures that the minifier will not anonymize the function. - next.done = true; - return next; - }; - }; - - function values(iterable) { - if (iterable) { - var iteratorMethod = iterable[iteratorSymbol]; - if (iteratorMethod) { - return iteratorMethod.call(iterable); - } - - if (typeof iterable.next === "function") { - return iterable; - } - - if (!isNaN(iterable.length)) { - var i = -1, next = function next() { - while (++i < iterable.length) { - if (hasOwn.call(iterable, i)) { - next.value = iterable[i]; - next.done = false; - return next; - } - } - - next.value = undefined; - next.done = true; - - return next; - }; - - return next.next = next; - } - } - - // Return an iterator with no values. - return { next: doneResult }; - } - runtime.values = values; - - function doneResult() { - return { value: undefined, done: true }; - } - - Context.prototype = { - constructor: Context, - - reset: function() { - this.prev = 0; - this.next = 0; - this.sent = undefined; - this.done = false; - this.delegate = null; - - this.tryEntries.forEach(resetTryEntry); - - // Pre-initialize at least 20 temporary variables to enable hidden - // class optimizations for simple generators. - for (var tempIndex = 0, tempName; - hasOwn.call(this, tempName = "t" + tempIndex) || tempIndex < 20; - ++tempIndex) { - this[tempName] = null; - } - }, - - stop: function() { - this.done = true; - - var rootEntry = this.tryEntries[0]; - var rootRecord = rootEntry.completion; - if (rootRecord.type === "throw") { - throw rootRecord.arg; - } - - return this.rval; - }, - - dispatchException: function(exception) { - if (this.done) { - throw exception; - } - - var context = this; - function handle(loc, caught) { - record.type = "throw"; - record.arg = exception; - context.next = loc; - return !!caught; - } - - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - var record = entry.completion; - - if (entry.tryLoc === "root") { - // Exception thrown outside of any try block that could handle - // it, so set the completion value of the entire function to - // throw the exception. - return handle("end"); - } - - if (entry.tryLoc <= this.prev) { - var hasCatch = hasOwn.call(entry, "catchLoc"); - var hasFinally = hasOwn.call(entry, "finallyLoc"); - - if (hasCatch && hasFinally) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } else if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - - } else if (hasCatch) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } - - } else if (hasFinally) { - if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - - } else { - throw new Error("try statement without catch or finally"); - } - } - } - }, - - abrupt: function(type, arg) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.tryLoc <= this.prev && - hasOwn.call(entry, "finallyLoc") && - this.prev < entry.finallyLoc) { - var finallyEntry = entry; - break; - } - } - - if (finallyEntry && - (type === "break" || - type === "continue") && - finallyEntry.tryLoc <= arg && - arg <= finallyEntry.finallyLoc) { - // Ignore the finally entry if control is not jumping to a - // location outside the try/catch block. - finallyEntry = null; - } - - var record = finallyEntry ? finallyEntry.completion : {}; - record.type = type; - record.arg = arg; - - if (finallyEntry) { - this.next = finallyEntry.finallyLoc; - } else { - this.complete(record); - } - - return ContinueSentinel; - }, - - complete: function(record, afterLoc) { - if (record.type === "throw") { - throw record.arg; - } - - if (record.type === "break" || - record.type === "continue") { - this.next = record.arg; - } else if (record.type === "return") { - this.rval = record.arg; - this.next = "end"; - } else if (record.type === "normal" && afterLoc) { - this.next = afterLoc; - } - }, - - finish: function(finallyLoc) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.finallyLoc === finallyLoc) { - this.complete(entry.completion, entry.afterLoc); - resetTryEntry(entry); - return ContinueSentinel; - } - } - }, - - "catch": function(tryLoc) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.tryLoc === tryLoc) { - var record = entry.completion; - if (record.type === "throw") { - var thrown = record.arg; - resetTryEntry(entry); - } - return thrown; - } - } - - // The context.catch method must only be called with a location - // argument that corresponds to a known catch block. - throw new Error("illegal catch attempt"); - }, - - delegateYield: function(iterable, resultName, nextLoc) { - this.delegate = { - iterator: values(iterable), - resultName: resultName, - nextLoc: nextLoc - }; - - return ContinueSentinel; - } - }; -})( - // Among the various tricks for obtaining a reference to the global - // object, this seems to be the most reliable technique that does not - // use indirect eval (which violates Content Security Policy). - typeof global === "object" ? global : - typeof window === "object" ? window : - typeof self === "object" ? self : this -); -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.dav = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 300 && xhr.status < 400)) { - context$1$0.next = 14; - break; - } - - _location = xhr.getResponseHeader('Location'); - - if (!(typeof _location === 'string' && _location.length)) { - context$1$0.next = 14; - break; - } - - debug('Discovery redirected to ' + _location); - return context$1$0.abrupt('return', _url2['default'].format({ - protocol: endpoint.protocol, - host: endpoint.host, - pathname: _location - })); - - case 14: - context$1$0.next = 19; - break; - - case 16: - context$1$0.prev = 16; - context$1$0.t0 = context$1$0['catch'](5); - - debug('Discovery failed... failover to the provided url'); - - case 19: - return context$1$0.abrupt('return', endpoint.href); - - case 20: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this, [[5, 16]]); -})); - -/** - * rfc 5397. - * - * @param {dav.Account} account to get principal url for. - */ -var principalUrl = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(account, options) { - var req, res, container; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - debug('Fetch principal url from context path ' + account.rootUrl + '.'); - req = request.propfind({ - props: [{ name: 'current-user-principal', namespace: ns.DAV }], - depth: 0, - mergeResponses: true - }); - context$1$0.next = 4; - return options.xhr.send(req, account.rootUrl, { - sandbox: options.sandbox - }); - - case 4: - res = context$1$0.sent; - container = res.props; - - debug('Received principal: ' + container.currentUserPrincipal); - return context$1$0.abrupt('return', _url2['default'].resolve(account.rootUrl, container.currentUserPrincipal)); - - case 8: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); - -/** - * @param {dav.Account} account to get home url for. - */ -var homeUrl = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(account, options) { - var prop, req, responses, response, container, href; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - debug('Fetch home url from principal url ' + account.principalUrl + '.'); - prop = undefined; - - if (options.accountType === 'caldav') { - prop = { name: 'calendar-home-set', namespace: ns.CALDAV }; - } else if (options.accountType === 'carddav') { - prop = { name: 'addressbook-home-set', namespace: ns.CARDDAV }; - } - - req = request.propfind({ props: [prop] }); - context$1$0.next = 6; - return options.xhr.send(req, account.principalUrl, { - sandbox: options.sandbox - }); - - case 6: - responses = context$1$0.sent; - response = responses.find(function (response) { - return (0, _fuzzy_url_equals2['default'])(account.principalUrl, response.href); - }); - container = response.props; - href = undefined; - - if (options.accountType === 'caldav') { - debug('Received home: ' + container.calendarHomeSet); - href = container.calendarHomeSet; - } else if (options.accountType === 'carddav') { - debug('Received home: ' + container.addressbookHomeSet); - href = container.addressbookHomeSet; - } - - return context$1$0.abrupt('return', _url2['default'].resolve(account.rootUrl, href)); - - case 12: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); - -/** - * Options: - * - * (String) accountType - one of 'caldav' or 'carddav'. Defaults to 'caldav'. - * (Array.) filters - list of caldav filters to send with request. - * (Boolean) loadCollections - whether or not to load dav collections. - * (Boolean) loadObjects - whether or not to load dav objects. - * (dav.Sandbox) sandbox - optional request sandbox. - * (String) server - some url for server (needn't be base url). - * (String) timezone - VTIMEZONE calendar object. - * (dav.Transport) xhr - request sender. - * - * @return {Promise} a promise that will resolve with a dav.Account object. - */ -exports.createAccount = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(options) { - var account, key, loadCollections, loadObjects, collections; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - options = Object.assign({}, defaults, options); - if (typeof options.loadObjects !== 'boolean') { - options.loadObjects = options.loadCollections; - } - - account = new _model.Account({ - server: options.server, - credentials: options.xhr.credentials - }); - context$1$0.next = 5; - return serviceDiscovery(account, options); - - case 5: - account.rootUrl = context$1$0.sent; - context$1$0.next = 8; - return principalUrl(account, options); - - case 8: - account.principalUrl = context$1$0.sent; - context$1$0.next = 11; - return homeUrl(account, options); - - case 11: - account.homeUrl = context$1$0.sent; - - if (options.loadCollections) { - context$1$0.next = 14; - break; - } - - return context$1$0.abrupt('return', account); - - case 14: - key = undefined, loadCollections = undefined, loadObjects = undefined; - - if (options.accountType === 'caldav') { - key = 'calendars'; - loadCollections = _calendars.listCalendars; - loadObjects = _calendars.listCalendarObjects; - } else if (options.accountType === 'carddav') { - key = 'addressBooks'; - loadCollections = _contacts.listAddressBooks; - loadObjects = _contacts.listVCards; - } - - context$1$0.next = 18; - return loadCollections(account, options); - - case 18: - collections = context$1$0.sent; - - account[key] = collections; - - if (options.loadObjects) { - context$1$0.next = 22; - break; - } - - return context$1$0.abrupt('return', account); - - case 22: - context$1$0.next = 24; - return collections.map(_co2['default'].wrap(regeneratorRuntime.mark(function callee$1$0(collection) { - return regeneratorRuntime.wrap(function callee$1$0$(context$2$0) { - while (1) switch (context$2$0.prev = context$2$0.next) { - case 0: - context$2$0.prev = 0; - context$2$0.next = 3; - return loadObjects(collection, options); - - case 3: - collection.objects = context$2$0.sent; - context$2$0.next = 9; - break; - - case 6: - context$2$0.prev = 6; - context$2$0.t0 = context$2$0['catch'](0); - - collection.error = context$2$0.t0; - - case 9: - case 'end': - return context$2$0.stop(); - } - }, callee$1$0, this, [[0, 6]]); - }))); - - case 24: - - account[key] = account[key].filter(function (collection) { - return !collection.error; - }); - - return context$1$0.abrupt('return', account); - - case 26: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); - -// http redirect. -},{"./calendars":2,"./contacts":5,"./debug":6,"./fuzzy_url_equals":7,"./model":9,"./namespace":10,"./request":12,"co":27,"url":32}],2:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports.createCalendarObject = createCalendarObject; -exports.updateCalendarObject = updateCalendarObject; -exports.deleteCalendarObject = deleteCalendarObject; -exports.syncCalendar = syncCalendar; - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _co = require('co'); - -var _co2 = _interopRequireDefault(_co); - -var _url = require('url'); - -var _url2 = _interopRequireDefault(_url); - -var _fuzzy_url_equals = require('./fuzzy_url_equals'); - -var _fuzzy_url_equals2 = _interopRequireDefault(_fuzzy_url_equals); - -var _model = require('./model'); - -var _namespace = require('./namespace'); - -var ns = _interopRequireWildcard(_namespace); - -var _request = require('./request'); - -var request = _interopRequireWildcard(_request); - -var _webdav = require('./webdav'); - -var webdav = _interopRequireWildcard(_webdav); - -var debug = require('./debug')('dav:calendars'); - -var ICAL_OBJS = new Set(['VEVENT', 'VTODO', 'VJOURNAL', 'VFREEBUSY', 'VTIMEZONE', 'VALARM']); - -/** - * @param {dav.Account} account to fetch calendars for. - */ -var listCalendars = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(account, options) { - var req, responses, cals; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - debug('Fetch calendars from home url ' + account.homeUrl); - req = request.propfind({ - props: [{ name: 'calendar-description', namespace: ns.CALDAV }, { name: 'calendar-timezone', namespace: ns.CALDAV }, { name: 'displayname', namespace: ns.DAV }, { name: 'getctag', namespace: ns.CALENDAR_SERVER }, { name: 'resourcetype', namespace: ns.DAV }, { name: 'supported-calendar-component-set', namespace: ns.CALDAV }, { name: 'sync-token', namespace: ns.DAV }], - depth: 1 - }); - context$1$0.next = 4; - return options.xhr.send(req, account.homeUrl, { - sandbox: options.sandbox - }); - - case 4: - responses = context$1$0.sent; - - debug('Found ' + responses.length + ' calendars.'); - cals = responses.filter(function (res) { - // We only want the calendar if it contains iCalendar objects. - var components = res.props.supportedCalendarComponentSet || []; - return components.reduce(function (hasObjs, component) { - return hasObjs || ICAL_OBJS.has(component); - }, false); - }).map(function (res) { - debug('Found calendar ' + res.props.displayname + ',\n props: ' + JSON.stringify(res.props)); - return new _model.Calendar({ - data: res, - account: account, - description: res.props.calendarDescription, - timezone: res.props.calendarTimezone, - url: _url2['default'].resolve(account.rootUrl, res.href), - ctag: res.props.getctag, - displayName: res.props.displayname, - components: res.props.supportedCalendarComponentSet, - resourcetype: res.props.resourcetype, - syncToken: res.props.syncToken - }); - }); - context$1$0.next = 9; - return cals.map(_co2['default'].wrap(regeneratorRuntime.mark(function callee$1$0(cal) { - return regeneratorRuntime.wrap(function callee$1$0$(context$2$0) { - while (1) switch (context$2$0.prev = context$2$0.next) { - case 0: - context$2$0.next = 2; - return webdav.supportedReportSet(cal, options); - - case 2: - cal.reports = context$2$0.sent; - - case 3: - case 'end': - return context$2$0.stop(); - } - }, callee$1$0, this); - }))); - - case 9: - return context$1$0.abrupt('return', cals); - - case 10: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); - -exports.listCalendars = listCalendars; -/** - * @param {dav.Calendar} calendar the calendar to put the object on. - * @return {Promise} promise will resolve when the calendar has been created. - * - * Options: - * - * (String) data - rfc 5545 VCALENDAR object. - * (String) filename - name for the calendar ics file. - * (dav.Sandbox) sandbox - optional request sandbox. - * (dav.Transport) xhr - request sender. - */ - -function createCalendarObject(calendar, options) { - var objectUrl = _url2['default'].resolve(calendar.url, options.filename); - return webdav.createObject(objectUrl, options.data, options); -} - -; - -/** - * @param {dav.CalendarObject} calendarObject updated calendar object. - * @return {Promise} promise will resolve when the calendar has been updated. - * - * Options: - * - * (dav.Sandbox) sandbox - optional request sandbox. - * (dav.Transport) xhr - request sender. - */ - -function updateCalendarObject(calendarObject, options) { - return webdav.updateObject(calendarObject.url, calendarObject.calendarData, calendarObject.etag, options); -} - -/** - * @param {dav.CalendarObject} calendarObject target calendar object. - * @return {Promise} promise will resolve when the calendar has been deleted. - * - * Options: - * - * (dav.Sandbox) sandbox - optional request sandbox. - * (dav.Transport) xhr - request sender. - */ - -function deleteCalendarObject(calendarObject, options) { - return webdav.deleteObject(calendarObject.url, calendarObject.etag, options); -} - -/** - * @param {dav.Calendar} calendar the calendar to fetch objects for. - * - * Options: - * - * (Array.) filters - optional caldav filters. - * (dav.Sandbox) sandbox - optional request sandbox. - * (dav.Transport) xhr - request sender. - */ -var listCalendarObjects = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(calendar, options) { - var filters, req, responses; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - debug('Doing REPORT on calendar ' + calendar.url + ' which belongs to\n ' + calendar.account.credentials.username); - - filters = options.filters || [{ - type: 'comp-filter', - attrs: { name: 'VCALENDAR' }, - children: [{ - type: 'comp-filter', - attrs: { name: 'VEVENT' } - }] - }]; - req = request.calendarQuery({ - depth: 1, - props: [{ name: 'getetag', namespace: ns.DAV }, { name: 'calendar-data', namespace: ns.CALDAV }], - filters: filters - }); - context$1$0.next = 5; - return options.xhr.send(req, calendar.url, { - sandbox: options.sandbox - }); - - case 5: - responses = context$1$0.sent; - return context$1$0.abrupt('return', responses.map(function (res) { - debug('Found calendar object with url ' + res.href); - return new _model.CalendarObject({ - data: res, - calendar: calendar, - url: _url2['default'].resolve(calendar.account.rootUrl, res.href), - etag: res.props.getetag, - calendarData: res.props.calendarData - }); - })); - - case 7: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); - -exports.listCalendarObjects = listCalendarObjects; -/** - * @param {dav.Calendar} calendar the calendar to fetch updates to. - * @return {Promise} promise will resolve with updated calendar object. - * - * Options: - * - * (Array.) filters - list of caldav filters to send with request. - * (dav.Sandbox) sandbox - optional request sandbox. - * (String) syncMethod - either 'basic' or 'webdav'. If unspecified, will - * try to do webdav sync and failover to basic sync if rfc 6578 is not - * supported by the server. - * (String) timezone - VTIMEZONE calendar object. - * (dav.Transport) xhr - request sender. - */ - -function syncCalendar(calendar, options) { - options.basicSync = basicSync; - options.webdavSync = webdavSync; - return webdav.syncCollection(calendar, options); -} - -/** - * @param {dav.Account} account the account to fetch updates for. - * @return {Promise} promise will resolve with updated account. - * - * Options: - * - * (dav.Sandbox) sandbox - optional request sandbox. - * (dav.Transport) xhr - request sender. - */ -var syncCaldavAccount = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(account) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var cals; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - options.loadObjects = false; - if (!account.calendars) account.calendars = []; - - context$1$0.next = 4; - return listCalendars(account, options); - - case 4: - cals = context$1$0.sent; - - cals.filter(function (cal) { - // Filter the calendars not previously seen. - return account.calendars.every(function (prev) { - return !(0, _fuzzy_url_equals2['default'])(prev.url, cal.url); - }); - }).forEach(function (cal) { - // Add them to the account's calendar list. - account.calendars.push(cal); - }); - - options.loadObjects = true; - context$1$0.next = 9; - return account.calendars.map(_co2['default'].wrap(regeneratorRuntime.mark(function callee$1$0(cal, index) { - return regeneratorRuntime.wrap(function callee$1$0$(context$2$0) { - while (1) switch (context$2$0.prev = context$2$0.next) { - case 0: - context$2$0.prev = 0; - context$2$0.next = 3; - return syncCalendar(cal, options); - - case 3: - context$2$0.next = 9; - break; - - case 5: - context$2$0.prev = 5; - context$2$0.t0 = context$2$0['catch'](0); - - debug('Sync calendar ' + cal.displayName + ' failed with ' + context$2$0.t0); - account.calendars.splice(index, 1); - - case 9: - case 'end': - return context$2$0.stop(); - } - }, callee$1$0, this, [[0, 5]]); - }))); - - case 9: - return context$1$0.abrupt('return', account); - - case 10: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); - -exports.syncCaldavAccount = syncCaldavAccount; -var basicSync = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(calendar, options) { - var sync; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - context$1$0.next = 2; - return webdav.isCollectionDirty(calendar, options); - - case 2: - sync = context$1$0.sent; - - if (sync) { - context$1$0.next = 6; - break; - } - - debug('Local ctag matched remote! No need to sync :).'); - return context$1$0.abrupt('return', calendar); - - case 6: - - debug('ctag changed so we need to fetch stuffs.'); - context$1$0.next = 9; - return listCalendarObjects(calendar, options); - - case 9: - calendar.objects = context$1$0.sent; - return context$1$0.abrupt('return', calendar); - - case 11: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); - -var webdavSync = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(calendar, options) { - var req, result; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - req = request.syncCollection({ - props: [{ name: 'getetag', namespace: ns.DAV }, { name: 'calendar-data', namespace: ns.CALDAV }], - syncLevel: 1, - syncToken: calendar.syncToken - }); - context$1$0.next = 3; - return options.xhr.send(req, calendar.url, { - sandbox: options.sandbox - }); - - case 3: - result = context$1$0.sent; - - // TODO(gareth): Handle creations and deletions. - result.responses.forEach(function (response) { - // Find the calendar object that this response corresponds with. - var calendarObject = calendar.objects.filter(function (object) { - return (0, _fuzzy_url_equals2['default'])(object.url, response.href); - })[0]; - - if (!calendarObject) { - return; - } - - calendarObject.etag = response.props.getetag; - calendarObject.calendarData = response.props.calendarData; - }); - - calendar.syncToken = result.syncToken; - return context$1$0.abrupt('return', calendar); - - case 7: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); -},{"./debug":6,"./fuzzy_url_equals":7,"./model":9,"./namespace":10,"./request":12,"./webdav":25,"co":27,"url":32}],3:[function(require,module,exports){ -/** - * @fileoverview Camelcase something. - */ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports['default'] = camelize; - -function camelize(str) { - var delimiter = arguments.length <= 1 || arguments[1] === undefined ? '_' : arguments[1]; - - var words = str.split(delimiter); - return [words[0]].concat(words.slice(1).map(function (word) { - return word.charAt(0).toUpperCase() + word.slice(1); - })).join(''); -} - -module.exports = exports['default']; -},{}],4:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - -var _url = require('url'); - -var _url2 = _interopRequireDefault(_url); - -var _accounts = require('./accounts'); - -var accounts = _interopRequireWildcard(_accounts); - -var _calendars = require('./calendars'); - -var calendars = _interopRequireWildcard(_calendars); - -var _contacts = require('./contacts'); - -var contacts = _interopRequireWildcard(_contacts); - -/** - * @param {dav.Transport} xhr - request sender. - * - * Options: - * - * (String) baseUrl - root url to resolve relative request urls with. - */ - -var Client = (function () { - function Client(xhr) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - _classCallCheck(this, Client); - - this.xhr = xhr; - Object.assign(this, options); - - // Expose internal modules for unit testing - this._accounts = accounts; - this._calendars = calendars; - this._contacts = contacts; - } - - /** - * @param {dav.Request} req - dav request. - * @param {String} uri - where to send request. - * @return {Promise} a promise that will be resolved with an xhr request - * after its readyState is 4 or the result of applying an optional - * request `transformResponse` function to the xhr object after its - * readyState is 4. - * - * Options: - * - * (Object) sandbox - optional request sandbox. - */ - - _createClass(Client, [{ - key: 'send', - value: function send(req, uri, options) { - if (this.baseUrl) { - var urlObj = _url2['default'].parse(uri); - uri = _url2['default'].resolve(this.baseUrl, urlObj.path); - } - - return this.xhr.send(req, uri, options); - } - }, { - key: 'createAccount', - value: function createAccount() { - var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - options.xhr = options.xhr || this.xhr; - return accounts.createAccount(options); - } - }, { - key: 'createCalendarObject', - value: function createCalendarObject(calendar) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - options.xhr = options.xhr || this.xhr; - return calendars.createCalendarObject(calendar, options); - } - }, { - key: 'updateCalendarObject', - value: function updateCalendarObject(calendarObject) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - options.xhr = options.xhr || this.xhr; - return calendars.updateCalendarObject(calendarObject, options); - } - }, { - key: 'deleteCalendarObject', - value: function deleteCalendarObject(calendarObject) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - options.xhr = options.xhr || this.xhr; - return calendars.deleteCalendarObject(calendarObject, options); - } - }, { - key: 'syncCalendar', - value: function syncCalendar(calendar) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - options.xhr = options.xhr || this.xhr; - return calendars.syncCalendar(calendar, options); - } - }, { - key: 'syncCaldavAccount', - value: function syncCaldavAccount(account) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - options.xhr = options.xhr || this.xhr; - return calendars.syncCaldavAccount(account, options); - } - }, { - key: 'getAddressBook', - value: function getAddressBook() { - var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - options.xhr = options.xhr || this.xhr; - return contacts.getAddressBook(options); - } - }, { - key: 'createAddressBook', - value: function createAddressBook() { - var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - options.xhr = options.xhr || this.xhr; - return contacts.createAddressBook(options); - } - }, { - key: 'deleteAddressBook', - value: function deleteAddressBook(addressBook) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - options.xhr = options.xhr || this.xhr; - return contacts.deleteAddressBook(addressBook, options); - } - }, { - key: 'renameAddressBook', - value: function renameAddressBook(addressBook) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - options.xhr = options.xhr || this.xhr; - return contacts.renameAddressBook(addressBook, options); - } - }, { - key: 'createCard', - value: function createCard(addressBook) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - options.xhr = options.xhr || this.xhr; - return contacts.createCard(addressBook, options); - } - }, { - key: 'updateCard', - value: function updateCard(card) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - options.xhr = options.xhr || this.xhr; - return contacts.updateCard(card, options); - } - }, { - key: 'deleteCard', - value: function deleteCard(card) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - options.xhr = options.xhr || this.xhr; - return contacts.deleteCard(card, options); - } - }, { - key: 'getContacts', - value: function getContacts(addressBook, options, hrefs) { - if (options === undefined) options = {}; - - options.xhr = options.xhr || this.xhr; - return contacts.getContacts(addressBook, options, hrefs); - } - }, { - key: 'syncAddressBook', - value: function syncAddressBook(addressBook) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - options.xhr = options.xhr || this.xhr; - return contacts.syncAddressBook(addressBook, options); - } - }, { - key: 'syncCarddavAccount', - value: function syncCarddavAccount(account) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - options.xhr = options.xhr || this.xhr; - return contacts.syncCarddavAccount(account, options); - } - }]); - - return Client; -})(); - -exports.Client = Client; -},{"./accounts":1,"./calendars":2,"./contacts":5,"url":32}],5:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports.getAddressBook = getAddressBook; -exports.createAddressBook = createAddressBook; -exports.deleteAddressBook = deleteAddressBook; -exports.renameAddressBook = renameAddressBook; -exports.createCard = createCard; -exports.updateCard = updateCard; -exports.deleteCard = deleteCard; -exports.syncAddressBook = syncAddressBook; - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _co = require('co'); - -var _co2 = _interopRequireDefault(_co); - -var _url = require('url'); - -var _url2 = _interopRequireDefault(_url); - -var _fuzzy_url_equals = require('./fuzzy_url_equals'); - -var _fuzzy_url_equals2 = _interopRequireDefault(_fuzzy_url_equals); - -var _model = require('./model'); - -var _namespace = require('./namespace'); - -var ns = _interopRequireWildcard(_namespace); - -var _request = require('./request'); - -var request = _interopRequireWildcard(_request); - -var _webdav = require('./webdav'); - -var webdav = _interopRequireWildcard(_webdav); - -var debug = require('./debug')('dav:contacts'); - -/** - * @param {dav.Account} account to fetch address books for. - */ -var listAddressBooks = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(account, options) { - var req, responses, addressBooks; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - debug('Fetch address books from home url ' + account.homeUrl); - req = request.propfind({ - props: [{ name: 'displayname', namespace: ns.DAV }, { name: 'owner', namespace: ns.DAV }, { name: 'getctag', namespace: ns.CALENDAR_SERVER }, { name: 'resourcetype', namespace: ns.DAV }, { name: 'sync-token', namespace: ns.DAV }, { name: 'read-only', namespace: ns.OC }, - //{ name: 'groups', namespace: ns.OC }, - { name: 'invite', namespace: ns.OC }, { name: 'enabled', namespace: ns.OC }], - depth: 1 - }); - context$1$0.next = 4; - return options.xhr.send(req, account.homeUrl, { - sandbox: options.sandbox - }); - - case 4: - responses = context$1$0.sent; - addressBooks = responses.filter(function (res) { - return typeof res.props.displayname === 'string'; - }).map(function (res) { - debug('Found address book named ' + res.props.displayname + ',\n props: ' + JSON.stringify(res.props)); - return new _model.AddressBook({ - data: res, - account: account, - url: _url2['default'].resolve(account.rootUrl, res.href), - ctag: res.props.getctag, - displayName: res.props.displayname, - resourcetype: res.props.resourcetype, - syncToken: res.props.syncToken - }); - }); - context$1$0.next = 8; - return addressBooks.map(_co2['default'].wrap(regeneratorRuntime.mark(function callee$1$0(addressBook) { - return regeneratorRuntime.wrap(function callee$1$0$(context$2$0) { - while (1) switch (context$2$0.prev = context$2$0.next) { - case 0: - context$2$0.next = 2; - return webdav.supportedReportSet(addressBook, options); - - case 2: - addressBook.reports = context$2$0.sent; - - case 3: - case 'end': - return context$2$0.stop(); - } - }, callee$1$0, this); - }))); - - case 8: - return context$1$0.abrupt('return', addressBooks); - - case 9: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); - -exports.listAddressBooks = listAddressBooks; - -function getAddressBook(options) { - var addressBookUrl = _url2['default'].resolve(options.url, options.displayName); - var req = request.propfind({ - props: [{ name: 'displayname', namespace: ns.DAV }, { name: 'owner', namespace: ns.DAV }, { name: 'getctag', namespace: ns.CALENDAR_SERVER }, { name: 'resourcetype', namespace: ns.DAV }, { name: 'sync-token', namespace: ns.DAV }, - //{ name: 'groups', namespace: ns.OC }, - { name: 'invite', namespace: ns.OC }], - depth: 1 - }); - - return options.xhr.send(req, addressBookUrl); -} - -/** - * @return {Promise} promise will resolve when the addressBook has been created. - * - * Options: - * - * (String) url - * (String) displayName - name for the address book. - * (dav.Sandbox) sandbox - optional request sandbox. - * (dav.Transport) xhr - request sender. - */ - -function createAddressBook(options) { - var collectionUrl = _url2['default'].resolve(options.url, options.displayName); - options.props = [{ name: 'resourcetype', namespace: ns.DAV, children: [{ name: 'collection', namespace: ns.DAV }, { name: 'addressbook', namespace: ns.CARDDAV }] - }, { name: 'displayname', value: options.displayName, namespace: ns.DAV }]; - return webdav.createCollection(collectionUrl, options); -} - -/** - * @param {dav.AddressBook} addressBook the address book to be deleted. - * @return {Promise} promise will resolve when the addressBook has been deleted. - * - * Options: - * - * (dav.Sandbox) sandbox - optional request sandbox. - * (dav.Transport) xhr - request sender. - */ - -function deleteAddressBook(addressBook, options) { - return webdav.deleteCollection(addressBook.url, options); -} - -/** - * @param {dav.AddressBook} addressBook the address book to be renamed. - * @return {Promise} promise will resolve when the addressBook has been renamed. - * - * Options: - * - * (String) displayName - new name for the address book. - * (dav.Sandbox) sandbox - optional request sandbox. - * (dav.Transport) xhr - request sender. - */ - -function renameAddressBook(addressBook, options) { - options.props = [{ name: 'displayname', value: options.displayName, namespace: ns.DAV }]; - return webdav.updateProperties(addressBook.url, options); -} - -/** - * @param {dav.AddressBook} addressBook the address book to put the object on. - * @return {Promise} promise will resolve when the card has been created. - * - * Options: - * - * (String) data - vcard object. - * (String) filename - name for the address book vcf file. - * (dav.Sandbox) sandbox - optional request sandbox. - * (dav.Transport) xhr - request sender. - */ - -function createCard(addressBook, options) { - var objectUrl = _url2['default'].resolve(addressBook.url, options.filename); - return webdav.createObject(objectUrl, options.data, options); -} - -var getFullVcards = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(addressBook, options, hrefs) { - var req, responses; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - req = request.addressBookMultiget({ - depth: 1, - props: [{ name: 'getetag', namespace: ns.DAV }, { name: 'address-data', namespace: ns.CARDDAV }], - hrefs: hrefs - }); - context$1$0.next = 3; - return options.xhr.send(req, addressBook.url, { - sandbox: options.sandbox - }); - - case 3: - responses = context$1$0.sent; - return context$1$0.abrupt('return', responses.map(function (res) { - debug('Found vcard with url ' + res.href); - return new _model.VCard({ - data: res, - addressBook: addressBook, - url: _url2['default'].resolve(addressBook.account.rootUrl, res.href), - etag: res.props.getetag, - addressData: res.props.addressData - }); - })); - - case 5: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); - -exports.getFullVcards = getFullVcards; -/** - * Options: - * - * (dav.Sandbox) sandbox - optional request sandbox. - */ -var listVCards = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(addressBook, options) { - var vCardListFields, req, responses; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - debug('Doing REPORT on address book ' + addressBook.url + ' which belongs to\n ' + addressBook.account.credentials.username); - - vCardListFields = ['EMAIL', 'UID', 'CATEGORIES', 'FN', 'TEL', 'NICKNAME', 'N'].map(function (value) { - return { - name: 'prop', - namespace: ns.CARDDAV, - attrs: [{ name: 'name', value: value }] - }; - }); - req = request.addressBookQuery({ - depth: 1, - props: [{ name: 'getetag', namespace: ns.DAV }, { name: 'address-data', namespace: ns.CARDDAV, children: vCardListFields }] - }); - context$1$0.next = 5; - return options.xhr.send(req, addressBook.url, { - sandbox: options.sandbox - }); - - case 5: - responses = context$1$0.sent; - return context$1$0.abrupt('return', responses.map(function (res) { - debug('Found vcard with url ' + res.href); - return new _model.VCard({ - data: res, - addressBook: addressBook, - url: _url2['default'].resolve(addressBook.account.rootUrl, res.href), - etag: res.props.getetag, - addressData: res.props.addressData - }); - })); - - case 7: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); - -exports.listVCards = listVCards; -/** - * @param {dav.VCard} card updated vcard object. - * @return {Promise} promise will resolve when the card has been updated. - * - * Options: - * - * (dav.Sandbox) sandbox - optional request sandbox. - * (dav.Transport) xhr - request sender. - */ - -function updateCard(card, options) { - return webdav.updateObject(card.url, card.addressData, card.etag, options); -} - -/** - * @param {dav.VCard} card target vcard object. - * @return {Promise} promise will resolve when the calendar has been deleted. - * - * Options: - * - * (dav.Sandbox) sandbox - optional request sandbox. - * (dav.Transport) xhr - request sender. - */ - -function deleteCard(card, options) { - return webdav.deleteObject(card.url, card.etag, options); -} - -/** - * @param {dav.Calendar} calendar the calendar to fetch updates to. - * @return {Promise} promise will resolve with updated calendar object. - * - * Options: - * - * (dav.Sandbox) sandbox - optional request sandbox. - * (String) syncMethod - either 'basic' or 'webdav'. If unspecified, will - * try to do webdav sync and failover to basic sync if rfc 6578 is not - * supported by the server. - * (dav.Transport) xhr - request sender. - */ - -function syncAddressBook(addressBook, options) { - options.basicSync = basicSync; - options.webdavSync = webdavSync; - return webdav.syncCollection(addressBook, options); -} - -/** - * @param {dav.Account} account the account to fetch updates for. - * @return {Promise} promise will resolve with updated account. - * - * Options: - * - * (dav.Sandbox) sandbox - optional request sandbox. - * (dav.Transport) xhr - request sender. - */ -var syncCarddavAccount = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(account) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var addressBooks; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - options.loadObjects = false; - - if (!account.addressBooks) { - account.addressBooks = []; - } - - context$1$0.next = 4; - return listAddressBooks(account, options); - - case 4: - addressBooks = context$1$0.sent; - - addressBooks.filter(function (addressBook) { - // Filter the address books not previously seen. - return account.addressBooks.every(function (prev) { - return !(0, _fuzzy_url_equals2['default'])(prev.url, addressBook.url); - }); - }).forEach(function (addressBook) { - return account.addressBooks.push(addressBook); - }); - - options.loadObjects = true; - context$1$0.next = 9; - return account.addressBooks.map(_co2['default'].wrap(regeneratorRuntime.mark(function callee$1$0(addressBook, index) { - return regeneratorRuntime.wrap(function callee$1$0$(context$2$0) { - while (1) switch (context$2$0.prev = context$2$0.next) { - case 0: - context$2$0.prev = 0; - context$2$0.next = 3; - return syncAddressBook(addressBook, options); - - case 3: - context$2$0.next = 9; - break; - - case 5: - context$2$0.prev = 5; - context$2$0.t0 = context$2$0['catch'](0); - - debug('Syncing ' + addressBook.displayName + ' failed with ' + context$2$0.t0); - account.addressBooks.splice(index, 1); - - case 9: - case 'end': - return context$2$0.stop(); - } - }, callee$1$0, this, [[0, 5]]); - }))); - - case 9: - return context$1$0.abrupt('return', account); - - case 10: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); - -exports.syncCarddavAccount = syncCarddavAccount; -var getContacts = getFullVcards; - -exports.getContacts = getContacts; -var basicSync = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(addressBook, options) { - var sync; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - sync = webdav.isCollectionDirty(addressBook, options); - - if (sync) { - context$1$0.next = 4; - break; - } - - debug('Local ctag matched remote! No need to sync :).'); - return context$1$0.abrupt('return', addressBook); - - case 4: - - debug('ctag changed so we need to fetch stuffs.'); - context$1$0.next = 7; - return listVCards(addressBook, options); - - case 7: - addressBook.objects = context$1$0.sent; - return context$1$0.abrupt('return', addressBook); - - case 9: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); - -var webdavSync = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(addressBook, options) { - var req, result; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - req = request.syncCollection({ - props: [{ name: 'getetag', namespace: ns.DAV }, { name: 'address-data', namespace: ns.CARDDAV }], - syncLevel: 1, - syncToken: addressBook.syncToken - }); - context$1$0.next = 3; - return options.xhr.send(req, addressBook.url, { - sandbox: options.sandbox - }); - - case 3: - result = context$1$0.sent; - - // TODO(gareth): Handle creations and deletions. - result.responses.forEach(function (response) { - // Find the vcard that this response corresponds with. - var vcard = addressBook.objects.filter(function (object) { - return (0, _fuzzy_url_equals2['default'])(object.url, response.href); - })[0]; - - if (!vcard) return; - - vcard.etag = response.props.getetag; - vcard.addressData = response.props.addressData; - }); - - addressBook.syncToken = result.syncToken; - return context$1$0.abrupt('return', addressBook); - - case 7: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); -},{"./debug":6,"./fuzzy_url_equals":7,"./model":9,"./namespace":10,"./request":12,"./webdav":25,"co":27,"url":32}],6:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = debug; - -function debug(topic) { - return function (message) { - if (debug.enabled) { - console.log("[" + topic + "] " + message); - } - }; -} - -module.exports = exports["default"]; -},{}],7:[function(require,module,exports){ -'use strict'; -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports['default'] = fuzzyUrlEquals; - -function fuzzyUrlEquals(one, other) { - other = encodeURI(other); - return fuzzyIncludes(one, other) || fuzzyIncludes(other, one); -} - -; - -function fuzzyIncludes(one, other) { - return one.indexOf(other) !== -1 || other.charAt(other.length - 1) === '/' && one.indexOf(other.slice(0, -1)) !== -1; -} -module.exports = exports['default']; -},{}],8:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -function _interopExportWildcard(obj, defaults) { var newObj = defaults({}, obj); delete newObj['default']; return newObj; } - -function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _debug = require('./debug'); - -var _debug2 = _interopRequireDefault(_debug); - -var _namespace = require('./namespace'); - -var ns = _interopRequireWildcard(_namespace); - -var _request = require('./request'); - -var request = _interopRequireWildcard(_request); - -var _transport = require('./transport'); - -var transport = _interopRequireWildcard(_transport); - -var _package = require('../package'); - -Object.defineProperty(exports, 'version', { - enumerable: true, - get: function get() { - return _package.version; - } -}); - -var _accounts = require('./accounts'); - -Object.defineProperty(exports, 'createAccount', { - enumerable: true, - get: function get() { - return _accounts.createAccount; - } -}); - -var _calendars = require('./calendars'); - -_defaults(exports, _interopExportWildcard(_calendars, _defaults)); - -var _client = require('./client'); - -Object.defineProperty(exports, 'Client', { - enumerable: true, - get: function get() { - return _client.Client; - } -}); - -var _contacts = require('./contacts'); - -_defaults(exports, _interopExportWildcard(_contacts, _defaults)); - -var _model = require('./model'); - -_defaults(exports, _interopExportWildcard(_model, _defaults)); - -Object.defineProperty(exports, 'Request', { - enumerable: true, - get: function get() { - return _request.Request; - } -}); - -var _sandbox = require('./sandbox'); - -Object.defineProperty(exports, 'Sandbox', { - enumerable: true, - get: function get() { - return _sandbox.Sandbox; - } -}); -Object.defineProperty(exports, 'createSandbox', { - enumerable: true, - get: function get() { - return _sandbox.createSandbox; - } -}); -exports.debug = _debug2['default']; -exports.ns = ns; -exports.request = request; -exports.transport = transport; -},{"../package":36,"./accounts":1,"./calendars":2,"./client":4,"./contacts":5,"./debug":6,"./model":9,"./namespace":10,"./request":12,"./sandbox":13,"./transport":24}],9:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var Account = function Account(options) { - _classCallCheck(this, Account); - - Object.assign(this, { - server: null, - credentials: null, - rootUrl: null, - principalUrl: null, - homeUrl: null, - calendars: null, - addressBooks: null - }, options); -} - -/** - * Options: - * (String) username - username (perhaps email) for calendar user. - * (String) password - plaintext password for calendar user. - * (String) clientId - oauth client id. - * (String) clientSecret - oauth client secret. - * (String) authorizationCode - oauth code. - * (String) redirectUrl - oauth redirect url. - * (String) tokenUrl - oauth token url. - * (String) accessToken - oauth access token. - * (String) refreshToken - oauth refresh token. - * (Number) expiration - unix time for access token expiration. - */ -; - -exports.Account = Account; - -var Credentials = function Credentials(options) { - _classCallCheck(this, Credentials); - - Object.assign(this, { - username: null, - password: null, - clientId: null, - clientSecret: null, - authorizationCode: null, - redirectUrl: null, - tokenUrl: null, - accessToken: null, - refreshToken: null, - expiration: null - }, options); -}; - -exports.Credentials = Credentials; - -var DAVCollection = function DAVCollection(options) { - _classCallCheck(this, DAVCollection); - - Object.assign(this, { - data: null, - objects: null, - account: null, - ctag: null, - description: null, - displayName: null, - reports: null, - resourcetype: null, - syncToken: null, - url: null - }, options); -}; - -exports.DAVCollection = DAVCollection; - -var AddressBook = (function (_DAVCollection) { - _inherits(AddressBook, _DAVCollection); - - function AddressBook(options) { - _classCallCheck(this, AddressBook); - - _get(Object.getPrototypeOf(AddressBook.prototype), "constructor", this).call(this, options); - } - - return AddressBook; -})(DAVCollection); - -exports.AddressBook = AddressBook; - -var Calendar = (function (_DAVCollection2) { - _inherits(Calendar, _DAVCollection2); - - function Calendar(options) { - _classCallCheck(this, Calendar); - - _get(Object.getPrototypeOf(Calendar.prototype), "constructor", this).call(this, options); - Object.assign(this, { - components: null, - timezone: null - }, options); - } - - return Calendar; -})(DAVCollection); - -exports.Calendar = Calendar; - -var DAVObject = function DAVObject(options) { - _classCallCheck(this, DAVObject); - - Object.assign(this, { - data: null, - etag: null, - url: null - }, options); -}; - -exports.DAVObject = DAVObject; - -var CalendarObject = (function (_DAVObject) { - _inherits(CalendarObject, _DAVObject); - - function CalendarObject(options) { - _classCallCheck(this, CalendarObject); - - _get(Object.getPrototypeOf(CalendarObject.prototype), "constructor", this).call(this, options); - Object.assign(this, { - calendar: null, - calendarData: null - }, options); - } - - return CalendarObject; -})(DAVObject); - -exports.CalendarObject = CalendarObject; - -var VCard = (function (_DAVObject2) { - _inherits(VCard, _DAVObject2); - - function VCard(options) { - _classCallCheck(this, VCard); - - _get(Object.getPrototypeOf(VCard.prototype), "constructor", this).call(this, options); - Object.assign(this, { - addressBook: null, - addressData: null - }, options); - } - - return VCard; -})(DAVObject); - -exports.VCard = VCard; -},{}],10:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); -var CALENDAR_SERVER = 'http://calendarserver.org/ns/'; -exports.CALENDAR_SERVER = CALENDAR_SERVER; -var CALDAV = 'urn:ietf:params:xml:ns:caldav'; -exports.CALDAV = CALDAV; -var CARDDAV = 'urn:ietf:params:xml:ns:carddav'; -exports.CARDDAV = CARDDAV; -var DAV = 'DAV:'; -exports.DAV = DAV; -var OC = 'http://owncloud.org/ns'; -exports.OC = OC; -},{}],11:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports.multistatus = multistatus; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _camelize = require('./camelize'); - -var _camelize2 = _interopRequireDefault(_camelize); - -var debug = require('./debug')('dav:parser'); - -var DOMParser = require('xmldom').DOMParser; - -function multistatus(string) { - var parser = new DOMParser(); - var doc = parser.parseFromString(string, 'text/xml'); - var result = traverse.multistatus(child(doc, 'multistatus')); - debug('input:\n' + string + '\noutput:\n' + JSON.stringify(result) + '\n'); - return result; -} - -var traverse = { - // { response: [x, y, z] } - multistatus: function multistatus(node) { - return complex(node, { response: true }); - }, - - // { propstat: [x, y, z] } - response: function response(node) { - return complex(node, { propstat: true, href: false }); - }, - - // { prop: x } - propstat: function propstat(node) { - return complex(node, { prop: false }); - }, - - // { - // resourcetype: x - // supportedCalendarComponentSet: y, - // supportedReportSet: z - // } - prop: function prop(node) { - return complex(node, { - resourcetype: false, - supportedCalendarComponentSet: false, - supportedReportSet: false, - currentUserPrincipal: false, - groups: false, - invite: false - }); - }, - - resourcetype: function resourcetype(node) { - return childNodes(node).map(function (childNode) { - return childNode.localName; - }); - }, - - groups: function groups(node) { - return complex(node, { group: true }, 'group'); - }, - group: function group(node) { - return childNodes(node).map(function (childNode) { - return childNode.nodeValue; - }); - }, - invite: function invite(node) { - return complex(node, { user: true }, 'user'); - }, - user: function user(node) { - return complex(node, { href: false, access: false }); - }, - access: function access(node) { - return complex(node, {}); - }, - //access: node => { - // return childNodes(node).map(childNode => childNode.localName); - //}, - - // [x, y, z] - supportedCalendarComponentSet: function supportedCalendarComponentSet(node) { - return complex(node, { comp: true }, 'comp'); - }, - - // [x, y, z] - supportedReportSet: function supportedReportSet(node) { - return complex(node, { supportedReport: true }, 'supportedReport'); - }, - - comp: function comp(node) { - return node.getAttribute('name'); - }, - - // x - supportedReport: function supportedReport(node) { - return complex(node, { report: false }, 'report'); - }, - - report: function report(node) { - return childNodes(node).map(function (childNode) { - return childNode.localName; - }); - }, - - href: function href(node) { - return decodeURIComponent(childNodes(node)[0].nodeValue); - }, - - currentUserPrincipal: function currentUserPrincipal(node) { - return complex(node, { href: false }, 'href'); - } -}; - -function complex(node, childspec, collapse) { - var result = {}; - for (var key in childspec) { - if (childspec[key]) { - // Create array since we're expecting multiple. - result[key] = []; - } - } - - childNodes(node).forEach(function (childNode) { - return traverseChild(node, childNode, childspec, result); - }); - - return maybeCollapse(result, childspec, collapse); -} - -/** - * Parse child childNode of node with childspec and write outcome to result. - */ -function traverseChild(node, childNode, childspec, result) { - if (childNode.nodeType === 3 && /^\s+$/.test(childNode.nodeValue)) { - // Whitespace... nothing to do. - return; - } - - var localName = (0, _camelize2['default'])(childNode.localName, '-'); - if (!(localName in childspec)) { - debug('Unexpected node of type ' + localName + ' encountered while ' + 'parsing ' + node.localName + ' node!'); - var value = childNode.textContent; - if (localName in result) { - if (!Array.isArray(result[camelCase])) { - // Since we've already encountered this node type and we haven't yet - // made an array for it, make an array now. - result[localName] = [result[localName]]; - } - - result[localName].push(value); - return; - } - - // First time we're encountering this node. - result[localName] = value; - return; - } - - var traversal = traverse[localName](childNode); - if (childspec[localName]) { - // Expect multiple. - result[localName].push(traversal); - } else { - // Expect single. - result[localName] = traversal; - } -} - -function maybeCollapse(result, childspec, collapse) { - if (!collapse) { - return result; - } - - if (!childspec[collapse]) { - return result[collapse]; - } - - // Collapse array. - return result[collapse].reduce(function (a, b) { - return a.concat(b); - }, []); -} - -function childNodes(node) { - var result = node.childNodes; - if (!Array.isArray(result)) { - result = Array.prototype.slice.call(result); - } - - return result; -} - -function children(node, localName) { - return childNodes(node).filter(function (childNode) { - return childNode.localName === localName; - }); -} - -function child(node, localName) { - return children(node, localName)[0]; -} -},{"./camelize":3,"./debug":6,"xmldom":33}],12:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports.addressBookQuery = addressBookQuery; -exports.addressBookMultiget = addressBookMultiget; -exports.basic = basic; -exports.calendarQuery = calendarQuery; -exports.collectionQuery = collectionQuery; -exports.mkcol = mkcol; -exports.proppatch = proppatch; -exports.propfind = propfind; -exports.syncCollection = syncCollection; -exports.mergeProps = mergeProps; -exports.getProps = getProps; -exports.setRequestHeaders = setRequestHeaders; - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - -var _parser = require('./parser'); - -var _template = require('./template'); - -var template = _interopRequireWildcard(_template); - -/** - * Options: - * - * (String) depth - optional value for Depth header. - * (Array.) props - list of props to request. - */ - -function addressBookQuery(options) { - return collectionQuery(template.addressBookQuery({ props: options.props || [] }), { depth: options.depth }); -} - -function addressBookMultiget(options) { - return collectionQuery(template.addressBookMultiget({ props: options.props || [], hrefs: options.hrefs || [] }), { depth: options.depth }); -} - -/** - * Options: - * - * (String) data - put request body. - * (String) method - http method. - * (String) etag - cached calendar object etag. - */ - -function basic(options) { - function transformRequest(xhr) { - setRequestHeaders(xhr, options); - } - - return new Request({ - method: options.method, - requestData: options.data, - transformRequest: transformRequest - }); -} - -/** - * Options: - * - * (String) depth - optional value for Depth header. - * (Array.) filters - list of filters to send with request. - * (Array.) props - list of props to request. - * (String) timezone - VTIMEZONE calendar object. - */ - -function calendarQuery(options) { - return collectionQuery(template.calendarQuery({ - props: options.props || [], - filters: options.filters || [], - timezone: options.timezone - }), { - depth: options.depth - }); -} - -function collectionQuery(requestData, options) { - function transformRequest(xhr) { - setRequestHeaders(xhr, options); - } - - function transformResponse(xhr) { - return (0, _parser.multistatus)(xhr.responseText).response.map(function (res) { - return { href: res.href, props: getProps(res.propstat) }; - }); - } - - return new Request({ - method: 'REPORT', - requestData: requestData, - transformRequest: transformRequest, - transformResponse: transformResponse - }); -} - -function mkcol(options) { - var requestData = template.mkcol({ props: options.props }); - - function transformRequest(xhr) { - setRequestHeaders(xhr, options); - } - - return new Request({ - method: 'MKCOL', - requestData: requestData, - transformRequest: transformRequest - }); -} - -function proppatch(options) { - var requestData = template.proppatch({ props: options.props }); - - function transformRequest(xhr) { - setRequestHeaders(xhr, options); - } - - return new Request({ - method: 'PROPPATCH', - requestData: requestData, - transformRequest: transformRequest - }); -} - -/** - * Options: - * - * (String) depth - optional value for Depth header. - * (Array.) props - list of props to request. - */ - -function propfind(options) { - var requestData = template.propfind({ props: options.props }); - - function transformRequest(xhr) { - setRequestHeaders(xhr, options); - } - - function transformResponse(xhr) { - var responses = (0, _parser.multistatus)(xhr.responseText).response.map(function (res) { - return { href: res.href, props: getProps(res.propstat) }; - }); - - if (!options.mergeResponses) { - return responses; - } - - // Merge the props. - var merged = mergeProps(responses.map(function (res) { - return res.props; - })); - var hrefs = responses.map(function (res) { - return res.href; - }); - return { props: merged, hrefs: hrefs }; - } - - return new Request({ - method: 'PROPFIND', - requestData: requestData, - transformRequest: transformRequest, - transformResponse: transformResponse - }); -} - -/** - * Options: - * - * (String) depth - option value for Depth header. - * (Array.) props - list of props to request. - * (Number) syncLevel - indicates scope of the sync report request. - * (String) syncToken - synchronization token provided by the server. - */ - -function syncCollection(options) { - var requestData = template.syncCollection({ - props: options.props, - syncLevel: options.syncLevel, - syncToken: options.syncToken - }); - - function transformRequest(xhr) { - setRequestHeaders(xhr, options); - } - - function transformResponse(xhr) { - var object = (0, _parser.multistatus)(xhr.responseText); - var responses = object.response.map(function (res) { - return { href: res.href, props: getProps(res.propstat) }; - }); - - return { responses: responses, syncToken: object.syncToken }; - } - - return new Request({ - method: 'REPORT', - requestData: requestData, - transformRequest: transformRequest, - transformResponse: transformResponse - }); -} - -var Request = function Request() { - var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - _classCallCheck(this, Request); - - Object.assign(this, { - method: null, - requestData: null, - transformRequest: null, - transformResponse: null, - onerror: null - }, options); -}; - -exports.Request = Request; - -function getProp(propstat) { - if (/404/g.test(propstat.status)) { - return null; - } - if (/5\d{2}/g.test(propstat.status) || /4\d{2}/g.test(propstat.status)) { - throw new Error('Bad status on propstat: ' + propstat.status); - } - - return 'prop' in propstat ? propstat.prop : null; -} - -function mergeProps(props) { - return props.reduce(function (a, b) { - return Object.assign(a, b); - }, {}); -} - -/** - * Map propstats to props. - */ - -function getProps(propstats) { - return mergeProps(propstats.map(getProp).filter(function (prop) { - return prop && typeof prop === 'object'; - })); -} - -function setRequestHeaders(request, options) { - if ('contentType' in options) { - request.setRequestHeader('Content-Type', options.contentType); - } else { - request.setRequestHeader('Content-Type', 'application/xml;charset=utf-8'); - } - - if ('depth' in options) { - request.setRequestHeader('Depth', options.depth); - } - - if ('etag' in options) { - request.setRequestHeader('If-Match', options.etag); - } - - if ('destination' in options) { - request.setRequestHeader('Destination', options.destination); - } - - if ('overwrite' in options) { - request.setRequestHeader('Overwrite', options.overwrite); - } -} -},{"./parser":11,"./template":18}],13:[function(require,module,exports){ -/** - * @fileoverview Group requests together and then abort as a group. - * - * var sandbox = new dav.Sandbox(); - * return Promise.all([ - * dav.createEvent(event, { sandbox: sandbox }), - * dav.deleteEvent(other, { sandbox: sandbox }) - * ]) - * .catch(function() { - * // Something went wrong so abort all requests. - * sandbox.abort; - * }); - */ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -exports.createSandbox = createSandbox; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - -var debug = require('./debug')('dav:sandbox'); - -var Sandbox = (function () { - function Sandbox() { - _classCallCheck(this, Sandbox); - - this.requestList = []; - } - - _createClass(Sandbox, [{ - key: 'add', - value: function add(request) { - debug('Adding request to sandbox.'); - this.requestList.push(request); - } - }, { - key: 'abort', - value: function abort() { - debug('Aborting sandboxed requests.'); - this.requestList.forEach(function (request) { - return request.abort(); - }); - } - }]); - - return Sandbox; -})(); - -exports.Sandbox = Sandbox; - -function createSandbox() { - return new Sandbox(); -} -},{"./debug":6}],14:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = addressBookMultiget; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -var _prop = require('./prop'); - -var _prop2 = _interopRequireDefault(_prop); - -function href(href) { - return "" + href + ""; -} - -function addressBookMultiget(object) { - return "\n \n " + object.props.map(_prop2["default"]).join("") + "\n \n " + object.hrefs.map(href).join("") + "\n "; -} - -module.exports = exports["default"]; -},{"./prop":20}],15:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = addressBookQuery; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -var _prop = require('./prop'); - -var _prop2 = _interopRequireDefault(_prop); - -function addressBookQuery(object) { - return "\n \n " + object.props.map(_prop2["default"]).join("") + "\n \n \n "; -} - -module.exports = exports["default"]; -},{"./prop":20}],16:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports['default'] = calendarQuery; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _filter = require('./filter'); - -var _filter2 = _interopRequireDefault(_filter); - -var _prop = require('./prop'); - -var _prop2 = _interopRequireDefault(_prop); - -function calendarQuery(object) { - return '\n \n ' + object.props.map(_prop2['default']) + '\n \n \n ' + object.filters.map(_filter2['default']) + '\n \n ' + (object.timezone ? '' + object.timezone + '' : '') + '\n '; -} - -module.exports = exports['default']; -},{"./filter":17,"./prop":20}],17:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports['default'] = filter; - -function filter(item) { - if (!item.children || !item.children.length) { - return ''; - } - - var children = item.children.map(filter); - return '\n ' + children + '\n '; -} - -function formatAttrs(attrs) { - if (typeof attrs !== 'object') { - return ''; - } - - return Object.keys(attrs).map(function (attr) { - return attr + '="' + attrs[attr] + '"'; - }).join(' '); -} -module.exports = exports['default']; -},{}],18:[function(require,module,exports){ -'use strict'; - -exports.addressBookQuery = require('./address_book_query'); -exports.addressBookMultiget = require('./address_book_multiget'); -exports.calendarQuery = require('./calendar_query'); -exports.propfind = require('./propfind'); -exports.syncCollection = require('./sync_collection'); -exports.mkcol = require('./mkcol'); -exports.proppatch = require('./proppatch'); -},{"./address_book_multiget":14,"./address_book_query":15,"./calendar_query":16,"./mkcol":19,"./propfind":21,"./proppatch":22,"./sync_collection":23}],19:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports['default'] = mkcol; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _prop = require('./prop'); - -var _prop2 = _interopRequireDefault(_prop); - -function mkcol(object) { - return '\n \n \n ' + object.props.map(_prop2['default']) + '\n \n \n '; -} - -module.exports = exports['default']; -},{"./prop":20}],20:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports['default'] = prop; - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } - -var _namespace = require('../namespace'); - -var ns = _interopRequireWildcard(_namespace); - -/** - * @param {Object} filter looks like - * - * { - * type: 'comp-filter', - * attrs: { - * name: 'VCALENDAR' - * } - * } - * - * Or maybe - * - * { - * type: 'time-range', - * attrs: { - * start: '20060104T000000Z', - * end: '20060105T000000Z' - * } - * } - * - * You can nest them like so: - * - * { - * type: 'comp-filter', - * attrs: { name: 'VCALENDAR' }, - * children: [{ - * type: 'comp-filter', - * attrs: { name: 'VEVENT' }, - * children: [{ - * type: 'time-range', - * attrs: { start: '20060104T000000Z', end: '20060105T000000Z' } - * }] - * }] - * } - */ - -function prop(item) { - var tagName = xmlnsPrefix(item.namespace) + ':' + item.name; - var attrs = (item.attrs || []).map(makeAttr).join(' '); - if (!item.children || !item.children.length) { - if (typeof item.value === "undefined") { - return '<' + tagName + ' ' + attrs + '/>'; - } - return '<' + tagName + ' ' + attrs + '>' + item.value + ''; - } - - var children = item.children.map(prop); - return '<' + tagName + ' ' + attrs + '>\n ' + children.join('') + '\n '; -} - -function makeAttr(attr) { - if (!attr.name) return ''; - if (!attr.value) return attr.name; - return attr.name + '="' + attr.value + '"'; -} - -function xmlnsPrefix(namespace) { - switch (namespace) { - case ns.DAV: - return 'd'; - case ns.CALENDAR_SERVER: - return 'cs'; - case ns.CALDAV: - return 'c'; - case ns.CARDDAV: - return 'card'; - case ns.OC: - return 'oc'; - default: - throw new Error('Unrecognized xmlns ' + namespace); - } -} -module.exports = exports['default']; -},{"../namespace":10}],21:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports['default'] = propfind; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _prop = require('./prop'); - -var _prop2 = _interopRequireDefault(_prop); - -function propfind(object) { - return '\n \n ' + object.props.map(_prop2['default']) + '\n \n '; -} - -module.exports = exports['default']; -},{"./prop":20}],22:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports['default'] = proppatch; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _prop = require('./prop'); - -var _prop2 = _interopRequireDefault(_prop); - -function proppatch(object) { - return '\n \n \n ' + object.props.map(_prop2['default']) + '\n \n \n '; -} - -module.exports = exports['default']; -},{"./prop":20}],23:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports['default'] = syncCollection; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _prop = require('./prop'); - -var _prop2 = _interopRequireDefault(_prop); - -function syncCollection(object) { - return '\n ' + object.syncLevel + '\n ' + object.syncToken + '\n \n ' + object.props.map(_prop2['default']) + '\n \n '; -} - -module.exports = exports['default']; -},{"./prop":20}],24:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - -var _co = require('co'); - -var _co2 = _interopRequireDefault(_co); - -var _querystring = require('querystring'); - -var _querystring2 = _interopRequireDefault(_querystring); - -var _xmlhttprequest = require('./xmlhttprequest'); - -var _xmlhttprequest2 = _interopRequireDefault(_xmlhttprequest); - -var Transport = (function () { - /** - * @param {dav.Credentials} credentials user authorization. - */ - - function Transport(credentials) { - _classCallCheck(this, Transport); - - this.credentials = credentials || null; - } - - /** - * @param {dav.Request} request object with request info. - * @return {Promise} a promise that will be resolved with an xhr request after - * its readyState is 4 or the result of applying an optional request - * `transformResponse` function to the xhr object after its readyState is 4. - * - * Options: - * - * (Object) sandbox - optional request sandbox. - */ - - _createClass(Transport, [{ - key: 'send', - value: function send() {} - }]); - - return Transport; -})(); - -exports.Transport = Transport; - -var Basic = (function (_Transport) { - _inherits(Basic, _Transport); - - /** - * @param {dav.Credentials} credentials user authorization. - */ - - function Basic(credentials) { - _classCallCheck(this, Basic); - - _get(Object.getPrototypeOf(Basic.prototype), 'constructor', this).call(this, credentials); - } - - /** - * @param {dav.Credentials} credentials user authorization. - */ - - _createClass(Basic, [{ - key: 'send', - value: function send(request, url, options) { - return (0, _co2['default'])(regeneratorRuntime.mark(function callee$2$0() { - var sandbox, transformRequest, transformResponse, onerror, xhr, result; - return regeneratorRuntime.wrap(function callee$2$0$(context$3$0) { - while (1) switch (context$3$0.prev = context$3$0.next) { - case 0: - sandbox = options && options.sandbox; - transformRequest = request.transformRequest; - transformResponse = request.transformResponse; - onerror = request.onerror; - xhr = new _xmlhttprequest2['default'](); - - if (sandbox) sandbox.add(xhr); - xhr.open(request.method, url, true, /* async */ - this.credentials.username, this.credentials.password); - - if (transformRequest) transformRequest(xhr); - - result = undefined; - context$3$0.prev = 9; - - xhr.setRequestHeader('requesttoken', oc_requesttoken); - context$3$0.next = 13; - return xhr.send(request.requestData); - - case 13: - result = transformResponse ? transformResponse(xhr) : xhr; - context$3$0.next = 20; - break; - - case 16: - context$3$0.prev = 16; - context$3$0.t0 = context$3$0['catch'](9); - - if (onerror) onerror(context$3$0.t0); - throw context$3$0.t0; - - case 20: - return context$3$0.abrupt('return', result); - - case 21: - case 'end': - return context$3$0.stop(); - } - }, callee$2$0, this, [[9, 16]]); - }).bind(this)); - } - }]); - - return Basic; -})(Transport); - -exports.Basic = Basic; - -var OAuth2 = (function (_Transport2) { - _inherits(OAuth2, _Transport2); - - function OAuth2(credentials) { - _classCallCheck(this, OAuth2); - - _get(Object.getPrototypeOf(OAuth2.prototype), 'constructor', this).call(this, credentials); - } - - /** - * @return {Promise} promise that will resolve with access token. - */ - - _createClass(OAuth2, [{ - key: 'send', - value: function send(request, url) { - var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; - - return (0, _co2['default'])(regeneratorRuntime.mark(function callee$2$0() { - var sandbox, transformRequest, transformResponse, onerror, result, xhr, token; - return regeneratorRuntime.wrap(function callee$2$0$(context$3$0) { - while (1) switch (context$3$0.prev = context$3$0.next) { - case 0: - sandbox = options.sandbox; - transformRequest = request.transformRequest; - transformResponse = request.transformResponse; - onerror = request.onerror; - - if (!('retry' in options)) options.retry = true; - - result = undefined, xhr = undefined; - context$3$0.prev = 6; - context$3$0.next = 9; - return access(this.credentials, options); - - case 9: - token = context$3$0.sent; - - xhr = new _xmlhttprequest2['default'](); - if (sandbox) sandbox.add(xhr); - xhr.open(request.method, url, true /* async */); - xhr.setRequestHeader('Authorization', 'Bearer ' + token); - if (transformRequest) transformRequest(xhr); - xhr.setRequestHeader('requesttoken', oc_requesttoken); - context$3$0.next = 18; - return xhr.send(request.requestData); - - case 18: - result = transformResponse ? transformResponse(xhr) : xhr; - context$3$0.next = 29; - break; - - case 21: - context$3$0.prev = 21; - context$3$0.t0 = context$3$0['catch'](6); - - if (!(options.retry && xhr.status === 401)) { - context$3$0.next = 27; - break; - } - - // Force expiration. - this.credentials.expiration = 0; - // Retry once at most. - options.retry = false; - return context$3$0.abrupt('return', this.send(request, url, options)); - - case 27: - - if (onerror) onerror(context$3$0.t0); - throw context$3$0.t0; - - case 29: - return context$3$0.abrupt('return', result); - - case 30: - case 'end': - return context$3$0.stop(); - } - }, callee$2$0, this, [[6, 21]]); - }).bind(this)); - } - }]); - - return OAuth2; -})(Transport); - -exports.OAuth2 = OAuth2; -function access(credentials, options) { - if (!credentials.accessToken) { - return getAccessToken(credentials, options); - } - - if (credentials.refreshToken && isExpired(credentials)) { - return refreshAccessToken(credentials, options); - } - - return Promise.resolve(credentials.accessToken); -} - -function isExpired(credentials) { - return typeof credentials.expiration === 'number' && Date.now() > credentials.expiration; -} - -var getAccessToken = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(credentials, options) { - var sandbox, xhr, data, now, response; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - sandbox = options.sandbox; - xhr = new _xmlhttprequest2['default'](); - - if (sandbox) sandbox.add(xhr); - xhr.open('POST', credentials.tokenUrl, true /* async */); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - - data = _querystring2['default'].stringify({ - code: credentials.authorizationCode, - redirect_uri: credentials.redirectUrl, - client_id: credentials.clientId, - client_secret: credentials.clientSecret, - grant_type: 'authorization_code' - }); - now = Date.now(); - context$1$0.next = 9; - return xhr.send(data); - - case 9: - response = JSON.parse(xhr.responseText); - - credentials.accessToken = response.access_token; - credentials.refreshToken = 'refresh_token' in response ? response.refresh_token : null; - credentials.expiration = 'expires_in' in response ? now + response.expires_in : null; - - return context$1$0.abrupt('return', response.access_token); - - case 14: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); - -var refreshAccessToken = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(credentials, options) { - var sandbox, xhr, data, now, response; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - sandbox = options.sandbox; - xhr = new _xmlhttprequest2['default'](); - - if (sandbox) sandbox.add(xhr); - xhr.open('POST', credentials.tokenUrl, true /* async */); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - - data = _querystring2['default'].stringify({ - client_id: credentials.clientId, - client_secret: credentials.clientSecret, - refresh_token: credentials.refreshToken, - grant_type: 'refresh_token' - }); - now = Date.now(); - context$1$0.next = 9; - return xhr.send(data); - - case 9: - response = JSON.parse(xhr.responseText); - - credentials.accessToken = response.access_token; - credentials.expiration = 'expires_in' in response ? now + response.expires_in : null; - - return context$1$0.abrupt('return', response.access_token); - - case 13: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); -},{"./xmlhttprequest":26,"co":27,"querystring":31}],25:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); -exports.createObject = createObject; -exports.updateObject = updateObject; -exports.deleteObject = deleteObject; -exports.syncCollection = syncCollection; -exports.updateProperties = updateProperties; -exports.createCollection = createCollection; -exports.deleteCollection = deleteCollection; -exports.moveCollection = moveCollection; - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _co = require('co'); - -var _co2 = _interopRequireDefault(_co); - -var _fuzzy_url_equals = require('./fuzzy_url_equals'); - -var _fuzzy_url_equals2 = _interopRequireDefault(_fuzzy_url_equals); - -var _namespace = require('./namespace'); - -var ns = _interopRequireWildcard(_namespace); - -var _request = require('./request'); - -var request = _interopRequireWildcard(_request); - -var debug = require('./debug')('dav:webdav'); - -/** - * @param {String} objectUrl url for webdav object. - * @param {String} objectData webdav object data. - */ - -function createObject(objectUrl, objectData, options) { - // ugly (breaks calendar), but we will get rid of the lib anyway... hopefully... soon... - var req = request.basic({ method: 'PUT', data: objectData, contentType: 'text/vcard;charset=utf-8' }); - return options.xhr.send(req, objectUrl, { sandbox: options.sandbox }); -} - -function updateObject(objectUrl, objectData, etag, options) { - // ugly (breaks calendar), but we will get rid of the lib anyway... hopefully... soon... - var req = request.basic({ method: 'PUT', data: objectData, etag: etag, contentType: 'text/vcard;charset=utf-8' }); - return options.xhr.send(req, objectUrl, { sandbox: options.sandbox }); -} - -function deleteObject(objectUrl, etag, options) { - var req = request.basic({ method: 'DELETE', etag: etag }); - return options.xhr.send(req, objectUrl, { sandbox: options.sandbox }); -} - -function syncCollection(collection, options) { - var syncMethod = undefined; - if ('syncMethod' in options) { - syncMethod = options.syncMethod; - } else if (collection.reports && collection.reports.indexOf('syncCollection') !== -1) { - syncMethod = 'webdav'; - } else { - syncMethod = 'basic'; - } - - if (syncMethod === 'webdav') { - debug('rfc 6578 sync.'); - return options.webdavSync(collection, options); - } else { - debug('basic sync.'); - return options.basicSync(collection, options); - } -} - -function updateProperties(objectUrl, options) { - var req = request.proppatch({ - props: options.props - }); - return options.xhr.send(req, objectUrl, { sandbox: options.sandbox }); -} - -function createCollection(collectionUrl, options) { - var req = request.mkcol({ - props: options.props - }); - return options.xhr.send(req, collectionUrl, { sandbox: options.sandbox }); -} - -function deleteCollection(collectionUrl, options) { - var req = request.basic({ method: 'DELETE' }); - return options.xhr.send(req, collectionUrl, { sandbox: options.sandbox }); -} - -function moveCollection(collectionUrl, options) { - var req = request.basic({ method: 'MOVE', overwrite: 'F', destination: options.destination, data: objectData }); - return options.xhr.send(req, collectionUrl, { sandbox: options.sandbox }); -} - -/** - * @param {dav.DAVCollection} collection to fetch report set for. - */ -var supportedReportSet = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(collection, options) { - var req, response; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - debug('Checking supported report set for collection at ' + collection.url); - req = request.propfind({ - props: [{ name: 'supported-report-set', namespace: ns.DAV }], - depth: 1, - mergeResponses: true - }); - context$1$0.next = 4; - return options.xhr.send(req, collection.url, { - sandbox: options.sandbox - }); - - case 4: - response = context$1$0.sent; - return context$1$0.abrupt('return', response.props.supportedReportSet); - - case 6: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); - -exports.supportedReportSet = supportedReportSet; -var isCollectionDirty = _co2['default'].wrap(regeneratorRuntime.mark(function callee$0$0(collection, options) { - var req, responses, response; - return regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { - while (1) switch (context$1$0.prev = context$1$0.next) { - case 0: - if (collection.ctag) { - context$1$0.next = 3; - break; - } - - debug('Missing ctag.'); - return context$1$0.abrupt('return', false); - - case 3: - - debug('Fetch remote getctag prop.'); - req = request.propfind({ - props: [{ name: 'getctag', namespace: ns.CALENDAR_SERVER }], - depth: 0 - }); - context$1$0.next = 7; - return options.xhr.send(req, collection.account.homeUrl, { - sandbox: options.sandbox - }); - - case 7: - responses = context$1$0.sent; - response = responses.filter(function (response) { - // Find the response that corresponds to the parameter collection. - return (0, _fuzzy_url_equals2['default'])(collection.url, response.href); - })[0]; - - if (response) { - context$1$0.next = 11; - break; - } - - throw new Error('Could not find collection on remote. Was it deleted?'); - - case 11: - - debug('Check whether cached ctag matches remote.'); - return context$1$0.abrupt('return', collection.ctag !== response.props.getctag); - - case 13: - case 'end': - return context$1$0.stop(); - } - }, callee$0$0, this); -})); -exports.isCollectionDirty = isCollectionDirty; -},{"./debug":6,"./fuzzy_url_equals":7,"./namespace":10,"./request":12,"co":27}],26:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true -}); - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - -var debug = require('./debug')('dav:xmlhttprequest'); - -var Native = undefined; -if (typeof self !== 'undefined' && 'XMLHttpRequest' in self) { - Native = self.XMLHttpRequest; -} else { - // Trick browserify into not loading XMLHttpRequest polyfill - // since it is available in the platform (including web workers) - Native = require(false || 'xmlhttprequest').XMLHttpRequest; -} - -/** - * @fileoverview Promise wrapper around native xhr api. - */ - -var XMLHttpRequest = (function () { - function XMLHttpRequest(options) { - var _this = this; - - _classCallCheck(this, XMLHttpRequest); - - this.request = new Native(options); - this.sandbox = null; - - /* readwrite */ - ['response', 'responseText', 'responseType', 'responseXML', 'timeout', 'upload', 'withCredentials'].forEach(function (attribute) { - Object.defineProperty(_this, attribute, { - get: function get() { - return this.request[attribute]; - }, - set: function set(value) { - this.request[attribute] = value; - } - }); - }); - - /* readonly */ - ['status', 'statusText'].forEach(function (attribute) { - Object.defineProperty(_this, attribute, { - get: function get() { - return this.request[attribute]; - } - }); - }); - } - - _createClass(XMLHttpRequest, [{ - key: 'abort', - value: function abort() { - return this._callNative('abort', arguments); - } - }, { - key: 'getAllResponseHeaders', - value: function getAllResponseHeaders() { - return this._callNative('getAllResponseHeaders', arguments); - } - }, { - key: 'getResponseHeader', - value: function getResponseHeader() { - return this._callNative('getResponseHeader', arguments); - } - }, { - key: 'open', - value: function open() { - return this._callNative('open', arguments); - } - }, { - key: 'overrideMimeType', - value: function overrideMimeType() { - return this._callNative('overrideMimeType', arguments); - } - }, { - key: 'setRequestHeader', - value: function setRequestHeader() { - return this._callNative('setRequestHeader', arguments); - } - }, { - key: 'send', - value: function send(data) { - debug('Sending request data: ' + data); - if (this.sandbox) this.sandbox.add(this); - var request = this.request; - request.send(data); - return new Promise(function (resolve, reject) { - request.onreadystatechange = function () { - if (request.readyState !== 4 /* done */) { - return; - } - - if (request.status < 200 || request.status >= 400) { - return reject(new Error('Bad status: ' + request.status)); - } - - return resolve(request.responseText); - }; - - request.ontimeout = function () { - reject(new Error('Request timed out after ' + request.timeout + ' ms')); - }; - }); - } - }, { - key: '_callNative', - value: function _callNative(method, args) { - return this.request[method].apply(this.request, args); - } - }]); - - return XMLHttpRequest; -})(); - -exports['default'] = XMLHttpRequest; -module.exports = exports['default']; -},{"./debug":6}],27:[function(require,module,exports){ - -/** - * slice() reference. - */ - -var slice = Array.prototype.slice; - -/** - * Expose `co`. - */ - -module.exports = co['default'] = co.co = co; - -/** - * Wrap the given generator `fn` into a - * function that returns a promise. - * This is a separate function so that - * every `co()` call doesn't create a new, - * unnecessary closure. - * - * @param {GeneratorFunction} fn - * @return {Function} - * @api public - */ - -co.wrap = function (fn) { - createPromise.__generatorFunction__ = fn; - return createPromise; - function createPromise() { - return co.call(this, fn.apply(this, arguments)); - } -}; - -/** - * Execute the generator function or a generator - * and return a promise. - * - * @param {Function} fn - * @return {Promise} - * @api public - */ - -function co(gen) { - var ctx = this; - var args = slice.call(arguments, 1) - - // we wrap everything in a promise to avoid promise chaining, - // which leads to memory leak errors. - // see https://github.com/tj/co/issues/180 - return new Promise(function(resolve, reject) { - if (typeof gen === 'function') gen = gen.apply(ctx, args); - if (!gen || typeof gen.next !== 'function') return resolve(gen); - - onFulfilled(); - - /** - * @param {Mixed} res - * @return {Promise} - * @api private - */ - - function onFulfilled(res) { - var ret; - try { - ret = gen.next(res); - } catch (e) { - return reject(e); - } - next(ret); - } - - /** - * @param {Error} err - * @return {Promise} - * @api private - */ - - function onRejected(err) { - var ret; - try { - ret = gen.throw(err); - } catch (e) { - return reject(e); - } - next(ret); - } - - /** - * Get the next value in the generator, - * return a promise. - * - * @param {Object} ret - * @return {Promise} - * @api private - */ - - function next(ret) { - if (ret.done) return resolve(ret.value); - var value = toPromise.call(ctx, ret.value); - if (value && isPromise(value)) return value.then(onFulfilled, onRejected); - return onRejected(new TypeError('You may only yield a function, promise, generator, array, or object, ' - + 'but the following object was passed: "' + String(ret.value) + '"')); - } - }); -} - -/** - * Convert a `yield`ed value into a promise. - * - * @param {Mixed} obj - * @return {Promise} - * @api private - */ - -function toPromise(obj) { - if (!obj) return obj; - if (isPromise(obj)) return obj; - if (isGeneratorFunction(obj) || isGenerator(obj)) return co.call(this, obj); - if ('function' == typeof obj) return thunkToPromise.call(this, obj); - if (Array.isArray(obj)) return arrayToPromise.call(this, obj); - if (isObject(obj)) return objectToPromise.call(this, obj); - return obj; -} - -/** - * Convert a thunk to a promise. - * - * @param {Function} - * @return {Promise} - * @api private - */ - -function thunkToPromise(fn) { - var ctx = this; - return new Promise(function (resolve, reject) { - fn.call(ctx, function (err, res) { - if (err) return reject(err); - if (arguments.length > 2) res = slice.call(arguments, 1); - resolve(res); - }); - }); -} - -/** - * Convert an array of "yieldables" to a promise. - * Uses `Promise.all()` internally. - * - * @param {Array} obj - * @return {Promise} - * @api private - */ - -function arrayToPromise(obj) { - return Promise.all(obj.map(toPromise, this)); -} - -/** - * Convert an object of "yieldables" to a promise. - * Uses `Promise.all()` internally. - * - * @param {Object} obj - * @return {Promise} - * @api private - */ - -function objectToPromise(obj){ - var results = new obj.constructor(); - var keys = Object.keys(obj); - var promises = []; - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - var promise = toPromise.call(this, obj[key]); - if (promise && isPromise(promise)) defer(promise, key); - else results[key] = obj[key]; - } - return Promise.all(promises).then(function () { - return results; - }); - - function defer(promise, key) { - // predefine the key in the result - results[key] = undefined; - promises.push(promise.then(function (res) { - results[key] = res; - })); - } -} - -/** - * Check if `obj` is a promise. - * - * @param {Object} obj - * @return {Boolean} - * @api private - */ - -function isPromise(obj) { - return 'function' == typeof obj.then; -} - -/** - * Check if `obj` is a generator. - * - * @param {Mixed} obj - * @return {Boolean} - * @api private - */ - -function isGenerator(obj) { - return 'function' == typeof obj.next && 'function' == typeof obj.throw; -} - -/** - * Check if `obj` is a generator function. - * - * @param {Mixed} obj - * @return {Boolean} - * @api private - */ -function isGeneratorFunction(obj) { - var constructor = obj.constructor; - if (!constructor) return false; - if ('GeneratorFunction' === constructor.name || 'GeneratorFunction' === constructor.displayName) return true; - return isGenerator(constructor.prototype); -} - -/** - * Check for plain object. - * - * @param {Mixed} val - * @return {Boolean} - * @api private - */ - -function isObject(val) { - return Object == val.constructor; -} - -},{}],28:[function(require,module,exports){ -(function (global){ -/*! https://mths.be/punycode v1.4.1 by @mathias */ -;(function(root) { - - /** Detect free variables */ - var freeExports = typeof exports == 'object' && exports && - !exports.nodeType && exports; - var freeModule = typeof module == 'object' && module && - !module.nodeType && module; - var freeGlobal = typeof global == 'object' && global; - if ( - freeGlobal.global === freeGlobal || - freeGlobal.window === freeGlobal || - freeGlobal.self === freeGlobal - ) { - root = freeGlobal; - } - - /** - * The `punycode` object. - * @name punycode - * @type Object - */ - var punycode, - - /** Highest positive signed 32-bit float value */ - maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 - - /** Bootstring parameters */ - base = 36, - tMin = 1, - tMax = 26, - skew = 38, - damp = 700, - initialBias = 72, - initialN = 128, // 0x80 - delimiter = '-', // '\x2D' - - /** Regular expressions */ - regexPunycode = /^xn--/, - regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars - regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators - - /** Error messages */ - errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' - }, - - /** Convenience shortcuts */ - baseMinusTMin = base - tMin, - floor = Math.floor, - stringFromCharCode = String.fromCharCode, - - /** Temporary variable */ - key; - - /*--------------------------------------------------------------------------*/ - - /** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ - function error(type) { - throw new RangeError(errors[type]); - } - - /** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ - function map(array, fn) { - var length = array.length; - var result = []; - while (length--) { - result[length] = fn(array[length]); - } - return result; - } - - /** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ - function mapDomain(string, fn) { - var parts = string.split('@'); - var result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - string = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - string = string.replace(regexSeparators, '\x2E'); - var labels = string.split('.'); - var encoded = map(labels, fn).join('.'); - return result + encoded; - } - - /** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ - function ucs2decode(string) { - var output = [], - counter = 0, - length = string.length, - value, - extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - /** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ - function ucs2encode(array) { - return map(array, function(value) { - var output = ''; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - return output; - }).join(''); - } - - /** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ - function basicToDigit(codePoint) { - if (codePoint - 48 < 10) { - return codePoint - 22; - } - if (codePoint - 65 < 26) { - return codePoint - 65; - } - if (codePoint - 97 < 26) { - return codePoint - 97; - } - return base; - } - - /** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ - function digitToBasic(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); - } - - /** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ - function adapt(delta, numPoints, firstTime) { - var k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); - } - - /** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ - function decode(input) { - // Don't use UCS-2 - var output = [], - inputLength = input.length, - out, - i = 0, - n = initialN, - bias = initialBias, - basic, - j, - index, - oldi, - w, - k, - digit, - t, - /** Cached calculation results */ - baseMinusT; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - for (oldi = i, w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base || digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output - output.splice(i++, 0, n); - - } - - return ucs2encode(output); - } - - /** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ - function encode(input) { - var n, - delta, - handledCPCount, - basicLength, - bias, - j, - m, - q, - k, - t, - currentValue, - output = [], - /** `inputLength` will hold the number of code points in `input`. */ - inputLength, - /** Cached calculation results */ - handledCPCountPlusOne, - baseMinusT, - qMinusT; - - // Convert the input in UCS-2 to Unicode - input = ucs2decode(input); - - // Cache the length - inputLength = input.length; - - // Initialize the state - n = initialN; - delta = 0; - bias = initialBias; - - // Handle the basic code points - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - handledCPCount = basicLength = output.length; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string - if it is not empty - with a delimiter - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - for (m = maxInt, j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow - handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - - if (currentValue == n) { - // Represent delta as a generalized variable-length integer - for (q = delta, k = base; /* no condition */; k += base) { - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - qMinusT = q - t; - baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); - } - - /** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ - function toUnicode(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); - } - - /** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ - function toASCII(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); - } - - /*--------------------------------------------------------------------------*/ - - /** Define the public API */ - punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '1.4.1', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode - }; - - /** Expose `punycode` */ - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define('punycode', function() { - return punycode; - }); - } else if (freeExports && freeModule) { - if (module.exports == freeExports) { - // in Node.js, io.js, or RingoJS v0.8.0+ - freeModule.exports = punycode; - } else { - // in Narwhal or RingoJS v0.7.0- - for (key in punycode) { - punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); - } - } - } else { - // in Rhino or a web browser - root.punycode = punycode; - } - -}(this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],29:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -'use strict'; - -// If obj.hasOwnProperty has been overridden, then calling -// obj.hasOwnProperty(prop) will break. -// See: https://github.com/joyent/node/issues/1707 -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} - -module.exports = function(qs, sep, eq, options) { - sep = sep || '&'; - eq = eq || '='; - var obj = {}; - - if (typeof qs !== 'string' || qs.length === 0) { - return obj; - } - - var regexp = /\+/g; - qs = qs.split(sep); - - var maxKeys = 1000; - if (options && typeof options.maxKeys === 'number') { - maxKeys = options.maxKeys; - } - - var len = qs.length; - // maxKeys <= 0 means that we should not limit keys count - if (maxKeys > 0 && len > maxKeys) { - len = maxKeys; - } - - for (var i = 0; i < len; ++i) { - var x = qs[i].replace(regexp, '%20'), - idx = x.indexOf(eq), - kstr, vstr, k, v; - - if (idx >= 0) { - kstr = x.substr(0, idx); - vstr = x.substr(idx + 1); - } else { - kstr = x; - vstr = ''; - } - - k = decodeURIComponent(kstr); - v = decodeURIComponent(vstr); - - if (!hasOwnProperty(obj, k)) { - obj[k] = v; - } else if (isArray(obj[k])) { - obj[k].push(v); - } else { - obj[k] = [obj[k], v]; - } - } - - return obj; -}; - -var isArray = Array.isArray || function (xs) { - return Object.prototype.toString.call(xs) === '[object Array]'; -}; - -},{}],30:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -'use strict'; - -var stringifyPrimitive = function(v) { - switch (typeof v) { - case 'string': - return v; - - case 'boolean': - return v ? 'true' : 'false'; - - case 'number': - return isFinite(v) ? v : ''; - - default: - return ''; - } -}; - -module.exports = function(obj, sep, eq, name) { - sep = sep || '&'; - eq = eq || '='; - if (obj === null) { - obj = undefined; - } - - if (typeof obj === 'object') { - return map(objectKeys(obj), function(k) { - var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; - if (isArray(obj[k])) { - return map(obj[k], function(v) { - return ks + encodeURIComponent(stringifyPrimitive(v)); - }).join(sep); - } else { - return ks + encodeURIComponent(stringifyPrimitive(obj[k])); - } - }).join(sep); - - } - - if (!name) return ''; - return encodeURIComponent(stringifyPrimitive(name)) + eq + - encodeURIComponent(stringifyPrimitive(obj)); -}; - -var isArray = Array.isArray || function (xs) { - return Object.prototype.toString.call(xs) === '[object Array]'; -}; - -function map (xs, f) { - if (xs.map) return xs.map(f); - var res = []; - for (var i = 0; i < xs.length; i++) { - res.push(f(xs[i], i)); - } - return res; -} - -var objectKeys = Object.keys || function (obj) { - var res = []; - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key); - } - return res; -}; - -},{}],31:[function(require,module,exports){ -'use strict'; - -exports.decode = exports.parse = require('./decode'); -exports.encode = exports.stringify = require('./encode'); - -},{"./decode":29,"./encode":30}],32:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -var punycode = require('punycode'); - -exports.parse = urlParse; -exports.resolve = urlResolve; -exports.resolveObject = urlResolveObject; -exports.format = urlFormat; - -exports.Url = Url; - -function Url() { - this.protocol = null; - this.slashes = null; - this.auth = null; - this.host = null; - this.port = null; - this.hostname = null; - this.hash = null; - this.search = null; - this.query = null; - this.pathname = null; - this.path = null; - this.href = null; -} - -// Reference: RFC 3986, RFC 1808, RFC 2396 - -// define these here so at least they only have to be -// compiled once on the first module load. -var protocolPattern = /^([a-z0-9.+-]+:)/i, - portPattern = /:[0-9]*$/, - - // RFC 2396: characters reserved for delimiting URLs. - // We actually just auto-escape these. - delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'], - - // RFC 2396: characters not allowed for various reasons. - unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims), - - // Allowed by RFCs, but cause of XSS attacks. Always escape these. - autoEscape = ['\''].concat(unwise), - // Characters that are never ever allowed in a hostname. - // Note that any invalid chars are also handled, but these - // are the ones that are *expected* to be seen, so we fast-path - // them. - nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape), - hostEndingChars = ['/', '?', '#'], - hostnameMaxLen = 255, - hostnamePartPattern = /^[a-z0-9A-Z_-]{0,63}$/, - hostnamePartStart = /^([a-z0-9A-Z_-]{0,63})(.*)$/, - // protocols that can allow "unsafe" and "unwise" chars. - unsafeProtocol = { - 'javascript': true, - 'javascript:': true - }, - // protocols that never have a hostname. - hostlessProtocol = { - 'javascript': true, - 'javascript:': true - }, - // protocols that always contain a // bit. - slashedProtocol = { - 'http': true, - 'https': true, - 'ftp': true, - 'gopher': true, - 'file': true, - 'http:': true, - 'https:': true, - 'ftp:': true, - 'gopher:': true, - 'file:': true - }, - querystring = require('querystring'); - -function urlParse(url, parseQueryString, slashesDenoteHost) { - if (url && isObject(url) && url instanceof Url) return url; - - var u = new Url; - u.parse(url, parseQueryString, slashesDenoteHost); - return u; -} - -Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) { - if (!isString(url)) { - throw new TypeError("Parameter 'url' must be a string, not " + typeof url); - } - - var rest = url; - - // trim before proceeding. - // This is to support parse stuff like " http://foo.com \n" - rest = rest.trim(); - - var proto = protocolPattern.exec(rest); - if (proto) { - proto = proto[0]; - var lowerProto = proto.toLowerCase(); - this.protocol = lowerProto; - rest = rest.substr(proto.length); - } - - // figure out if it's got a host - // user@server is *always* interpreted as a hostname, and url - // resolution will treat //foo/bar as host=foo,path=bar because that's - // how the browser resolves relative URLs. - if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { - var slashes = rest.substr(0, 2) === '//'; - if (slashes && !(proto && hostlessProtocol[proto])) { - rest = rest.substr(2); - this.slashes = true; - } - } - - if (!hostlessProtocol[proto] && - (slashes || (proto && !slashedProtocol[proto]))) { - - // there's a hostname. - // the first instance of /, ?, ;, or # ends the host. - // - // If there is an @ in the hostname, then non-host chars *are* allowed - // to the left of the last @ sign, unless some host-ending character - // comes *before* the @-sign. - // URLs are obnoxious. - // - // ex: - // http://a@b@c/ => user:a@b host:c - // http://a@b?@c => user:a host:c path:/?@c - - // v0.12 TODO(isaacs): This is not quite how Chrome does things. - // Review our test case against browsers more comprehensively. - - // find the first instance of any hostEndingChars - var hostEnd = -1; - for (var i = 0; i < hostEndingChars.length; i++) { - var hec = rest.indexOf(hostEndingChars[i]); - if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) - hostEnd = hec; - } - - // at this point, either we have an explicit point where the - // auth portion cannot go past, or the last @ char is the decider. - var auth, atSign; - if (hostEnd === -1) { - // atSign can be anywhere. - atSign = rest.lastIndexOf('@'); - } else { - // atSign must be in auth portion. - // http://a@b/c@d => host:b auth:a path:/c@d - atSign = rest.lastIndexOf('@', hostEnd); - } - - // Now we have a portion which is definitely the auth. - // Pull that off. - if (atSign !== -1) { - auth = rest.slice(0, atSign); - rest = rest.slice(atSign + 1); - this.auth = decodeURIComponent(auth); - } - - // the host is the remaining to the left of the first non-host char - hostEnd = -1; - for (var i = 0; i < nonHostChars.length; i++) { - var hec = rest.indexOf(nonHostChars[i]); - if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) - hostEnd = hec; - } - // if we still have not hit it, then the entire thing is a host. - if (hostEnd === -1) - hostEnd = rest.length; - - this.host = rest.slice(0, hostEnd); - rest = rest.slice(hostEnd); - - // pull out port. - this.parseHost(); - - // we've indicated that there is a hostname, - // so even if it's empty, it has to be present. - this.hostname = this.hostname || ''; - - // if hostname begins with [ and ends with ] - // assume that it's an IPv6 address. - var ipv6Hostname = this.hostname[0] === '[' && - this.hostname[this.hostname.length - 1] === ']'; - - // validate a little. - if (!ipv6Hostname) { - var hostparts = this.hostname.split(/\./); - for (var i = 0, l = hostparts.length; i < l; i++) { - var part = hostparts[i]; - if (!part) continue; - if (!part.match(hostnamePartPattern)) { - var newpart = ''; - for (var j = 0, k = part.length; j < k; j++) { - if (part.charCodeAt(j) > 127) { - // we replace non-ASCII char with a temporary placeholder - // we need this to make sure size of hostname is not - // broken by replacing non-ASCII by nothing - newpart += 'x'; - } else { - newpart += part[j]; - } - } - // we test again with ASCII char only - if (!newpart.match(hostnamePartPattern)) { - var validParts = hostparts.slice(0, i); - var notHost = hostparts.slice(i + 1); - var bit = part.match(hostnamePartStart); - if (bit) { - validParts.push(bit[1]); - notHost.unshift(bit[2]); - } - if (notHost.length) { - rest = '/' + notHost.join('.') + rest; - } - this.hostname = validParts.join('.'); - break; - } - } - } - } - - if (this.hostname.length > hostnameMaxLen) { - this.hostname = ''; - } else { - // hostnames are always lower case. - this.hostname = this.hostname.toLowerCase(); - } - - if (!ipv6Hostname) { - // IDNA Support: Returns a puny coded representation of "domain". - // It only converts the part of the domain name that - // has non ASCII characters. I.e. it dosent matter if - // you call it with a domain that already is in ASCII. - var domainArray = this.hostname.split('.'); - var newOut = []; - for (var i = 0; i < domainArray.length; ++i) { - var s = domainArray[i]; - newOut.push(s.match(/[^A-Za-z0-9_-]/) ? - 'xn--' + punycode.encode(s) : s); - } - this.hostname = newOut.join('.'); - } - - var p = this.port ? ':' + this.port : ''; - var h = this.hostname || ''; - this.host = h + p; - this.href += this.host; - - // strip [ and ] from the hostname - // the host field still retains them, though - if (ipv6Hostname) { - this.hostname = this.hostname.substr(1, this.hostname.length - 2); - if (rest[0] !== '/') { - rest = '/' + rest; - } - } - } - - // now rest is set to the post-host stuff. - // chop off any delim chars. - if (!unsafeProtocol[lowerProto]) { - - // First, make 100% sure that any "autoEscape" chars get - // escaped, even if encodeURIComponent doesn't think they - // need to be. - for (var i = 0, l = autoEscape.length; i < l; i++) { - var ae = autoEscape[i]; - var esc = encodeURIComponent(ae); - if (esc === ae) { - esc = escape(ae); - } - rest = rest.split(ae).join(esc); - } - } - - - // chop off from the tail first. - var hash = rest.indexOf('#'); - if (hash !== -1) { - // got a fragment string. - this.hash = rest.substr(hash); - rest = rest.slice(0, hash); - } - var qm = rest.indexOf('?'); - if (qm !== -1) { - this.search = rest.substr(qm); - this.query = rest.substr(qm + 1); - if (parseQueryString) { - this.query = querystring.parse(this.query); - } - rest = rest.slice(0, qm); - } else if (parseQueryString) { - // no query string, but parseQueryString still requested - this.search = ''; - this.query = {}; - } - if (rest) this.pathname = rest; - if (slashedProtocol[lowerProto] && - this.hostname && !this.pathname) { - this.pathname = '/'; - } - - //to support http.request - if (this.pathname || this.search) { - var p = this.pathname || ''; - var s = this.search || ''; - this.path = p + s; - } - - // finally, reconstruct the href based on what has been validated. - this.href = this.format(); - return this; -}; - -// format a parsed object into a url string -function urlFormat(obj) { - // ensure it's an object, and not a string url. - // If it's an obj, this is a no-op. - // this way, you can call url_format() on strings - // to clean up potentially wonky urls. - if (isString(obj)) obj = urlParse(obj); - if (!(obj instanceof Url)) return Url.prototype.format.call(obj); - return obj.format(); -} - -Url.prototype.format = function() { - var auth = this.auth || ''; - if (auth) { - auth = encodeURIComponent(auth); - auth = auth.replace(/%3A/i, ':'); - auth += '@'; - } - - var protocol = this.protocol || '', - pathname = this.pathname || '', - hash = this.hash || '', - host = false, - query = ''; - - if (this.host) { - host = auth + this.host; - } else if (this.hostname) { - host = auth + (this.hostname.indexOf(':') === -1 ? - this.hostname : - '[' + this.hostname + ']'); - if (this.port) { - host += ':' + this.port; - } - } - - if (this.query && - isObject(this.query) && - Object.keys(this.query).length) { - query = querystring.stringify(this.query); - } - - var search = this.search || (query && ('?' + query)) || ''; - - if (protocol && protocol.substr(-1) !== ':') protocol += ':'; - - // only the slashedProtocols get the //. Not mailto:, xmpp:, etc. - // unless they had them to begin with. - if (this.slashes || - (!protocol || slashedProtocol[protocol]) && host !== false) { - host = '//' + (host || ''); - if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname; - } else if (!host) { - host = ''; - } - - if (hash && hash.charAt(0) !== '#') hash = '#' + hash; - if (search && search.charAt(0) !== '?') search = '?' + search; - - pathname = pathname.replace(/[?#]/g, function(match) { - return encodeURIComponent(match); - }); - search = search.replace('#', '%23'); - - return protocol + host + pathname + search + hash; -}; - -function urlResolve(source, relative) { - return urlParse(source, false, true).resolve(relative); -} - -Url.prototype.resolve = function(relative) { - return this.resolveObject(urlParse(relative, false, true)).format(); -}; - -function urlResolveObject(source, relative) { - if (!source) return relative; - return urlParse(source, false, true).resolveObject(relative); -} - -Url.prototype.resolveObject = function(relative) { - if (isString(relative)) { - var rel = new Url(); - rel.parse(relative, false, true); - relative = rel; - } - - var result = new Url(); - Object.keys(this).forEach(function(k) { - result[k] = this[k]; - }, this); - - // hash is always overridden, no matter what. - // even href="" will remove it. - result.hash = relative.hash; - - // if the relative url is empty, then there's nothing left to do here. - if (relative.href === '') { - result.href = result.format(); - return result; - } - - // hrefs like //foo/bar always cut to the protocol. - if (relative.slashes && !relative.protocol) { - // take everything except the protocol from relative - Object.keys(relative).forEach(function(k) { - if (k !== 'protocol') - result[k] = relative[k]; - }); - - //urlParse appends trailing / to urls like http://www.example.com - if (slashedProtocol[result.protocol] && - result.hostname && !result.pathname) { - result.path = result.pathname = '/'; - } - - result.href = result.format(); - return result; - } - - if (relative.protocol && relative.protocol !== result.protocol) { - // if it's a known url protocol, then changing - // the protocol does weird things - // first, if it's not file:, then we MUST have a host, - // and if there was a path - // to begin with, then we MUST have a path. - // if it is file:, then the host is dropped, - // because that's known to be hostless. - // anything else is assumed to be absolute. - if (!slashedProtocol[relative.protocol]) { - Object.keys(relative).forEach(function(k) { - result[k] = relative[k]; - }); - result.href = result.format(); - return result; - } - - result.protocol = relative.protocol; - if (!relative.host && !hostlessProtocol[relative.protocol]) { - var relPath = (relative.pathname || '').split('/'); - while (relPath.length && !(relative.host = relPath.shift())); - if (!relative.host) relative.host = ''; - if (!relative.hostname) relative.hostname = ''; - if (relPath[0] !== '') relPath.unshift(''); - if (relPath.length < 2) relPath.unshift(''); - result.pathname = relPath.join('/'); - } else { - result.pathname = relative.pathname; - } - result.search = relative.search; - result.query = relative.query; - result.host = relative.host || ''; - result.auth = relative.auth; - result.hostname = relative.hostname || relative.host; - result.port = relative.port; - // to support http.request - if (result.pathname || result.search) { - var p = result.pathname || ''; - var s = result.search || ''; - result.path = p + s; - } - result.slashes = result.slashes || relative.slashes; - result.href = result.format(); - return result; - } - - var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'), - isRelAbs = ( - relative.host || - relative.pathname && relative.pathname.charAt(0) === '/' - ), - mustEndAbs = (isRelAbs || isSourceAbs || - (result.host && relative.pathname)), - removeAllDots = mustEndAbs, - srcPath = result.pathname && result.pathname.split('/') || [], - relPath = relative.pathname && relative.pathname.split('/') || [], - psychotic = result.protocol && !slashedProtocol[result.protocol]; - - // if the url is a non-slashed url, then relative - // links like ../.. should be able - // to crawl up to the hostname, as well. This is strange. - // result.protocol has already been set by now. - // Later on, put the first path part into the host field. - if (psychotic) { - result.hostname = ''; - result.port = null; - if (result.host) { - if (srcPath[0] === '') srcPath[0] = result.host; - else srcPath.unshift(result.host); - } - result.host = ''; - if (relative.protocol) { - relative.hostname = null; - relative.port = null; - if (relative.host) { - if (relPath[0] === '') relPath[0] = relative.host; - else relPath.unshift(relative.host); - } - relative.host = null; - } - mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); - } - - if (isRelAbs) { - // it's absolute. - result.host = (relative.host || relative.host === '') ? - relative.host : result.host; - result.hostname = (relative.hostname || relative.hostname === '') ? - relative.hostname : result.hostname; - result.search = relative.search; - result.query = relative.query; - srcPath = relPath; - // fall through to the dot-handling below. - } else if (relPath.length) { - // it's relative - // throw away the existing file, and take the new path instead. - if (!srcPath) srcPath = []; - srcPath.pop(); - srcPath = srcPath.concat(relPath); - result.search = relative.search; - result.query = relative.query; - } else if (!isNullOrUndefined(relative.search)) { - // just pull out the search. - // like href='?foo'. - // Put this after the other two cases because it simplifies the booleans - if (psychotic) { - result.hostname = result.host = srcPath.shift(); - //occationaly the auth can get stuck only in host - //this especialy happens in cases like - //url.resolveObject('mailto:local1@domain1', 'local2@domain2') - var authInHost = result.host && result.host.indexOf('@') > 0 ? - result.host.split('@') : false; - if (authInHost) { - result.auth = authInHost.shift(); - result.host = result.hostname = authInHost.shift(); - } - } - result.search = relative.search; - result.query = relative.query; - //to support http.request - if (!isNull(result.pathname) || !isNull(result.search)) { - result.path = (result.pathname ? result.pathname : '') + - (result.search ? result.search : ''); - } - result.href = result.format(); - return result; - } - - if (!srcPath.length) { - // no path at all. easy. - // we've already handled the other stuff above. - result.pathname = null; - //to support http.request - if (result.search) { - result.path = '/' + result.search; - } else { - result.path = null; - } - result.href = result.format(); - return result; - } - - // if a url ENDs in . or .., then it must get a trailing slash. - // however, if it ends in anything else non-slashy, - // then it must NOT get a trailing slash. - var last = srcPath.slice(-1)[0]; - var hasTrailingSlash = ( - (result.host || relative.host) && (last === '.' || last === '..') || - last === ''); - - // strip single dots, resolve double dots to parent dir - // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = srcPath.length; i >= 0; i--) { - last = srcPath[i]; - if (last == '.') { - srcPath.splice(i, 1); - } else if (last === '..') { - srcPath.splice(i, 1); - up++; - } else if (up) { - srcPath.splice(i, 1); - up--; - } - } - - // if the path is allowed to go above the root, restore leading ..s - if (!mustEndAbs && !removeAllDots) { - for (; up--; up) { - srcPath.unshift('..'); - } - } - - if (mustEndAbs && srcPath[0] !== '' && - (!srcPath[0] || srcPath[0].charAt(0) !== '/')) { - srcPath.unshift(''); - } - - if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) { - srcPath.push(''); - } - - var isAbsolute = srcPath[0] === '' || - (srcPath[0] && srcPath[0].charAt(0) === '/'); - - // put the host back - if (psychotic) { - result.hostname = result.host = isAbsolute ? '' : - srcPath.length ? srcPath.shift() : ''; - //occationaly the auth can get stuck only in host - //this especialy happens in cases like - //url.resolveObject('mailto:local1@domain1', 'local2@domain2') - var authInHost = result.host && result.host.indexOf('@') > 0 ? - result.host.split('@') : false; - if (authInHost) { - result.auth = authInHost.shift(); - result.host = result.hostname = authInHost.shift(); - } - } - - mustEndAbs = mustEndAbs || (result.host && srcPath.length); - - if (mustEndAbs && !isAbsolute) { - srcPath.unshift(''); - } - - if (!srcPath.length) { - result.pathname = null; - result.path = null; - } else { - result.pathname = srcPath.join('/'); - } - - //to support request.http - if (!isNull(result.pathname) || !isNull(result.search)) { - result.path = (result.pathname ? result.pathname : '') + - (result.search ? result.search : ''); - } - result.auth = relative.auth || result.auth; - result.slashes = result.slashes || relative.slashes; - result.href = result.format(); - return result; -}; - -Url.prototype.parseHost = function() { - var host = this.host; - var port = portPattern.exec(host); - if (port) { - port = port[0]; - if (port !== ':') { - this.port = port.substr(1); - } - host = host.substr(0, host.length - port.length); - } - if (host) this.hostname = host; -}; - -function isString(arg) { - return typeof arg === "string"; -} - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} - -function isNull(arg) { - return arg === null; -} -function isNullOrUndefined(arg) { - return arg == null; -} - -},{"punycode":28,"querystring":31}],33:[function(require,module,exports){ -function DOMParser(options){ - this.options = options ||{locator:{}}; - -} -DOMParser.prototype.parseFromString = function(source,mimeType){ - var options = this.options; - var sax = new XMLReader(); - var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler - var errorHandler = options.errorHandler; - var locator = options.locator; - var defaultNSMap = options.xmlns||{}; - var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"} - if(locator){ - domBuilder.setDocumentLocator(locator) - } - - sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator); - sax.domBuilder = options.domBuilder || domBuilder; - if(/\/x?html?$/.test(mimeType)){ - entityMap.nbsp = '\xa0'; - entityMap.copy = '\xa9'; - defaultNSMap['']= 'http://www.w3.org/1999/xhtml'; - } - defaultNSMap.xml = defaultNSMap.xml || 'http://www.w3.org/XML/1998/namespace'; - if(source){ - sax.parse(source,defaultNSMap,entityMap); - }else{ - sax.errorHandler.error("invalid doc source"); - } - return domBuilder.doc; -} -function buildErrorHandler(errorImpl,domBuilder,locator){ - if(!errorImpl){ - if(domBuilder instanceof DOMHandler){ - return domBuilder; - } - errorImpl = domBuilder ; - } - var errorHandler = {} - var isCallback = errorImpl instanceof Function; - locator = locator||{} - function build(key){ - var fn = errorImpl[key]; - if(!fn && isCallback){ - fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl; - } - errorHandler[key] = fn && function(msg){ - fn('[xmldom '+key+']\t'+msg+_locator(locator)); - }||function(){}; - } - build('warning'); - build('error'); - build('fatalError'); - return errorHandler; -} - -//console.log('#\n\n\n\n\n\n\n####') -/** - * +ContentHandler+ErrorHandler - * +LexicalHandler+EntityResolver2 - * -DeclHandler-DTDHandler - * - * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler - * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2 - * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html - */ -function DOMHandler() { - this.cdata = false; -} -function position(locator,node){ - node.lineNumber = locator.lineNumber; - node.columnNumber = locator.columnNumber; -} -/** - * @see org.xml.sax.ContentHandler#startDocument - * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html - */ -DOMHandler.prototype = { - startDocument : function() { - this.doc = new DOMImplementation().createDocument(null, null, null); - if (this.locator) { - this.doc.documentURI = this.locator.systemId; - } - }, - startElement:function(namespaceURI, localName, qName, attrs) { - var doc = this.doc; - var el = doc.createElementNS(namespaceURI, qName||localName); - var len = attrs.length; - appendElement(this, el); - this.currentElement = el; - - this.locator && position(this.locator,el) - for (var i = 0 ; i < len; i++) { - var namespaceURI = attrs.getURI(i); - var value = attrs.getValue(i); - var qName = attrs.getQName(i); - var attr = doc.createAttributeNS(namespaceURI, qName); - this.locator &&position(attrs.getLocator(i),attr); - attr.value = attr.nodeValue = value; - el.setAttributeNode(attr) - } - }, - endElement:function(namespaceURI, localName, qName) { - var current = this.currentElement - var tagName = current.tagName; - this.currentElement = current.parentNode; - }, - startPrefixMapping:function(prefix, uri) { - }, - endPrefixMapping:function(prefix) { - }, - processingInstruction:function(target, data) { - var ins = this.doc.createProcessingInstruction(target, data); - this.locator && position(this.locator,ins) - appendElement(this, ins); - }, - ignorableWhitespace:function(ch, start, length) { - }, - characters:function(chars, start, length) { - chars = _toString.apply(this,arguments) - //console.log(chars) - if(chars){ - if (this.cdata) { - var charNode = this.doc.createCDATASection(chars); - } else { - var charNode = this.doc.createTextNode(chars); - } - if(this.currentElement){ - this.currentElement.appendChild(charNode); - }else if(/^\s*$/.test(chars)){ - this.doc.appendChild(charNode); - //process xml - } - this.locator && position(this.locator,charNode) - } - }, - skippedEntity:function(name) { - }, - endDocument:function() { - this.doc.normalize(); - }, - setDocumentLocator:function (locator) { - if(this.locator = locator){// && !('lineNumber' in locator)){ - locator.lineNumber = 0; - } - }, - //LexicalHandler - comment:function(chars, start, length) { - chars = _toString.apply(this,arguments) - var comm = this.doc.createComment(chars); - this.locator && position(this.locator,comm) - appendElement(this, comm); - }, - - startCDATA:function() { - //used in characters() methods - this.cdata = true; - }, - endCDATA:function() { - this.cdata = false; - }, - - startDTD:function(name, publicId, systemId) { - var impl = this.doc.implementation; - if (impl && impl.createDocumentType) { - var dt = impl.createDocumentType(name, publicId, systemId); - this.locator && position(this.locator,dt) - appendElement(this, dt); - } - }, - /** - * @see org.xml.sax.ErrorHandler - * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html - */ - warning:function(error) { - console.warn('[xmldom warning]\t'+error,_locator(this.locator)); - }, - error:function(error) { - console.error('[xmldom error]\t'+error,_locator(this.locator)); - }, - fatalError:function(error) { - console.error('[xmldom fatalError]\t'+error,_locator(this.locator)); - throw error; - } -} -function _locator(l){ - if(l){ - return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']' - } -} -function _toString(chars,start,length){ - if(typeof chars == 'string'){ - return chars.substr(start,length) - }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)") - if(chars.length >= start+length || start){ - return new java.lang.String(chars,start,length)+''; - } - return chars; - } -} - -/* - * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html - * used method of org.xml.sax.ext.LexicalHandler: - * #comment(chars, start, length) - * #startCDATA() - * #endCDATA() - * #startDTD(name, publicId, systemId) - * - * - * IGNORED method of org.xml.sax.ext.LexicalHandler: - * #endDTD() - * #startEntity(name) - * #endEntity(name) - * - * - * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html - * IGNORED method of org.xml.sax.ext.DeclHandler - * #attributeDecl(eName, aName, type, mode, value) - * #elementDecl(name, model) - * #externalEntityDecl(name, publicId, systemId) - * #internalEntityDecl(name, value) - * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html - * IGNORED method of org.xml.sax.EntityResolver2 - * #resolveEntity(String name,String publicId,String baseURI,String systemId) - * #resolveEntity(publicId, systemId) - * #getExternalSubset(name, baseURI) - * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html - * IGNORED method of org.xml.sax.DTDHandler - * #notationDecl(name, publicId, systemId) {}; - * #unparsedEntityDecl(name, publicId, systemId, notationName) {}; - */ -"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){ - DOMHandler.prototype[key] = function(){return null} -}) - -/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */ -function appendElement (hander,node) { - if (!hander.currentElement) { - hander.doc.appendChild(node); - } else { - hander.currentElement.appendChild(node); - } -}//appendChild and setAttributeNS are preformance key - -//if(typeof require == 'function'){ - var XMLReader = require('./sax').XMLReader; - var DOMImplementation = exports.DOMImplementation = require('./dom').DOMImplementation; - exports.XMLSerializer = require('./dom').XMLSerializer ; - exports.DOMParser = DOMParser; -//} - -},{"./dom":34,"./sax":35}],34:[function(require,module,exports){ -/* - * DOM Level 2 - * Object DOMException - * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html - * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html - */ - -function copy(src,dest){ - for(var p in src){ - dest[p] = src[p]; - } -} -/** -^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));? -^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));? - */ -function _extends(Class,Super){ - var pt = Class.prototype; - if(Object.create){ - var ppt = Object.create(Super.prototype) - pt.__proto__ = ppt; - } - if(!(pt instanceof Super)){ - function t(){}; - t.prototype = Super.prototype; - t = new t(); - copy(pt,t); - Class.prototype = pt = t; - } - if(pt.constructor != Class){ - if(typeof Class != 'function'){ - console.error("unknow Class:"+Class) - } - pt.constructor = Class - } -} -var htmlns = 'http://www.w3.org/1999/xhtml' ; -// Node Types -var NodeType = {} -var ELEMENT_NODE = NodeType.ELEMENT_NODE = 1; -var ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2; -var TEXT_NODE = NodeType.TEXT_NODE = 3; -var CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4; -var ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5; -var ENTITY_NODE = NodeType.ENTITY_NODE = 6; -var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7; -var COMMENT_NODE = NodeType.COMMENT_NODE = 8; -var DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9; -var DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10; -var DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11; -var NOTATION_NODE = NodeType.NOTATION_NODE = 12; - -// ExceptionCode -var ExceptionCode = {} -var ExceptionMessage = {}; -var INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]="Index size error"),1); -var DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2); -var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3); -var WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4); -var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5); -var NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6); -var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7); -var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8); -var NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]="Not supported"),9); -var INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]="Attribute in use"),10); -//level2 -var INVALID_STATE_ERR = ExceptionCode.INVALID_STATE_ERR = ((ExceptionMessage[11]="Invalid state"),11); -var SYNTAX_ERR = ExceptionCode.SYNTAX_ERR = ((ExceptionMessage[12]="Syntax error"),12); -var INVALID_MODIFICATION_ERR = ExceptionCode.INVALID_MODIFICATION_ERR = ((ExceptionMessage[13]="Invalid modification"),13); -var NAMESPACE_ERR = ExceptionCode.NAMESPACE_ERR = ((ExceptionMessage[14]="Invalid namespace"),14); -var INVALID_ACCESS_ERR = ExceptionCode.INVALID_ACCESS_ERR = ((ExceptionMessage[15]="Invalid access"),15); - - -function DOMException(code, message) { - if(message instanceof Error){ - var error = message; - }else{ - error = this; - Error.call(this, ExceptionMessage[code]); - this.message = ExceptionMessage[code]; - if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException); - } - error.code = code; - if(message) this.message = this.message + ": " + message; - return error; -}; -DOMException.prototype = Error.prototype; -copy(ExceptionCode,DOMException) -/** - * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177 - * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live. - * The items in the NodeList are accessible via an integral index, starting from 0. - */ -function NodeList() { -}; -NodeList.prototype = { - /** - * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive. - * @standard level1 - */ - length:0, - /** - * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null. - * @standard level1 - * @param index unsigned long - * Index into the collection. - * @return Node - * The node at the indexth position in the NodeList, or null if that is not a valid index. - */ - item: function(index) { - return this[index] || null; - }, - toString:function(isHTML,nodeFilter){ - for(var buf = [], i = 0;i=0){ - var lastIndex = list.length-1 - while(i0 || key == 'xmlns'){ -// return null; -// } - //console.log() - var i = this.length; - while(i--){ - var attr = this[i]; - //console.log(attr.nodeName,key) - if(attr.nodeName == key){ - return attr; - } - } - }, - setNamedItem: function(attr) { - var el = attr.ownerElement; - if(el && el!=this._ownerElement){ - throw new DOMException(INUSE_ATTRIBUTE_ERR); - } - var oldAttr = this.getNamedItem(attr.nodeName); - _addNamedNode(this._ownerElement,this,attr,oldAttr); - return oldAttr; - }, - /* returns Node */ - setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR - var el = attr.ownerElement, oldAttr; - if(el && el!=this._ownerElement){ - throw new DOMException(INUSE_ATTRIBUTE_ERR); - } - oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName); - _addNamedNode(this._ownerElement,this,attr,oldAttr); - return oldAttr; - }, - - /* returns Node */ - removeNamedItem: function(key) { - var attr = this.getNamedItem(key); - _removeNamedNode(this._ownerElement,this,attr); - return attr; - - - },// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR - - //for level2 - removeNamedItemNS:function(namespaceURI,localName){ - var attr = this.getNamedItemNS(namespaceURI,localName); - _removeNamedNode(this._ownerElement,this,attr); - return attr; - }, - getNamedItemNS: function(namespaceURI, localName) { - var i = this.length; - while(i--){ - var node = this[i]; - if(node.localName == localName && node.namespaceURI == namespaceURI){ - return node; - } - } - return null; - } -}; -/** - * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 - */ -function DOMImplementation(/* Object */ features) { - this._features = {}; - if (features) { - for (var feature in features) { - this._features = features[feature]; - } - } -}; - -DOMImplementation.prototype = { - hasFeature: function(/* string */ feature, /* string */ version) { - var versions = this._features[feature.toLowerCase()]; - if (versions && (!version || version in versions)) { - return true; - } else { - return false; - } - }, - // Introduced in DOM Level 2: - createDocument:function(namespaceURI, qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR - var doc = new Document(); - doc.implementation = this; - doc.childNodes = new NodeList(); - doc.doctype = doctype; - if(doctype){ - doc.appendChild(doctype); - } - if(qualifiedName){ - var root = doc.createElementNS(namespaceURI,qualifiedName); - doc.appendChild(root); - } - return doc; - }, - // Introduced in DOM Level 2: - createDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR - var node = new DocumentType(); - node.name = qualifiedName; - node.nodeName = qualifiedName; - node.publicId = publicId; - node.systemId = systemId; - // Introduced in DOM Level 2: - //readonly attribute DOMString internalSubset; - - //TODO:.. - // readonly attribute NamedNodeMap entities; - // readonly attribute NamedNodeMap notations; - return node; - } -}; - - -/** - * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247 - */ - -function Node() { -}; - -Node.prototype = { - firstChild : null, - lastChild : null, - previousSibling : null, - nextSibling : null, - attributes : null, - parentNode : null, - childNodes : null, - ownerDocument : null, - nodeValue : null, - namespaceURI : null, - prefix : null, - localName : null, - // Modified in DOM Level 2: - insertBefore:function(newChild, refChild){//raises - return _insertBefore(this,newChild,refChild); - }, - replaceChild:function(newChild, oldChild){//raises - this.insertBefore(newChild,oldChild); - if(oldChild){ - this.removeChild(oldChild); - } - }, - removeChild:function(oldChild){ - return _removeChild(this,oldChild); - }, - appendChild:function(newChild){ - return this.insertBefore(newChild,null); - }, - hasChildNodes:function(){ - return this.firstChild != null; - }, - cloneNode:function(deep){ - return cloneNode(this.ownerDocument||this,this,deep); - }, - // Modified in DOM Level 2: - normalize:function(){ - var child = this.firstChild; - while(child){ - var next = child.nextSibling; - if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){ - this.removeChild(next); - child.appendData(next.data); - }else{ - child.normalize(); - child = next; - } - } - }, - // Introduced in DOM Level 2: - isSupported:function(feature, version){ - return this.ownerDocument.implementation.hasFeature(feature,version); - }, - // Introduced in DOM Level 2: - hasAttributes:function(){ - return this.attributes.length>0; - }, - lookupPrefix:function(namespaceURI){ - var el = this; - while(el){ - var map = el._nsMap; - //console.dir(map) - if(map){ - for(var n in map){ - if(map[n] == namespaceURI){ - return n; - } - } - } - el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode; - } - return null; - }, - // Introduced in DOM Level 3: - lookupNamespaceURI:function(prefix){ - var el = this; - while(el){ - var map = el._nsMap; - //console.dir(map) - if(map){ - if(prefix in map){ - return map[prefix] ; - } - } - el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode; - } - return null; - }, - // Introduced in DOM Level 3: - isDefaultNamespace:function(namespaceURI){ - var prefix = this.lookupPrefix(namespaceURI); - return prefix == null; - } -}; - - -function _xmlEncoder(c){ - return c == '<' && '<' || - c == '>' && '>' || - c == '&' && '&' || - c == '"' && '"' || - '&#'+c.charCodeAt()+';' -} - - -copy(NodeType,Node); -copy(NodeType,Node.prototype); - -/** - * @param callback return true for continue,false for break - * @return boolean true: break visit; - */ -function _visitNode(node,callback){ - if(callback(node)){ - return true; - } - if(node = node.firstChild){ - do{ - if(_visitNode(node,callback)){return true} - }while(node=node.nextSibling) - } -} - - - -function Document(){ -} -function _onAddAttribute(doc,el,newAttr){ - doc && doc._inc++; - var ns = newAttr.namespaceURI ; - if(ns == 'http://www.w3.org/2000/xmlns/'){ - //update namespace - el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value - } -} -function _onRemoveAttribute(doc,el,newAttr,remove){ - doc && doc._inc++; - var ns = newAttr.namespaceURI ; - if(ns == 'http://www.w3.org/2000/xmlns/'){ - //update namespace - delete el._nsMap[newAttr.prefix?newAttr.localName:''] - } -} -function _onUpdateChild(doc,el,newChild){ - if(doc && doc._inc){ - doc._inc++; - //update childNodes - var cs = el.childNodes; - if(newChild){ - cs[cs.length++] = newChild; - }else{ - //console.log(1) - var child = el.firstChild; - var i = 0; - while(child){ - cs[i++] = child; - child =child.nextSibling; - } - cs.length = i; - } - } -} - -/** - * attributes; - * children; - * - * writeable properties: - * nodeValue,Attr:value,CharacterData:data - * prefix - */ -function _removeChild(parentNode,child){ - var previous = child.previousSibling; - var next = child.nextSibling; - if(previous){ - previous.nextSibling = next; - }else{ - parentNode.firstChild = next - } - if(next){ - next.previousSibling = previous; - }else{ - parentNode.lastChild = previous; - } - _onUpdateChild(parentNode.ownerDocument,parentNode); - return child; -} -/** - * preformance key(refChild == null) - */ -function _insertBefore(parentNode,newChild,nextChild){ - var cp = newChild.parentNode; - if(cp){ - cp.removeChild(newChild);//remove and update - } - if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ - var newFirst = newChild.firstChild; - if (newFirst == null) { - return newChild; - } - var newLast = newChild.lastChild; - }else{ - newFirst = newLast = newChild; - } - var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild; - - newFirst.previousSibling = pre; - newLast.nextSibling = nextChild; - - - if(pre){ - pre.nextSibling = newFirst; - }else{ - parentNode.firstChild = newFirst; - } - if(nextChild == null){ - parentNode.lastChild = newLast; - }else{ - nextChild.previousSibling = newLast; - } - do{ - newFirst.parentNode = parentNode; - }while(newFirst !== newLast && (newFirst= newFirst.nextSibling)) - _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode); - //console.log(parentNode.lastChild.nextSibling == null) - if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) { - newChild.firstChild = newChild.lastChild = null; - } - return newChild; -} -function _appendSingleChild(parentNode,newChild){ - var cp = newChild.parentNode; - if(cp){ - var pre = parentNode.lastChild; - cp.removeChild(newChild);//remove and update - var pre = parentNode.lastChild; - } - var pre = parentNode.lastChild; - newChild.parentNode = parentNode; - newChild.previousSibling = pre; - newChild.nextSibling = null; - if(pre){ - pre.nextSibling = newChild; - }else{ - parentNode.firstChild = newChild; - } - parentNode.lastChild = newChild; - _onUpdateChild(parentNode.ownerDocument,parentNode,newChild); - return newChild; - //console.log("__aa",parentNode.lastChild.nextSibling == null) -} -Document.prototype = { - //implementation : null, - nodeName : '#document', - nodeType : DOCUMENT_NODE, - doctype : null, - documentElement : null, - _inc : 1, - - insertBefore : function(newChild, refChild){//raises - if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){ - var child = newChild.firstChild; - while(child){ - var next = child.nextSibling; - this.insertBefore(child,refChild); - child = next; - } - return newChild; - } - if(this.documentElement == null && newChild.nodeType == ELEMENT_NODE){ - this.documentElement = newChild; - } - - return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild; - }, - removeChild : function(oldChild){ - if(this.documentElement == oldChild){ - this.documentElement = null; - } - return _removeChild(this,oldChild); - }, - // Introduced in DOM Level 2: - importNode : function(importedNode,deep){ - return importNode(this,importedNode,deep); - }, - // Introduced in DOM Level 2: - getElementById : function(id){ - var rtv = null; - _visitNode(this.documentElement,function(node){ - if(node.nodeType == ELEMENT_NODE){ - if(node.getAttribute('id') == id){ - rtv = node; - return true; - } - } - }) - return rtv; - }, - - //document factory method: - createElement : function(tagName){ - var node = new Element(); - node.ownerDocument = this; - node.nodeName = tagName; - node.tagName = tagName; - node.childNodes = new NodeList(); - var attrs = node.attributes = new NamedNodeMap(); - attrs._ownerElement = node; - return node; - }, - createDocumentFragment : function(){ - var node = new DocumentFragment(); - node.ownerDocument = this; - node.childNodes = new NodeList(); - return node; - }, - createTextNode : function(data){ - var node = new Text(); - node.ownerDocument = this; - node.appendData(data) - return node; - }, - createComment : function(data){ - var node = new Comment(); - node.ownerDocument = this; - node.appendData(data) - return node; - }, - createCDATASection : function(data){ - var node = new CDATASection(); - node.ownerDocument = this; - node.appendData(data) - return node; - }, - createProcessingInstruction : function(target,data){ - var node = new ProcessingInstruction(); - node.ownerDocument = this; - node.tagName = node.target = target; - node.nodeValue= node.data = data; - return node; - }, - createAttribute : function(name){ - var node = new Attr(); - node.ownerDocument = this; - node.name = name; - node.nodeName = name; - node.localName = name; - node.specified = true; - return node; - }, - createEntityReference : function(name){ - var node = new EntityReference(); - node.ownerDocument = this; - node.nodeName = name; - return node; - }, - // Introduced in DOM Level 2: - createElementNS : function(namespaceURI,qualifiedName){ - var node = new Element(); - var pl = qualifiedName.split(':'); - var attrs = node.attributes = new NamedNodeMap(); - node.childNodes = new NodeList(); - node.ownerDocument = this; - node.nodeName = qualifiedName; - node.tagName = qualifiedName; - node.namespaceURI = namespaceURI; - if(pl.length == 2){ - node.prefix = pl[0]; - node.localName = pl[1]; - }else{ - //el.prefix = null; - node.localName = qualifiedName; - } - attrs._ownerElement = node; - return node; - }, - // Introduced in DOM Level 2: - createAttributeNS : function(namespaceURI,qualifiedName){ - var node = new Attr(); - var pl = qualifiedName.split(':'); - node.ownerDocument = this; - node.nodeName = qualifiedName; - node.name = qualifiedName; - node.namespaceURI = namespaceURI; - node.specified = true; - if(pl.length == 2){ - node.prefix = pl[0]; - node.localName = pl[1]; - }else{ - //el.prefix = null; - node.localName = qualifiedName; - } - return node; - } -}; -_extends(Document,Node); - - -function Element() { - this._nsMap = {}; -}; -Element.prototype = { - nodeType : ELEMENT_NODE, - hasAttribute : function(name){ - return this.getAttributeNode(name)!=null; - }, - getAttribute : function(name){ - var attr = this.getAttributeNode(name); - return attr && attr.value || ''; - }, - getAttributeNode : function(name){ - return this.attributes.getNamedItem(name); - }, - setAttribute : function(name, value){ - var attr = this.ownerDocument.createAttribute(name); - attr.value = attr.nodeValue = "" + value; - this.setAttributeNode(attr) - }, - removeAttribute : function(name){ - var attr = this.getAttributeNode(name) - attr && this.removeAttributeNode(attr); - }, - - //four real opeartion method - appendChild:function(newChild){ - if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ - return this.insertBefore(newChild,null); - }else{ - return _appendSingleChild(this,newChild); - } - }, - setAttributeNode : function(newAttr){ - return this.attributes.setNamedItem(newAttr); - }, - setAttributeNodeNS : function(newAttr){ - return this.attributes.setNamedItemNS(newAttr); - }, - removeAttributeNode : function(oldAttr){ - //console.log(this == oldAttr.ownerElement) - return this.attributes.removeNamedItem(oldAttr.nodeName); - }, - //get real attribute name,and remove it by removeAttributeNode - removeAttributeNS : function(namespaceURI, localName){ - var old = this.getAttributeNodeNS(namespaceURI, localName); - old && this.removeAttributeNode(old); - }, - - hasAttributeNS : function(namespaceURI, localName){ - return this.getAttributeNodeNS(namespaceURI, localName)!=null; - }, - getAttributeNS : function(namespaceURI, localName){ - var attr = this.getAttributeNodeNS(namespaceURI, localName); - return attr && attr.value || ''; - }, - setAttributeNS : function(namespaceURI, qualifiedName, value){ - var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName); - attr.value = attr.nodeValue = "" + value; - this.setAttributeNode(attr) - }, - getAttributeNodeNS : function(namespaceURI, localName){ - return this.attributes.getNamedItemNS(namespaceURI, localName); - }, - - getElementsByTagName : function(tagName){ - return new LiveNodeList(this,function(base){ - var ls = []; - _visitNode(base,function(node){ - if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){ - ls.push(node); - } - }); - return ls; - }); - }, - getElementsByTagNameNS : function(namespaceURI, localName){ - return new LiveNodeList(this,function(base){ - var ls = []; - _visitNode(base,function(node){ - if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){ - ls.push(node); - } - }); - return ls; - - }); - } -}; -Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName; -Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS; - - -_extends(Element,Node); -function Attr() { -}; -Attr.prototype.nodeType = ATTRIBUTE_NODE; -_extends(Attr,Node); - - -function CharacterData() { -}; -CharacterData.prototype = { - data : '', - substringData : function(offset, count) { - return this.data.substring(offset, offset+count); - }, - appendData: function(text) { - text = this.data+text; - this.nodeValue = this.data = text; - this.length = text.length; - }, - insertData: function(offset,text) { - this.replaceData(offset,0,text); - - }, - appendChild:function(newChild){ - throw new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR]) - }, - deleteData: function(offset, count) { - this.replaceData(offset,count,""); - }, - replaceData: function(offset, count, text) { - var start = this.data.substring(0,offset); - var end = this.data.substring(offset+count); - text = start + text + end; - this.nodeValue = this.data = text; - this.length = text.length; - } -} -_extends(CharacterData,Node); -function Text() { -}; -Text.prototype = { - nodeName : "#text", - nodeType : TEXT_NODE, - splitText : function(offset) { - var text = this.data; - var newText = text.substring(offset); - text = text.substring(0, offset); - this.data = this.nodeValue = text; - this.length = text.length; - var newNode = this.ownerDocument.createTextNode(newText); - if(this.parentNode){ - this.parentNode.insertBefore(newNode, this.nextSibling); - } - return newNode; - } -} -_extends(Text,CharacterData); -function Comment() { -}; -Comment.prototype = { - nodeName : "#comment", - nodeType : COMMENT_NODE -} -_extends(Comment,CharacterData); - -function CDATASection() { -}; -CDATASection.prototype = { - nodeName : "#cdata-section", - nodeType : CDATA_SECTION_NODE -} -_extends(CDATASection,CharacterData); - - -function DocumentType() { -}; -DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE; -_extends(DocumentType,Node); - -function Notation() { -}; -Notation.prototype.nodeType = NOTATION_NODE; -_extends(Notation,Node); - -function Entity() { -}; -Entity.prototype.nodeType = ENTITY_NODE; -_extends(Entity,Node); - -function EntityReference() { -}; -EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE; -_extends(EntityReference,Node); - -function DocumentFragment() { -}; -DocumentFragment.prototype.nodeName = "#document-fragment"; -DocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE; -_extends(DocumentFragment,Node); - - -function ProcessingInstruction() { -} -ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE; -_extends(ProcessingInstruction,Node); -function XMLSerializer(){} -XMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){ - return nodeSerializeToString.call(node,isHtml,nodeFilter); -} -Node.prototype.toString = nodeSerializeToString; -function nodeSerializeToString(isHtml,nodeFilter){ - var buf = []; - var refNode = this.nodeType == 9?this.documentElement:this; - var prefix = refNode.prefix; - var uri = refNode.namespaceURI; - - if(uri && prefix == null){ - //console.log(prefix) - var prefix = refNode.lookupPrefix(uri); - if(prefix == null){ - //isHTML = true; - var visibleNamespaces=[ - {namespace:uri,prefix:null} - //{namespace:uri,prefix:''} - ] - } - } - serializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces); - //console.log('###',this.nodeType,uri,prefix,buf.join('')) - return buf.join(''); -} -function needNamespaceDefine(node,isHTML, visibleNamespaces) { - var prefix = node.prefix||''; - var uri = node.namespaceURI; - if (!prefix && !uri){ - return false; - } - if (prefix === "xml" && uri === "http://www.w3.org/XML/1998/namespace" - || uri == 'http://www.w3.org/2000/xmlns/'){ - return false; - } - - var i = visibleNamespaces.length - //console.log('@@@@',node.tagName,prefix,uri,visibleNamespaces) - while (i--) { - var ns = visibleNamespaces[i]; - // get namespace prefix - //console.log(node.nodeType,node.tagName,ns.prefix,prefix) - if (ns.prefix == prefix){ - return ns.namespace != uri; - } - } - //console.log(isHTML,uri,prefix=='') - //if(isHTML && prefix ==null && uri == 'http://www.w3.org/1999/xhtml'){ - // return false; - //} - //node.flag = '11111' - //console.error(3,true,node.flag,node.prefix,node.namespaceURI) - return true; -} -function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){ - if(nodeFilter){ - node = nodeFilter(node); - if(node){ - if(typeof node == 'string'){ - buf.push(node); - return; - } - }else{ - return; - } - //buf.sort.apply(attrs, attributeSorter); - } - switch(node.nodeType){ - case ELEMENT_NODE: - if (!visibleNamespaces) visibleNamespaces = []; - var startVisibleNamespaces = visibleNamespaces.length; - var attrs = node.attributes; - var len = attrs.length; - var child = node.firstChild; - var nodeName = node.tagName; - - isHTML = (htmlns === node.namespaceURI) ||isHTML - buf.push('<',nodeName); - - - - for(var i=0;i'); - //if is cdata child node - if(isHTML && /^script$/i.test(nodeName)){ - while(child){ - if(child.data){ - buf.push(child.data); - }else{ - serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces); - } - child = child.nextSibling; - } - }else - { - while(child){ - serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces); - child = child.nextSibling; - } - } - buf.push(''); - }else{ - buf.push('/>'); - } - // remove added visible namespaces - //visibleNamespaces.length = startVisibleNamespaces; - return; - case DOCUMENT_NODE: - case DOCUMENT_FRAGMENT_NODE: - var child = node.firstChild; - while(child){ - serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces); - child = child.nextSibling; - } - return; - case ATTRIBUTE_NODE: - return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"'); - case TEXT_NODE: - return buf.push(node.data.replace(/[<&]/g,_xmlEncoder)); - case CDATA_SECTION_NODE: - return buf.push( ''); - case COMMENT_NODE: - return buf.push( ""); - case DOCUMENT_TYPE_NODE: - var pubid = node.publicId; - var sysid = node.systemId; - buf.push(''); - }else if(sysid && sysid!='.'){ - buf.push(' SYSTEM "',sysid,'">'); - }else{ - var sub = node.internalSubset; - if(sub){ - buf.push(" [",sub,"]"); - } - buf.push(">"); - } - return; - case PROCESSING_INSTRUCTION_NODE: - return buf.push( ""); - case ENTITY_REFERENCE_NODE: - return buf.push( '&',node.nodeName,';'); - //case ENTITY_NODE: - //case NOTATION_NODE: - default: - buf.push('??',node.nodeName); - } -} -function importNode(doc,node,deep){ - var node2; - switch (node.nodeType) { - case ELEMENT_NODE: - node2 = node.cloneNode(false); - node2.ownerDocument = doc; - //var attrs = node2.attributes; - //var len = attrs.length; - //for(var i=0;i - -function XMLReader(){ - -} - -XMLReader.prototype = { - parse:function(source,defaultNSMap,entityMap){ - var domBuilder = this.domBuilder; - domBuilder.startDocument(); - _copy(defaultNSMap ,defaultNSMap = {}) - parse(source,defaultNSMap,entityMap, - domBuilder,this.errorHandler); - domBuilder.endDocument(); - } -} -function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){ - function fixedFromCharCode(code) { - // String.prototype.fromCharCode does not supports - // > 2 bytes unicode chars directly - if (code > 0xffff) { - code -= 0x10000; - var surrogate1 = 0xd800 + (code >> 10) - , surrogate2 = 0xdc00 + (code & 0x3ff); - - return String.fromCharCode(surrogate1, surrogate2); - } else { - return String.fromCharCode(code); - } - } - function entityReplacer(a){ - var k = a.slice(1,-1); - if(k in entityMap){ - return entityMap[k]; - }else if(k.charAt(0) === '#'){ - return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x'))) - }else{ - errorHandler.error('entity not found:'+a); - return a; - } - } - function appendText(end){//has some bugs - if(end>start){ - var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer); - locator&&position(start); - domBuilder.characters(xt,0,end-start); - start = end - } - } - function position(p,m){ - while(p>=lineEnd && (m = linePattern.exec(source))){ - lineStart = m.index; - lineEnd = lineStart + m[0].length; - locator.lineNumber++; - //console.log('line++:',locator,startPos,endPos) - } - locator.columnNumber = p-lineStart+1; - } - var lineStart = 0; - var lineEnd = 0; - var linePattern = /.*(?:\r\n?|\n)|.*$/g - var locator = domBuilder.locator; - - var parseStack = [{currentNSMap:defaultNSMapCopy}] - var closeMap = {}; - var start = 0; - while(true){ - try{ - var tagStart = source.indexOf('<',start); - if(tagStart<0){ - if(!source.substr(start).match(/^\s*$/)){ - var doc = domBuilder.doc; - var text = doc.createTextNode(source.substr(start)); - doc.appendChild(text); - domBuilder.currentElement = text; - } - return; - } - if(tagStart>start){ - appendText(tagStart); - } - switch(source.charAt(tagStart+1)){ - case '/': - var end = source.indexOf('>',tagStart+3); - var tagName = source.substring(tagStart+2,end); - var config = parseStack.pop(); - if(end<0){ - - tagName = source.substring(tagStart+2).replace(/[\s<].*/,''); - //console.error('#@@@@@@'+tagName) - errorHandler.error("end tag name: "+tagName+' is not complete:'+config.tagName); - end = tagStart+1+tagName.length; - }else if(tagName.match(/\s - locator&&position(tagStart); - end = parseInstruction(source,tagStart,domBuilder); - break; - case '!':// start){ - start = end; - }else{ - //TODO: 这里有可能sax回退,有位置错误风险 - appendText(Math.max(tagStart,start)+1); - } - } -} -function copyLocator(f,t){ - t.lineNumber = f.lineNumber; - t.columnNumber = f.columnNumber; - return t; -} - -/** - * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack); - * @return end of the elementStartPart(end of elementEndPart for selfClosed el) - */ -function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){ - var attrName; - var value; - var p = ++start; - var s = S_TAG;//status - while(true){ - var c = source.charAt(p); - switch(c){ - case '=': - if(s === S_ATTR){//attrName - attrName = source.slice(start,p); - s = S_EQ; - }else if(s === S_ATTR_SPACE){ - s = S_EQ; - }else{ - //fatalError: equal must after attrName or space after attrName - throw new Error('attribute equal must after attrName'); - } - break; - case '\'': - case '"': - if(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE - ){//equal - if(s === S_ATTR){ - errorHandler.warning('attribute value must after "="') - attrName = source.slice(start,p) - } - start = p+1; - p = source.indexOf(c,start) - if(p>0){ - value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); - el.add(attrName,value,start-1); - s = S_ATTR_END; - }else{ - //fatalError: no end quot match - throw new Error('attribute value no end \''+c+'\' match'); - } - }else if(s == S_ATTR_NOQUOT_VALUE){ - value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); - //console.log(attrName,value,start,p) - el.add(attrName,value,start); - //console.dir(el) - errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!'); - start = p+1; - s = S_ATTR_END - }else{ - //fatalError: no equal before - throw new Error('attribute value must after "="'); - } - break; - case '/': - switch(s){ - case S_TAG: - el.setTagName(source.slice(start,p)); - case S_ATTR_END: - case S_TAG_SPACE: - case S_TAG_CLOSE: - s =S_TAG_CLOSE; - el.closed = true; - case S_ATTR_NOQUOT_VALUE: - case S_ATTR: - case S_ATTR_SPACE: - break; - //case S_EQ: - default: - throw new Error("attribute invalid close char('/')") - } - break; - case ''://end document - //throw new Error('unexpected end of input') - errorHandler.error('unexpected end of input'); - if(s == S_TAG){ - el.setTagName(source.slice(start,p)); - } - return p; - case '>': - switch(s){ - case S_TAG: - el.setTagName(source.slice(start,p)); - case S_ATTR_END: - case S_TAG_SPACE: - case S_TAG_CLOSE: - break;//normal - case S_ATTR_NOQUOT_VALUE://Compatible state - case S_ATTR: - value = source.slice(start,p); - if(value.slice(-1) === '/'){ - el.closed = true; - value = value.slice(0,-1) - } - case S_ATTR_SPACE: - if(s === S_ATTR_SPACE){ - value = attrName; - } - if(s == S_ATTR_NOQUOT_VALUE){ - errorHandler.warning('attribute "'+value+'" missed quot(")!!'); - el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start) - }else{ - if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !value.match(/^(?:disabled|checked|selected)$/i)){ - errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!') - } - el.add(value,value,start) - } - break; - case S_EQ: - throw new Error('attribute value missed!!'); - } -// console.log(tagName,tagNamePattern,tagNamePattern.test(tagName)) - return p; - /*xml space '\x20' | #x9 | #xD | #xA; */ - case '\u0080': - c = ' '; - default: - if(c<= ' '){//space - switch(s){ - case S_TAG: - el.setTagName(source.slice(start,p));//tagName - s = S_TAG_SPACE; - break; - case S_ATTR: - attrName = source.slice(start,p) - s = S_ATTR_SPACE; - break; - case S_ATTR_NOQUOT_VALUE: - var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); - errorHandler.warning('attribute "'+value+'" missed quot(")!!'); - el.add(attrName,value,start) - case S_ATTR_END: - s = S_TAG_SPACE; - break; - //case S_TAG_SPACE: - //case S_EQ: - //case S_ATTR_SPACE: - // void();break; - //case S_TAG_CLOSE: - //ignore warning - } - }else{//not space -//S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE -//S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE - switch(s){ - //case S_TAG:void();break; - //case S_ATTR:void();break; - //case S_ATTR_NOQUOT_VALUE:void();break; - case S_ATTR_SPACE: - var tagName = el.tagName; - if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !attrName.match(/^(?:disabled|checked|selected)$/i)){ - errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead2!!') - } - el.add(attrName,attrName,start); - start = p; - s = S_ATTR; - break; - case S_ATTR_END: - errorHandler.warning('attribute space is required"'+attrName+'"!!') - case S_TAG_SPACE: - s = S_ATTR; - start = p; - break; - case S_EQ: - s = S_ATTR_NOQUOT_VALUE; - start = p; - break; - case S_TAG_CLOSE: - throw new Error("elements closed character '/' and '>' must be connected to"); - } - } - }//end outer switch - //console.log('p++',p) - p++; - } -} -/** - * @return true if has new namespace define - */ -function appendElement(el,domBuilder,currentNSMap){ - var tagName = el.tagName; - var localNSMap = null; - //var currentNSMap = parseStack[parseStack.length-1].currentNSMap; - var i = el.length; - while(i--){ - var a = el[i]; - var qName = a.qName; - var value = a.value; - var nsp = qName.indexOf(':'); - if(nsp>0){ - var prefix = a.prefix = qName.slice(0,nsp); - var localName = qName.slice(nsp+1); - var nsPrefix = prefix === 'xmlns' && localName - }else{ - localName = qName; - prefix = null - nsPrefix = qName === 'xmlns' && '' - } - //can not set prefix,because prefix !== '' - a.localName = localName ; - //prefix == null for no ns prefix attribute - if(nsPrefix !== false){//hack!! - if(localNSMap == null){ - localNSMap = {} - //console.log(currentNSMap,0) - _copy(currentNSMap,currentNSMap={}) - //console.log(currentNSMap,1) - } - currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value; - a.uri = 'http://www.w3.org/2000/xmlns/' - domBuilder.startPrefixMapping(nsPrefix, value) - } - } - var i = el.length; - while(i--){ - a = el[i]; - var prefix = a.prefix; - if(prefix){//no prefix attribute has no namespace - if(prefix === 'xml'){ - a.uri = 'http://www.w3.org/XML/1998/namespace'; - }if(prefix !== 'xmlns'){ - a.uri = currentNSMap[prefix || ''] - - //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)} - } - } - } - var nsp = tagName.indexOf(':'); - if(nsp>0){ - prefix = el.prefix = tagName.slice(0,nsp); - localName = el.localName = tagName.slice(nsp+1); - }else{ - prefix = null;//important!! - localName = el.localName = tagName; - } - //no prefix element has default namespace - var ns = el.uri = currentNSMap[prefix || '']; - domBuilder.startElement(ns,localName,tagName,el); - //endPrefixMapping and startPrefixMapping have not any help for dom builder - //localNSMap = null - if(el.closed){ - domBuilder.endElement(ns,localName,tagName); - if(localNSMap){ - for(prefix in localNSMap){ - domBuilder.endPrefixMapping(prefix) - } - } - }else{ - el.currentNSMap = currentNSMap; - el.localNSMap = localNSMap; - //parseStack.push(el); - return true; - } -} -function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){ - if(/^(?:script|textarea)$/i.test(tagName)){ - var elEndStart = source.indexOf('',elStartEnd); - var text = source.substring(elStartEnd+1,elEndStart); - if(/[&<]/.test(text)){ - if(/^script$/i.test(tagName)){ - //if(!/\]\]>/.test(text)){ - //lexHandler.startCDATA(); - domBuilder.characters(text,0,text.length); - //lexHandler.endCDATA(); - return elEndStart; - //} - }//}else{//text area - text = text.replace(/&#?\w+;/g,entityReplacer); - domBuilder.characters(text,0,text.length); - return elEndStart; - //} - - } - } - return elStartEnd+1; -} -function fixSelfClosed(source,elStartEnd,tagName,closeMap){ - //if(tagName in closeMap){ - var pos = closeMap[tagName]; - if(pos == null){ - //console.log(tagName) - pos = source.lastIndexOf('') - if(pos',start+4); - //append comment source.substring(4,end)// - ` -} diff --git a/js/dav/lib/template/calendar_query.js b/js/dav/lib/template/calendar_query.js deleted file mode 100644 index 7c9a333d..00000000 --- a/js/dav/lib/template/calendar_query.js +++ /dev/null @@ -1,16 +0,0 @@ -import filter from './filter'; -import prop from './prop'; - -export default function calendarQuery(object) { - return ` - - ${object.props.map(prop)} - - - ${object.filters.map(filter)} - - ${object.timezone ? '' + object.timezone + '' : ''} - `; -} diff --git a/js/dav/lib/template/filter.js b/js/dav/lib/template/filter.js deleted file mode 100644 index cf2d3b04..00000000 --- a/js/dav/lib/template/filter.js +++ /dev/null @@ -1,20 +0,0 @@ -export default function filter(item) { - if (!item.children || !item.children.length) { - return ``; - } - - let children = item.children.map(filter); - return ` - ${children} - `; -} - -function formatAttrs(attrs) { - if (typeof attrs !== 'object') { - return ''; - } - - return Object.keys(attrs) - .map(attr => `${attr}="${attrs[attr]}"`) - .join(' '); -} diff --git a/js/dav/lib/template/index.js b/js/dav/lib/template/index.js deleted file mode 100644 index 3258fb1d..00000000 --- a/js/dav/lib/template/index.js +++ /dev/null @@ -1,7 +0,0 @@ -exports.addressBookQuery = require('./address_book_query'); -exports.addressBookMultiget = require('./address_book_multiget'); -exports.calendarQuery = require('./calendar_query'); -exports.propfind = require('./propfind'); -exports.syncCollection = require('./sync_collection'); -exports.mkcol = require('./mkcol'); -exports.proppatch = require('./proppatch'); diff --git a/js/dav/lib/template/mkcol.js b/js/dav/lib/template/mkcol.js deleted file mode 100644 index 0a07915c..00000000 --- a/js/dav/lib/template/mkcol.js +++ /dev/null @@ -1,14 +0,0 @@ -import prop from './prop'; - -export default function mkcol(object) { - return ` - - - ${object.props.map(prop)} - - - `; -} diff --git a/js/dav/lib/template/prop.js b/js/dav/lib/template/prop.js deleted file mode 100644 index 54c6a5fd..00000000 --- a/js/dav/lib/template/prop.js +++ /dev/null @@ -1,75 +0,0 @@ -import * as ns from '../namespace'; - -/** - * @param {Object} filter looks like - * - * { - * type: 'comp-filter', - * attrs: { - * name: 'VCALENDAR' - * } - * } - * - * Or maybe - * - * { - * type: 'time-range', - * attrs: { - * start: '20060104T000000Z', - * end: '20060105T000000Z' - * } - * } - * - * You can nest them like so: - * - * { - * type: 'comp-filter', - * attrs: { name: 'VCALENDAR' }, - * children: [{ - * type: 'comp-filter', - * attrs: { name: 'VEVENT' }, - * children: [{ - * type: 'time-range', - * attrs: { start: '20060104T000000Z', end: '20060105T000000Z' } - * }] - * }] - * } - */ -export default function prop(item) { - var tagName = `${xmlnsPrefix(item.namespace)}:${item.name}`; - var attrs = (item.attrs || []).map(makeAttr).join(' '); - if (!item.children || !item.children.length) { - if (typeof item.value === "undefined") { - return `<${tagName} ${attrs}/>`; - } - return `<${tagName} ${attrs}>${item.value}`; - } - - let children = item.children.map(prop); - return `<${tagName} ${attrs}> - ${children.join('')} - `; -} - -function makeAttr(attr) { - if (!attr.name) return ''; - if (!attr.value) return attr.name; - return `${attr.name}="${attr.value}"`; -} - -function xmlnsPrefix(namespace) { - switch (namespace) { - case ns.DAV: - return 'd'; - case ns.CALENDAR_SERVER: - return 'cs'; - case ns.CALDAV: - return 'c'; - case ns.CARDDAV: - return 'card'; - case ns.OC: - return 'oc'; - default: - throw new Error('Unrecognized xmlns ' + namespace); - } -} diff --git a/js/dav/lib/template/propfind.js b/js/dav/lib/template/propfind.js deleted file mode 100644 index acc27918..00000000 --- a/js/dav/lib/template/propfind.js +++ /dev/null @@ -1,13 +0,0 @@ -import prop from './prop'; - -export default function propfind(object) { - return ` - - ${object.props.map(prop)} - - `; -} diff --git a/js/dav/lib/template/proppatch.js b/js/dav/lib/template/proppatch.js deleted file mode 100644 index 1c16599a..00000000 --- a/js/dav/lib/template/proppatch.js +++ /dev/null @@ -1,14 +0,0 @@ -import prop from './prop'; - -export default function proppatch(object) { - return ` - - - ${object.props.map(prop)} - - - `; -} diff --git a/js/dav/lib/template/sync_collection.js b/js/dav/lib/template/sync_collection.js deleted file mode 100644 index f8b8dfad..00000000 --- a/js/dav/lib/template/sync_collection.js +++ /dev/null @@ -1,13 +0,0 @@ -import prop from './prop'; - -export default function syncCollection(object) { - return ` - ${object.syncLevel} - ${object.syncToken} - - ${object.props.map(prop)} - - ` -} diff --git a/js/dav/lib/transport.js b/js/dav/lib/transport.js deleted file mode 100644 index cba0a035..00000000 --- a/js/dav/lib/transport.js +++ /dev/null @@ -1,187 +0,0 @@ -import co from 'co'; -import querystring from 'querystring'; - -import XMLHttpRequest from './xmlhttprequest'; - -export class Transport { - /** - * @param {dav.Credentials} credentials user authorization. - */ - constructor(credentials) { - this.credentials = credentials || null; - } - - /** - * @param {dav.Request} request object with request info. - * @return {Promise} a promise that will be resolved with an xhr request after - * its readyState is 4 or the result of applying an optional request - * `transformResponse` function to the xhr object after its readyState is 4. - * - * Options: - * - * (Object) sandbox - optional request sandbox. - */ - send() {} -} - -export class Basic extends Transport { - /** - * @param {dav.Credentials} credentials user authorization. - */ - constructor(credentials) { - super(credentials); - } - - send(request, url, options) { - return co(function *() { - let sandbox = options && options.sandbox; - let transformRequest = request.transformRequest; - let transformResponse = request.transformResponse; - let onerror = request.onerror; - - let xhr = new XMLHttpRequest(); - if (sandbox) sandbox.add(xhr); - xhr.open( - request.method, - url, - true /* async */, - this.credentials.username, - this.credentials.password - ); - - if (transformRequest) transformRequest(xhr); - - let result; - try { - xhr.setRequestHeader('requesttoken', oc_requesttoken); - yield xhr.send(request.requestData); - result = transformResponse ? transformResponse(xhr) : xhr; - } catch (error) { - if (onerror) onerror(error); - throw error; - } - - return result; - }.bind(this)); - } -} - -/** - * @param {dav.Credentials} credentials user authorization. - */ -export class OAuth2 extends Transport { - constructor(credentials) { - super(credentials); - } - - send(request, url, options={}) { - return co(function *() { - let sandbox = options.sandbox; - let transformRequest = request.transformRequest; - let transformResponse = request.transformResponse; - let onerror = request.onerror; - - if (!('retry' in options)) options.retry = true; - - let result, xhr; - try { - let token = yield access(this.credentials, options); - xhr = new XMLHttpRequest(); - if (sandbox) sandbox.add(xhr); - xhr.open(request.method, url, true /* async */); - xhr.setRequestHeader('Authorization', `Bearer ${token}`); - if (transformRequest) transformRequest(xhr); - xhr.setRequestHeader('requesttoken', oc_requesttoken); - yield xhr.send(request.requestData); - result = transformResponse ? transformResponse(xhr) : xhr; - } catch (error) { - if (options.retry && xhr.status === 401) { - // Force expiration. - this.credentials.expiration = 0; - // Retry once at most. - options.retry = false; - return this.send(request, url, options); - } - - if (onerror) onerror(error); - throw error; - } - - return result; - }.bind(this)); - } -} - -/** - * @return {Promise} promise that will resolve with access token. - */ -function access(credentials, options) { - if (!credentials.accessToken) { - return getAccessToken(credentials, options); - } - - if (credentials.refreshToken && isExpired(credentials)) { - return refreshAccessToken(credentials, options); - } - - return Promise.resolve(credentials.accessToken); -} - -function isExpired(credentials) { - return typeof credentials.expiration === 'number' && - Date.now() > credentials.expiration; -} - -let getAccessToken = co.wrap(function *(credentials, options) { - let sandbox = options.sandbox; - let xhr = new XMLHttpRequest(); - if (sandbox) sandbox.add(xhr); - xhr.open('POST', credentials.tokenUrl, true /* async */); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - - let data = querystring.stringify({ - code: credentials.authorizationCode, - redirect_uri: credentials.redirectUrl, - client_id: credentials.clientId, - client_secret: credentials.clientSecret, - grant_type: 'authorization_code' - }); - - let now = Date.now(); - yield xhr.send(data); - let response = JSON.parse(xhr.responseText); - credentials.accessToken = response.access_token; - credentials.refreshToken = 'refresh_token' in response ? - response.refresh_token : - null; - credentials.expiration = 'expires_in' in response ? - now + response.expires_in : - null; - - return response.access_token; -}); - -let refreshAccessToken = co.wrap(function *(credentials, options) { - let sandbox = options.sandbox; - let xhr = new XMLHttpRequest(); - if (sandbox) sandbox.add(xhr); - xhr.open('POST', credentials.tokenUrl, true /* async */); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - - let data = querystring.stringify({ - client_id: credentials.clientId, - client_secret: credentials.clientSecret, - refresh_token: credentials.refreshToken, - grant_type: 'refresh_token' - }); - - let now = Date.now(); - yield xhr.send(data); - let response = JSON.parse(xhr.responseText); - credentials.accessToken = response.access_token; - credentials.expiration = 'expires_in' in response ? - now + response.expires_in : - null; - - return response.access_token; -}); diff --git a/js/dav/lib/webdav.js b/js/dav/lib/webdav.js deleted file mode 100644 index 3ed71852..00000000 --- a/js/dav/lib/webdav.js +++ /dev/null @@ -1,119 +0,0 @@ -import co from 'co'; - -import fuzzyUrlEquals from './fuzzy_url_equals'; -import * as ns from './namespace'; -import * as request from './request'; - -let debug = require('./debug')('dav:webdav'); - -/** - * @param {String} objectUrl url for webdav object. - * @param {String} objectData webdav object data. - */ -export function createObject(objectUrl, objectData, options) { - // ugly (breaks calendar), but we will get rid of the lib anyway... hopefully... soon... - var req = request.basic({ method: 'PUT', data: objectData, contentType: 'text/vcard;charset=utf-8' }); - return options.xhr.send(req, objectUrl, { sandbox: options.sandbox }); -} - -export function updateObject(objectUrl, objectData, etag, options) { - // ugly (breaks calendar), but we will get rid of the lib anyway... hopefully... soon... - var req = request.basic({ method: 'PUT', data: objectData, etag: etag, contentType: 'text/vcard;charset=utf-8' }); - return options.xhr.send(req, objectUrl, { sandbox: options.sandbox }); -} - -export function deleteObject(objectUrl, etag, options) { - var req = request.basic({ method: 'DELETE', etag: etag }); - return options.xhr.send(req, objectUrl, { sandbox: options.sandbox }); -} - -export function syncCollection(collection, options) { - let syncMethod; - if ('syncMethod' in options) { - syncMethod = options.syncMethod; - } else if (collection.reports && - collection.reports.indexOf('syncCollection') !== -1) { - syncMethod = 'webdav'; - } else { - syncMethod = 'basic'; - } - - if (syncMethod === 'webdav') { - debug('rfc 6578 sync.'); - return options.webdavSync(collection, options); - } else { - debug('basic sync.'); - return options.basicSync(collection, options); - } -} - -export function updateProperties(objectUrl, options) { - var req = request.proppatch({ - props: options.props - }); - return options.xhr.send(req, objectUrl, { sandbox: options.sandbox }); -} - -export function createCollection(collectionUrl, options) { - var req = request.mkcol({ - props: options.props - }); - return options.xhr.send(req, collectionUrl, { sandbox: options.sandbox }); -} - -export function deleteCollection(collectionUrl, options) { - var req = request.basic({ method: 'DELETE' }); - return options.xhr.send(req, collectionUrl, { sandbox: options.sandbox }); -} - -export function moveCollection(collectionUrl, options) { - var req = request.basic({ method: 'MOVE', overwrite: 'F', destination: options.destination, data:objectData }); - return options.xhr.send(req, collectionUrl, { sandbox: options.sandbox }); -} - -/** - * @param {dav.DAVCollection} collection to fetch report set for. - */ -export let supportedReportSet = co.wrap(function *(collection, options) { - debug('Checking supported report set for collection at ' + collection.url); - var req = request.propfind({ - props: [ { name: 'supported-report-set', namespace: ns.DAV } ], - depth: 1, - mergeResponses: true - }); - - let response = yield options.xhr.send(req, collection.url, { - sandbox: options.sandbox - }); - - return response.props.supportedReportSet; -}); - -export let isCollectionDirty = co.wrap(function *(collection, options) { - if (!collection.ctag) { - debug('Missing ctag.'); - return false; - } - - debug('Fetch remote getctag prop.'); - var req = request.propfind({ - props: [ { name: 'getctag', namespace: ns.CALENDAR_SERVER } ], - depth: 0 - }); - - let responses = yield options.xhr.send(req, collection.account.homeUrl, { - sandbox: options.sandbox - }); - - let response = responses.filter(response => { - // Find the response that corresponds to the parameter collection. - return fuzzyUrlEquals(collection.url, response.href); - })[0]; - - if (!response) { - throw new Error('Could not find collection on remote. Was it deleted?'); - } - - debug('Check whether cached ctag matches remote.'); - return collection.ctag !== response.props.getctag; -}); diff --git a/js/dav/lib/xmlhttprequest.js b/js/dav/lib/xmlhttprequest.js deleted file mode 100644 index d6c1c7cc..00000000 --- a/js/dav/lib/xmlhttprequest.js +++ /dev/null @@ -1,98 +0,0 @@ -let debug = require('./debug')('dav:xmlhttprequest'); - -let Native; -if (typeof self !== 'undefined' && 'XMLHttpRequest' in self) { - Native = self.XMLHttpRequest; -} else { - // Trick browserify into not loading XMLHttpRequest polyfill - // since it is available in the platform (including web workers) - Native = require(false || 'xmlhttprequest').XMLHttpRequest; -} - -/** - * @fileoverview Promise wrapper around native xhr api. - */ -export default class XMLHttpRequest { - constructor(options) { - this.request = new Native(options); - this.sandbox = null; - - /* readwrite */ - [ - 'response', - 'responseText', - 'responseType', - 'responseXML', - 'timeout', - 'upload', - 'withCredentials' - ].forEach(attribute => { - Object.defineProperty(this, attribute, { - get: function() { return this.request[attribute]; }, - set: function(value) { this.request[attribute] = value; } - }); - }); - - /* readonly */ - [ - 'status', - 'statusText' - ].forEach(attribute => { - Object.defineProperty(this, attribute, { - get: function() { return this.request[attribute]; } - }); - }); - } - - abort() { - return this._callNative('abort', arguments); - } - - getAllResponseHeaders() { - return this._callNative('getAllResponseHeaders', arguments); - } - - getResponseHeader() { - return this._callNative('getResponseHeader', arguments); - } - - open() { - return this._callNative('open', arguments); - } - - overrideMimeType() { - return this._callNative('overrideMimeType', arguments); - } - - setRequestHeader() { - return this._callNative('setRequestHeader', arguments); - } - - send(data) { - debug(`Sending request data: ${data}`); - if (this.sandbox) this.sandbox.add(this); - let request = this.request; - request.send(data); - return new Promise(function(resolve, reject) { - request.onreadystatechange = function() { - if (request.readyState !== 4 /* done */) { - return; - } - - if (request.status < 200 || request.status >= 400) { - return reject(new Error(`Bad status: ${request.status}`)); - } - - return resolve(request.responseText); - }; - - request.ontimeout = function() { - reject(new Error(`Request timed out after ${request.timeout} ms`)); - }; - }); - } - - _callNative(method, args) { - return this.request[method].apply(this.request, args); - } -} diff --git a/js/dav/package.json b/js/dav/package.json deleted file mode 100644 index 8bdc179d..00000000 --- a/js/dav/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "dav", - "version": "1.8.0", - "author": "Gareth Aye [:gaye] ", - "description": "WebDAV, CalDAV, and CardDAV client for nodejs and the browser", - "license": "MPL-2.0", - "main": "./dav.js", - "repository": "https://github.com/gaye/dav", - "keywords": [ - "address book", - "calendar", - "contacts", - "dav", - "caldav", - "carddav", - "webdav", - "ical", - "vcard", - "sync", - "rfc 4791", - "rfc 6352", - "rfc 6578" - ], - "dependencies": { - "co": "^4.6.0", - "xmldom": "^0.1.19", - "xmlhttprequest": "^1.7.0" - }, - "devDependencies": { - "babel": "^5.8.23", - "browserify": "^11.0.1", - "chai": "^3.2.0", - "doctoc": "^0.15.0", - "mocha": "^2.3.2", - "nock": "^2.10.0", - "sinon": "^1.16.1", - "tcp-port-used": "^0.1.2", - "uglify-js": "^2.4.24" - }, - "scripts": { - "test": "make test" - } -} diff --git a/js/dav/test/integration/accounts_test.js b/js/dav/test/integration/accounts_test.js deleted file mode 100644 index 7bbb7caf..00000000 --- a/js/dav/test/integration/accounts_test.js +++ /dev/null @@ -1,177 +0,0 @@ -import { assert } from 'chai'; -import co from 'co'; - -import * as dav from '../../lib'; - -suite('accounts', function() { - suite('#create', function() { - let xhr; - - setup(function() { - xhr = new dav.transport.Basic( - new dav.Credentials({ - username: 'admin', - password: 'admin' - }) - ); - }); - - test('caldav', co.wrap(function *() { - let account = yield dav.createAccount({ - server: 'http://127.0.0.1:8888', - xhr: xhr, - loadObjects: true - }); - - assert.instanceOf(account, dav.Account); - assert.instanceOf(account.credentials, dav.Credentials); - assert.strictEqual(account.credentials.username, 'admin'); - assert.strictEqual(account.credentials.password, 'admin'); - assert.strictEqual(account.server, 'http://127.0.0.1:8888'); - assert.strictEqual(account.rootUrl, 'http://127.0.0.1:8888/'); - assert.strictEqual( - account.principalUrl, - 'http://127.0.0.1:8888/principals/admin/' - ); - assert.strictEqual( - account.homeUrl, - 'http://127.0.0.1:8888/calendars/admin/' - ); - - let calendars = account.calendars; - assert.lengthOf(calendars, 1); - let calendar = calendars[0]; - assert.instanceOf(calendar, dav.Calendar); - assert.strictEqual(calendar.displayName, 'default calendar'); - assert.strictEqual( - calendar.url, - 'http://127.0.0.1:8888/calendars/admin/default/' - ); - assert.strictEqual(calendar.description, 'administrator calendar'); - assert.include(calendar.components, 'VEVENT'); - assert.typeOf(calendar.ctag, 'string'); - assert.isArray(calendar.objects); - assert.lengthOf(calendar.objects, 0); - assert.isArray(calendar.reports); - assert.include(calendar.reports, 'calendar-query'); - assert.isArray(calendar.resourcetype); - assert.include(calendar.resourcetype, 'calendar'); - assert.typeOf(calendar.syncToken, 'string'); - assert.operator(calendar.syncToken.length, '>', 0); - })); - - test('carddav', co.wrap(function *() { - let account = yield dav.createAccount({ - server: 'http://127.0.0.1:8888', - xhr: xhr, - accountType: 'carddav', - loadObjects: true - }); - - assert.instanceOf(account, dav.Account); - assert.instanceOf(account.credentials, dav.Credentials); - assert.strictEqual(account.credentials.username, 'admin'); - assert.strictEqual(account.credentials.password, 'admin'); - assert.strictEqual(account.server, 'http://127.0.0.1:8888'); - assert.strictEqual(account.rootUrl, 'http://127.0.0.1:8888/'); - assert.strictEqual( - account.principalUrl, - 'http://127.0.0.1:8888/principals/admin/' - ); - assert.strictEqual( - account.homeUrl, - 'http://127.0.0.1:8888/addressbooks/admin/' - ); - - let addressBooks = account.addressBooks; - assert.operator(addressBooks.length, '>', 0); - let addressBook = addressBooks[0]; - assert.instanceOf(addressBook, dav.AddressBook); - assert.strictEqual(addressBook.displayName, 'default address book'); - assert.strictEqual( - addressBook.url, - 'http://127.0.0.1:8888/addressbooks/admin/default/' - ); - assert.typeOf(addressBook.ctag, 'string'); - assert.isArray(addressBook.objects); - assert.lengthOf(addressBook.objects, 0); - assert.isArray(addressBook.reports); - assert.include(addressBook.reports, 'addressbook-query'); - assert.isArray(addressBook.resourcetype); - assert.include(addressBook.resourcetype, 'addressbook'); - assert.typeOf(addressBook.syncToken, 'string'); - assert.operator(addressBook.syncToken.length, '>', 0); - })); - - test('without loading collections', co.wrap(function *() { - let account = yield dav.createAccount({ - server: 'http://127.0.0.1:8888', - xhr: xhr, - accountType: 'caldav', - loadCollections: false - }); - - assert.instanceOf(account, dav.Account); - assert.instanceOf(account.credentials, dav.Credentials); - assert.strictEqual(account.credentials.username, 'admin'); - assert.strictEqual(account.credentials.password, 'admin'); - assert.strictEqual(account.server, 'http://127.0.0.1:8888'); - assert.strictEqual(account.rootUrl, 'http://127.0.0.1:8888/'); - assert.strictEqual( - account.principalUrl, - 'http://127.0.0.1:8888/principals/admin/' - ); - assert.strictEqual( - account.homeUrl, - 'http://127.0.0.1:8888/calendars/admin/' - ); - - let calendars = account.calendars; - assert.notOk(calendars); - })); - - test('without loading objects', co.wrap(function *() { - let account = yield dav.createAccount({ - server: 'http://127.0.0.1:8888', - xhr: xhr, - accountType: 'caldav', - loadObjects: false - }); - - assert.instanceOf(account, dav.Account); - assert.instanceOf(account.credentials, dav.Credentials); - assert.strictEqual(account.credentials.username, 'admin'); - assert.strictEqual(account.credentials.password, 'admin'); - assert.strictEqual(account.server, 'http://127.0.0.1:8888'); - assert.strictEqual(account.rootUrl, 'http://127.0.0.1:8888/'); - assert.strictEqual( - account.principalUrl, - 'http://127.0.0.1:8888/principals/admin/' - ); - assert.strictEqual( - account.homeUrl, - 'http://127.0.0.1:8888/calendars/admin/' - ); - - let calendars = account.calendars; - assert.lengthOf(calendars, 1); - let calendar = calendars[0]; - assert.instanceOf(calendar, dav.Calendar); - assert.strictEqual(calendar.displayName, 'default calendar'); - assert.strictEqual( - calendar.url, - 'http://127.0.0.1:8888/calendars/admin/default/' - ); - assert.strictEqual(calendar.description, 'administrator calendar'); - assert.include(calendar.components, 'VEVENT'); - assert.typeOf(calendar.ctag, 'string'); - assert.notOk(calendar.objects); - assert.isArray(calendar.reports); - assert.include(calendar.reports, 'calendar-query'); - assert.isArray(calendar.resourcetype); - assert.include(calendar.resourcetype, 'calendar'); - assert.typeOf(calendar.syncToken, 'string'); - assert.operator(calendar.syncToken.length, '>', 0); - })); - }); -}); diff --git a/js/dav/test/integration/calendars_test.js b/js/dav/test/integration/calendars_test.js deleted file mode 100644 index fddfd04e..00000000 --- a/js/dav/test/integration/calendars_test.js +++ /dev/null @@ -1,239 +0,0 @@ -import { assert } from 'chai'; -import co from 'co'; - -import data from './data'; -import * as dav from '../../lib'; - -let debug = require('../../lib/debug')('dav:calendars_test'); - -suite('calendars', function() { - let calendars, xhr; - - setup(co.wrap(function *() { - debug('Create account.'); - xhr = new dav.transport.Basic( - new dav.Credentials({ - username: 'admin', - password: 'admin' - }) - ); - - let account = yield dav.createAccount({ - server: 'http://127.0.0.1:8888/', - xhr: xhr, - loadObjects: true - }); - - let calendar = account.calendars[0]; - let objects = calendar.objects; - assert.isArray(objects); - assert.lengthOf(objects, 0, 'initially 0 calendar objects'); - debug('Create calendar object.'); - yield dav.createCalendarObject(calendar, { - filename: 'test.ics', - data: data.bastilleDayParty, - xhr: xhr - }); - - let synced = yield dav.syncCaldavAccount(account, { xhr: xhr }); - calendars = synced.calendars; - })); - - test('#createCalendarObject', function() { - let calendar = calendars[0]; - let objects = calendar.objects; - assert.isArray(objects); - assert.lengthOf(objects, 1); - let object = objects[0]; - assert.instanceOf(object, dav.CalendarObject); - assert.instanceOf(object.calendar, dav.Calendar); - assert.strictEqual(object.calendarData, data.bastilleDayParty); - assert.strictEqual( - object.url, - 'http://127.0.0.1:8888/calendars/admin/default/test.ics' - ); - }); - - test('#updateCalendarObject, #sync', co.wrap(function *() { - let calendar = calendars[0]; - let object = calendar.objects[0]; - object.calendarData = object.calendarData.replace( - 'SUMMARY:Bastille Day Party', - 'SUMMARY:Happy Hour' - ); - - yield dav.updateCalendarObject(object, { xhr: xhr }); - calendar = yield dav.syncCalendar(calendar, { - syncMethod: 'basic', - xhr: xhr - }); - - let objects = calendar.objects; - assert.isArray(objects); - assert.lengthOf(objects, 1, 'update should not create new object'); - object = objects[0]; - assert.instanceOf(object, dav.CalendarObject); - assert.instanceOf(object.calendar, dav.Calendar); - assert.notStrictEqual( - object.calendarData, - data.bastilleDayParty, - 'data should have changed on server' - ); - assert.include( - object.calendarData, - 'SUMMARY:Happy Hour', - 'data should reflect update' - ); - assert.notInclude( - object.calendardata, - 'SUMMARY:Bastille Day Party', - 'data should reflect update' - ); - assert.strictEqual( - object.url, - 'http://127.0.0.1:8888/calendars/admin/default/test.ics', - 'update should not change object url' - ); - })); - - test('webdav sync', co.wrap(function *() { - let calendar = calendars[0]; - let object = calendar.objects[0]; - object.calendarData = object.calendarData.replace( - 'SUMMARY:Bastille Day Party', - 'SUMMARY:Happy Hour' - ); - - let prevEtag = object.etag; - assert.typeOf(prevEtag, 'string'); - assert.operator(prevEtag.length, '>', 0); - - let prevSyncToken = calendar.syncToken; - assert.typeOf(prevSyncToken, 'string'); - assert.operator(prevSyncToken.length, '>', 0); - - yield dav.updateCalendarObject(object, { xhr: xhr }); - calendar = yield dav.syncCalendar(calendar, { - syncMethod: 'webdav', - xhr: xhr - }); - - let objects = calendar.objects; - assert.isArray(objects); - assert.lengthOf(objects, 1, 'update should not create new object'); - - object = objects[0]; - assert.instanceOf(object, dav.CalendarObject); - assert.instanceOf(object.calendar, dav.Calendar); - - assert.notStrictEqual( - object.calendarData, - data.bastilleDayParty, - 'data should have changed on server' - ); - - assert.include( - object.calendarData, - 'SUMMARY:Happy Hour', - 'data should reflect update' - ); - - assert.notInclude( - object.calendardata, - 'SUMMARY:Bastille Day Party', - 'data should reflect update' - ); - - assert.strictEqual( - object.url, - 'http://127.0.0.1:8888/calendars/admin/default/test.ics', - 'update should not change object url' - ); - - assert.typeOf(object.etag, 'string'); - assert.operator(object.etag.length, '>', 0); - assert.notStrictEqual(prevEtag, object.etag, 'new etag'); - - assert.typeOf(calendar.syncToken, 'string'); - assert.operator(calendar.syncToken.length, '>', 0); - assert.notStrictEqual(calendar.syncToken, prevSyncToken, 'new token'); - })); - - test('#deleteCalendarObject', co.wrap(function *() { - let calendar = calendars[0]; - let objects = calendar.objects; - assert.isArray(objects); - assert.lengthOf(objects, 1); - let object = objects[0]; - yield dav.deleteCalendarObject(object, { xhr: xhr }); - let updated = yield dav.syncCalendar(calendar, { - syncMethod: 'basic', - xhr: xhr - }); - - objects = updated.objects; - assert.isArray(objects); - assert.lengthOf(objects, 0, 'should be deleted'); - })); - - test('time-range filtering', co.wrap(function *() { - let account1 = yield dav.createAccount({ - server: 'http://127.0.0.1:8888/', - loadObjects: true, - filters: [{ - type: 'comp-filter', - attrs: { name: 'VCALENDAR' }, - children: [{ - type: 'comp-filter', - attrs: { name: 'VEVENT' }, - children: [{ - type: 'time-range', - attrs: { start: '19970714T170000Z' } - }] - }] - }], - xhr: xhr - }); - - assert.lengthOf(account1.calendars[0].objects, 1, 'in range'); - - let account2 = yield dav.createAccount({ - server: 'http://127.0.0.1:8888/', - loadObjects: true, - filters: [{ - type: 'comp-filter', - attrs: { name: 'VCALENDAR' }, - children: [{ - type: 'comp-filter', - attrs: { name: 'VEVENT' }, - children: [{ - type: 'time-range', - attrs: { start: '19980714T170000Z' } - }] - }] - }], - xhr: xhr - }); - - assert.lengthOf(account2.calendars[0].objects, 0, 'out of range'); - })); - - test('#syncCaldavAccount', co.wrap(function *() { - let account = yield dav.createAccount({ - server: 'http://127.0.0.1:8888/', - xhr: xhr, - accountType: 'caldav', - loadCollections: false - }); - assert.instanceOf(account, dav.Account); - assert.notOk(account.calendars); - - account = yield dav.syncCaldavAccount(account, { xhr: xhr }); - assert.instanceOf(account, dav.Account); - assert.isArray(account.calendars); - assert.lengthOf(account.calendars, 1); - let calendar = account.calendars[0]; - assert.instanceOf(calendar, dav.Calendar); - assert.strictEqual(calendar.displayName, 'default calendar'); - })); -}); diff --git a/js/dav/test/integration/contacts_test.js b/js/dav/test/integration/contacts_test.js deleted file mode 100644 index 3995e0ca..00000000 --- a/js/dav/test/integration/contacts_test.js +++ /dev/null @@ -1,219 +0,0 @@ -import { assert } from 'chai'; -import co from 'co'; - -import data from './data'; -import * as dav from '../../lib'; - -let debug = require('../../lib/debug')('dav:contacts_test'); - -suite('contacts', function() { - let addressBooks, xhr; - - setup(co.wrap(function *() { - debug('Create account.'); - - xhr = new dav.transport.Basic( - new dav.Credentials({ - username: 'admin', - password: 'admin' - }) - ); - - let account = yield dav.createAccount({ - server: 'http://127.0.0.1:8888/', - xhr: xhr, - accountType: 'carddav', - loadObjects: true - }); - - let addressBook = account.addressBooks[0]; - let objects = addressBook.objects; - assert.isArray(objects); - assert.lengthOf(objects, 0, 'initially 0 address books'); - - debug('Create vcard.'); - yield dav.createCard(addressBook, { - filename: 'test.vcf', - data: data.forrestGump, - xhr: xhr - }); - - let updated = yield dav.syncCarddavAccount(account, { - syncMethod: 'basic', - xhr: xhr - }); - - addressBooks = updated.addressBooks; - })); - - test('#createCard', function() { - let addressBook = addressBooks[0]; - let objects = addressBook.objects; - assert.isArray(objects); - assert.lengthOf(objects, 1); - let object = objects[0]; - assert.instanceOf(object, dav.VCard); - assert.instanceOf(object.addressBook, dav.AddressBook); - assert.strictEqual( - object.addressData - .replace(/UID\:[^\n]+\n/, '') - .replace(/;/g, '') - .replace(/\s+/g, ''), - data.forrestGump - .replace(/;/g, '') - .replace(/\s+/g, '') - ); - assert.strictEqual( - object.url, - 'http://127.0.0.1:8888/addressbooks/admin/default/test.vcf' - ); - }); - - test('#updateCard, #sync', co.wrap(function *() { - let addressBook = addressBooks[0]; - let object = addressBook.objects[0]; - object.addressData = object.addressData.replace( - 'forrestgump@example.com', - 'lieutenantdan@example.com' - ); - - yield dav.updateCard(object, { xhr: xhr }); - let updated = yield dav.syncAddressBook(addressBook, { - syncMethod: 'basic', - xhr: xhr - }); - - let objects = updated.objects; - assert.isArray(objects); - assert.lengthOf(objects, 1, 'update should not create new object'); - object = objects[0]; - assert.instanceOf(object, dav.VCard); - assert.instanceOf(object.addressBook, dav.AddressBook); - assert.notStrictEqual( - object.addressData - .replace(/UID\:[^\n]+\n/, '') - .replace(/;/g, '') - .replace(/\s+/g, ''), - data.forrestGump - .replace(/;/g, '') - .replace(/\s+/g, ''), - 'data should have changed on server' - ); - assert.include( - object.addressData, - 'lieutenantdan@example.com', - 'data should reflect update' - ); - assert.notInclude( - object.addressData, - 'forrestgump@example.com', - 'data should reflect update' - ); - assert.strictEqual( - object.url, - 'http://127.0.0.1:8888/addressbooks/admin/default/test.vcf', - 'update should not change object url' - ); - })); - - test('webdav sync', co.wrap(function *() { - let addressBook = addressBooks[0]; - let object = addressBook.objects[0]; - object.addressData = object.addressData.replace( - 'forrestgump@example.com', - 'lieutenantdan@example.com' - ); - - let prevEtag = object.etag; - assert.typeOf(prevEtag, 'string'); - assert.operator(prevEtag.length, '>', 0); - - let prevSyncToken = addressBook.syncToken; - assert.typeOf(prevSyncToken, 'string'); - assert.operator(prevSyncToken.length, '>', 0); - - yield dav.updateCard(object, { xhr: xhr }); - let updated = yield dav.syncAddressBook(addressBook, { - syncMethod: 'webdav', - xhr: xhr - }); - - let objects = updated.objects; - assert.isArray(objects); - assert.lengthOf(objects, 1, 'update should not create new object'); - - object = objects[0]; - assert.instanceOf(object, dav.VCard); - assert.instanceOf(object.addressBook, dav.AddressBook); - - assert.notStrictEqual( - object.addressData - .replace(/UID\:[^\n]+\n/, '') - .replace(/;/g, '') - .replace(/\s+/g, ''), - data.forrestGump - .replace(/;/g, '') - .replace(/\s+/g, ''), - 'data should have changed on server' - ); - assert.include( - object.addressData, - 'lieutenantdan@example.com', - 'data should reflect update' - ); - assert.notInclude( - object.addressData, - 'forrestgump@example.com', - 'data should reflect update' - ); - assert.notStrictEqual( - object.addressData, - data.bastilleDayParty, - 'data should have changed on server' - ); - - assert.typeOf(object.etag, 'string'); - assert.operator(object.etag.length, '>', 0); - assert.notStrictEqual(prevEtag, object.etag, 'new etag'); - - assert.typeOf(addressBook.syncToken, 'string'); - assert.operator(addressBook.syncToken.length, '>', 0); - assert.notStrictEqual(addressBook.syncToken, prevSyncToken, 'new token'); - })); - - test('#deleteCard', co.wrap(function *() { - let addressBook = addressBooks[0]; - let objects = addressBook.objects; - assert.isArray(objects); - assert.lengthOf(objects, 1); - let object = objects[0]; - yield dav.deleteCard(object, { xhr: xhr }); - let updated = yield dav.syncAddressBook(addressBook, { - syncMethod: 'basic', - xhr: xhr - }); - - objects = addressBook.objects; - assert.isArray(objects); - assert.lengthOf(objects, 0, 'should be deleted'); - })); - - test('#syncCarddavAccount', co.wrap(function *() { - let account = yield dav.createAccount({ - server: 'http://127.0.0.1:8888/', - xhr: xhr, - accountType: 'carddav', - loadCollections: false - }); - - assert.instanceOf(account, dav.Account); - assert.notOk(account.addressBooks); - let updated = yield dav.syncCarddavAccount(account, { xhr: xhr }); - assert.instanceOf(updated, dav.Account); - assert.isArray(updated.addressBooks); - assert.lengthOf(updated.addressBooks, 1); - let addressBook = addressBooks[0]; - assert.instanceOf(addressBook, dav.AddressBook); - assert.strictEqual(addressBook.displayName, 'default address book'); - })); -}); diff --git a/js/dav/test/integration/data/bastille_day_party.ics b/js/dav/test/integration/data/bastille_day_party.ics deleted file mode 100644 index 46df0673..00000000 --- a/js/dav/test/integration/data/bastille_day_party.ics +++ /dev/null @@ -1,12 +0,0 @@ -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//hacksw/handcal//NONSGML v1.0//EN -BEGIN:VEVENT -UID:uid1@example.com -DTSTAMP:19970714T170000Z -ORGANIZER;CN=John Doe:MAILTO:john.doe@example.com -DTSTART:19970714T170000Z -DTEND:19970715T035959Z -SUMMARY:Bastille Day Party -END:VEVENT -END:VCALENDAR diff --git a/js/dav/test/integration/data/forrest_gump.vcf b/js/dav/test/integration/data/forrest_gump.vcf deleted file mode 100644 index 82ec31d5..00000000 --- a/js/dav/test/integration/data/forrest_gump.vcf +++ /dev/null @@ -1,16 +0,0 @@ -BEGIN:VCARD -VERSION:3.0 -N:Gump;Forrest;Mr. -FN:Forrest Gump -ORG:Bubba Gump Shrimp Co. -TITLE:Shrimp Man -PHOTO;VALUE=URL;TYPE=GIF:http://www.example.com/dir_photos/my_photo.gif -TEL;TYPE=WORK,VOICE:(111) 555-12121 -TEL;TYPE=HOME,VOICE:(404) 555-1212 -ADR;TYPE=WORK:;;100 Waters Edge;Baytown;LA;30314;United States of America -LABEL;TYPE=WORK:100 Waters Edge\nBaytown, LA 30314\nUnited States of America -ADR;TYPE=HOME:;;42 Plantation St.;Baytown;LA;30314;United States of America -LABEL;TYPE=HOME:42 Plantation St.\nBaytown, LA 30314\nUnited States of America -EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com -REV:2008-04-24T19:52:43Z -END:VCARD diff --git a/js/dav/test/integration/data/index.js b/js/dav/test/integration/data/index.js deleted file mode 100644 index 7d2ed03b..00000000 --- a/js/dav/test/integration/data/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import camelize from '../../../lib/camelize'; -import { format } from 'util'; -import fs from 'fs'; - -let docs = {}; -export default docs; - -[ - { name: 'bastille_day_party', fmt: 'ics' }, - { name: 'forrest_gump', fmt: 'vcf' } -].forEach(function(file) { - let camelCase = camelize(file.name); - docs[camelCase] = fs.readFileSync( - format('%s/%s.%s', __dirname, file.name, file.fmt), - 'utf-8' - ); -}); diff --git a/js/dav/test/integration/server/bootstrap.js b/js/dav/test/integration/server/bootstrap.js deleted file mode 100644 index 32187565..00000000 --- a/js/dav/test/integration/server/bootstrap.js +++ /dev/null @@ -1,105 +0,0 @@ -import { format } from 'util'; -import { exec, spawn } from 'child_process'; -import tcpPortUsed from 'tcp-port-used'; - -let debug = require('../../../lib/debug')('dav:test:bootstrap'); - -let calendarData = { - table: 'calendars', - data: { - principaluri: 'principals/admin', - displayname: 'default calendar', - uri: 'default', - description: 'administrator calendar', - components: 'VEVENT,VTODO', - transparent: '0', - synctoken: '1' - } -}; - -let contactsData = { - table: 'addressbooks', - data: { - principaluri: 'principals/admin', - displayname: 'default address book', - uri: 'default', - description: 'administrator address book', - synctoken: '1' - } -}; - - -let inserts = [calendarData, contactsData].map(tableData => { - let table = tableData.table, - data = tableData.data; - - let columns = [], - values = []; - for (let column in data) { - let value = data[column]; - columns.push(column); - values.push(`\'${value}\'`); - } - - return format( - 'echo "INSERT INTO %s (%s) VALUES (%s);" | sqlite3 data/db.sqlite', - table, - columns.join(','), - values.join(',') - ); -}); - -[ - 'rm -rf data/', - 'mkdir data/', - 'chmod -R a+rw data/', - 'cat examples/sql/sqlite.* | sqlite3 data/db.sqlite' -].concat(inserts).forEach(command => { - debug(`exec: ${command}`); - setup(function(done) { - exec(command, { cwd: __dirname + '/SabreDAV' }, () => done()); - }); -}); - -let server; -setup(function() { - debug('Start dav server.'); - server = spawn('php', [ - '-S', - '127.0.0.1:8888', - 'calendarserver.php' - ], { - cwd: __dirname + '/SabreDAV' - }); - - server.stdout.on('data', function(chunk) { - debug(chunk.toString()); - }); - - server.stderr.on('data', function(chunk) { - debug(chunk.toString()); - }); - - debug('Wait for dav server to start.'); - return tcpPortUsed.waitUntilUsed(8888, 100, 20000); -}); - -teardown(function() { - debug('Wait for server to die.'); - return new Promise(function(resolve) { - server.on('exit', function() { - debug('Server died.'); - resolve(); - }); - - server.kill(); - }); -}); - -[ - 'rm -rf data/' -].forEach(function(command) { - teardown(function(done) { - exec(command, { cwd: __dirname }, () => done()); - }); -}); diff --git a/js/dav/test/integration/server/calendarserver.php b/js/dav/test/integration/server/calendarserver.php deleted file mode 100644 index 8a688af4..00000000 --- a/js/dav/test/integration/server/calendarserver.php +++ /dev/null @@ -1,82 +0,0 @@ -setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); - -//Mapping PHP errors to exceptions -function exception_error_handler($errno, $errstr, $errfile, $errline ) { - throw new ErrorException($errstr, 0, $errno, $errfile, $errline); -} -set_error_handler("exception_error_handler"); - -// Files we need -require_once 'vendor/autoload.php'; - -// Backends -$authBackend = new Sabre\DAV\Auth\Backend\BasicCallBack(function($username, $password) { - return true; -}); - -$calendarBackend = new Sabre\CalDAV\Backend\PDO($pdo); -$contactsBackend = new Sabre\CardDAV\Backend\PDO($pdo); -$principalBackend = new Sabre\DAVACL\PrincipalBackend\PDO($pdo); - -// Directory structure -$tree = [ - new Sabre\CalDAV\Principal\Collection($principalBackend), - new Sabre\CalDAV\CalendarRootNode($principalBackend, $calendarBackend), - new Sabre\CardDAV\AddressBookRoot($principalBackend, $contactsBackend), -]; - -$server = new Sabre\DAV\Server($tree); - -if (isset($baseUri)) - $server->setBaseUri($baseUri); - -/* Server Plugins */ -$authPlugin = new Sabre\DAV\Auth\Plugin($authBackend,'SabreDAV'); -$server->addPlugin($authPlugin); - -$aclPlugin = new Sabre\DAVACL\Plugin(); -$server->addPlugin($aclPlugin); - -/* CalDAV support */ -$caldavPlugin = new Sabre\CalDAV\Plugin(); -$server->addPlugin($caldavPlugin); - -/* CardDAV support */ -$carddavPlugin = new Sabre\CardDAV\Plugin(); -$server->addPlugin($carddavPlugin); - -/* Calendar subscription support */ -$server->addPlugin( - new Sabre\CalDAV\Subscriptions\Plugin() -); - -/* WebDAV Sync */ -$server->addPlugin( - new Sabre\DAV\Sync\Plugin() -); - -// Support for html frontend -$browser = new Sabre\DAV\Browser\Plugin(); -$server->addPlugin($browser); - -// And off we go! -$server->exec(); diff --git a/js/dav/test/integration/version_test.js b/js/dav/test/integration/version_test.js deleted file mode 100644 index 49cf28f6..00000000 --- a/js/dav/test/integration/version_test.js +++ /dev/null @@ -1,10 +0,0 @@ -import { expect } from 'chai'; - -import * as dav from '../../lib'; -import { version } from '../../package'; - -suite('version', function() { - test('should be the same as package.json', function() { - expect(dav.version).to.equal(version); - }); -}); diff --git a/js/dav/test/mocha.opts b/js/dav/test/mocha.opts deleted file mode 100644 index 54f5ce2c..00000000 --- a/js/dav/test/mocha.opts +++ /dev/null @@ -1,5 +0,0 @@ ---compilers babel:babel/register ---recursive ---reporter spec ---timeout 20s ---ui tdd diff --git a/js/dav/test/unit/camelize_test.js b/js/dav/test/unit/camelize_test.js deleted file mode 100644 index f956d5e0..00000000 --- a/js/dav/test/unit/camelize_test.js +++ /dev/null @@ -1,23 +0,0 @@ -import { assert } from 'chai'; - -import camelize from '../../lib/camelize'; - -suite('camelize', function() { - test('single word', function() { - assert.strictEqual(camelize('green'), 'green'); - }); - - test('multiple words', function() { - assert.strictEqual( - camelize('green-eggs-and-ham', '-'), - 'greenEggsAndHam' - ); - }); - - test('omit delimiter', function() { - assert.strictEqual( - camelize('green_eggs_and_ham'), - 'greenEggsAndHam' - ); - }); -}); diff --git a/js/dav/test/unit/client_test.js b/js/dav/test/unit/client_test.js deleted file mode 100644 index dac7f5c9..00000000 --- a/js/dav/test/unit/client_test.js +++ /dev/null @@ -1,265 +0,0 @@ -import sinon from 'sinon'; - -import * as dav from '../../lib'; - -suite('Client', function() { - let client, xhr, send; - - setup(function() { - xhr = new dav.transport.Basic( - new dav.Credentials({ - username: 'Killer BOB', - password: 'blacklodge' - }) - ); - - send = sinon.stub(xhr, 'send'); - client = new dav.Client(xhr, { baseUrl: 'https://mail.mozilla.com' }); - }); - - teardown(function() { - send.restore(); - }); - - test('#send', function() { - let url = 'https://mail.mozilla.com/'; - let req = dav.request.basic({ - method: 'PUT', - data: 'BEGIN:VCALENDAR\nEND:VCALENDAR', - etag: 'abc123' - }); - - let sandbox = dav.createSandbox(); - client.send(req, url, { sandbox: sandbox }); - sinon.assert.calledWith(send, req, url, { sandbox: sandbox }); - }); - - test('#send with relative url', function() { - let req = dav.request.basic({ - method: 'PUT', - data: 'BEGIN:VCALENDAR\nEND:VCALENDAR', - etag: 'abc123' - }); - - client.send(req, '/calendars/123.ics'); - sinon.assert.calledWith( - send, - req, - 'https://mail.mozilla.com/calendars/123.ics' - ); - }); - - suite('accounts', function() { - let createAccount; - - setup(function() { - createAccount = sinon.stub(client._accounts, 'createAccount'); - }); - - teardown(function() { - createAccount.restore(); - }); - - test('createAccount', function() { - client.createAccount({ sandbox: {}, server: 'http://dav.example.com' }); - sinon.assert.calledWith(createAccount, { - sandbox: {}, - server: 'http://dav.example.com', - xhr: xhr - }); - }); - }); - - suite('calendars', function() { - let createCalendarObject, - updateCalendarObject, - deleteCalendarObject, - syncCalendar, - syncCaldavAccount; - - setup(function() { - createCalendarObject = sinon.stub( - client._calendars, - 'createCalendarObject' - ); - updateCalendarObject = sinon.stub( - client._calendars, - 'updateCalendarObject' - ); - deleteCalendarObject = sinon.stub( - client._calendars, - 'deleteCalendarObject' - ); - syncCalendar = sinon.stub(client._calendars, 'syncCalendar'); - syncCaldavAccount = sinon.stub(client._calendars, 'syncCaldavAccount'); - }); - - teardown(function() { - createCalendarObject.restore(); - updateCalendarObject.restore(); - deleteCalendarObject.restore(); - syncCalendar.restore(); - syncCaldavAccount.restore(); - }); - - test('#createCalendarObject', function() { - let calendar = new dav.Calendar(); - client.createCalendarObject(calendar, { - data: 'BEGIN:VCALENDAR\nEND:VCALENDAR', - filename: 'test.ics' - }); - sinon.assert.calledWith( - createCalendarObject, - calendar, - { - data: 'BEGIN:VCALENDAR\nEND:VCALENDAR', - filename: 'test.ics', - xhr: xhr - } - ); - }); - - test('#updateCalendarObject', function() { - let object = new dav.CalendarObject(); - client.updateCalendarObject(object); - sinon.assert.calledWith( - updateCalendarObject, - object, - { - xhr: xhr - } - ); - }); - - test('#deleteCalendarObject', function() { - let object = new dav.CalendarObject(); - client.deleteCalendarObject(object); - sinon.assert.calledWith( - deleteCalendarObject, - object, - { - xhr: xhr - } - ); - }); - - test('#syncCalendar', function() { - let calendar = new dav.Calendar(); - client.syncCalendar(calendar, { syncMethod: 'webdav' }); - sinon.assert.calledWith( - syncCalendar, - calendar, - { - syncMethod: 'webdav', - xhr: xhr - } - ); - }); - - test('#syncCaldavAccount', function() { - let account = new dav.Account(); - client.syncCaldavAccount(account, { syncMethod: 'webdav' }); - sinon.assert.calledWith( - syncCaldavAccount, - account, - { - syncMethod: 'webdav', - xhr: xhr - } - ); - }); - }); - - suite('contacts', function() { - let createCard, - updateCard, - deleteCard, - syncAddressBook, - syncCarddavAccount; - - setup(function() { - createCard = sinon.stub(client._contacts, 'createCard'); - updateCard = sinon.stub(client._contacts, 'updateCard'); - deleteCard = sinon.stub(client._contacts, 'deleteCard'); - syncAddressBook = sinon.stub(client._contacts, 'syncAddressBook'); - syncCarddavAccount = sinon.stub(client._contacts, 'syncCarddavAccount'); - }); - - teardown(function() { - createCard.restore(); - updateCard.restore(); - deleteCard.restore(); - syncAddressBook.restore(); - syncCarddavAccount.restore(); - }); - - test('#createCard', function() { - let addressBook = new dav.AddressBook(); - client.createCard(addressBook, { - data: 'BEGIN:VCARD\nEND:VCARD', - filename: 'test.vcf' - }); - sinon.assert.calledWith( - createCard, - addressBook, - { - data: 'BEGIN:VCARD\nEND:VCARD', - filename: 'test.vcf', - xhr: xhr - } - ); - }); - - test('#updateCard', function() { - let object = new dav.VCard(); - client.updateCard(object); - sinon.assert.calledWith( - updateCard, - object, - { - xhr: xhr - } - ); - }); - - test('#deleteCard', function() { - let object = new dav.VCard(); - client.deleteCard(object); - sinon.assert.calledWith( - deleteCard, - object, - { - xhr: xhr - } - ); - }); - - test('#syncAddressBook', function() { - let addressBook = new dav.AddressBook(); - client.syncAddressBook(addressBook, { - syncMethod: 'basic' - }); - sinon.assert.calledWith( - syncAddressBook, - addressBook, - { - syncMethod: 'basic', - xhr: xhr - } - ); - }); - - test('#syncCarddavAccount', function() { - let account = new dav.Account(); - client.syncCarddavAccount(account, { syncMethod: 'basic' }); - sinon.assert.calledWith( - syncCarddavAccount, - account, - { - syncMethod: 'basic', - xhr: xhr - } - ); - }); - }); -}); diff --git a/js/dav/test/unit/data/address_book_query.xml b/js/dav/test/unit/data/address_book_query.xml deleted file mode 100644 index 3e7690b7..00000000 --- a/js/dav/test/unit/data/address_book_query.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - /addressbooks/admin/ - - - - - - - - - - - - - - - - - - - - - HTTP/1.1 200 OK - - - - /addressbooks/admin/default/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HTTP/1.1 200 OK - - - diff --git a/js/dav/test/unit/data/calendar_query.xml b/js/dav/test/unit/data/calendar_query.xml deleted file mode 100644 index 3a276b75..00000000 --- a/js/dav/test/unit/data/calendar_query.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - /calendars/johndoe/home/132456762153245.ics - - - "2134-314" - BEGIN:VCALENDAR -END:VCALENDAR - - HTTP/1.1 200 OK - - - - /calendars/johndoe/home/132456-34365.ics - - - "5467-323" - BEGIN:VCALENDAR -END:VCALENDAR - - HTTP/1.1 200 OK - - - diff --git a/js/dav/test/unit/data/current_user_principal.xml b/js/dav/test/unit/data/current_user_principal.xml deleted file mode 100644 index c1b3ead7..00000000 --- a/js/dav/test/unit/data/current_user_principal.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - / - - - - /principals/admin%40domain.tld/ - - - HTTP/1.1 200 OK - - - diff --git a/js/dav/test/unit/data/index.js b/js/dav/test/unit/data/index.js deleted file mode 100644 index 2394dffc..00000000 --- a/js/dav/test/unit/data/index.js +++ /dev/null @@ -1,24 +0,0 @@ -import fs from 'fs'; -import { format } from 'util'; - -import camelize from '../../../lib/camelize'; - -let docs = {}; -export default docs; - -[ - 'address_book_query', - 'current_user_principal', - 'calendar_query', - 'propfind', - 'propfind_oc', - 'sync_collection' -].forEach(function(responseType) { - var camelCase = camelize(responseType); - docs[camelCase] = fs - .readFileSync( - format('%s/%s.xml', __dirname, responseType), - 'utf-8' - ) - .replace(/>\s+<'); // Remove whitespace between close and open tag. -}); diff --git a/js/dav/test/unit/data/propfind.xml b/js/dav/test/unit/data/propfind.xml deleted file mode 100644 index 274520c7..00000000 --- a/js/dav/test/unit/data/propfind.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - /calendars/admin/ - - - - - - - HTTP/1.1 404 Not Found - - - - /calendars/admin/default/ - - - default calendar - http://sabre.io/ns/sync/0 - - - - - - HTTP/1.1 200 OK - - - - /calendars/admin/outbox/ - - - - - - - HTTP/1.1 404 Not Found - - - diff --git a/js/dav/test/unit/data/propfind_oc.xml b/js/dav/test/unit/data/propfind_oc.xml deleted file mode 100644 index f233be04..00000000 --- a/js/dav/test/unit/data/propfind_oc.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - /calendars/admin/ - - - - /remote.php/dav/principals/users/admin/ - - - Friends - Co-Workers - - - - principal:principals/users/user01 - user01 - - - - - - - - principal:principals/users/user02 - user02 - - - - - - - - HTTP/1.1 200 OK - - - diff --git a/js/dav/test/unit/data/sync_collection.xml b/js/dav/test/unit/data/sync_collection.xml deleted file mode 100644 index a2f805ce..00000000 --- a/js/dav/test/unit/data/sync_collection.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - /calendars/admin/default/test.ics - - - "e91f3c9518f76753a7dc5a0cf8998986" - BEGIN:VCALENDAR -END:VCALENDAR - - - HTTP/1.1 200 OK - - - http://sabre.io/ns/sync/3 - diff --git a/js/dav/test/unit/nock_wrapper.js b/js/dav/test/unit/nock_wrapper.js deleted file mode 100644 index f665a0ea..00000000 --- a/js/dav/test/unit/nock_wrapper.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * @fileoverview Decorates nock with some useful utilities. - */ -import { assert } from 'chai'; -import co from 'co'; -import nock from 'nock'; - -export function nockWrapper(url) { - let result = nock(url); - - // This is a hack suggested here https://github.com/pgte/nock#protip - // to intercept the request conditional on the request body. - result.matchRequestBody = (path, method, match, options={}) => { - let statusCode = options.statusCode || 200; - let statusText = options.statusText || '200 OK'; - return result - .filteringRequestBody(body => match(body) ? '*' : '') - .intercept(path, method, '*') - .delay(1) - .reply(statusCode, statusText); - }; - - /** - * Whether or not an error is thrown in the promise, - * the mock should have intercepted the request. - */ - result.verify = co.wrap(function *(promise) { - try { - yield promise; - } catch (error) { - assert.notInclude(error.toString(), 'ECONNREFUSED'); - } finally { - result.done(); - } - }); - - return result; -} - -Object.keys(nock).forEach(key => { - let value = nock[key]; - if (typeof value !== 'function') { - return; - } - - nockWrapper[key] = value.bind(nockWrapper) -}); diff --git a/js/dav/test/unit/parser_test.js b/js/dav/test/unit/parser_test.js deleted file mode 100644 index bbeeaf52..00000000 --- a/js/dav/test/unit/parser_test.js +++ /dev/null @@ -1,93 +0,0 @@ -import { assert } from 'chai'; - -import { multistatus } from '../../lib/parser'; -import data from './data'; - -suite('parser.multistatus', function() { - test('propfind (current-user-principal)', function() { - let currentUserPrincipal = data.currentUserPrincipal; - assert.deepEqual(multistatus(currentUserPrincipal), { - response: [{ - href: '/', - propstat: [{ - prop: { - currentUserPrincipal: '/principals/admin@domain.tld/' - }, - status: 'HTTP/1.1 200 OK' - }] - }] - }); - }); - - test('report (calendar-query)', function() { - let calendarQuery = data.calendarQuery; - assert.deepEqual(multistatus(calendarQuery), { - response: [ - { - href: '/calendars/johndoe/home/132456762153245.ics', - propstat: [{ - prop: { - getetag: '"2134-314"', - calendarData: 'BEGIN:VCALENDAR\nEND:VCALENDAR' - }, - status: 'HTTP/1.1 200 OK' - }] - }, - { - href: '/calendars/johndoe/home/132456-34365.ics', - propstat: [{ - prop: { - getetag: '"5467-323"', - calendarData: 'BEGIN:VCALENDAR\nEND:VCALENDAR' - }, - status: 'HTTP/1.1 200 OK' - }] - }, - ] - }); - }); - - test('report (sync-collection)', function() { - let syncCollection = data.syncCollection; - assert.deepEqual(multistatus(syncCollection), { - response: [{ - href: '/calendars/admin/default/test.ics', - propstat: [{ - prop: { - 'calendarData': 'BEGIN:VCALENDAR\nEND:VCALENDAR\n', - getetag: '"e91f3c9518f76753a7dc5a0cf8998986"' - }, - status: 'HTTP/1.1 200 OK' - }] - }], - syncToken: 'http://sabre.io/ns/sync/3' - }); - }); - - test('propfind (oc-groups and oc-invites)', function() { - let propfind = data.propfindOc; - assert.deepEqual(multistatus(propfind), { - response: [{ - href: '/calendars/admin/', - propstat: [{ - prop: { - owner: '/remote.php/dav/principals/users/admin/', - invite: [{ - href: 'principal:principals/users/user01', - access: {'read':''}, - commonName: 'user01', - inviteAccepted: '' - }, { - href: 'principal:principals/users/user02', - access: {'read':''}, - commonName: 'user02', - inviteAccepted: '' - }], - groups: ['Friends', 'Co-Workers'] - }, - status: 'HTTP/1.1 200 OK' - }] - }], - }); - }); -}); diff --git a/js/dav/test/unit/request/address_book_query_test.js b/js/dav/test/unit/request/address_book_query_test.js deleted file mode 100644 index 31777efd..00000000 --- a/js/dav/test/unit/request/address_book_query_test.js +++ /dev/null @@ -1,69 +0,0 @@ -import { assert } from 'chai'; -import co from 'co'; - -import * as ns from '../../../lib/namespace'; -import { Request, addressBookQuery } from '../../../lib/request'; -import * as transport from '../../../lib/transport'; -import data from '../data'; -import { nockWrapper } from '../nock_wrapper'; - -suite('request.addressBookQuery', function() { - let xhr; - - setup(function() { - xhr = new transport.Basic({ username: 'admin', password: 'admin' }); - }); - - teardown(() => nockWrapper.cleanAll()); - - test('should set depth header', co.wrap(function *() { - let mock = nockWrapper('http://127.0.0.1:1337') - .matchHeader('Depth', 1) - .intercept('/principals/admin/', 'REPORT') - .reply(200); - - let req = addressBookQuery({ - props: [ { name: 'address-data', namespace: ns.CARDDAV } ], - depth: 1 - }); - - let send = xhr.send(req, 'http://127.0.0.1:1337/principals/admin/'); - yield mock.verify(send); - })); - - test('should add specified props to report body', co.wrap(function *() { - let mock = nockWrapper('http://127.0.0.1:1337') - .matchRequestBody('/principals/admin/', 'REPORT', body => { - return body.indexOf('') !== -1; - }); - - let req = addressBookQuery({ - props: [ { name: 'catdog', namespace: ns.DAV } ] - }); - - let send = xhr.send(req, 'http://127.0.0.1:1337/principals/admin/'); - yield mock.verify(send); - })); - - test('should resolve with appropriate data structure', co.wrap(function *() { - nockWrapper('http://127.0.0.1:1337') - .intercept('/', 'REPORT') - .reply(200, data.addressBookQuery); - - - let req = addressBookQuery({ - props: [ - { name: 'getetag', namespace: ns.DAV }, - { name: 'address-data', namespace: ns.CARDDAV } - ] - }); - - let addressBooks = yield xhr.send(req, 'http://127.0.0.1:1337'); - assert.lengthOf(addressBooks, 2); - addressBooks.forEach(addressBook => { - assert.typeOf(addressBook.href, 'string'); - assert.operator(addressBook.href.length, '>', 0); - assert.typeOf(addressBook.props, 'object'); - }); - })); -}); diff --git a/js/dav/test/unit/request/basic_test.js b/js/dav/test/unit/request/basic_test.js deleted file mode 100644 index 9ce5f01b..00000000 --- a/js/dav/test/unit/request/basic_test.js +++ /dev/null @@ -1,63 +0,0 @@ -import { assert } from 'chai'; -import co from 'co'; - -import { Request, basic } from '../../../lib/request'; -import * as transport from '../../../lib/transport'; -import { nockWrapper } from '../nock_wrapper'; - -suite('put', function() { - let xhr; - - setup(function() { - xhr = new transport.Basic({ user: 'admin', password: 'admin' }); - }); - - teardown(() => nockWrapper.cleanAll()); - - test('should set If-Match header', co.wrap(function *() { - let mock = nockWrapper('http://127.0.0.1:1337') - .matchHeader('If-Match', '1337') - .intercept('/', 'PUT') - .reply(200); - - let req = basic({ - method: 'PUT', - etag: '1337' - }); - - let send = xhr.send(req, 'http://127.0.0.1:1337'); - yield mock.verify(send); - })); - - test('should send options data as request body', co.wrap(function *() { - let mock = nockWrapper('http://127.0.0.1:1337') - .matchRequestBody('/', 'PUT', body => { - return body === 'Bad hair day!'; - }); - - let req = basic({ - method: 'PUT', - data: 'Bad hair day!' - }); - - let send = xhr.send(req, 'http://127.0.0.1:1337'); - yield mock.verify(send); - })); - - test('should throw error on bad response', co.wrap(function *() { - nockWrapper('http://127.0.0.1:1337') - .intercept('/', 'PUT') - .delay(1) - .reply('400', '400 Bad Request'); - - let req = basic({ method: 'PUT' }); - - try { - yield xhr.send(req, 'http://127.0.0.1:1337') - assert.fail('request.basic should have thrown an error'); - } catch (error) { - assert.instanceOf(error, Error); - assert.include(error.toString(), 'Bad status: 400'); - } - })); -}); diff --git a/js/dav/test/unit/request/calendar_query_test.js b/js/dav/test/unit/request/calendar_query_test.js deleted file mode 100644 index a97e4d0b..00000000 --- a/js/dav/test/unit/request/calendar_query_test.js +++ /dev/null @@ -1,107 +0,0 @@ -import { assert } from 'chai'; -import co from 'co'; - -import * as ns from '../../../lib/namespace'; -import { Request, calendarQuery } from '../../../lib/request'; -import * as transport from '../../../lib/transport'; -import data from '../data'; -import { nockWrapper } from '../nock_wrapper'; - -suite('request.calendarQuery', function() { - let xhr; - - setup(function() { - xhr = new transport.Basic({ username: 'admin', password: 'admin' }); - }); - - teardown(() => nockWrapper.cleanAll()); - - test('should set depth header', co.wrap(function *() { - let mock = nockWrapper('http://127.0.0.1:1337') - .matchHeader('Depth', 1) - .intercept('/principals/admin/', 'REPORT') - .reply(200); - - let req = calendarQuery({ - props: [ { name: 'calendar-data', namespace: ns.CALDAV } ], - depth: 1 - }); - - let send = xhr.send(req, 'http://127.0.0.1:1337/principals/admin/'); - yield mock.verify(send); - })); - - test('should add specified props to report body', co.wrap(function *() { - let mock = nockWrapper('http://127.0.0.1:1337') - .matchRequestBody('/principals/admin/', 'REPORT', body => { - return body.indexOf('') !== -1; - }); - - let req = calendarQuery({ - props: [ { name: 'catdog', namespace: ns.DAV } ] - }); - - let send = xhr.send(req, 'http://127.0.0.1:1337/principals/admin/'); - yield mock.verify(send); - })); - - test('should add specified filters to report body', co.wrap(function *() { - let mock = nockWrapper('http://127.0.0.1:1337') - .matchRequestBody('/principals/admin/', 'REPORT', body => { - return body.indexOf('') !== -1; - }); - - let req = calendarQuery({ - filters: [{ - type: 'comp-filter', - attrs: { name: 'VCALENDAR' }, - }] - }); - - let send = xhr.send(req, 'http://127.0.0.1:1337/principals/admin/'); - yield mock.verify(send); - })); - - test('should add timezone to report body', co.wrap(function *() { - let mock = nockWrapper('http://127.0.0.1:1337') - .matchRequestBody('/principals/admin/', 'REPORT', body => { - let data = 'BEGIN:VTIMEZONE\nEND:VTIMEZONE'; - return body.indexOf(data) !== -1; - }); - - let req = calendarQuery({ - url: 'http://127.0.0.1:1337/principals/admin/', - timezone: 'BEGIN:VTIMEZONE\nEND:VTIMEZONE' - }); - - let send = xhr.send(req, 'http://127.0.0.1:1337/principals/admin/'); - yield mock.verify(send); - })); - - test('should resolve with appropriate data structure', co.wrap(function *() { - nockWrapper('http://127.0.0.1:1337') - .intercept('/', 'REPORT') - .reply(200, data.calendarQuery); - - let req = calendarQuery({ - props: [ - { name: 'getetag', namespace: ns.DAV }, - { name: 'calendar-data', namespace: ns.CALDAV } - ], - filters: [ { type: 'comp', attrs: { name: 'VCALENDAR' } } ] - }); - - let calendars = yield xhr.send(req, 'http://127.0.0.1:1337/'); - assert.lengthOf(calendars, 2); - calendars.forEach(calendar => { - assert.typeOf(calendar.href, 'string'); - assert.operator(calendar.href.length, '>', 0); - assert.include(calendar.href, '.ics'); - assert.typeOf(calendar.props, 'object'); - assert.typeOf(calendar.props.getetag, 'string'); - assert.operator(calendar.props.getetag.length, '>', 0); - assert.typeOf(calendar.props.calendarData, 'string'); - assert.operator(calendar.props.calendarData.length, '>', 0); - }); - })); -}); diff --git a/js/dav/test/unit/request/propfind_test.js b/js/dav/test/unit/request/propfind_test.js deleted file mode 100644 index 378f06fd..00000000 --- a/js/dav/test/unit/request/propfind_test.js +++ /dev/null @@ -1,84 +0,0 @@ -import { assert } from 'chai'; -import co from 'co'; - -import * as namespace from '../../../lib/namespace'; -import { Request, propfind } from '../../../lib/request'; -import * as transport from '../../../lib/transport'; -import data from '../data'; -import { nockWrapper } from '../nock_wrapper'; - -suite('request.propfind', function() { - let xhr; - - setup(function() { - xhr = new transport.Basic({ user: 'admin', password: 'admin' }); - }); - - teardown(() => nockWrapper.cleanAll()); - - test('should set depth header', co.wrap(function *() { - let mock = nockWrapper('http://127.0.0.1:1337') - .matchHeader('Depth', '0') // Will only get intercepted if Depth => 0. - .intercept('/', 'PROPFIND') - .reply(200); - - let req = propfind({ - props: [ { name: 'catdog', namespace: namespace.DAV } ], - depth: '0' - }); - - let send = xhr.send(req, 'http://127.0.0.1:1337'); - yield mock.verify(send); - })); - - test('should add specified properties to propfind body', co.wrap(function *() { - let mock = nockWrapper('http://127.0.0.1:1337') - .matchRequestBody('/', 'PROPFIND', function(body) { - return body.indexOf('') !== -1; - }); - - let req = propfind({ - props: [ { name: 'catdog', namespace: namespace.DAV } ], - depth: '0' - }); - - let send = xhr.send(req, 'http://127.0.0.1:1337'); - yield mock.verify(send); - })); - - test('should resolve with appropriate data structure', co.wrap(function *() { - nockWrapper('http://127.0.0.1:1337') - .intercept('/', 'PROPFIND') - .reply(200, data.propfind); - - let req = propfind({ - props: [ - { name: 'displayname', namespace: namespace.DAV }, - { name: 'getctag', namespace: namespace.CALENDAR_SERVER }, - { - name: 'supported-calendar-component-set', - namespace: namespace.CALDAV - } - ], - depth: 1 - }); - - let responses = yield xhr.send(req, 'http://127.0.0.1:1337/'); - - assert.isArray(responses); - responses.forEach(response => { - assert.typeOf(response.href, 'string'); - assert.operator(response.href.length, '>', 0); - assert.ok('props' in response); - assert.typeOf(response.props, 'object'); - if ('displayname' in response.props) { - assert.typeOf(response.props.displayname, 'string'); - assert.operator(response.props.displayname.length, '>', 0); - } - if ('components' in response.props) { - assert.isArray(response.props.components); - assert.include(response.props.components, 'VEVENT'); - } - }); - })); -}); diff --git a/js/dav/test/unit/request/sync_collection_test.js b/js/dav/test/unit/request/sync_collection_test.js deleted file mode 100644 index b595b142..00000000 --- a/js/dav/test/unit/request/sync_collection_test.js +++ /dev/null @@ -1,65 +0,0 @@ -import { assert } from 'chai'; -import co from 'co'; - -import * as namespace from '../../../lib/namespace'; -import { Request, syncCollection } from '../../../lib/request'; -import * as transport from '../../../lib/transport'; -import { nockWrapper } from '../nock_wrapper'; - -suite('request.syncCollection', function() { - let xhr; - - setup(function() { - xhr = new transport.Basic({ username: 'admin', password: 'admin' }); - }); - - teardown(() => nockWrapper.cleanAll()); - - test('should add props to request body', co.wrap(function *() { - let mock = nockWrapper('http://127.0.0.1:1337') - .matchRequestBody( - '/principals/admin/default/', - 'REPORT', - body => { - return body.indexOf('') !== -1 && - body.indexOf('') !== -1; - } - ); - - let req = syncCollection({ - syncLevel: 1, - syncToken: 'abc123', - props: [ - { name: 'getetag', namespace: namespace.DAV }, - { name: 'calendar-data', namespace: namespace.CALDAV } - ] - }); - - let send = xhr.send(req, 'http://127.0.0.1:1337/principals/admin/default/'); - yield mock.verify(send); - })); - - test('should set sync details in request body', co.wrap(function *() { - let mock = nockWrapper('http://127.0.0.1:1337') - .matchRequestBody( - '/principals/admin/default/', - 'REPORT', - body => { - return body.indexOf('1') !== -1 && - body.indexOf('abc123') !== -1; - } - ); - - let req = syncCollection({ - syncLevel: 1, - syncToken: 'abc123', - props: [ - { name: 'getetag', namespace: namespace.DAV }, - { name: 'calendar-data', namespace: namespace.CALDAV } - ] - }); - - let send = xhr.send(req, 'http://127.0.0.1:1337/principals/admin/default/'); - yield mock.verify(send); - })); -}); diff --git a/js/dav/test/unit/sandbox_test.js b/js/dav/test/unit/sandbox_test.js deleted file mode 100644 index bfcd20f3..00000000 --- a/js/dav/test/unit/sandbox_test.js +++ /dev/null @@ -1,72 +0,0 @@ -import { assert } from 'chai'; -import sinon from 'sinon'; - -import * as dav from '../../lib'; -import { Sandbox, createSandbox } from '../../lib/sandbox'; -import XMLHttpRequest from '../../lib/xmlhttprequest'; - -suite('sandbox', function() { - let sandbox; - - setup(function() { - sandbox = createSandbox(); - }); - - test('#add', function() { - assert.lengthOf(sandbox.requestList, 0); - let one = new XMLHttpRequest(), - two = new XMLHttpRequest(); - sandbox.add(one); - sandbox.add(two); - assert.lengthOf(sandbox.requestList, 2); - assert.include(sandbox.requestList, one); - assert.include(sandbox.requestList, two); - }); - - test('#abort', function() { - let one = new XMLHttpRequest(), - two = new XMLHttpRequest(); - sandbox.add(one); - sandbox.add(two); - let stubOne = sinon.stub(one, 'abort'), - stubTwo = sinon.stub(two, 'abort'); - sandbox.abort(); - sinon.assert.calledOnce(stubOne); - sinon.assert.calledOnce(stubTwo); - }); -}); - -suite('new sandbox object interface', function() { - let sandbox; - - setup(function() { - sandbox = new Sandbox(); - }); - - test('constructor', function() { - assert.instanceOf(sandbox, Sandbox); - }); - - test('#add', function() { - assert.lengthOf(sandbox.requestList, 0); - let one = new XMLHttpRequest(), - two = new XMLHttpRequest(); - sandbox.add(one); - sandbox.add(two); - assert.lengthOf(sandbox.requestList, 2); - assert.include(sandbox.requestList, one); - assert.include(sandbox.requestList, two); - }); - - test('#abort', function() { - let one = new XMLHttpRequest(), - two = new XMLHttpRequest(); - sandbox.add(one); - sandbox.add(two); - let stubOne = sinon.stub(one, 'abort'), - stubTwo = sinon.stub(two, 'abort'); - sandbox.abort(); - sinon.assert.calledOnce(stubOne); - sinon.assert.calledOnce(stubTwo); - }); -}); diff --git a/js/dav/test/unit/template_test.js b/js/dav/test/unit/template_test.js deleted file mode 100644 index aec09dd2..00000000 --- a/js/dav/test/unit/template_test.js +++ /dev/null @@ -1,69 +0,0 @@ -import { assert } from 'chai'; - -import prop from '../../lib/template/prop'; -import filter from '../../lib/template/filter'; - -suite('template helpers', function() { - test('comp-filter', function() { - let item = filter({ - type: 'comp-filter', - attrs: { name: 'VCALENDAR' } - }); - - assert.strictEqual(item, ''); - }); - - test('time-range', function() { - let item = filter({ - type: 'time-range', - attrs: { start: '20060104T000000Z', end: '20060105T000000Z' } - }); - - assert.strictEqual( - item, - '' - ); - }); - - test('time-range no end', function() { - let item = filter({ - type: 'time-range', - attrs: { start: '20060104T000000Z' } - }); - - assert.strictEqual(item, ''); - }); - - test('nested', function() { - let item = filter({ - type: 'comp-filter', - attrs: { name: 'VCALENDAR' }, - children: [{ - type: 'comp-filter', - attrs: { name: 'VEVENT' }, - children: [{ - type: 'time-range', - attrs: { start: '20060104T000000Z', end: '20060105T000000Z' } - }] - }] - }); - - assert.strictEqual( - item.replace(/\s/g, ''), - ('' + - '' + - '' + - '' + - '').replace(/\s/g, '') - ); - }); - - test('prop', function() { - let item = prop({ - name: 'spongebob', - namespace: 'urn:ietf:params:xml:ns:caldav' - }); - - assert.strictEqual(item, ''); - }); -}); diff --git a/js/dav/test/unit/transport_test.js b/js/dav/test/unit/transport_test.js deleted file mode 100644 index 24deb01e..00000000 --- a/js/dav/test/unit/transport_test.js +++ /dev/null @@ -1,256 +0,0 @@ -import { assert } from 'chai'; -import co from 'co'; -import nock from 'nock'; -import sinon from 'sinon'; - -import { Credentials } from '../../lib/model'; -import { createSandbox } from '../../lib/sandbox'; -import { Basic, OAuth2 } from '../../lib/transport'; -import XMLHttpRequest from '../../lib/xmlhttprequest'; - -suite('Basic#send', function() { - let xhr, req; - - setup(function() { - xhr = new Basic( - new Credentials({ username: 'admin', password: 'admin' }) - ); - - req = { - method: 'GET', - transformRequest: xhr => xhr - }; - }); - - teardown(function() { - nock.cleanAll(); - }); - - test('should sandbox xhr', function() { - let sandbox = createSandbox(); - assert.lengthOf(sandbox.requestList, 0); - xhr.send(req, 'http://127.0.0.1:1337', { sandbox: sandbox }); - assert.lengthOf(sandbox.requestList, 1); - }); - - test('should apply `transformRequest`', function() { - let stub = sinon.stub(req, 'transformRequest'); - xhr.send(req, 'http://127.0.0.1:1337'); - sinon.assert.called(stub); - stub.restore(); - }); - - test('should send req', co.wrap(function *() { - let nockObj = nock('http://127.0.0.1:1337') - .get('/') - .reply(200, '200 OK'); - - assert.notOk(nockObj.isDone()); - yield xhr.send(req, 'http://127.0.0.1:1337'); - assert.ok(nockObj.isDone()); - })); - - test('should invoke onerror if error thrown', function(done) { - nock('http://127.0.0.1:1337') - .get('/') - .reply(400, '400 Bad Request'); - - req.onerror = function(error) { - assert.instanceOf(error, Error); - assert.include(error.toString(), 'Bad status: 400'); - done(); - }; - - xhr.send(req, 'http://127.0.0.1:1337'); - }); - - test('should return promise that resolves with xhr', co.wrap(function *() { - nock('http://127.0.0.1:1337') - .get('/') - .reply(200, '200 OK'); - - let value = yield xhr.send(req, 'http://127.0.0.1:1337'); - assert.instanceOf(value, XMLHttpRequest); - assert.strictEqual(value.request.readyState, 4); - })); -}); - -suite('OAuth2#send', function() { - let xhr, req, credentials; - - setup(function() { - credentials = new Credentials({ - clientId: '605300196874-1ki833poa7uqabmh3hq' + - '6u1onlqlsi54h.apps.googleusercontent.com', - clientSecret: 'jQTKlOhF-RclGaGJot3HIcVf', - redirectUrl: 'https://oauth.gaiamobile.org/authenticated', - tokenUrl: 'https://accounts.google.com/o/oauth2/token', - authorizationCode: 'gareth' - }); - - xhr = new OAuth2(credentials); - - req = { method: 'GET' }; - }); - - teardown(function() { - nock.cleanAll(); - }); - - test('should get access token', co.wrap(function *() { - let access = nock('https://accounts.google.com') - .post('/o/oauth2/token') - .reply( - 200, - JSON.stringify({ - access_token: 'sosafesosecret', - refresh_token: 'lemonade!!1', - expires_in: 12345 - }) - ); - - let mock = nock('http://127.0.0.1:1337') - .get('/') - .matchHeader('Authorization', 'Bearer sosafesosecret') - .reply(200); - - let response = yield xhr.send(req, 'http://127.0.0.1:1337', { - retry: false - }); - - assert.instanceOf(response, XMLHttpRequest); - assert.ok(access.isDone(), 'should get access'); - assert.strictEqual(credentials.accessToken, 'sosafesosecret'); - assert.strictEqual(credentials.refreshToken, 'lemonade!!1'); - assert.operator(credentials.expiration, '>', Date.now()); - assert.ok(mock.isDone(), 'should send req with Authorization header'); - })); - - test('should refresh access token if expired', co.wrap(function *() { - let refresh = nock('https://accounts.google.com') - .post('/o/oauth2/token') - .reply( - 200, - JSON.stringify({ - access_token: 'Little Bear', - expires_in: 314159 - }) - ); - - let mock = nock('http://127.0.0.1:1337') - .get('/') - .matchHeader('Authorization', 'Bearer Little Bear') - .reply(200, '200 OK'); - - credentials.accessToken = 'EXPIRED'; - credentials.refreshToken = '1/oPHTPFgECWFPrs7KgHdis24u6Xl4E4EnRrkkiwLfzdk'; - credentials.expiration = Date.now() - 1; - - let response = yield xhr.send(req, 'http://127.0.0.1:1337', { - retry: false - }); - - assert.instanceOf(response, XMLHttpRequest); - assert.ok(refresh.isDone(), 'should refresh'); - assert.strictEqual(credentials.accessToken, 'Little Bear'); - assert.typeOf(credentials.expiration, 'number'); - assert.operator(credentials.expiration, '>', Date.now()); - assert.ok(mock.isDone(), 'should send req with Authorization header'); - })); - - test('should use provided access token if not expired', co.wrap(function *() { - let token = nock('https://accounts.google.com') - .post('/o/oauth2/token') - .reply(500); - - let mock = nock('http://127.0.0.1:1337') - .get('/') - .matchHeader('Authorization', 'Bearer Little Bear') - .reply(200, '200 OK'); - - credentials.accessToken = 'Little Bear'; - credentials.refreshToken = 'spicy tamales'; - let expiration = credentials.expiration = Date.now() + 60 * 60 * 1000; - - let response = yield xhr.send(req, 'http://127.0.0.1:1337', { - retry: false - }); - - assert.instanceOf(response, XMLHttpRequest); - assert.notOk(token.isDone(), 'should not fetch new token(s)'); - assert.strictEqual(credentials.accessToken, 'Little Bear'); - assert.strictEqual(credentials.refreshToken, 'spicy tamales'); - assert.strictEqual(expiration, credentials.expiration); - assert.ok(mock.isDone()); - })); - - test('should retry if 401', co.wrap(function *() { - let refresh = nock('https://accounts.google.com') - .post('/o/oauth2/token') - .reply( - 200, - JSON.stringify({ - access_token: 'Little Bear', - expires_in: 314159 - }) - ); - - let authorized = nock('http://127.0.0.1:1337') - .get('/') - .matchHeader('Authorization', 'Bearer Little Bear') - .reply(200, '200 OK'); - - let unauthorized = nock('http://127.0.0.1:1337') - .get('/') - .matchHeader('Authorization', 'Bearer EXPIRED') - .reply(401, '401 Unauthorized'); - - credentials.accessToken = 'EXPIRED'; - credentials.refreshToken = 'raspberry pie'; - credentials.expiration = Date.now() + 60 * 60 * 1000; - - let response = yield xhr.send(req, 'http://127.0.0.1:1337'); - assert.instanceOf(response, XMLHttpRequest); - assert.strictEqual(response.status, 200); - assert.strictEqual(response.responseText, '200 OK'); - assert.ok(unauthorized.isDone(), 'tried to use expired access token'); - assert.ok(refresh.isDone(), 'should refresh access token on 401'); - assert.strictEqual(credentials.accessToken, 'Little Bear'); - assert.operator(credentials.expiration, '>', Date.now()); - assert.ok(authorized.isDone(), 'should then use new access token'); - })); - - test('should retry once at most', co.wrap(function *() { - let refresh = nock('https://accounts.google.com') - .post('/o/oauth2/token') - .reply( - 200, - JSON.stringify({ - access_token: 'EXPIRED', - expires_in: 314159 - }) - ); - - nock('http://127.0.0.1:1337') - .persist() - .get('/') - .matchHeader('Authorization', 'Bearer EXPIRED') - .reply(401, '401 Unauthorized'); - - credentials.accessToken = 'EXPIRED'; - credentials.refreshToken = 'soda'; - - let spy = sinon.spy(xhr, 'send'); - - try { - yield xhr.send(req, 'http://127.0.0.1:1337') - assert.fail('Should have failed on error'); - } catch (error) { - assert.instanceOf(error, Error); - assert.include(error.toString(), 'Bad status: 401'); - assert.ok(refresh.isDone(), 'should refresh access token on 401'); - assert.strictEqual(spy.callCount, 2); - spy.restore(); - } - })); -}); diff --git a/js/dav/test/unit/xmlhttprequest_test.js b/js/dav/test/unit/xmlhttprequest_test.js deleted file mode 100644 index 027874e7..00000000 --- a/js/dav/test/unit/xmlhttprequest_test.js +++ /dev/null @@ -1,81 +0,0 @@ -import { assert } from 'chai'; -import co from 'co'; -import nock from 'nock'; -import sinon from 'sinon'; - -import { createSandbox } from '../../lib/sandbox'; -import XMLHttpRequest from '../../lib/xmlhttprequest'; - -suite('XMLHttpRequest#send', function() { - let request; - - setup(function() { - request = new XMLHttpRequest(); - }); - - teardown(function() { - nock.cleanAll(); - }); - - test('should sandbox request if provided', function() { - nock('http://127.0.0.1:1337').get('/'); - - request.open('GET', 'http://127.0.0.1:1337', true); - let sandbox = createSandbox(); - request.sandbox = sandbox; - let spy = sinon.spy(request, 'abort'); - request.send(); - sandbox.abort(); - sinon.assert.calledOnce(spy); - }); - - test('should send data if provided', co.wrap(function *() { - nock('http://127.0.0.1:1337') - .post('/', 'zippity-doo-dah') - .reply(200, 'zip-a-dee-a'); - - request.open('POST', 'http://127.0.0.1:1337', true); - let responseText = yield request.send('zippity-doo-dah'); - assert.strictEqual(responseText, 'zip-a-dee-a'); - })); - - test('should reject with statusText if status >=400', co.wrap(function *() { - nock('http://127.0.0.1:1337') - .get('/') - .reply(500, '500 Internal Server Error'); - - request.open('GET', 'http://127.0.0.1:1337', true); - try { - yield request.send(); - assert.fail('Did not reject promise on xhr error.'); - } catch (error) { - assert.instanceOf(error, Error); - }; - })); - - test('should reject with timeout error on timeout', co.wrap(function *() { - nock('http://127.0.0.1:1337') - .get('/') - .delay(2) - .reply(200, '200 OK'); - - request.timeout = 1; - request.open('GET', 'http://127.0.0.1:1337', true); - try { - yield request.send(); - assert.fail('Did not reject promise on timeout.'); - } catch (error) { - assert.instanceOf(error, Error); - } - })); - - test('should resolve with responseText if everything ok', co.wrap(function *() { - nock('http://127.0.0.1:1337') - .get('/') - .reply(200, '200 OK'); - - request.open('GET', 'http://127.0.0.1:1337', true); - let responseText = yield request.send(); - assert.strictEqual(responseText.trim(), '200 OK'); - })); -}); diff --git a/js/filters/JSON2vCard_filter.js b/js/filters/JSON2vCard_filter.js deleted file mode 100644 index 634d75f0..00000000 --- a/js/filters/JSON2vCard_filter.js +++ /dev/null @@ -1,6 +0,0 @@ -angular.module('contactsApp') -.filter('JSON2vCard', function() { - return function(input) { - return vCard.generate(input); - }; -}); diff --git a/js/filters/contactColor_filter.js b/js/filters/contactColor_filter.js deleted file mode 100644 index eb9e4402..00000000 --- a/js/filters/contactColor_filter.js +++ /dev/null @@ -1,20 +0,0 @@ -angular.module('contactsApp') -.filter('contactColor', function() { - return function(input) { - // Check if core has the new color generator - if(typeof input.toRgb === 'function') { - var rgb = input.toRgb(); - return 'rgb('+rgb['r']+', '+rgb['g']+', '+rgb['b']+')'; - } else if(typeof input.toHsl === 'function') { - var hsl = input.toHsl(); - return 'hsl('+hsl[0]+', '+hsl[1]+'%, '+hsl[2]+'%)'; - } else { - // If not, we use the old one - /* global md5 */ - var hash = md5(input).substring(0, 4), - maxRange = parseInt('ffff', 16), - hue = parseInt(hash, 16) / maxRange * 256; - return 'hsl(' + hue + ', 90%, 65%)'; - } - }; -}); \ No newline at end of file diff --git a/js/filters/contactGroup_filter.js b/js/filters/contactGroup_filter.js deleted file mode 100644 index 3ceb1ca1..00000000 --- a/js/filters/contactGroup_filter.js +++ /dev/null @@ -1,27 +0,0 @@ -angular.module('contactsApp') -.filter('contactGroupFilter', function() { - 'use strict'; - return function (contacts, group) { - if (typeof contacts === 'undefined') { - return contacts; - } - if (typeof group === 'undefined' || group.toLowerCase() === t('contacts', 'All contacts').toLowerCase()) { - return contacts; - } - var filter = []; - if (contacts.length > 0) { - for (var i = 0; i < contacts.length; i++) { - if (group.toLowerCase() === t('contacts', 'Not grouped').toLowerCase()) { - if (contacts[i].categories().length === 0) { - filter.push(contacts[i]); - } - } else { - if (contacts[i].categories().indexOf(group) >= 0) { - filter.push(contacts[i]); - } - } - } - } - return filter; - }; -}); diff --git a/js/filters/counterFormatter_filter.js b/js/filters/counterFormatter_filter.js deleted file mode 100644 index 0ea767e0..00000000 --- a/js/filters/counterFormatter_filter.js +++ /dev/null @@ -1,15 +0,0 @@ -// from https://docs.nextcloud.com/server/11/developer_manual/app/css.html#menus -angular.module('contactsApp') -.filter('counterFormatter', function () { - 'use strict'; - return function (count) { - if (count > 9999) { - return '9999+'; - } - if (count === 0) { - return ''; - } - return count; - }; -}); - diff --git a/js/filters/counterTooltipDisplay_filter.js b/js/filters/counterTooltipDisplay_filter.js deleted file mode 100644 index e9704a38..00000000 --- a/js/filters/counterTooltipDisplay_filter.js +++ /dev/null @@ -1,12 +0,0 @@ -angular.module('contactsApp') -.filter('counterTooltipDisplay', function () { - 'use strict'; - return function (count) { - if (count > 9999) { - return count; - } - return ''; - }; -}); - - diff --git a/js/filters/field_filter.js b/js/filters/field_filter.js deleted file mode 100644 index 8db1de04..00000000 --- a/js/filters/field_filter.js +++ /dev/null @@ -1,25 +0,0 @@ -angular.module('contactsApp') -.filter('fieldFilter', function() { - 'use strict'; - return function (fields, contact) { - if (typeof fields === 'undefined') { - return fields; - } - if (typeof contact === 'undefined') { - return fields; - } - var filter = []; - if (fields.length > 0) { - for (var i = 0; i < fields.length; i++) { - if (fields[i].multiple ) { - filter.push(fields[i]); - continue; - } - if (_.isUndefined(contact.getProperty(fields[i].id))) { - filter.push(fields[i]); - } - } - } - return filter; - }; -}); diff --git a/js/filters/firstCharacter_filter.js b/js/filters/firstCharacter_filter.js deleted file mode 100644 index 63241c95..00000000 --- a/js/filters/firstCharacter_filter.js +++ /dev/null @@ -1,6 +0,0 @@ -angular.module('contactsApp') -.filter('firstCharacter', function() { - return function(input) { - return input.charAt(0); - }; -}); diff --git a/js/filters/localeOrderBy_filter.js b/js/filters/localeOrderBy_filter.js deleted file mode 100644 index d3cba17d..00000000 --- a/js/filters/localeOrderBy_filter.js +++ /dev/null @@ -1,49 +0,0 @@ -angular.module('contactsApp') -.filter('localeOrderBy', [function () { - return function (array, sortPredicate, reverseOrder) { - if (!Array.isArray(array)) return array; - if (!sortPredicate) return array; - - var arrayCopy = []; - angular.forEach(array, function (item) { - arrayCopy.push(item); - }); - - arrayCopy.sort(function (a, b) { - - - // Did we pass multiple sorting options? If not, create an array anyway. - sortPredicate = angular.isArray(sortPredicate) ? sortPredicate: [sortPredicate]; - // Let's test the first sort and continue if no sort occured - for(var i=0; i fieldOrder.indexOf(b[field])) { - return -1; - } - return 0; - }); - - if(reverse) filtered.reverse(); - return filtered; - }; -}); diff --git a/js/filters/toArray_filter.js b/js/filters/toArray_filter.js deleted file mode 100644 index aff8f497..00000000 --- a/js/filters/toArray_filter.js +++ /dev/null @@ -1,9 +0,0 @@ -angular.module('contactsApp') -.filter('toArray', function() { - return function(obj) { - if (!(obj instanceof Object)) return obj; - return _.map(obj, function(val, key) { - return Object.defineProperty(val, '$key', {value: key}); - }); - }; -}); diff --git a/js/filters/vCard2JSON_filter.js b/js/filters/vCard2JSON_filter.js deleted file mode 100644 index f8b59050..00000000 --- a/js/filters/vCard2JSON_filter.js +++ /dev/null @@ -1,6 +0,0 @@ -angular.module('contactsApp') -.filter('vCard2JSON', function() { - return function(input) { - return vCard.parse(input); - }; -}); diff --git a/js/main.js b/js/main.js deleted file mode 100644 index ade26d2b..00000000 --- a/js/main.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Nextcloud - contacts - * - * This file is licensed under the Affero General Public License version 3 or - * later. See the COPYING file. - * - * @author Hendrik Leppelsack - * @copyright Hendrik Leppelsack 2015 - */ - -angular.module('contactsApp', ['uuid4', 'angular-cache', 'ngRoute', 'ui.bootstrap', 'ui.select', 'ngSanitize', 'angular-click-outside', 'ngclipboard']) -.config(function($routeProvider) { - - $routeProvider.when('/:gid', { - template: '' - }); - - $routeProvider.when('/contact/:uid', { - redirectTo: function(parameters) { - return '/' + t('contacts', 'All contacts') + '/' + parameters.uid; - } - }); - - $routeProvider.when('/:gid/:uid', { - template: '' - }); - - $routeProvider.otherwise('/' + t('contacts', 'All contacts')); - -}); diff --git a/js/models/addressBook_model.js b/js/models/addressBook_model.js deleted file mode 100644 index 6e3f05e3..00000000 --- a/js/models/addressBook_model.js +++ /dev/null @@ -1,55 +0,0 @@ -angular.module('contactsApp') -.factory('AddressBook', function() -{ - return function AddressBook(data) { - angular.extend(this, { - - displayName: '', - contacts: [], - groups: data.data.props.groups, - readOnly: data.data.props.readOnly === '1', - // In case of not defined - enabled: data.data.props.enabled !== '0', - - sharedWith: { - users: [], - groups: [] - } - - }); - angular.extend(this, data); - angular.extend(this, { - owner: data.data.props.owner.split('/').slice(-2, -1)[0] - }); - - var shares = this.data.props.invite; - if (typeof shares !== 'undefined') { - for (var j = 0; j < shares.length; j++) { - var href = shares[j].href; - if (href.length === 0) { - continue; - } - var access = shares[j].access; - if (access.length === 0) { - continue; - } - - var readWrite = (typeof access.readWrite !== 'undefined'); - - if (href.startsWith('principal:principals/users/')) { - this.sharedWith.users.push({ - id: href.substr(27), - displayname: href.substr(27), - writable: readWrite - }); - } else if (href.startsWith('principal:principals/groups/')) { - this.sharedWith.groups.push({ - id: href.substr(28), - displayname: href.substr(28), - writable: readWrite - }); - } - } - } - }; -}); diff --git a/js/models/contactFilter_model.js b/js/models/contactFilter_model.js deleted file mode 100644 index 45e89d94..00000000 --- a/js/models/contactFilter_model.js +++ /dev/null @@ -1,12 +0,0 @@ -angular.module('contactsApp') - .factory('ContactFilter', function() - { - return function ContactFilter(data) { - angular.extend(this, { - name: '', - count: 0 - }); - - angular.extend(this, data); - }; - }); diff --git a/js/models/contact_model.js b/js/models/contact_model.js deleted file mode 100644 index 908eaf5a..00000000 --- a/js/models/contact_model.js +++ /dev/null @@ -1,456 +0,0 @@ -angular.module('contactsApp') -.factory('Contact', function($filter, MimeService, uuid4) { - return function Contact(addressBook, vCard) { - angular.extend(this, { - - data: {}, - props: {}, - failedProps: [], - - dateProperties: ['bday', 'anniversary', 'deathdate'], - - addressBookId: addressBook.displayName, - readOnly: addressBook.readOnly, - - version: function() { - var property = this.getProperty('version'); - if(property) { - return property.value; - } - - return undefined; - }, - - uid: function(value) { - var model = this; - if (angular.isDefined(value)) { - // setter - return model.setProperty('uid', { value: value }); - } else { - // getter - var uid = model.getProperty('uid').value; - /* global md5 */ - return uuid4.validate(uid) ? uid : md5(uid); - } - }, - - displayName: function() { - var displayName = this.fullName() || this.org() || ''; - if(angular.isArray(displayName)) { - return displayName.join(' '); - } - return displayName; - }, - - readableFilename: function() { - if(this.displayName()) { - return (this.displayName()) + '.vcf'; - } else { - // fallback to default filename (see download attribute) - return ''; - } - - }, - - firstName: function() { - var property = this.getProperty('n'); - if (property) { - return property.value[1]; - } else { - return this.displayName(); - } - }, - - lastName: function() { - var property = this.getProperty('n'); - if (property) { - return property.value[0]; - } else { - return this.displayName(); - } - }, - - additionalNames: function() { - var property = this.getProperty('n'); - if (property) { - return property.value[2]; - } else { - return ''; - } - }, - - fullName: function(value) { - var model = this; - if (angular.isDefined(value)) { - // setter - return this.setProperty('fn', { value: value }); - } else { - // getter - var property = model.getProperty('fn'); - if(property) { - return property.value; - } - property = model.getProperty('n'); - if(property) { - return property.value.filter(function(elem) { - return elem; - }).join(' '); - } - return undefined; - } - }, - - title: function(value) { - if (angular.isDefined(value)) { - // setter - return this.setProperty('title', { value: value }); - } else { - // getter - var property = this.getProperty('title'); - if(property) { - return property.value; - } else { - return undefined; - } - } - }, - - org: function(value) { - var property = this.getProperty('org'); - if (angular.isDefined(value)) { - var val = value; - // setter - if(property && Array.isArray(property.value)) { - val = property.value; - val[0] = value; - } - return this.setProperty('org', { value: val }); - } else { - // getter - if(property) { - if (Array.isArray(property.value)) { - return property.value[0]; - } - return property.value; - } else { - return undefined; - } - } - }, - - email: function() { - // getter - var property = this.getProperty('email'); - if(property) { - return property.value; - } else { - return undefined; - } - }, - - photo: function(value) { - if (angular.isDefined(value)) { - // setter - // splits image data into "data:image/jpeg" and base 64 encoded image - var imageData = value.split(';base64,'); - var imageType = imageData[0].slice('data:'.length); - if (!imageType.startsWith('image/')) { - return; - } - imageType = imageType.substring(6).toUpperCase(); - - return this.setProperty('photo', { value: imageData[1], meta: {type: [imageType], encoding: ['b']} }); - } else { - var property = this.getProperty('photo'); - if(property) { - var type = property.meta.type; - if (angular.isArray(type)) { - type = type[0]; - } - if (!type.startsWith('image/')) { - type = 'image/' + type.toLowerCase(); - } - return 'data:' + type + ';base64,' + property.value; - } else { - return undefined; - } - } - }, - - categories: function(value) { - if (angular.isDefined(value)) { - // setter - if (angular.isString(value)) { - /* check for empty string */ - this.setProperty('categories', { value: !value.length ? [] : [value] }); - } else if (angular.isArray(value)) { - this.setProperty('categories', { value: value }); - } - } else { - // getter - var property = this.getProperty('categories'); - if(!property) { - return []; - } - if (angular.isArray(property.value)) { - return property.value; - } - return [property.value]; - } - }, - - formatDateAsRFC6350: function(name, data) { - if (angular.isUndefined(data) || angular.isUndefined(data.value)) { - return data; - } - if (this.dateProperties.indexOf(name) !== -1) { - var match = data.value.match(/^(\d{4})-(\d{2})-(\d{2})$/); - if (match) { - data.value = match[1] + match[2] + match[3]; - } - } - - return data; - }, - - formatDateForDisplay: function(name, data) { - if (angular.isUndefined(data) || angular.isUndefined(data.value)) { - return data; - } - if (this.dateProperties.indexOf(name) !== -1) { - var match = data.value.match(/^(\d{4})(\d{2})(\d{2})$/); - if (match) { - data.value = match[1] + '-' + match[2] + '-' + match[3]; - } - } - - return data; - }, - - getProperty: function(name) { - if (this.props[name]) { - return this.formatDateForDisplay(name, this.validate(name, this.props[name][0])); - } else { - return undefined; - } - }, - addProperty: function(name, data) { - data = angular.copy(data); - data = this.formatDateAsRFC6350(name, data); - if(!this.props[name]) { - this.props[name] = []; - } - var idx = this.props[name].length; - this.props[name][idx] = data; - - // keep vCard in sync - this.data.addressData = $filter('JSON2vCard')(this.props); - return idx; - }, - setProperty: function(name, data) { - if(!this.props[name]) { - this.props[name] = []; - } - data = this.formatDateAsRFC6350(name, data); - this.props[name][0] = data; - - // keep vCard in sync - this.data.addressData = $filter('JSON2vCard')(this.props); - }, - removeProperty: function (name, prop) { - angular.copy(_.without(this.props[name], prop), this.props[name]); - if(this.props[name].length === 0) { - delete this.props[name]; - } - this.data.addressData = $filter('JSON2vCard')(this.props); - }, - setETag: function(etag) { - this.data.etag = etag; - }, - setUrl: function(addressBook, uid) { - this.data.url = addressBook.url + uid + '.vcf'; - }, - setAddressBook: function(addressBook) { - this.addressBookId = addressBook.displayName; - this.data.url = addressBook.url + this.uid() + '.vcf'; - }, - - getISODate: function(date) { - function pad(number) { - if (number < 10) { - return '0' + number; - } - return '' + number; - } - - return date.getUTCFullYear() + '' + - pad(date.getUTCMonth() + 1) + - pad(date.getUTCDate()) + - 'T' + pad(date.getUTCHours()) + - pad(date.getUTCMinutes()) + - pad(date.getUTCSeconds()) + 'Z'; - }, - - syncVCard: function() { - - this.setProperty('rev', { value: this.getISODate(new Date()) }); - var self = this; - - _.each(this.dateProperties, function(name) { - if (!angular.isUndefined(self.props[name]) && !angular.isUndefined(self.props[name][0])) { - // Set dates again to make sure they are in RFC-6350 format - self.setProperty(name, self.props[name][0]); - } - }); - // force fn to be set - this.fullName(this.fullName()); - - // keep vCard in sync - self.data.addressData = $filter('JSON2vCard')(self.props); - - // Revalidate all props - _.each(self.failedProps, function(name, index) { - if (!angular.isUndefined(self.props[name]) && !angular.isUndefined(self.props[name][0])) { - // Reset previously failed properties - self.failedProps.splice(index, 1); - // And revalidate them again - self.validate(name, self.props[name][0]); - - } else if(angular.isUndefined(self.props[name]) || angular.isUndefined(self.props[name][0])) { - // Property has been removed - self.failedProps.splice(index, 1); - } - }); - - }, - - matches: function(pattern) { - if (angular.isUndefined(pattern) || pattern.length === 0) { - return true; - } - var model = this; - var matchingProps = ['fn', 'title', 'org', 'email', 'nickname', 'note', 'url', 'cloud', 'adr', 'impp', 'tel', 'gender', 'relationship', 'related'].filter(function (propName) { - if (model.props[propName]) { - return model.props[propName].filter(function (property) { - if (!property.value) { - return false; - } - if (angular.isString(property.value)) { - return property.value.toLowerCase().indexOf(pattern.toLowerCase()) !== -1; - } - if (angular.isArray(property.value)) { - return property.value.filter(function(v) { - return v.toLowerCase().indexOf(pattern.toLowerCase()) !== -1; - }).length > 0; - } - return false; - }).length > 0; - } - return false; - }); - return matchingProps.length > 0; - }, - - /* eslint-disable no-console */ - validate: function(prop, property) { - switch(prop) { - case 'rev': - case 'prodid': - case 'version': - if (!angular.isUndefined(this.props[prop]) && this.props[prop].length > 1) { - this.props[prop] = [this.props[prop][0]]; - console.warn(this.uid()+': Too many '+prop+' fields. Saving this one only: ' + this.props[prop][0].value); - this.failedProps.push(prop); - } - break; - - case 'categories': - // Avoid unescaped commas - if (angular.isArray(property.value)) { - if(property.value.join(';').indexOf(',') !== -1) { - this.failedProps.push(prop); - property.value = property.value.join(',').split(','); - //console.warn(this.uid()+': Categories split: ' + property.value); - } - } else if (angular.isString(property.value)) { - if(property.value.indexOf(',') !== -1) { - this.failedProps.push(prop); - property.value = property.value.split(','); - //console.warn(this.uid()+': Categories split: ' + property.value); - } - } - // Remove duplicate categories on array - if(property.value.length !== 0 && angular.isArray(property.value)) { - var uniqueCategories = _.unique(property.value); - if(!angular.equals(uniqueCategories, property.value)) { - this.failedProps.push(prop); - property.value = uniqueCategories; - //console.warn(this.uid()+': Categories duplicate: ' + property.value); - } - } - break; - case 'photo': - // Avoid undefined photo type - if (angular.isDefined(property)) { - if (angular.isUndefined(property.meta.type)) { - var mime = MimeService.b64mime(property.value); - if (mime) { - this.failedProps.push(prop); - property.meta.type=[mime]; - this.setProperty('photo', { - value:property.value, - meta: { - type:property.meta.type, - encoding:property.meta.encoding - } - }); - console.warn(this.uid()+': Photo detected as ' + property.meta.type); - } else { - this.failedProps.push(prop); - this.removeProperty('photo', property); - property = undefined; - console.warn(this.uid()+': Photo removed'); - } - } - } - break; - } - return property; - }, - /* eslint-enable no-console */ - - fix: function() { - this.validate('rev'); - this.validate('version'); - this.validate('prodid'); - return this.failedProps.indexOf('rev') !== -1 - || this.failedProps.indexOf('prodid') !== -1 - || this.failedProps.indexOf('version') !== -1; - } - - }); - - if(angular.isDefined(vCard)) { - angular.extend(this.data, vCard); - angular.extend(this.props, $filter('vCard2JSON')(this.data.addressData)); - // We do not want to store our addressbook within contacts - delete this.data.addressBook; - } else { - angular.extend(this.props, { - version: [{value: '3.0'}], - fn: [{value: t('contacts', 'New contact')}] - }); - this.data.addressData = $filter('JSON2vCard')(this.props); - } - - var property = this.getProperty('categories'); - if(!property) { - // categories should always have the same type (an array) - this.categories([]); - } else { - if (angular.isString(property.value)) { - this.categories([property.value]); - } - } - }; -}); diff --git a/js/models/group_model.js b/js/models/group_model.js deleted file mode 100644 index 58a9d117..00000000 --- a/js/models/group_model.js +++ /dev/null @@ -1,12 +0,0 @@ -angular.module('contactsApp') - .factory('Group', function() - { - return function Group(data) { - angular.extend(this, { - name: '', - count: 0 - }); - - angular.extend(this, data); - }; - }); diff --git a/js/services/addressBook_service.js b/js/services/addressBook_service.js deleted file mode 100644 index 6acfe8d2..00000000 --- a/js/services/addressBook_service.js +++ /dev/null @@ -1,274 +0,0 @@ -angular.module('contactsApp') -.factory('AddressBookService', function(DavClient, DavService, SettingsService, AddressBook, $q) { - - var addressBooks = []; - var loadPromise = undefined; - - var observerCallbacks = []; - - var notifyObservers = function(eventName, addressBook) { - var ev = { - event: eventName, - addressBooks: addressBooks, - addressBook: addressBook, - }; - angular.forEach(observerCallbacks, function(callback) { - callback(ev); - }); - }; - - var loadAll = function() { - if (addressBooks.length > 0) { - return $q.when(addressBooks); - } - if (_.isUndefined(loadPromise)) { - loadPromise = DavService.then(function(account) { - loadPromise = undefined; - addressBooks = account.addressBooks.map(function(addressBook) { - return new AddressBook(addressBook); - }); - }); - } - return loadPromise; - }; - - return { - registerObserverCallback: function(callback) { - observerCallbacks.push(callback); - }, - - getAll: function() { - return loadAll().then(function() { - return addressBooks; - }); - }, - - getGroups: function() { - return this.getAll().then(function(addressBooks) { - return addressBooks.map(function (element) { - return element.groups; - }).reduce(function(a, b) { - return a.concat(b); - }); - }); - }, - - getDefaultAddressBook: function(throwOC) { - var i = addressBooks.findIndex(function(addressBook) { - return addressBook.enabled && !addressBook.readOnly; - }); - if (i !== -1) { - return addressBooks[i]; - } else if(throwOC) { - OC.Notification.showTemporary(t('contacts', 'There is no address book available to create a contact.')); - } - return false; - }, - - getAddressBook: function(displayName) { - return DavService.then(function(account) { - return DavClient.getAddressBook({displayName:displayName, url:account.homeUrl}).then(function(res) { - var addressBook = new AddressBook({ - account: account, - ctag: res[0].props.getctag, - url: account.homeUrl+displayName+'/', - data: res[0], - displayName: res[0].props.displayname, - resourcetype: res[0].props.resourcetype, - syncToken: res[0].props.syncToken - }); - notifyObservers('create', addressBook); - return addressBook; - }); - }); - }, - - create: function(displayName) { - return DavService.then(function(account) { - return DavClient.createAddressBook({displayName:displayName, url:account.homeUrl}); - }); - }, - - delete: function(addressBook) { - return DavService.then(function() { - return DavClient.deleteAddressBook(addressBook).then(function() { - var index = addressBooks.indexOf(addressBook); - addressBooks.splice(index, 1); - notifyObservers('delete', addressBook); - }); - }); - }, - - rename: function(addressBook, displayName) { - return DavService.then(function(account) { - return DavClient.renameAddressBook(addressBook, {displayName:displayName, url:account.homeUrl}); - }); - }, - - get: function(displayName) { - return this.getAll().then(function(addressBooks) { - return addressBooks.filter(function (element) { - return element.displayName === displayName; - })[0]; - }); - }, - - sync: function(addressBook) { - return DavClient.syncAddressBook(addressBook); - }, - - addContact: function(addressBook, contact) { - // We don't want to add the same contact again - if (addressBook.contacts.indexOf(contact) === -1) { - return addressBook.contacts.push(contact); - } - }, - - removeContact: function(addressBook, contact) { - // We can't remove an undefined object - if (addressBook.contacts.indexOf(contact) !== -1) { - return addressBook.contacts.splice(addressBook.contacts.indexOf(contact), 1); - } - }, - - toggleState: function(addressBook) { - var xmlDoc = document.implementation.createDocument('', '', null); - var dPropUpdate = xmlDoc.createElement('d:propertyupdate'); - dPropUpdate.setAttribute('xmlns:d', 'DAV:'); - dPropUpdate.setAttribute('xmlns:o', 'http://owncloud.org/ns'); - xmlDoc.appendChild(dPropUpdate); - - var dSet = xmlDoc.createElement('d:set'); - dPropUpdate.appendChild(dSet); - - var dProp = xmlDoc.createElement('d:prop'); - dSet.appendChild(dProp); - - var oEnabled = xmlDoc.createElement('o:enabled'); - // Revert state to toggle - oEnabled.textContent = !addressBook.enabled ? '1' : '0'; - dProp.appendChild(oEnabled); - - var body = dPropUpdate.outerHTML; - - return DavClient.xhr.send( - dav.request.basic({method: 'PROPPATCH', data: body}), - addressBook.url - ).then(function(response) { - if (response.status === 207) { - addressBook.enabled = !addressBook.enabled; - notifyObservers( - addressBook.enabled ? 'enable' : 'disable', - addressBook - ); - } - return addressBook; - }); - }, - - share: function(addressBook, shareType, shareWith, writable, existingShare) { - var xmlDoc = document.implementation.createDocument('', '', null); - var oShare = xmlDoc.createElement('o:share'); - oShare.setAttribute('xmlns:d', 'DAV:'); - oShare.setAttribute('xmlns:o', 'http://owncloud.org/ns'); - xmlDoc.appendChild(oShare); - - var oSet = xmlDoc.createElement('o:set'); - oShare.appendChild(oSet); - - var dHref = xmlDoc.createElement('d:href'); - if (shareType === OC.Share.SHARE_TYPE_USER) { - dHref.textContent = 'principal:principals/users/'; - } else if (shareType === OC.Share.SHARE_TYPE_GROUP) { - dHref.textContent = 'principal:principals/groups/'; - } - dHref.textContent += shareWith; - oSet.appendChild(dHref); - - var oSummary = xmlDoc.createElement('o:summary'); - oSummary.textContent = t('contacts', '{addressbook} shared by {owner}', { - addressbook: addressBook.displayName, - owner: addressBook.owner - }); - oSet.appendChild(oSummary); - - if (writable) { - var oRW = xmlDoc.createElement('o:read-write'); - oSet.appendChild(oRW); - } - - var body = oShare.outerHTML; - - return DavClient.xhr.send( - dav.request.basic({method: 'POST', data: body}), - addressBook.url - ).then(function(response) { - if (response.status === 200) { - if (!existingShare) { - if (shareType === OC.Share.SHARE_TYPE_USER) { - addressBook.sharedWith.users.push({ - id: shareWith, - displayname: shareWith, - writable: writable - }); - } else if (shareType === OC.Share.SHARE_TYPE_GROUP) { - addressBook.sharedWith.groups.push({ - id: shareWith, - displayname: shareWith, - writable: writable - }); - } - } - } - }); - - }, - - unshare: function(addressBook, shareType, shareWith) { - var xmlDoc = document.implementation.createDocument('', '', null); - var oShare = xmlDoc.createElement('o:share'); - oShare.setAttribute('xmlns:d', 'DAV:'); - oShare.setAttribute('xmlns:o', 'http://owncloud.org/ns'); - xmlDoc.appendChild(oShare); - - var oRemove = xmlDoc.createElement('o:remove'); - oShare.appendChild(oRemove); - - var dHref = xmlDoc.createElement('d:href'); - if (shareType === OC.Share.SHARE_TYPE_USER) { - dHref.textContent = 'principal:principals/users/'; - } else if (shareType === OC.Share.SHARE_TYPE_GROUP) { - dHref.textContent = 'principal:principals/groups/'; - } - dHref.textContent += shareWith; - oRemove.appendChild(dHref); - var body = oShare.outerHTML; - - - return DavClient.xhr.send( - dav.request.basic({method: 'POST', data: body}), - addressBook.url - ).then(function(response) { - if (response.status === 200) { - if (shareType === OC.Share.SHARE_TYPE_USER) { - addressBook.sharedWith.users = addressBook.sharedWith.users.filter(function(user) { - return user.id !== shareWith; - }); - } else if (shareType === OC.Share.SHARE_TYPE_GROUP) { - addressBook.sharedWith.groups = addressBook.sharedWith.groups.filter(function(groups) { - return groups.id !== shareWith; - }); - } - //todo - remove entry from addressbook object - return true; - } else { - return false; - } - }); - - } - - - }; - -}); diff --git a/js/services/contact_service.js b/js/services/contact_service.js deleted file mode 100644 index 62a16d29..00000000 --- a/js/services/contact_service.js +++ /dev/null @@ -1,394 +0,0 @@ -angular.module('contactsApp') -.service('ContactService', function(DavClient, AddressBookService, Contact, Group, ContactFilter, $q, CacheFactory, uuid4) { - - var contactService = this; - - var cacheFilled = false; - var contactsCache = CacheFactory('contacts'); - var observerCallbacks = []; - var loadPromise = undefined; - - var allUpdates = $q.when(); - this.queueUpdate = function(contact) { - allUpdates = allUpdates.then(function() { - return contactService.update(contact); - }); - }; - - this.registerObserverCallback = function(callback) { - observerCallbacks.push(callback); - }; - - var notifyObservers = function(eventName, uid) { - var ev = { - event: eventName, - uid: uid, - contacts: contactsCache.values() - }; - angular.forEach(observerCallbacks, function(callback) { - callback(ev); - }); - }; - - this.getFullContacts = function(contacts) { - AddressBookService.getAll().then(function(addressBooks) { - var promises = []; - var xhrAddressBooks = []; - contacts.forEach(function(contact) { - // Regroup urls by addressbooks - if(addressBooks.indexOf(contact.addressBook) !== -1) { - // Initiate array if no exists - xhrAddressBooks[contact.addressBookId] = xhrAddressBooks[contact.addressBookId] || []; - xhrAddressBooks[contact.addressBookId].push(contact.data.url); - } - }); - // Get our full vCards - addressBooks.forEach(function(addressBook) { - // Only go through enabled addressbooks - // Though xhrAddressBooks does not contains contacts from disabled ones - if(addressBook.enabled) { - if(angular.isArray(xhrAddressBooks[addressBook.displayName])) { - var promise = DavClient.getContacts(addressBook, {}, xhrAddressBooks[addressBook.displayName]).then( - function(vcards) { - return vcards.map(function(vcard) { - return new Contact(addressBook, vcard); - }); - }).then(function(contacts_) { - contacts_.map(function(contact) { - // Validate some fields - if(contact.fix()) { - // Can't use `this` in those nested functions - contactService.update(contact); - } - contactsCache.put(contact.uid(), contact); - addressBook.contacts.push(contact); - }); - }); - promises.push(promise); - } - } - }); - $q.all(promises).then(function() { - notifyObservers('getFullContacts', ''); - }); - }); - }; - - this.fillCache = function() { - if (_.isUndefined(loadPromise)) { - loadPromise = AddressBookService.getAll().then(function(addressBooks) { - var promises = []; - addressBooks.forEach(function(addressBook) { - // Only go through enabled addressbooks - if(addressBook.enabled) { - promises.push( - AddressBookService.sync(addressBook).then(function(addressBook) { - contactService.appendContactsFromAddressbook(addressBook); - }) - ); - } - }); - return $q.all(promises).then(function() { - cacheFilled = true; - }); - }); - } - return loadPromise; - }; - - this.getAll = function() { - if(cacheFilled === false) { - return this.fillCache().then(function() { - return contactsCache.values(); - }); - } else { - return $q.when(contactsCache.values()); - } - }; - - this.getContactFilters = function() { - return this.getAll().then(function(contacts) { - var allContacts = new ContactFilter({ - name: t('contacts', 'All contacts'), - count: contacts.length - }); - var notGrouped = new ContactFilter({ - name: t('contacts', 'Not grouped'), - count: contacts.filter( - function(contact) { - return contact.categories().length === 0; - }).length - }); - var filters = [allContacts]; - // Only have Not Grouped if at least one contact in it - if(notGrouped.count !== 0) { - filters.push(notGrouped); - } - - return filters; - }); - }; - - // get list of groups and the count of contacts in said groups - this.getGroupList = function() { - return this.getAll().then(function(contacts) { - // allow groups with names such as toString - var groups = Object.create(null); - - // collect categories and their associated counts - contacts.forEach(function(contact) { - contact.categories().forEach(function(category) { - groups[category] = groups[category] ? groups[category] + 1 : 1; - }); - }); - return _.keys(groups).map( - function(key) { - return new Group({ - name: key, - count: groups[key] - }); - }); - }); - }; - - this.getGroups = function() { - return this.getAll().then(function(contacts) { - return _.uniq(contacts.map(function(element) { - return element.categories(); - }).reduce(function(a, b) { - return a.concat(b); - }, []).sort(), true); - }); - }; - - this.getById = function(addressBooks, uid) { - return (function() { - if(cacheFilled === false) { - return this.fillCache().then(function() { - return contactsCache.get(uid); - }); - } else { - return $q.when(contactsCache.get(uid)); - } - }).call(this) - .then(function(contact) { - if(angular.isUndefined(contact)) { - OC.Notification.showTemporary(t('contacts', 'Contact not found.')); - return; - } else { - var addressBook = addressBooks.find(function(book) { - return book.displayName === contact.addressBookId; - }); - // Fetch and return full contact vcard - return addressBook - ? DavClient.getContacts(addressBook, {}, [ contact.data.url ]).then(function(vcards) { - return new Contact(addressBook, vcards[0]); - }).then(function(newContact) { - contactsCache.put(contact.uid(), newContact); - var contactIndex = addressBook.contacts.findIndex(function(testedContact) { - return testedContact.uid() === contact.uid(); - }); - addressBook.contacts[contactIndex] = newContact; - notifyObservers('getFullContacts', contact.uid()); - return newContact; - }) : contact; - } - }); - }; - - this.create = function(newContact, addressBook, uid, fromImport) { - addressBook = addressBook || AddressBookService.getDefaultAddressBook(true); - - // No addressBook available - if(!addressBook) { - return; - } - - if(addressBook.readOnly) { - OC.Notification.showTemporary(t('contacts', 'You don\'t have permission to write to this addressbook.')); - return; - } - try { - newContact = newContact || new Contact(addressBook); - } catch(error) { - OC.Notification.showTemporary(t('contacts', 'Contact could not be created.')); - return; - } - var newUid = ''; - if(uuid4.validate(uid)) { - newUid = uid; - } else { - newUid = uuid4.generate(); - } - newContact.uid(newUid); - newContact.setUrl(addressBook, newUid); - newContact.addressBookId = addressBook.displayName; - if (_.isUndefined(newContact.fullName()) || newContact.fullName() === '') { - newContact.fullName(newContact.displayName()); - } - - return DavClient.createCard( - addressBook, - { - data: newContact.data.addressData, - filename: newUid + '.vcf' - } - ).then(function(xhr) { - newContact.setETag(xhr.getResponseHeader('OC-ETag') || xhr.getResponseHeader('ETag')); - contactsCache.put(newUid, newContact); - AddressBookService.addContact(addressBook, newContact); - if (fromImport !== true) { - notifyObservers('create', newUid); - $('#details-fullName').select(); - } - return newContact; - }).catch(function() { - OC.Notification.showTemporary(t('contacts', 'Contact could not be created.')); - return false; - }); - }; - - this.import = function(data, type, addressBook, progressCallback) { - addressBook = addressBook || AddressBookService.getDefaultAddressBook(true); - - // No addressBook available - if(!addressBook) { - return; - } - - var regexp = /BEGIN:VCARD[\s\S]*?END:VCARD/mgi; - var singleVCards = data.match(regexp); - - if (!singleVCards) { - OC.Notification.showTemporary(t('contacts', 'No contacts in file. Only vCard files are allowed.')); - if (progressCallback) { - progressCallback(1); - } - return; - } - - notifyObservers('importstart'); - - var num = 1; - for(var i in singleVCards) { - var newContact = new Contact(addressBook, {addressData: singleVCards[i]}); - if (['3.0', '4.0'].indexOf(newContact.version()) < 0) { - if (progressCallback) { - progressCallback(num / singleVCards.length); - } - OC.Notification.showTemporary(t('contacts', 'Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported.')); - num++; - continue; - } - // eslint-disable-next-line no-loop-func - this.create(newContact, addressBook, '', true).then(function(xhrContact) { - if (xhrContact !== false) { - var xhrContactName = xhrContact.displayName(); - } - // Update the progress indicator - if (progressCallback) { - progressCallback(num / singleVCards.length, xhrContactName); - } - num++; - /* Import is over, let's notify */ - if (num === singleVCards.length + 1) { - notifyObservers('importend'); - } - }); - } - }; - - this.moveContact = function(contact, addressBook, oldAddressBook) { - if (addressBook !== null && contact.addressBookId === addressBook.displayName) { - return; - } - if (addressBook.readOnly) { - OC.Notification.showTemporary(t('contacts', 'You don\'t have permission to write to this addressbook.')); - return; - } - contact.syncVCard(); - - DavClient.xhr.send( - dav.request.basic({method: 'MOVE', destination: addressBook.url + contact.data.url.split('/').pop(-1)}), - contact.data.url - ).then(function(response) { - if (response.status === 201 || response.status === 204) { - contact.setAddressBook(addressBook); - AddressBookService.addContact(addressBook, contact); - AddressBookService.removeContact(oldAddressBook, contact); - notifyObservers('groupsUpdate'); - } else { - OC.Notification.showTemporary(t('contacts', 'Contact could not be moved.')); - } - }); - }; - - this.update = function(contact) { - // update rev field - contact.syncVCard(); - - // update contact on server - return DavClient.updateCard(contact.data, {json: true}).then(function(xhr) { - var newEtag = xhr.getResponseHeader('OC-ETag') || xhr.getResponseHeader('ETag'); - contact.setETag(newEtag); - notifyObservers('update', contact.uid()); - }).catch(function() { - OC.Notification.showTemporary(t('contacts', 'Contact could not be saved.')); - }); - }; - - this.delete = function(addressBook, contact) { - // delete contact from server - return DavClient.deleteCard(contact.data).then(function() { - contactsCache.remove(contact.uid()); - AddressBookService.removeContact(addressBook, contact); - notifyObservers('delete', contact.uid()); - }); - }; - - /* - * Delete all contacts present in the addressBook from the cache - */ - this.removeContactsFromAddressbook = function(addressBook, callback) { - angular.forEach(addressBook.contacts, function(contact) { - contactsCache.remove(contact.uid()); - }); - callback(); - notifyObservers('groupsUpdate'); - }; - - /* - * Create and append contacts to the addressBook - */ - this.appendContactsFromAddressbook = function(addressBook, callback) { - // Addressbook has been initiated but contacts have not been fetched - if (addressBook.objects === null) { - AddressBookService.sync(addressBook).then(function(addressBook) { - contactService.appendContactsFromAddressbook(addressBook, callback); - }); - } else if (addressBook.contacts.length === 0) { - // Only add contact if the addressBook doesn't already have it - addressBook.objects.forEach(function(vcard) { - try { - // Only add contact if the addressBook doesn't already have it - var contact = new Contact(addressBook, vcard); - contactsCache.put(contact.uid(), contact); - AddressBookService.addContact(addressBook, contact); - } catch(error) { - // eslint-disable-next-line no-console - console.log('Invalid contact received: ', vcard, error); - } - }); - } else { - // Contact are already present in the addressBook - angular.forEach(addressBook.contacts, function(contact) { - contactsCache.put(contact.uid(), contact); - }); - } - notifyObservers('groupsUpdate'); - if (typeof callback === 'function') { - callback(); - } - }; - -}); diff --git a/js/services/davClient_service.js b/js/services/davClient_service.js deleted file mode 100644 index 2c999cbb..00000000 --- a/js/services/davClient_service.js +++ /dev/null @@ -1,7 +0,0 @@ -angular.module('contactsApp') -.service('DavClient', function() { - var xhr = new dav.transport.Basic( - new dav.Credentials() - ); - return new dav.Client(xhr); -}); diff --git a/js/services/dav_service.js b/js/services/dav_service.js deleted file mode 100644 index be0aa072..00000000 --- a/js/services/dav_service.js +++ /dev/null @@ -1,8 +0,0 @@ -angular.module('contactsApp') -.service('DavService', function(DavClient) { - return DavClient.createAccount({ - server: OC.linkToRemote('dav/addressbooks'), - accountType: 'carddav', - useProvidedPath: true - }); -}); diff --git a/js/services/import_service.js b/js/services/import_service.js deleted file mode 100644 index e84fc93f..00000000 --- a/js/services/import_service.js +++ /dev/null @@ -1,14 +0,0 @@ -angular.module('contactsApp') -.service('ImportService', function() { - - this.importing = false; - this.selectedAddressBook = t('contacts', 'Import into'); - this.importedUser = t('contacts', 'Waiting for the server to be ready…'); - this.importPercent = 0; - - this.t = { - importText : t('contacts', 'Import into'), - importingText : t('contacts', 'Importing…') - }; - -}); diff --git a/js/services/mime_service.js b/js/services/mime_service.js deleted file mode 100644 index dd79143f..00000000 --- a/js/services/mime_service.js +++ /dev/null @@ -1,15 +0,0 @@ -angular.module('contactsApp') - .service('MimeService', function() { - var magicNumbers = { - '/9j/' : 'JPEG', - 'R0lGOD' : 'GIF', - 'iVBORw0KGgo' : 'PNG' - }; - - this.b64mime = function(b64string) { - for (var mn in magicNumbers) { - if(b64string.startsWith(mn)) return magicNumbers[mn]; - } - return null; - }; - }); diff --git a/js/services/search_service.js b/js/services/search_service.js deleted file mode 100644 index 5d602b30..00000000 --- a/js/services/search_service.js +++ /dev/null @@ -1,51 +0,0 @@ -angular.module('contactsApp') -.service('SearchService', function() { - var searchTerm = ''; - - var observerCallbacks = []; - - this.registerObserverCallback = function(callback) { - observerCallbacks.push(callback); - }; - - var notifyObservers = function(eventName) { - var ev = { - event:eventName, - searchTerm:searchTerm - }; - angular.forEach(observerCallbacks, function(callback) { - callback(ev); - }); - }; - - var SearchProxy = { - attach: function(search) { - search.setFilter('contacts', this.filterProxy); - }, - filterProxy: function(query) { - searchTerm = query; - notifyObservers('changeSearch'); - } - }; - - this.getSearchTerm = function() { - return searchTerm; - }; - - this.cleanSearch = function() { - if (!_.isUndefined($('.searchbox'))) { - $('.searchbox')[0].reset(); - } - searchTerm = ''; - }; - - - - if (!_.isUndefined($('.searchbox'))) { - $('.searchbox')[0].addEventListener('keypress', function(e) { - if(e.keyCode === 13) { - notifyObservers('submitSearch'); - } - }); - } -}); diff --git a/js/services/settings_service.js b/js/services/settings_service.js deleted file mode 100644 index 506653a9..00000000 --- a/js/services/settings_service.js +++ /dev/null @@ -1,20 +0,0 @@ -angular.module('contactsApp') -.service('SettingsService', function() { - var settings = { - addressBooks: [ - 'testAddr' - ] - }; - - this.set = function(key, value) { - settings[key] = value; - }; - - this.get = function(key) { - return settings[key]; - }; - - this.getAll = function() { - return settings; - }; -}); diff --git a/js/services/sortBy_service.js b/js/services/sortBy_service.js deleted file mode 100644 index b83654b8..00000000 --- a/js/services/sortBy_service.js +++ /dev/null @@ -1,51 +0,0 @@ -angular.module('contactsApp') -.service('SortByService', function () { - var subscriptions = []; - - // Array of keys to sort by. Ordered by priorities. - var sortOptions = { - sortFirstName: ['firstName', 'lastName', 'uid'], - sortLastName: ['lastName', 'firstName', 'uid'], - sortDisplayName: ['displayName', 'uid'] - }; - - // Key - var sortBy = 'sortDisplayName'; - - var defaultOrder = window.localStorage.getItem('contacts_default_order'); - if (defaultOrder) { - sortBy = defaultOrder; - } - - function notifyObservers() { - angular.forEach(subscriptions, function (subscription) { - if (typeof subscription === 'function') { - subscription(sortOptions[sortBy]); - } - }); - } - - return { - subscribe: function (callback) { - subscriptions.push(callback); - }, - setSortBy: function (value) { - sortBy = value; - window.localStorage.setItem('contacts_default_order', value); - notifyObservers(); - }, - getSortBy: function () { - return sortOptions[sortBy]; - }, - getSortByKey: function () { - return sortBy; - }, - getSortByList: function () { - return { - sortDisplayName: t('contacts', 'Display name'), - sortFirstName: t('contacts', 'First name'), - sortLastName: t('contacts', 'Last name') - }; - } - }; -}); diff --git a/js/services/vCardProperties.js b/js/services/vCardProperties.js deleted file mode 100644 index dd66ba9c..00000000 --- a/js/services/vCardProperties.js +++ /dev/null @@ -1,270 +0,0 @@ -angular.module('contactsApp') -.service('vCardPropertiesService', function() { - /** - * map vCard attributes to internal attributes - * - * propName: { - * multiple: [Boolean], // is this prop allowed more than once? (default = false) - * readableName: [String], // internationalized readable name of prop - * template: [String], // template name found in /templates/detailItems - * [...] // optional additional information which might get used by the template - * - * options: If multiple options have the same name, the first will be used as default. - * Others will be merge, but still supported. Order is important! - * } - */ - this.vCardMeta = { - nickname: { - readableName: t('contacts', 'Nickname'), - template: 'text', - icon: 'icon-user' - }, - n: { - readableName: t('contacts', 'Detailed name'), - defaultValue: { - value:['', '', '', '', ''] - }, - template: 'n', - icon: 'icon-user' - }, - note: { - readableName: t('contacts', 'Notes'), - template: 'textarea', - icon: 'icon-rename' - }, - url: { - multiple: true, - readableName: t('contacts', 'Website'), - template: 'url', - icon: 'icon-public' - }, - cloud: { - multiple: true, - readableName: t('contacts', 'Federated Cloud ID'), - template: 'text', - defaultValue: { - value:[''], - meta:{type:['HOME']} - }, - options: [ - {id: 'HOME', name: t('contacts', 'Home')}, - {id: 'WORK', name: t('contacts', 'Work')}, - {id: 'OTHER', name: t('contacts', 'Other')} - ] }, - adr: { - multiple: true, - readableName: t('contacts', 'Address'), - template: 'adr', - icon: 'icon-address', - defaultValue: { - value:['', '', '', '', '', '', ''], - meta:{type:['HOME']} - }, - options: [ - {id: 'HOME', name: t('contacts', 'Home')}, - {id: 'WORK', name: t('contacts', 'Work')}, - {id: 'OTHER', name: t('contacts', 'Other')} - ] - }, - categories: { - readableName: t('contacts', 'Groups'), - template: 'groups' - }, - bday: { - readableName: t('contacts', 'Birthday'), - template: 'date', - icon: 'icon-calendar-dark' - }, - anniversary: { - readableName: t('contacts', 'Anniversary'), - template: 'date', - icon: 'icon-calendar-dark' - }, - deathdate: { - readableName: t('contacts', 'Date of death'), - template: 'date', - icon: 'icon-calendar-dark' - }, - email: { - multiple: true, - readableName: t('contacts', 'Email'), - template: 'email', - icon: 'icon-mail', - defaultValue: { - value:'', - meta:{type:['HOME']} - }, - options: [ - {id: 'HOME', name: t('contacts', 'Home')}, - {id: 'WORK', name: t('contacts', 'Work')}, - {id: 'OTHER', name: t('contacts', 'Other')} - ] - }, - impp: { - multiple: true, - readableName: t('contacts', 'Instant messaging'), - template: 'username', - icon: 'icon-comment', - defaultValue: { - value:[''], - meta:{type:['SKYPE']} - }, - options: [ - {id: 'IRC', name: 'IRC'}, - {id: 'KIK', name: 'KiK'}, - {id: 'SKYPE', name: 'Skype'}, - {id: 'TELEGRAM', name: 'Telegram'}, - {id: 'XMPP', name:'XMPP'} - ] - }, - tel: { - multiple: true, - readableName: t('contacts', 'Phone'), - template: 'tel', - icon: 'icon-comment', - defaultValue: { - value:'', - meta:{type:['HOME,VOICE']} - }, - options: [ - {id: 'HOME,VOICE', name: t('contacts', 'Home')}, - {id: 'HOME', name: t('contacts', 'Home')}, - {id: 'WORK,VOICE', name: t('contacts', 'Work')}, - {id: 'WORK', name: t('contacts', 'Work')}, - {id: 'CELL', name: t('contacts', 'Mobile')}, - {id: 'CELL,VOICE', name: t('contacts', 'Mobile')}, - {id: 'WORK,CELL', name: t('contacts', 'Work mobile')}, - {id: 'FAX', name: t('contacts', 'Fax')}, - {id: 'HOME,FAX', name: t('contacts', 'Fax home')}, - {id: 'WORK,FAX', name: t('contacts', 'Fax work')}, - {id: 'PAGER', name: t('contacts', 'Pager')}, - {id: 'VOICE', name: t('contacts', 'Voice')}, - {id: 'CAR', name: t('contacts', 'Car')}, - {id: 'PAGER', name: t('contacts', 'Pager')}, - {id: 'WORK,PAGER', name: t('contacts', 'Work pager')} - ] - }, - 'X-SOCIALPROFILE': { - multiple: true, - readableName: t('contacts', 'Social network'), - template: 'username', - defaultValue: { - value:[''], - meta:{type:['facebook']} - }, - options: [ - {id: 'FACEBOOK', name: 'Facebook'}, - {id: 'GITHUB', name: 'GitHub'}, - {id: 'GOOGLEPLUS', name: 'Google+'}, - {id: 'INSTAGRAM', name: 'Instagram'}, - {id: 'LINKEDIN', name: 'LinkedIn'}, - {id: 'PINTEREST', name: 'Pinterest'}, - {id: 'QZONE', name: 'QZone'}, - {id: 'TUMBLR', name: 'Tumblr'}, - {id: 'TWITTER', name: 'Twitter'}, - {id: 'WECHAT', name: 'WeChat'}, - {id: 'YOUTUBE', name: 'YouTube'} - - - ] - }, - relationship: { - readableName: t('contacts', 'Relationship'), - template: 'select', - info: t('contacts', 'Specify a relationship between you and the entity represented by this vCard.'), - options: [ - {id: 'SPOUSE', name: t('contacts', 'Spouse')}, - {id: 'CHILD', name: t('contacts', 'Child')}, - {id: 'MOTHER', name: t('contacts', 'Mother')}, - {id: 'FATHER', name: t('contacts', 'Father')}, - {id: 'PARENT', name: t('contacts', 'Parent')}, - {id: 'BROTHER', name: t('contacts', 'Brother')}, - {id: 'SISTER', name: t('contacts', 'Sister')}, - {id: 'RELATIVE', name: t('contacts', 'Relative')}, - {id: 'FRIEND', name: t('contacts', 'Friend')}, - {id: 'COLLEAGUE', name: t('contacts', 'Colleague')}, - {id: 'MANAGER', name: t('contacts', 'Manager')}, - {id: 'ASSISTANT', name: t('contacts', 'Assistant')}, - ] - }, - related: { - multiple: true, - readableName: t('contacts', 'Related'), - template: 'text', - info: t('contacts', 'Specify a relationship between another entity and the entity represented by this vCard.'), - defaultValue: { - value:[''], - meta:{type:['CONTACT']} - }, - options: [ - {id: 'CONTACT', name: t('contacts', 'Contact')}, - {id: 'AGENT', name: t('contacts', 'Agent')}, - {id: 'EMERGENCY', name: t('contacts', 'Emergency')}, - {id: 'FRIEND', name: t('contacts', 'Friend')}, - {id: 'COLLEAGUE', name: t('contacts', 'Colleague')}, - {id: 'COWORKER', name: t('contacts', 'Co-worker')}, - {id: 'MANAGER', name: t('contacts', 'Manager')}, - {id: 'ASSISTANT', name: t('contacts', 'Assistant')}, - {id: 'SPOUSE', name: t('contacts', 'Spouse')}, - {id: 'CHILD', name: t('contacts', 'Child')}, - {id: 'MOTHER', name: t('contacts', 'Mother')}, - {id: 'FATHER', name: t('contacts', 'Father')}, - {id: 'PARENT', name: t('contacts', 'Parent')}, - {id: 'BROTHER', name: t('contacts', 'Brother')}, - {id: 'SISTER', name: t('contacts', 'Sister')}, - {id: 'RELATIVE', name: t('contacts', 'Relative')} - ] - }, - gender: { - readableName: t('contacts', 'Gender'), - template: 'select', - options: [ - {id: 'F', name: t('contacts', 'Female')}, - {id: 'M', name: t('contacts', 'Male')}, - {id: 'O', name: t('contacts', 'Other')} - ] - } - }; - - this.fieldOrder = [ - 'org', - 'title', - 'tel', - 'email', - 'adr', - 'impp', - 'nick', - 'bday', - 'anniversary', - 'deathdate', - 'url', - 'X-SOCIALPROFILE', - 'relationship', - 'related', - 'note', - 'categories', - 'role', - 'gender' - ]; - - this.fieldDefinitions = []; - for (var prop in this.vCardMeta) { - this.fieldDefinitions.push({id: prop, name: this.vCardMeta[prop].readableName, multiple: !!this.vCardMeta[prop].multiple}); - } - - this.fallbackMeta = function(property) { - function capitalize(string) { return string.charAt(0).toUpperCase() + string.slice(1); } - return { - name: 'unknown-' + property, - readableName: capitalize(property), - template: 'hidden', - necessity: 'optional', - hidden: true - }; - }; - - this.getMeta = function(property) { - return this.vCardMeta[property] || this.fallbackMeta(property); - }; - -}); diff --git a/js/tests/filters/counterFormatter_filter.js b/js/tests/filters/counterFormatter_filter.js deleted file mode 100644 index 73fc7674..00000000 --- a/js/tests/filters/counterFormatter_filter.js +++ /dev/null @@ -1,21 +0,0 @@ -// from https://github.com/owncloud/contacts/blob/31e403af1db859f85e84c2337134e20e5719c825/js/tests/filters/counterFormatter_filter.js by @skjnldsv -describe('counterFormatter filter', function() { - - var $filter; - - beforeEach(module('contactsApp')); - - beforeEach(inject(function(_$filter_){ - $filter = _$filter_; - })); - - it('should return the same number or 9999+ if greater than 9999', function() { - var counterFormatter = $filter('counterFormatter'); - expect(counterFormatter(Number.NaN)).to.be.Nan; - expect(counterFormatter(15)).to.equal(15); - expect(counterFormatter(0)).to.equal(''); - expect(counterFormatter(-5)).to.equal(-5); - expect(counterFormatter(9999)).to.equal(9999); - expect(counterFormatter(10000)).to.equal('9999+'); - }); -}); diff --git a/js/tests/filters/counterTooltipDisplay_filter.js b/js/tests/filters/counterTooltipDisplay_filter.js deleted file mode 100644 index 0eef1f61..00000000 --- a/js/tests/filters/counterTooltipDisplay_filter.js +++ /dev/null @@ -1,20 +0,0 @@ -describe('counterTooltipDisplay filter', function() { - - var $filter; - - beforeEach(module('contactsApp')); - - beforeEach(inject(function(_$filter_){ - $filter = _$filter_; - })); - - it('should return the empty string if less than 10000 and the actual number if greater than 9999', function() { - var counterTooltipDisplay = $filter('counterTooltipDisplay'); - expect(counterTooltipDisplay(Number.NaN)).to.equal(''); - expect(counterTooltipDisplay(15)).to.equal(''); - expect(counterTooltipDisplay(0)).to.equal(''); - expect(counterTooltipDisplay(-5)).to.equal(''); - expect(counterTooltipDisplay(9999)).to.equal(''); - expect(counterTooltipDisplay(10000)).to.equal(10000); - }); -}); \ No newline at end of file diff --git a/js/tests/filters/firstCharacter_filter.js b/js/tests/filters/firstCharacter_filter.js deleted file mode 100644 index 38a620f1..00000000 --- a/js/tests/filters/firstCharacter_filter.js +++ /dev/null @@ -1,17 +0,0 @@ -describe('firstCharacter filter', function() { - - var $filter; - - beforeEach(module('contactsApp')); - - beforeEach(inject(function(_$filter_){ - $filter = _$filter_; - })); - - it('should return the first character', function() { - var firstCharacter = $filter('firstCharacter'); - expect(firstCharacter('123')).to.equal('1'); - expect(firstCharacter('abc')).to.equal('a'); - expect(firstCharacter('A longer text than before which still works')).to.equal('A'); - }); -}); diff --git a/js/tests/filters/localeOrderBy_filter.js b/js/tests/filters/localeOrderBy_filter.js deleted file mode 100644 index eb0bdb75..00000000 --- a/js/tests/filters/localeOrderBy_filter.js +++ /dev/null @@ -1,101 +0,0 @@ -describe('localeOrderBy filter', function() { - - var $filter; - - beforeEach(module('contactsApp')); - - beforeEach(inject(function(_$filter_){ - $filter = _$filter_; - })); - - it('should return the array properly sorted', function() { - var localeOrderBy = $filter('localeOrderBy'); - var sorted = $filter('localeOrderBy')( - [ - {name:'Mb'}, - {name:'Mab'}, - {name:'Máa'}, - {name: 1}, - {name: undefined}, - {name: undefined} - ], - 'name', - false - ); - var expected = [ - {name: 1}, - {name:'Máa'}, - {name:'Mab'}, - {name:'Mb'}, - {name: undefined}, - {name: undefined} - ]; - expect(sorted).to.deep.equal(expected); - }); - - it('should return the array properly sorted by uid if the name are all equals', function() { - var localeOrderBy = $filter('localeOrderBy'); - var sorted = $filter('localeOrderBy')( - [ - {name:'Test', uid: '4321'}, - {name:'Test', uid: '1234'}, - {name:'Test2', uid: '0000'}, - {name: 1, uid: '5241'} - ], - ['name', 'uid'], - false - ); - var expected = [ - {name: 1, uid: '5241'}, - {name:'Test', uid: '1234'}, - {name:'Test', uid: '4321'}, - {name:'Test2', uid: '0000'} - ]; - expect(sorted).to.deep.equal(expected); - }); - - it('should return the array properly sorted by firstName, lastName then uid', function() { - var localeOrderBy = $filter('localeOrderBy'); - var sorted = $filter('localeOrderBy')( - [ - {firstName:'John', lastName: 'Doe', uid: 2525}, - {firstName:'Molly', lastName: 'Holly', uid: 8731}, - {firstName:'Hans', lastName: 'Maeven', uid: 0563}, - {firstName:'John', lastName: 'Dorian', uid: 2683}, - {firstName:'John', lastName: 'Doe', uid: 1624}, - {firstName:'John', lastName: '', uid: 9338} - ], - ['firstName', 'lastName', 'uid'], - false - ); - var expected = [ - {firstName:'Hans', lastName: 'Maeven', uid: 0563}, - {firstName:'John', lastName: '', uid: 9338}, - {firstName:'John', lastName: 'Doe', uid: 1624}, - {firstName:'John', lastName: 'Doe', uid: 2525}, - {firstName:'John', lastName: 'Dorian', uid: 2683}, - {firstName:'Molly', lastName: 'Holly', uid: 8731} - ]; - expect(sorted).to.deep.equal(expected); - }); - - it('should return the array properly sorted by firstName, lastName then the uid function', function() { - var localeOrderBy = $filter('localeOrderBy'); - var returnInt = function() {return 1234}; - var sorted = $filter('localeOrderBy')( - [ - {firstName:'John', lastName: 'Doe', uid: returnInt}, - {firstName:'John', lastName: 'Doe', uid: returnInt}, - {firstName:'John', lastName: '', uid: returnInt} - ], - ['firstName', 'lastName', 'uid'], - false - ); - var expected = [ - {firstName:'John', lastName: '', uid: returnInt}, - {firstName:'John', lastName: 'Doe', uid: returnInt}, - {firstName:'John', lastName: 'Doe', uid: returnInt} - ]; - expect(sorted).to.deep.equal(expected); - }); -}); diff --git a/js/tests/models/addressbook_model.js b/js/tests/models/addressbook_model.js deleted file mode 100644 index a6e1a374..00000000 --- a/js/tests/models/addressbook_model.js +++ /dev/null @@ -1,104 +0,0 @@ -describe('addressbook model', function() { - - var $AddressBook; - beforeEach(module('contactsApp')); - - beforeEach(inject(function(AddressBook){ - $AddressBook = AddressBook; - })); - - it('should read the owner from input', function() { - var exampleData = { - data: { - props: { - owner: '/remote.php/dav/principals/users/username/' - } - } - }; - var addressbook = new $AddressBook(exampleData); - expect(addressbook.owner).to.equal('username'); - }); - - it('should read shared user from input', function() { - var exampleData = { - data: { - props: { - owner: '/remote.php/dav/principals/users/username/', - invite: [ - { - access: { readWrite: '' }, - href: 'principal:principals/users/shared_username', - commonName: 'shared_username' - } - ] - } - } - }; - var addressbook = new $AddressBook(exampleData); - expect(addressbook.sharedWith.users.length).to.equal(1); - expect(addressbook.sharedWith.users[0].id).to.equal('shared_username'); - expect(addressbook.sharedWith.users[0].displayname).to.equal('shared_username'); - expect(addressbook.sharedWith.users[0].writable).to.equal(true); - }); - - it('should read shared group from input', function() { - var exampleData = { - data: { - props: { - owner: '/remote.php/dav/principals/users/username/', - invite: [ - { - access: { readWrite: '' }, - href: 'principal:principals/groups/groupname', - commonName: 'groupname' - } - ] - } - } - }; - var addressbook = new $AddressBook(exampleData); - expect(addressbook.sharedWith.groups.length).to.equal(1); - expect(addressbook.sharedWith.groups[0].id).to.equal('groupname'); - expect(addressbook.sharedWith.groups[0].displayname).to.equal('groupname'); - expect(addressbook.sharedWith.groups[0].writable).to.equal(true); - }); - - it('should skip shares without access', function() { - var exampleData = { - data: { - props: { - owner: '/remote.php/dav/principals/users/username/', - invite: [ - { - access: '', - href: 'principal:principals/users/username', - commonName: 'username' - } - ] - } - } - }; - var addressbook = new $AddressBook(exampleData); - expect(addressbook.sharedWith.users.length).to.equal(0); - }); - - it('should skip shares without href', function() { - var exampleData = { - data: { - props: { - owner: '/remote.php/dav/principals/users/username/', - invite: [ - { - access: { read: '' }, - href: '', - commonName: 'username' - } - ] - } - } - }; - var addressbook = new $AddressBook(exampleData); - expect(addressbook.sharedWith.users.length).to.equal(0); - }); - -}); diff --git a/js/tests/models/contactFilter_model.js b/js/tests/models/contactFilter_model.js deleted file mode 100644 index cf789268..00000000 --- a/js/tests/models/contactFilter_model.js +++ /dev/null @@ -1,16 +0,0 @@ -describe('contactFilter model', function() { - - var $ContactFilter; - beforeEach(module('contactsApp')); - - beforeEach(inject(function(ContactFilter){ - $ContactFilter = ContactFilter; - })); - - it('should store passed json object', function() { - var contactFilter = new $ContactFilter({name: 'test', count: 42}); - expect(contactFilter.name).to.equal('test'); - expect(contactFilter.count).to.equal(42); - }); - -}); diff --git a/js/tests/models/contact_model.js b/js/tests/models/contact_model.js deleted file mode 100644 index 4d439948..00000000 --- a/js/tests/models/contact_model.js +++ /dev/null @@ -1,58 +0,0 @@ -describe('contactModel', function() { - - var $Contact; - beforeEach(module('contactsApp')); - - beforeEach(inject(function(Contact){ - $Contact = Contact; - })); - - it('should match a search pattern in title', function() { - var contact = new $Contact({displayName: 'test'}); - contact.title('The Boss'); - expect(contact.matches('123')).to.equal(false); - expect(contact.matches('the')).to.equal(true); - expect(contact.matches('OSS')).to.equal(true); - }); - - it('should match a search pattern in address', function() { - var contact = new $Contact({displayName: 'test'}); - contact.setProperty('adr', {value: ["12", "", "", "Kenya", "", "", ""]}); - expect(contact.matches('12')).to.equal(true); - expect(contact.matches('kenya')).to.equal(true); - }); - - it('should parse a valid avatar', function() { - var contact = new $Contact({displayName: 'test'}); - var base64Photo = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAEAAQDAREAAhEBAxEB/8QAFAABAAAAAAAAAAAAAAAAAAAAB//EABUBAQEAAAAAAAAAAAAAAAAAAAQG/9oADAMBAAIQAxAAAAEuPT//xAAVEAEBAAAAAAAAAAAAAAAAAAADBP/aAAgBAQABBQKiplT/xAAYEQACAwAAAAAAAAAAAAAAAAABAwACMf/aAAgBAwEBPwGz2E7P/8QAGBEAAgMAAAAAAAAAAAAAAAAAAQIAAyH/2gAIAQIBAT8BFSLgE//EABcQAQADAAAAAAAAAAAAAAAAAAEAAgP/2gAIAQEABj8CW2is/8QAFRABAQAAAAAAAAAAAAAAAAAAAFH/2gAIAQEAAT8hq3j/2gAMAwEAAgADAAAAEN//xAAWEQADAAAAAAAAAAAAAAAAAAAAARH/2gAIAQMBAT8QumP/xAAVEQEBAAAAAAAAAAAAAAAAAAAAAf/aAAgBAgEBPxCaH//EABgQAQADAQAAAAAAAAAAAAAAAAEAIVFh/9oACAEBAAE/ECIUCwdzVn//2Q=='; - contact.photo(base64Photo); - expect(contact.photo()).to.equal(base64Photo); - }); - - it('should ignore an invalid avatar', function() { - var contact = new $Contact({displayName: 'test'}); - var base64Photo = 'ENCODING=b:iVBORw0KGgoAAAANSUhEUgAAAHwAAAB8CAMAAACcwCSMAAAAgVBMVEX/0QEAAAD/0QD/1wH/1AH/3QH/2QGkigE/NABPQQBSQwABIAAD/2wBDAAEQEBAAAAAAAAEBAAE/ECIUCwdzVn//2Q=='; - contact.photo(base64Photo); - expect(contact.photo()).to.be.undefined; - }); - - it('should generate proper ISO.8601.2004 date string', function() { - var contact = new $Contact({displayName: 'test'}); - var d = contact.getISODate(new Date('2016-09-01T09:07:05Z')); - expect(d).to.equal('20160901T090705Z'); - }); - - it('should fix invalid group array', function() { - var contact = new $Contact({displayName: 'test'}); - contact.categories(['Test 1', 'Test 2\,Test 3']); - var categories = contact.categories(); - expect(categories).to.deep.equal(['Test 1', 'Test 2', 'Test 3']); - }); - - it('should remove duplicate groups', function() { - var contact = new $Contact({displayName: 'test'}); - contact.categories(['Test', 'Test', 'Test 2']); - var categories = contact.categories(); - expect(categories).to.deep.equal(['Test', 'Test 2']); - }); -}); diff --git a/js/tests/models/group_model.js b/js/tests/models/group_model.js deleted file mode 100644 index d8a6bb94..00000000 --- a/js/tests/models/group_model.js +++ /dev/null @@ -1,16 +0,0 @@ -describe('groupModel', function() { - - var $Group; - beforeEach(module('contactsApp')); - - beforeEach(inject(function(Group){ - $Group = Group; - })); - - it('should store passed json object', function() { - var group = new $Group({name: 'test', count: 42}); - expect(group.name).to.equal('test'); - expect(group.count).to.equal(42); - }); - -}); diff --git a/js/tests/services/sortBy_service.js b/js/tests/services/sortBy_service.js deleted file mode 100644 index ca2c3fc0..00000000 --- a/js/tests/services/sortBy_service.js +++ /dev/null @@ -1,20 +0,0 @@ -describe('sortbyService', function() { - - var $Service; - beforeEach(module('contactsApp')); - - beforeEach(inject(function(SortByService){ - $Service = SortByService; - })); - - it('should return sortDisplayName as default sorting method', function() { - expect($Service.getSortByKey()).to.equal('sortDisplayName'); - }); - - it('should store sorting method', function() { - $Service.setSortBy('sortLastName'); - expect($Service.getSortByKey()).to.equal( - window.localStorage.getItem('contacts_default_order') - ); - }); -}); diff --git a/js/tests/stubs.js b/js/tests/stubs.js deleted file mode 100644 index 315af7a0..00000000 --- a/js/tests/stubs.js +++ /dev/null @@ -1,9 +0,0 @@ -before(function() { - window.t = function(a, b) { return b; }; - - window.OC = { - linkToRemoteBase: function(url) { - return '/base' + url; - } - }; -}); diff --git a/karma.conf.js b/karma.conf.js deleted file mode 100644 index d8135f56..00000000 --- a/karma.conf.js +++ /dev/null @@ -1,105 +0,0 @@ -module.exports = function(config) { - config.set({ - - // base path that will be used to resolve all patterns (eg. files, exclude) - basePath: '', - - - // frameworks to use - // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['mocha', 'chai', 'sinon'], - - - // list of files / patterns to load in the browser - files: [ - 'js/vendor/angular/angular.js', - 'js/vendor/angular-route/angular-route.js', - 'js/vendor/angular-uuid4/angular-uuid4.min.js', - 'js/vendor/angular-cache/angular-cache.js', - 'js/vendor/angular-sanitize/angular-sanitize.js', - 'js/vendor/ui-select/select.js', - 'js/vendor/angular-click-outside/clickoutside.directive.js', - 'js/vendor/ngclipboard/ngclipboard.js', - - 'js/dav/dav.js', - 'js/vendor/vcard/vcard.js', - - 'node_modules/underscore/underscore.js', - 'node_modules/angular-mocks/angular-mocks.js', - - 'js/main.js', - 'js/components/**/*.js', - 'js/models/**/*.js', - 'js/services/**/*.js', - 'js/filters/**/*.js', - - 'js/vendor/ui-bootstrap/ui-bootstrap.js', - - 'js/tests/**/*.js' - ], - - - // list of files to exclude - exclude: [ - ], - - - // preprocess matching files before serving them to the browser - // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor - preprocessors: { - 'js/main.js': 'coverage', - 'js/components/**/*.js': 'coverage', - 'js/models/**/*.js': 'coverage', - 'js/services/**/*.js': 'coverage', - 'js/filters/**/*.js': 'coverage' - }, - - - // test results reporter to use - // possible values: 'dots', 'progress' - // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ['mocha', 'coverage'], - - - // Configure code coverage reporter - coverageReporter: { - reporters: [ - {type: 'text'}, - // generates ./coverage/lcov.info - {type:'lcovonly', subdir: '.'}, - // generates ./coverage/coverage-final.json - {type:'json', subdir: '.'}, - ] - }, - - // web server port - port: 9876, - - - // enable / disable colors in the output (reporters and logs) - colors: true, - - - // level of logging - // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG - logLevel: config.LOG_INFO, - - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: false, - - - // start these browsers - // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - browsers: ['Firefox'], - - - // Continuous Integration mode - // if true, Karma captures browsers, runs the tests and exits - singleRun: true, - - // Concurrency level - // how many browser should be started simultaneous - concurrency: Infinity - }) -}; diff --git a/l10n/.gitkeep b/l10n/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/l10n/af.js b/l10n/af.js deleted file mode 100644 index 86d8bdc7..00000000 --- a/l10n/af.js +++ /dev/null @@ -1,70 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontakte", - "Download" : "Laai Af", - "Delete" : "Skrap", - "Rename" : "Hernoem", - "Share with users or groups" : "Deel met gebruikers of groepe", - "can edit" : "kan wysig", - "Close" : "Sluit", - "Copied!" : "Gekopieer!", - "Not supported!" : "Nie ondersteun nie!", - "Press ⌘-C to copy." : "Druk ⌘-C om te kopieer.", - "Press Ctrl-C to copy." : "Druk Ctrl-C om te kopieer.", - "Address book name" : "Adresboeknaam", - "The selected image is too big (max 1MB)" : "Die gekose lêer is te groot (maks 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Die kaart was bedorwe en is herstel. Gaan die data na en bewaar om die veranderinge permanent te maak.", - "No contacts in here" : "Hier is geen kontakte", - "Name" : "Naam", - "Organization" : "Organisasie", - "Title" : "Titel", - "Save changes" : "Bewaar veranderinge", - "No search result for {query}" : "Geen soekresultaat vir {query}", - "All contacts" : "Alle kontakte", - "Post office box" : "Posbus", - "Postal code" : "Poskode", - "City" : "Stad/dorp", - "State or province" : "Staat/provinsie", - "Country" : "Land", - "Address" : "Adres", - "(new group)" : "(nuwe groep)", - "Last name" : "Van", - "First name" : "Naam", - "Additional names" : "Addisionele name", - "Prefix" : "Voorvoegsel", - "Suffix" : "Agtervoegsel", - "New contact" : "Nuwe kontak", - "Not grouped" : "Nie gegroepeer", - "Sort by" : "Sorteer volgens", - "{addressbook} shared by {owner}" : "{addressbook} gedeel deur {owner}", - "Contact could not be created." : "Kontak kon nie geskep word nie.", - "No contacts in file. Only vCard files are allowed." : "Geen kontakte in lêer. Slegs vCard-lêers word toegestaan.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Slegs vCard-weergawe 4.0 (RFC6350) of weergawe 3.0 (RFC2426) word ondersteun.", - "Display name" : "Vertoonnaam", - "Nickname" : "Bynaam", - "Detailed name" : "Gedetailleerde naam", - "Notes" : "Notas", - "Website" : "Webwerf", - "Federated Cloud ID" : "Gefedereerde Wolk-ID", - "Home" : "Tuis", - "Work" : "Werk", - "Other" : "Ander", - "Groups" : "Groepe", - "Birthday" : "Verjaardag", - "Anniversary" : "Herdenking", - "Date of death" : "Sterfdatum", - "Email" : "E-pos", - "Instant messaging" : "Kitsboodskapdiens", - "Phone" : "Foon", - "Mobile" : "Mobiel", - "Fax" : "Faks", - "Fax home" : "Faks tuis", - "Fax work" : "Faks werk", - "Pager" : "Pagineerder", - "Voice" : "Stem", - "Social network" : "Sosiale netwerk", - "Details" : "Details", - "Settings" : "Instellings" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/af.json b/l10n/af.json deleted file mode 100644 index a34616bf..00000000 --- a/l10n/af.json +++ /dev/null @@ -1,68 +0,0 @@ -{ "translations": { - "Contacts" : "Kontakte", - "Download" : "Laai Af", - "Delete" : "Skrap", - "Rename" : "Hernoem", - "Share with users or groups" : "Deel met gebruikers of groepe", - "can edit" : "kan wysig", - "Close" : "Sluit", - "Copied!" : "Gekopieer!", - "Not supported!" : "Nie ondersteun nie!", - "Press ⌘-C to copy." : "Druk ⌘-C om te kopieer.", - "Press Ctrl-C to copy." : "Druk Ctrl-C om te kopieer.", - "Address book name" : "Adresboeknaam", - "The selected image is too big (max 1MB)" : "Die gekose lêer is te groot (maks 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Die kaart was bedorwe en is herstel. Gaan die data na en bewaar om die veranderinge permanent te maak.", - "No contacts in here" : "Hier is geen kontakte", - "Name" : "Naam", - "Organization" : "Organisasie", - "Title" : "Titel", - "Save changes" : "Bewaar veranderinge", - "No search result for {query}" : "Geen soekresultaat vir {query}", - "All contacts" : "Alle kontakte", - "Post office box" : "Posbus", - "Postal code" : "Poskode", - "City" : "Stad/dorp", - "State or province" : "Staat/provinsie", - "Country" : "Land", - "Address" : "Adres", - "(new group)" : "(nuwe groep)", - "Last name" : "Van", - "First name" : "Naam", - "Additional names" : "Addisionele name", - "Prefix" : "Voorvoegsel", - "Suffix" : "Agtervoegsel", - "New contact" : "Nuwe kontak", - "Not grouped" : "Nie gegroepeer", - "Sort by" : "Sorteer volgens", - "{addressbook} shared by {owner}" : "{addressbook} gedeel deur {owner}", - "Contact could not be created." : "Kontak kon nie geskep word nie.", - "No contacts in file. Only vCard files are allowed." : "Geen kontakte in lêer. Slegs vCard-lêers word toegestaan.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Slegs vCard-weergawe 4.0 (RFC6350) of weergawe 3.0 (RFC2426) word ondersteun.", - "Display name" : "Vertoonnaam", - "Nickname" : "Bynaam", - "Detailed name" : "Gedetailleerde naam", - "Notes" : "Notas", - "Website" : "Webwerf", - "Federated Cloud ID" : "Gefedereerde Wolk-ID", - "Home" : "Tuis", - "Work" : "Werk", - "Other" : "Ander", - "Groups" : "Groepe", - "Birthday" : "Verjaardag", - "Anniversary" : "Herdenking", - "Date of death" : "Sterfdatum", - "Email" : "E-pos", - "Instant messaging" : "Kitsboodskapdiens", - "Phone" : "Foon", - "Mobile" : "Mobiel", - "Fax" : "Faks", - "Fax home" : "Faks tuis", - "Fax work" : "Faks werk", - "Pager" : "Pagineerder", - "Voice" : "Stem", - "Social network" : "Sosiale netwerk", - "Details" : "Details", - "Settings" : "Instellings" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/ar.js b/l10n/ar.js deleted file mode 100644 index b8c84f60..00000000 --- a/l10n/ar.js +++ /dev/null @@ -1,80 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "جهات الاتصال", - "Download" : "تحميل", - "Copy link" : "نسخ الرابط", - "Click to copy the link to your clipboard" : "إضغط لنسخ الرابط على حافظتك", - "Toggle sharing" : " حدد المشاركة", - "Delete" : "حذف", - "Rename" : "تعديل الإسم", - "Share with users or groups" : "شارك مع مستخدمين او مجموعات", - "can edit" : "يمكن التعديل", - "Close" : "إغلاق", - "Copied!" : "نُسخ!", - "Not supported!" : "غير مدعوم!", - "Press ⌘-C to copy." : "إضغط ⌘-C للنسخ", - "Press Ctrl-C to copy." : "إضغط Ctrl-C للنسخ", - "Address book name" : "اسم دفتر العناوين", - "The selected image is too big (max 1MB)" : "الصورة المختارة كبيرة جداً (الحجم الأقصى 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "هذه البطاقة تالفة وتم إصلاحها. الرجاء التأكد من المعلومات والقيام بالحفظ لجعل التغييرات دائمة.", - "No contacts in here" : "لا توجد أية عناوين", - "Name" : "الإسم", - "Organization" : "المؤسسة", - "Title" : "اللقب", - "Save changes" : "حفظ التعديلات", - "Address book" : "دفتر العناوين", - "Import into" : "إستيراد إلى", - "Importing..." : "إستيراد...", - "Select your addressbook" : "إختر دفتر عناوينك", - "No search result for {query}" : "لم يظهر البحث عن {query} أي نتيجة", - "All contacts" : "كل الجهات", - "Post office box" : "صندوق البريد", - "Postal code" : "الرمز البريدي.", - "City" : "المدينة", - "State or province" : "الولاية أو المنطقة.", - "Country" : "البلد", - "Address" : "العنوان", - "(new group)" : "(مجموعة جديدة)", - "Last name" : "اللقب", - "First name" : "الإسم", - "Additional names" : "الأسماء الإضافية", - "Prefix" : "بادئة", - "Suffix" : "لاحقة", - "Importing into" : "إستيراد إلى", - "New contact" : "جهة إتصال جديدة", - "Not grouped" : "غير مصنف", - "Sort by" : "ترتيب حسب", - "{addressbook} shared by {owner}" : "{owner} شارك {addressbook}", - "Contact not found." : "لم يتم إيجاد جهاد الإتصال.", - "Contact could not be created." : "لم يتم إنشاء جهة الإتصال.", - "No contacts in file. Only vCard files are allowed." : "لا يوجد جهات إتصال بالملف. يسمح فقط بملفات vCard", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "يمكن الإعتماد فقط على الإصدار 4.0 (RFC6350) او 3.0 (RFC2426) من التطبيق vCard", - "Contact could not be saved." : "لم يتم حفظ جهة الإتصال.", - "Display name" : "إسم العرض", - "Nickname" : "كنية.\nلقب.", - "Detailed name" : "الإسم بالتفصيل", - "Notes" : "الملاحظات", - "Website" : "موقع إلكتروني", - "Federated Cloud ID" : "معرّف السحابة الخارجية", - "Home" : "المنزل", - "Work" : "العمل", - "Other" : "آخر", - "Groups" : "مجموعات", - "Birthday" : "عيد ميلاد", - "Anniversary" : "ذكرى سنوية", - "Date of death" : "تاريخ الوفاة", - "Email" : "البريد الإلكترونى", - "Instant messaging" : "المراسلة الفورية", - "Phone" : "الهاتف", - "Mobile" : "الهاتف المحمول", - "Fax" : "الفاكس", - "Fax home" : "فاكس المنزل", - "Fax work" : "فاكس العمل", - "Pager" : "النداء", - "Voice" : "صوت", - "Social network" : "شبكة اجتماعية", - "Details" : "التفاصيل", - "Settings" : "الإعدادات" -}, -"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"); diff --git a/l10n/ar.json b/l10n/ar.json deleted file mode 100644 index 8e9573c2..00000000 --- a/l10n/ar.json +++ /dev/null @@ -1,78 +0,0 @@ -{ "translations": { - "Contacts" : "جهات الاتصال", - "Download" : "تحميل", - "Copy link" : "نسخ الرابط", - "Click to copy the link to your clipboard" : "إضغط لنسخ الرابط على حافظتك", - "Toggle sharing" : " حدد المشاركة", - "Delete" : "حذف", - "Rename" : "تعديل الإسم", - "Share with users or groups" : "شارك مع مستخدمين او مجموعات", - "can edit" : "يمكن التعديل", - "Close" : "إغلاق", - "Copied!" : "نُسخ!", - "Not supported!" : "غير مدعوم!", - "Press ⌘-C to copy." : "إضغط ⌘-C للنسخ", - "Press Ctrl-C to copy." : "إضغط Ctrl-C للنسخ", - "Address book name" : "اسم دفتر العناوين", - "The selected image is too big (max 1MB)" : "الصورة المختارة كبيرة جداً (الحجم الأقصى 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "هذه البطاقة تالفة وتم إصلاحها. الرجاء التأكد من المعلومات والقيام بالحفظ لجعل التغييرات دائمة.", - "No contacts in here" : "لا توجد أية عناوين", - "Name" : "الإسم", - "Organization" : "المؤسسة", - "Title" : "اللقب", - "Save changes" : "حفظ التعديلات", - "Address book" : "دفتر العناوين", - "Import into" : "إستيراد إلى", - "Importing..." : "إستيراد...", - "Select your addressbook" : "إختر دفتر عناوينك", - "No search result for {query}" : "لم يظهر البحث عن {query} أي نتيجة", - "All contacts" : "كل الجهات", - "Post office box" : "صندوق البريد", - "Postal code" : "الرمز البريدي.", - "City" : "المدينة", - "State or province" : "الولاية أو المنطقة.", - "Country" : "البلد", - "Address" : "العنوان", - "(new group)" : "(مجموعة جديدة)", - "Last name" : "اللقب", - "First name" : "الإسم", - "Additional names" : "الأسماء الإضافية", - "Prefix" : "بادئة", - "Suffix" : "لاحقة", - "Importing into" : "إستيراد إلى", - "New contact" : "جهة إتصال جديدة", - "Not grouped" : "غير مصنف", - "Sort by" : "ترتيب حسب", - "{addressbook} shared by {owner}" : "{owner} شارك {addressbook}", - "Contact not found." : "لم يتم إيجاد جهاد الإتصال.", - "Contact could not be created." : "لم يتم إنشاء جهة الإتصال.", - "No contacts in file. Only vCard files are allowed." : "لا يوجد جهات إتصال بالملف. يسمح فقط بملفات vCard", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "يمكن الإعتماد فقط على الإصدار 4.0 (RFC6350) او 3.0 (RFC2426) من التطبيق vCard", - "Contact could not be saved." : "لم يتم حفظ جهة الإتصال.", - "Display name" : "إسم العرض", - "Nickname" : "كنية.\nلقب.", - "Detailed name" : "الإسم بالتفصيل", - "Notes" : "الملاحظات", - "Website" : "موقع إلكتروني", - "Federated Cloud ID" : "معرّف السحابة الخارجية", - "Home" : "المنزل", - "Work" : "العمل", - "Other" : "آخر", - "Groups" : "مجموعات", - "Birthday" : "عيد ميلاد", - "Anniversary" : "ذكرى سنوية", - "Date of death" : "تاريخ الوفاة", - "Email" : "البريد الإلكترونى", - "Instant messaging" : "المراسلة الفورية", - "Phone" : "الهاتف", - "Mobile" : "الهاتف المحمول", - "Fax" : "الفاكس", - "Fax home" : "فاكس المنزل", - "Fax work" : "فاكس العمل", - "Pager" : "النداء", - "Voice" : "صوت", - "Social network" : "شبكة اجتماعية", - "Details" : "التفاصيل", - "Settings" : "الإعدادات" -},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;" -} \ No newline at end of file diff --git a/l10n/ast.js b/l10n/ast.js deleted file mode 100644 index 280aeb2b..00000000 --- a/l10n/ast.js +++ /dev/null @@ -1,80 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contautos", - "Download" : "Baxar", - "Copy link" : "Copiar enllaz", - "Click to copy the link to your clipboard" : "Primi pa copiar l'enllaz al to cartafueyu", - "Toggle sharing" : "Alternar compartición", - "Delete" : "Desaniciar", - "Rename" : "Renomar", - "Share with users or groups" : "Compartir con usuarios y grupos", - "can edit" : "pue editar", - "Close" : "Zarrar", - "Copied!" : "¡Copióse¡", - "Not supported!" : "¡Nun se sofita!", - "Press ⌘-C to copy." : "Primi ⌘-C pa copiar.", - "Press Ctrl-C to copy." : "Primi Ctrl-C pa copiar.", - "Address book name" : "Nome de la Llibreta de direiciones", - "The selected image is too big (max 1MB)" : "La imaxe escoyida ye demasiáu grande (máximu 1 MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarxeta ta toyida ya iguóse. Comprueba los datos y aiciona un guardáu pa facer permanentes los cambeos, por favor.", - "No contacts in here" : "Equí nun hai contautos", - "Name" : "Nome", - "Organization" : "Organización", - "Title" : "Títulu", - "Add field …" : "Amestar campu...", - "Save changes" : "Guardar cambeos", - "Address book" : "Llibreta de direiciones", - "Loading contacts …" : "Cargando contautos....", - "Importing..." : "Importando...", - "Select your addressbook" : "Esbilla la to llibreta de direiciones", - "No search result for {query}" : "Nun hai resultaos pa la gueta {query}", - "All contacts" : "Tolos contautos", - "Post office box" : "Apartáu de correos", - "Postal code" : "Códigu postal", - "City" : "Ciudá", - "State or province" : "Estáu o provincia", - "Country" : "País", - "Address" : "Direición", - "(new group)" : "(nuevu grupu)", - "Last name" : "Apellíu", - "First name" : "Nome", - "Additional names" : "Nomes adicionales", - "Prefix" : "Prefixu", - "Suffix" : "Sufixu", - "New contact" : "Contautu nuevu", - "Not grouped" : "Nun s'agrupó", - "Sort by" : "Ordenar per", - "{addressbook} shared by {owner}" : "{addressbook} compartíu por {owner}", - "Contact not found." : "Nun s'alcontró'l contautu.", - "Contact could not be created." : "Nun pudo crease'l contautu.", - "No contacts in file. Only vCard files are allowed." : "Nun hai contautos nel ficheru. Namái ser permiten ficheros vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Namái se sofiten les versiones 4.0 (RFC6350) o 3.0 (RFC2426) de vCard.", - "Contact could not be saved." : "El contautu pudo nun guardase.", - "Display name" : "Nome", - "Nickname" : "Nomatu", - "Detailed name" : "Nome detalláu", - "Notes" : "Notes", - "Website" : "Sitiu web", - "Federated Cloud ID" : "ID de ñube federada", - "Home" : "Casa", - "Work" : "Trabayu", - "Other" : "Otru", - "Groups" : "Grupos", - "Birthday" : "Data de nacencia", - "Anniversary" : "Aniversariu", - "Date of death" : "Data de muerte", - "Email" : "Corréu", - "Instant messaging" : "Mensaxería nel intre", - "Phone" : "Teléfonu", - "Mobile" : "Móvil", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax del trabayu", - "Pager" : "Llocalizador", - "Voice" : "Voz", - "Social network" : "Rede social", - "Details" : "Detalles", - "Settings" : "Axustes" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/ast.json b/l10n/ast.json deleted file mode 100644 index 1410980b..00000000 --- a/l10n/ast.json +++ /dev/null @@ -1,78 +0,0 @@ -{ "translations": { - "Contacts" : "Contautos", - "Download" : "Baxar", - "Copy link" : "Copiar enllaz", - "Click to copy the link to your clipboard" : "Primi pa copiar l'enllaz al to cartafueyu", - "Toggle sharing" : "Alternar compartición", - "Delete" : "Desaniciar", - "Rename" : "Renomar", - "Share with users or groups" : "Compartir con usuarios y grupos", - "can edit" : "pue editar", - "Close" : "Zarrar", - "Copied!" : "¡Copióse¡", - "Not supported!" : "¡Nun se sofita!", - "Press ⌘-C to copy." : "Primi ⌘-C pa copiar.", - "Press Ctrl-C to copy." : "Primi Ctrl-C pa copiar.", - "Address book name" : "Nome de la Llibreta de direiciones", - "The selected image is too big (max 1MB)" : "La imaxe escoyida ye demasiáu grande (máximu 1 MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarxeta ta toyida ya iguóse. Comprueba los datos y aiciona un guardáu pa facer permanentes los cambeos, por favor.", - "No contacts in here" : "Equí nun hai contautos", - "Name" : "Nome", - "Organization" : "Organización", - "Title" : "Títulu", - "Add field …" : "Amestar campu...", - "Save changes" : "Guardar cambeos", - "Address book" : "Llibreta de direiciones", - "Loading contacts …" : "Cargando contautos....", - "Importing..." : "Importando...", - "Select your addressbook" : "Esbilla la to llibreta de direiciones", - "No search result for {query}" : "Nun hai resultaos pa la gueta {query}", - "All contacts" : "Tolos contautos", - "Post office box" : "Apartáu de correos", - "Postal code" : "Códigu postal", - "City" : "Ciudá", - "State or province" : "Estáu o provincia", - "Country" : "País", - "Address" : "Direición", - "(new group)" : "(nuevu grupu)", - "Last name" : "Apellíu", - "First name" : "Nome", - "Additional names" : "Nomes adicionales", - "Prefix" : "Prefixu", - "Suffix" : "Sufixu", - "New contact" : "Contautu nuevu", - "Not grouped" : "Nun s'agrupó", - "Sort by" : "Ordenar per", - "{addressbook} shared by {owner}" : "{addressbook} compartíu por {owner}", - "Contact not found." : "Nun s'alcontró'l contautu.", - "Contact could not be created." : "Nun pudo crease'l contautu.", - "No contacts in file. Only vCard files are allowed." : "Nun hai contautos nel ficheru. Namái ser permiten ficheros vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Namái se sofiten les versiones 4.0 (RFC6350) o 3.0 (RFC2426) de vCard.", - "Contact could not be saved." : "El contautu pudo nun guardase.", - "Display name" : "Nome", - "Nickname" : "Nomatu", - "Detailed name" : "Nome detalláu", - "Notes" : "Notes", - "Website" : "Sitiu web", - "Federated Cloud ID" : "ID de ñube federada", - "Home" : "Casa", - "Work" : "Trabayu", - "Other" : "Otru", - "Groups" : "Grupos", - "Birthday" : "Data de nacencia", - "Anniversary" : "Aniversariu", - "Date of death" : "Data de muerte", - "Email" : "Corréu", - "Instant messaging" : "Mensaxería nel intre", - "Phone" : "Teléfonu", - "Mobile" : "Móvil", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax del trabayu", - "Pager" : "Llocalizador", - "Voice" : "Voz", - "Social network" : "Rede social", - "Details" : "Detalles", - "Settings" : "Axustes" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/bg.js b/l10n/bg.js deleted file mode 100644 index 69567727..00000000 --- a/l10n/bg.js +++ /dev/null @@ -1,110 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Контакти", - "Download" : "Изтегляне", - "Copy link" : "Копирай връзката", - "Toggle sharing" : "Превключване на споделянето", - "Delete" : "Изтриване", - "Rename" : "Преименуване", - "Share with users or groups" : "Споделяне с потребители или групи", - "can edit" : "може да редактира", - "Close" : "Затвори", - "Enabled" : "Включено", - "Disabled" : "Изключено", - "Copied!" : "Копирано!", - "Not supported!" : "Не се поддържа!", - "Press ⌘-C to copy." : "За копиране натиснете ⌘-C.", - "Press Ctrl-C to copy." : "За копиране натиснете Ctrl-C.", - "Address book name" : "Име на адресна книга ", - "Only these special characters are allowed: -_.!?#|()" : "Само тези специални знаци са разрешени: -_.!?#|()", - "Address book could not be created." : "Адресната книга не може да бъде създадена.", - "The selected image is too big (max 1MB)" : "Избраното изображение е много голямо (до 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Тази визитка е повредена и е била поправена. Моля, проверете данните и инициирайте запазване, за да останат промените за постоянно.", - "No contacts in here" : "Тук няма контакти", - "Name" : "Име", - "Organization" : "Организация", - "Title" : "Заглавие", - "Add field …" : "Добавяне на поле ...", - "Save changes" : "Запис на промените", - "Address book" : "Адресна книга", - "Loading contacts …" : "Зареждане на контактите ...", - "Import into" : "Вмъкни в", - "Importing..." : "Внасяне ...", - "Select your addressbook" : "Избери своята адресна книга", - "Import is disabled because no writable address book had been found." : "Вмъкването е изключено, защото няма налична адресна книга позволяваща записване.", - "No search result for {query}" : "Няма намерени резултати за {query}", - "All contacts" : "Всички контакти", - "Post office box" : "Пощенска кутия", - "Postal code" : "Пощенски код", - "City" : "Град", - "State or province" : "Област", - "Country" : "Държава", - "Address" : "Адрес", - "(new group)" : "(нова група)", - "Last name" : "Фамилия", - "First name" : "Име", - "Additional names" : "Други имена", - "Prefix" : "Представка", - "Suffix" : "Наставка", - "Importing into" : "Вмъкни в", - "New contact" : "Нов контакт", - "Not grouped" : "Негрупирани", - "Sort by" : "Сортиране по", - "There is no address book available to create a contact." : "Няма налична адресна книга, където да се създаде контакта.", - "{addressbook} shared by {owner}" : "{addressbook} споделена с {owner}", - "Contact not found." : "Няма намерен контакт.", - "You don't have permission to write to this addressbook." : "Нямате права да пишете в тази адресна книга.", - "Contact could not be created." : "Контакта не може да бъде създаден.", - "No contacts in file. Only vCard files are allowed." : "Няма контакти във файла. Разрешени са само VCard файлове.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Единствено VCard версия 4.0 (RFC6350) или версия 3.0 (RFC2426) се поддържат.", - "Contact could not be moved." : "Контакта не може да бъде преместен.", - "Contact could not be saved." : "Контакта не може да бъде записан.", - "Waiting for the server to be ready…" : "Изчакване от сървъра на потвърждение за готовност...", - "Importing…" : "Внасяне...", - "Display name" : "Име за визуализация", - "Nickname" : "Псевдоним", - "Detailed name" : "Детайлно име", - "Notes" : "Бележки", - "Website" : "Уеб страница", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Домашен", - "Work" : "Работен", - "Other" : "Друг", - "Groups" : "Групи", - "Birthday" : "Рожден ден", - "Anniversary" : "Годишнина", - "Date of death" : "Дата на смърт", - "Email" : "Имейл", - "Instant messaging" : "Чат", - "Phone" : "Телефон", - "Mobile" : "Мобилен телефон", - "Work mobile" : "Служебен телефон", - "Fax" : "Факс", - "Fax home" : "Факс домашен", - "Fax work" : "Факс служебен", - "Pager" : "Пейджър", - "Voice" : "Гласов", - "Car" : "Кола", - "Work pager" : "Работен пейджър", - "Social network" : "Социална мрежа", - "Relationship" : "Връзка", - "Spouse" : "Съпруг", - "Child" : "Дете", - "Mother" : "Майка", - "Father" : "Баща", - "Parent" : "Родител", - "Brother" : "Брат", - "Sister" : "Сестра", - "Relative" : "Роднина", - "Friend" : "Приятел", - "Colleague" : "Колега", - "Manager" : "Управител", - "Assistant" : "Асистент", - "Gender" : "Пол", - "Female" : "Жена", - "Male" : "Мъж", - "Details" : "Детайли", - "Settings" : "Настройки" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/bg.json b/l10n/bg.json deleted file mode 100644 index 040c86a0..00000000 --- a/l10n/bg.json +++ /dev/null @@ -1,108 +0,0 @@ -{ "translations": { - "Contacts" : "Контакти", - "Download" : "Изтегляне", - "Copy link" : "Копирай връзката", - "Toggle sharing" : "Превключване на споделянето", - "Delete" : "Изтриване", - "Rename" : "Преименуване", - "Share with users or groups" : "Споделяне с потребители или групи", - "can edit" : "може да редактира", - "Close" : "Затвори", - "Enabled" : "Включено", - "Disabled" : "Изключено", - "Copied!" : "Копирано!", - "Not supported!" : "Не се поддържа!", - "Press ⌘-C to copy." : "За копиране натиснете ⌘-C.", - "Press Ctrl-C to copy." : "За копиране натиснете Ctrl-C.", - "Address book name" : "Име на адресна книга ", - "Only these special characters are allowed: -_.!?#|()" : "Само тези специални знаци са разрешени: -_.!?#|()", - "Address book could not be created." : "Адресната книга не може да бъде създадена.", - "The selected image is too big (max 1MB)" : "Избраното изображение е много голямо (до 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Тази визитка е повредена и е била поправена. Моля, проверете данните и инициирайте запазване, за да останат промените за постоянно.", - "No contacts in here" : "Тук няма контакти", - "Name" : "Име", - "Organization" : "Организация", - "Title" : "Заглавие", - "Add field …" : "Добавяне на поле ...", - "Save changes" : "Запис на промените", - "Address book" : "Адресна книга", - "Loading contacts …" : "Зареждане на контактите ...", - "Import into" : "Вмъкни в", - "Importing..." : "Внасяне ...", - "Select your addressbook" : "Избери своята адресна книга", - "Import is disabled because no writable address book had been found." : "Вмъкването е изключено, защото няма налична адресна книга позволяваща записване.", - "No search result for {query}" : "Няма намерени резултати за {query}", - "All contacts" : "Всички контакти", - "Post office box" : "Пощенска кутия", - "Postal code" : "Пощенски код", - "City" : "Град", - "State or province" : "Област", - "Country" : "Държава", - "Address" : "Адрес", - "(new group)" : "(нова група)", - "Last name" : "Фамилия", - "First name" : "Име", - "Additional names" : "Други имена", - "Prefix" : "Представка", - "Suffix" : "Наставка", - "Importing into" : "Вмъкни в", - "New contact" : "Нов контакт", - "Not grouped" : "Негрупирани", - "Sort by" : "Сортиране по", - "There is no address book available to create a contact." : "Няма налична адресна книга, където да се създаде контакта.", - "{addressbook} shared by {owner}" : "{addressbook} споделена с {owner}", - "Contact not found." : "Няма намерен контакт.", - "You don't have permission to write to this addressbook." : "Нямате права да пишете в тази адресна книга.", - "Contact could not be created." : "Контакта не може да бъде създаден.", - "No contacts in file. Only vCard files are allowed." : "Няма контакти във файла. Разрешени са само VCard файлове.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Единствено VCard версия 4.0 (RFC6350) или версия 3.0 (RFC2426) се поддържат.", - "Contact could not be moved." : "Контакта не може да бъде преместен.", - "Contact could not be saved." : "Контакта не може да бъде записан.", - "Waiting for the server to be ready…" : "Изчакване от сървъра на потвърждение за готовност...", - "Importing…" : "Внасяне...", - "Display name" : "Име за визуализация", - "Nickname" : "Псевдоним", - "Detailed name" : "Детайлно име", - "Notes" : "Бележки", - "Website" : "Уеб страница", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Домашен", - "Work" : "Работен", - "Other" : "Друг", - "Groups" : "Групи", - "Birthday" : "Рожден ден", - "Anniversary" : "Годишнина", - "Date of death" : "Дата на смърт", - "Email" : "Имейл", - "Instant messaging" : "Чат", - "Phone" : "Телефон", - "Mobile" : "Мобилен телефон", - "Work mobile" : "Служебен телефон", - "Fax" : "Факс", - "Fax home" : "Факс домашен", - "Fax work" : "Факс служебен", - "Pager" : "Пейджър", - "Voice" : "Гласов", - "Car" : "Кола", - "Work pager" : "Работен пейджър", - "Social network" : "Социална мрежа", - "Relationship" : "Връзка", - "Spouse" : "Съпруг", - "Child" : "Дете", - "Mother" : "Майка", - "Father" : "Баща", - "Parent" : "Родител", - "Brother" : "Брат", - "Sister" : "Сестра", - "Relative" : "Роднина", - "Friend" : "Приятел", - "Colleague" : "Колега", - "Manager" : "Управител", - "Assistant" : "Асистент", - "Gender" : "Пол", - "Female" : "Жена", - "Male" : "Мъж", - "Details" : "Детайли", - "Settings" : "Настройки" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/bn_BD.js b/l10n/bn_BD.js deleted file mode 100644 index a96507ce..00000000 --- a/l10n/bn_BD.js +++ /dev/null @@ -1,35 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "পরিচিতজন", - "Name" : "নাম", - "Organization" : "প্রতিষ্ঠান", - "Title" : "শিরোনাম", - "Postal code" : "পোস্টাল কোড", - "City" : "শহর", - "State or province" : "রাজ্য কিংবা প্রদেশ", - "Country" : "দেশ", - "Address" : "ঠিকানা", - "Last name" : "নামের শেষাংশ", - "First name" : "নামের প্রথমাংশ ", - "Additional names" : "অতিরিক্ত নামসমূহ", - "New contact" : "নতুন ঠিকানা", - "Not grouped" : "দলবদ্ধ নয়", - "Nickname" : "ছদ্মনাম", - "Notes" : "নোট", - "Website" : "ওয়েবসাইট", - "Home" : "নিবাস", - "Work" : "কর্মস্থল", - "Other" : "অন্যান্য", - "Groups" : "গোষ্ঠীসমূহ", - "Birthday" : "জন্মদিন", - "Email" : "ইমেইল", - "Instant messaging" : "তাৎক্ষণিক বার্তা", - "Phone" : "ফোন", - "Mobile" : "মোবাইল", - "Fax" : "ফ্যাক্স", - "Pager" : "পেজার", - "Voice" : "কন্ঠ", - "Settings" : "নিয়ামকসমূহ" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/bn_BD.json b/l10n/bn_BD.json deleted file mode 100644 index 3eb89915..00000000 --- a/l10n/bn_BD.json +++ /dev/null @@ -1,33 +0,0 @@ -{ "translations": { - "Contacts" : "পরিচিতজন", - "Name" : "নাম", - "Organization" : "প্রতিষ্ঠান", - "Title" : "শিরোনাম", - "Postal code" : "পোস্টাল কোড", - "City" : "শহর", - "State or province" : "রাজ্য কিংবা প্রদেশ", - "Country" : "দেশ", - "Address" : "ঠিকানা", - "Last name" : "নামের শেষাংশ", - "First name" : "নামের প্রথমাংশ ", - "Additional names" : "অতিরিক্ত নামসমূহ", - "New contact" : "নতুন ঠিকানা", - "Not grouped" : "দলবদ্ধ নয়", - "Nickname" : "ছদ্মনাম", - "Notes" : "নোট", - "Website" : "ওয়েবসাইট", - "Home" : "নিবাস", - "Work" : "কর্মস্থল", - "Other" : "অন্যান্য", - "Groups" : "গোষ্ঠীসমূহ", - "Birthday" : "জন্মদিন", - "Email" : "ইমেইল", - "Instant messaging" : "তাৎক্ষণিক বার্তা", - "Phone" : "ফোন", - "Mobile" : "মোবাইল", - "Fax" : "ফ্যাক্স", - "Pager" : "পেজার", - "Voice" : "কন্ঠ", - "Settings" : "নিয়ামকসমূহ" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/bs.js b/l10n/bs.js deleted file mode 100644 index 40eba207..00000000 --- a/l10n/bs.js +++ /dev/null @@ -1,34 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontakti", - "Name" : "Ime", - "Organization" : "Organizacija", - "Title" : "Titula", - "Postal code" : "Poštanski broj", - "City" : "Grad", - "State or province" : "Savezna država ili pokrajina", - "Country" : "Država", - "Address" : "Adresa", - "Last name" : "Prezime", - "First name" : "Ime", - "Additional names" : "Dodatna imena", - "New contact" : "Novi kontakt", - "Not grouped" : "Nije grupirano", - "Nickname" : "Nadimak", - "Website" : "Web-prezentacija", - "Home" : "Kuća", - "Work" : "Posao", - "Other" : "Ostali", - "Groups" : "Grupe", - "Birthday" : "Rođendan", - "Email" : "E-pošta", - "Instant messaging" : "Razmjena izravnih poruka", - "Phone" : "Telefon", - "Mobile" : "Mobitel", - "Fax" : "Faks", - "Pager" : "Dojavljivač", - "Voice" : "Glas", - "Settings" : "Postavke" -}, -"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/l10n/bs.json b/l10n/bs.json deleted file mode 100644 index ca87da8c..00000000 --- a/l10n/bs.json +++ /dev/null @@ -1,32 +0,0 @@ -{ "translations": { - "Contacts" : "Kontakti", - "Name" : "Ime", - "Organization" : "Organizacija", - "Title" : "Titula", - "Postal code" : "Poštanski broj", - "City" : "Grad", - "State or province" : "Savezna država ili pokrajina", - "Country" : "Država", - "Address" : "Adresa", - "Last name" : "Prezime", - "First name" : "Ime", - "Additional names" : "Dodatna imena", - "New contact" : "Novi kontakt", - "Not grouped" : "Nije grupirano", - "Nickname" : "Nadimak", - "Website" : "Web-prezentacija", - "Home" : "Kuća", - "Work" : "Posao", - "Other" : "Ostali", - "Groups" : "Grupe", - "Birthday" : "Rođendan", - "Email" : "E-pošta", - "Instant messaging" : "Razmjena izravnih poruka", - "Phone" : "Telefon", - "Mobile" : "Mobitel", - "Fax" : "Faks", - "Pager" : "Dojavljivač", - "Voice" : "Glas", - "Settings" : "Postavke" -},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" -} \ No newline at end of file diff --git a/l10n/ca.js b/l10n/ca.js deleted file mode 100644 index 10af2f05..00000000 --- a/l10n/ca.js +++ /dev/null @@ -1,100 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactes", - "Download" : "Baixa", - "Copy link" : "Copiar enllaç", - "Click to copy the link to your clipboard" : "Feu clic per copiar l'enllaç al porta-retalls", - "Toggle sharing" : "Canviar compartició", - "Delete" : "Suprimeix", - "Rename" : "Renombra", - "Share with users or groups" : "Comparteix amb usuaris o grups", - "can edit" : "pot editar", - "Close" : "Tanca", - "Copied!" : "Copiat!", - "Not supported!" : "No suportat!", - "Press ⌘-C to copy." : "Prem ⌘-C per copiar.", - "Press Ctrl-C to copy." : "Prem Ctrl-C per copiar.", - "Address book name" : "Nom de la llibreta d'adreces", - "Only these special characters are allowed: -_.!?#|()" : "Només es permeten aquests caràcters especials: -_.!? # | ()", - "Address book could not be created." : "No s'ha pogut crear la llibreta d'adreces.", - "The selected image is too big (max 1MB)" : "La imatge seleccionada és massa gran (màxim 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Aquesta targeta estava corrompuda i s'ha arreglat. Comprova la informació i guarda-la per fer els canvis permanents.", - "No contacts in here" : "No hi ha contactes", - "Name" : "Nom", - "Organization" : "Organització", - "Title" : "Títol", - "Add field …" : "Afegeix un camp ...", - "Save changes" : "Desa els canvis", - "Address book" : "Llibreta d'adreces", - "Loading contacts …" : "S'estan carregant contactes ...", - "Import into" : "Importa a", - "Importing..." : "Important...", - "Select your addressbook" : "Escull la teva llibreta d'adreces", - "No search result for {query}" : "No s'han trobat resultats per {query}", - "All contacts" : "Tots els contactes", - "Post office box" : "Apartat de Correus", - "Postal code" : "Codi postal", - "City" : "Ciutat", - "State or province" : "Estat o província", - "Country" : "País", - "Address" : "Adreça", - "(new group)" : "(grup nou)", - "Last name" : "Cognom", - "First name" : "Nom", - "Additional names" : "Noms addicionals", - "Prefix" : "Prefix", - "Suffix" : "Sufix", - "Importing into" : "Important a", - "New contact" : "Contacte nou", - "Not grouped" : "Sense grup", - "Sort by" : "Ordena per", - "{addressbook} shared by {owner}" : "{addressbook} compartida per {owner}", - "Contact not found." : "No s'ha trobat el contacte", - "Contact could not be created." : "No s'ha pogut crear el contacte.", - "No contacts in file. Only vCard files are allowed." : "No hi ha contactes al fitxer. Només estan permesos fitxers vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Només compatible amb VCard versió 4.0 (RFC6350) o versió 3.0 (RFC2426).", - "Contact could not be saved." : "No s'ha pogut desar el contacte.", - "Display name" : "Nom mostrat", - "Nickname" : "Sobrenom", - "Detailed name" : "Nom detallat", - "Notes" : "Anotacions", - "Website" : "Pàgina web", - "Federated Cloud ID" : "ID de núvol federat", - "Home" : "Casa", - "Work" : "Feina", - "Other" : "Un altre", - "Groups" : "Grups", - "Birthday" : "Aniversari", - "Anniversary" : "Aniversari", - "Date of death" : "Data de la mort", - "Email" : "Correu electrònic", - "Instant messaging" : "Missatgeria instantània", - "Phone" : "Telèfon", - "Mobile" : "Mòbil", - "Fax" : "Fax", - "Fax home" : "Fax (casa)", - "Fax work" : "Fax (feina)", - "Pager" : "Paginador", - "Voice" : "Veu", - "Social network" : "Xarxa social", - "Relationship" : "Relació", - "Spouse" : "Parella", - "Child" : "Fill", - "Mother" : "Mare", - "Father" : "Pare", - "Parent" : "Pares", - "Brother" : "Germà", - "Sister" : "Germana", - "Relative" : "Parent", - "Friend" : "Amic", - "Colleague" : "Company", - "Manager" : "Gestor", - "Assistant" : "Assistent", - "Gender" : "Gènere", - "Female" : "Femení", - "Male" : "Masculí", - "Details" : "Detalls", - "Settings" : "Configuració" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/ca.json b/l10n/ca.json deleted file mode 100644 index 89bc5644..00000000 --- a/l10n/ca.json +++ /dev/null @@ -1,98 +0,0 @@ -{ "translations": { - "Contacts" : "Contactes", - "Download" : "Baixa", - "Copy link" : "Copiar enllaç", - "Click to copy the link to your clipboard" : "Feu clic per copiar l'enllaç al porta-retalls", - "Toggle sharing" : "Canviar compartició", - "Delete" : "Suprimeix", - "Rename" : "Renombra", - "Share with users or groups" : "Comparteix amb usuaris o grups", - "can edit" : "pot editar", - "Close" : "Tanca", - "Copied!" : "Copiat!", - "Not supported!" : "No suportat!", - "Press ⌘-C to copy." : "Prem ⌘-C per copiar.", - "Press Ctrl-C to copy." : "Prem Ctrl-C per copiar.", - "Address book name" : "Nom de la llibreta d'adreces", - "Only these special characters are allowed: -_.!?#|()" : "Només es permeten aquests caràcters especials: -_.!? # | ()", - "Address book could not be created." : "No s'ha pogut crear la llibreta d'adreces.", - "The selected image is too big (max 1MB)" : "La imatge seleccionada és massa gran (màxim 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Aquesta targeta estava corrompuda i s'ha arreglat. Comprova la informació i guarda-la per fer els canvis permanents.", - "No contacts in here" : "No hi ha contactes", - "Name" : "Nom", - "Organization" : "Organització", - "Title" : "Títol", - "Add field …" : "Afegeix un camp ...", - "Save changes" : "Desa els canvis", - "Address book" : "Llibreta d'adreces", - "Loading contacts …" : "S'estan carregant contactes ...", - "Import into" : "Importa a", - "Importing..." : "Important...", - "Select your addressbook" : "Escull la teva llibreta d'adreces", - "No search result for {query}" : "No s'han trobat resultats per {query}", - "All contacts" : "Tots els contactes", - "Post office box" : "Apartat de Correus", - "Postal code" : "Codi postal", - "City" : "Ciutat", - "State or province" : "Estat o província", - "Country" : "País", - "Address" : "Adreça", - "(new group)" : "(grup nou)", - "Last name" : "Cognom", - "First name" : "Nom", - "Additional names" : "Noms addicionals", - "Prefix" : "Prefix", - "Suffix" : "Sufix", - "Importing into" : "Important a", - "New contact" : "Contacte nou", - "Not grouped" : "Sense grup", - "Sort by" : "Ordena per", - "{addressbook} shared by {owner}" : "{addressbook} compartida per {owner}", - "Contact not found." : "No s'ha trobat el contacte", - "Contact could not be created." : "No s'ha pogut crear el contacte.", - "No contacts in file. Only vCard files are allowed." : "No hi ha contactes al fitxer. Només estan permesos fitxers vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Només compatible amb VCard versió 4.0 (RFC6350) o versió 3.0 (RFC2426).", - "Contact could not be saved." : "No s'ha pogut desar el contacte.", - "Display name" : "Nom mostrat", - "Nickname" : "Sobrenom", - "Detailed name" : "Nom detallat", - "Notes" : "Anotacions", - "Website" : "Pàgina web", - "Federated Cloud ID" : "ID de núvol federat", - "Home" : "Casa", - "Work" : "Feina", - "Other" : "Un altre", - "Groups" : "Grups", - "Birthday" : "Aniversari", - "Anniversary" : "Aniversari", - "Date of death" : "Data de la mort", - "Email" : "Correu electrònic", - "Instant messaging" : "Missatgeria instantània", - "Phone" : "Telèfon", - "Mobile" : "Mòbil", - "Fax" : "Fax", - "Fax home" : "Fax (casa)", - "Fax work" : "Fax (feina)", - "Pager" : "Paginador", - "Voice" : "Veu", - "Social network" : "Xarxa social", - "Relationship" : "Relació", - "Spouse" : "Parella", - "Child" : "Fill", - "Mother" : "Mare", - "Father" : "Pare", - "Parent" : "Pares", - "Brother" : "Germà", - "Sister" : "Germana", - "Relative" : "Parent", - "Friend" : "Amic", - "Colleague" : "Company", - "Manager" : "Gestor", - "Assistant" : "Assistent", - "Gender" : "Gènere", - "Female" : "Femení", - "Male" : "Masculí", - "Details" : "Detalls", - "Settings" : "Configuració" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/cs.js b/l10n/cs.js deleted file mode 100644 index c814034e..00000000 --- a/l10n/cs.js +++ /dev/null @@ -1,114 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontakty", - "Download" : "Stáhnout", - "Copy link" : "Zkopírovat odkaz", - "Click to copy the link to your clipboard" : "Klikněte pro zkopírování odkazu do vaší schránky", - "Toggle sharing" : "Přepnout sdílení", - "Delete" : "Smazat", - "Rename" : "Přejmenovat", - "Share with users or groups" : "Sdílet suživateli nebo skupinami", - "can edit" : "může upravovat", - "Close" : "Zavřít", - "Enabled" : "Zapnuto", - "Disabled" : "Vypnuto", - "Copied!" : "Zkopírováno!", - "Not supported!" : "Nepodporováno!", - "Press ⌘-C to copy." : "Pro zkopírování stiskněte ⌘-C.", - "Press Ctrl-C to copy." : "Pro zkopírování stiskněte Ctrl-C.", - "Address book name" : "Název adresáře kontaktů", - "Only these special characters are allowed: -_.!?#|()" : "Jsou povoleny pouze tyto speciální znaky: -_.!?#|()", - "Address book could not be created." : "Adresář se nepodařilo vytvořit.", - "Upload new image" : "Nahrát nový obrázek", - "The selected image is too big (max 1MB)" : "Zvolený obrázek je příliš velký (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Tento kontakt je poškozen a byl obnoven. Prosím zkontrolujete data a proveďte uložení aby byly změny trvalé.", - "No contacts in here" : "Nejsou zde žádné kontakty", - "Name" : "Název", - "Organization" : "Organizace", - "Title" : "Název", - "Add field …" : "Přidat pole...", - "Save changes" : "Uložit změny", - "Address book" : "Adresář", - "Loading contacts …" : "Načítání kontaktů…", - "Import into" : "Importovat do", - "Importing..." : "Importování…", - "Select your addressbook" : "Vyberte adresář", - "No search result for {query}" : "Žádný nález pro {query}", - "All contacts" : "Všechny kontakty", - "Post office box" : "Poštovní schránka", - "Postal code" : "Směrovací číslo", - "City" : "Město", - "State or province" : "Stát nebo provincie", - "Country" : "Země", - "Address" : "Adresa", - "(new group)" : "(nová skupina)", - "Last name" : "Příjmení", - "First name" : "Jméno", - "Additional names" : "Další jména", - "Prefix" : "Předpona", - "Suffix" : "Přípona", - "Importing into" : "Importování do", - "New contact" : "Nový kontakt", - "Not grouped" : "Neseskupené", - "Sort by" : "Seřadit podle", - "{addressbook} shared by {owner}" : "{addressbook} sdílí {owner}", - "Contact not found." : "Kontakt nenalezen", - "You don't have permission to write to this addressbook." : "Nemáte oprávnění k zápisu do tohoto adresáře.", - "Contact could not be created." : "Kontakt se nepodařilo vytvořit.", - "No contacts in file. Only vCard files are allowed." : "Žádné kontakty v souboru. Pouze soubory vCard jsou povoleny.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Jsou podporovány pouze vCard verze 4.0 (RFC6350) nebo verze 3.0 (RFC2426).", - "Contact could not be moved." : "Kontakt nemohl být přesunut.", - "Contact could not be saved." : "Kontakt nemohl být uložen.", - "Waiting for the server to be ready…" : "Čekání na odpověď serveru...", - "Importing…" : "Importování...", - "Display name" : "Zobrazované jméno", - "Nickname" : "Přezdívka", - "Detailed name" : "Jméno podrobně", - "Notes" : "Poznámky", - "Website" : "Stránka", - "Federated Cloud ID" : "Sdružené cloud ID", - "Home" : "Domů", - "Work" : "Práce", - "Other" : "Jiný", - "Groups" : "Skupiny", - "Birthday" : "Narozeniny", - "Anniversary" : "Výročí", - "Date of death" : "Datum úmrtí", - "Email" : "E-mail", - "Instant messaging" : "Komunikátor", - "Phone" : "Telefon", - "Mobile" : "Mobil", - "Work mobile" : "Pracovní mobil", - "Fax" : "Fax", - "Fax home" : "Fax domů", - "Fax work" : "Fax do práce", - "Pager" : "Pager", - "Voice" : "Hlas", - "Car" : "Auto", - "Work pager" : "Pracovní pager", - "Social network" : "Sociální síť", - "Relationship" : "Vztah", - "Spouse" : "Manželka", - "Child" : "Dítě", - "Mother" : "Matka", - "Father" : "Otec", - "Parent" : "Rodič", - "Brother" : "Bratr", - "Sister" : "Sestra", - "Relative" : "Příbuzný", - "Friend" : "Přítel", - "Colleague" : "Kolega", - "Manager" : "Nadřízený", - "Assistant" : "Asistent", - "Related" : "Související", - "Contact" : "Kontakt", - "Emergency" : "Nouze", - "Co-worker" : "Spolupracovník", - "Gender" : "Pohlaví", - "Female" : "Žena", - "Male" : "Muž", - "Details" : "Detaily", - "Settings" : "Nastavení" -}, -"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"); diff --git a/l10n/cs.json b/l10n/cs.json deleted file mode 100644 index 53d97aeb..00000000 --- a/l10n/cs.json +++ /dev/null @@ -1,112 +0,0 @@ -{ "translations": { - "Contacts" : "Kontakty", - "Download" : "Stáhnout", - "Copy link" : "Zkopírovat odkaz", - "Click to copy the link to your clipboard" : "Klikněte pro zkopírování odkazu do vaší schránky", - "Toggle sharing" : "Přepnout sdílení", - "Delete" : "Smazat", - "Rename" : "Přejmenovat", - "Share with users or groups" : "Sdílet suživateli nebo skupinami", - "can edit" : "může upravovat", - "Close" : "Zavřít", - "Enabled" : "Zapnuto", - "Disabled" : "Vypnuto", - "Copied!" : "Zkopírováno!", - "Not supported!" : "Nepodporováno!", - "Press ⌘-C to copy." : "Pro zkopírování stiskněte ⌘-C.", - "Press Ctrl-C to copy." : "Pro zkopírování stiskněte Ctrl-C.", - "Address book name" : "Název adresáře kontaktů", - "Only these special characters are allowed: -_.!?#|()" : "Jsou povoleny pouze tyto speciální znaky: -_.!?#|()", - "Address book could not be created." : "Adresář se nepodařilo vytvořit.", - "Upload new image" : "Nahrát nový obrázek", - "The selected image is too big (max 1MB)" : "Zvolený obrázek je příliš velký (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Tento kontakt je poškozen a byl obnoven. Prosím zkontrolujete data a proveďte uložení aby byly změny trvalé.", - "No contacts in here" : "Nejsou zde žádné kontakty", - "Name" : "Název", - "Organization" : "Organizace", - "Title" : "Název", - "Add field …" : "Přidat pole...", - "Save changes" : "Uložit změny", - "Address book" : "Adresář", - "Loading contacts …" : "Načítání kontaktů…", - "Import into" : "Importovat do", - "Importing..." : "Importování…", - "Select your addressbook" : "Vyberte adresář", - "No search result for {query}" : "Žádný nález pro {query}", - "All contacts" : "Všechny kontakty", - "Post office box" : "Poštovní schránka", - "Postal code" : "Směrovací číslo", - "City" : "Město", - "State or province" : "Stát nebo provincie", - "Country" : "Země", - "Address" : "Adresa", - "(new group)" : "(nová skupina)", - "Last name" : "Příjmení", - "First name" : "Jméno", - "Additional names" : "Další jména", - "Prefix" : "Předpona", - "Suffix" : "Přípona", - "Importing into" : "Importování do", - "New contact" : "Nový kontakt", - "Not grouped" : "Neseskupené", - "Sort by" : "Seřadit podle", - "{addressbook} shared by {owner}" : "{addressbook} sdílí {owner}", - "Contact not found." : "Kontakt nenalezen", - "You don't have permission to write to this addressbook." : "Nemáte oprávnění k zápisu do tohoto adresáře.", - "Contact could not be created." : "Kontakt se nepodařilo vytvořit.", - "No contacts in file. Only vCard files are allowed." : "Žádné kontakty v souboru. Pouze soubory vCard jsou povoleny.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Jsou podporovány pouze vCard verze 4.0 (RFC6350) nebo verze 3.0 (RFC2426).", - "Contact could not be moved." : "Kontakt nemohl být přesunut.", - "Contact could not be saved." : "Kontakt nemohl být uložen.", - "Waiting for the server to be ready…" : "Čekání na odpověď serveru...", - "Importing…" : "Importování...", - "Display name" : "Zobrazované jméno", - "Nickname" : "Přezdívka", - "Detailed name" : "Jméno podrobně", - "Notes" : "Poznámky", - "Website" : "Stránka", - "Federated Cloud ID" : "Sdružené cloud ID", - "Home" : "Domů", - "Work" : "Práce", - "Other" : "Jiný", - "Groups" : "Skupiny", - "Birthday" : "Narozeniny", - "Anniversary" : "Výročí", - "Date of death" : "Datum úmrtí", - "Email" : "E-mail", - "Instant messaging" : "Komunikátor", - "Phone" : "Telefon", - "Mobile" : "Mobil", - "Work mobile" : "Pracovní mobil", - "Fax" : "Fax", - "Fax home" : "Fax domů", - "Fax work" : "Fax do práce", - "Pager" : "Pager", - "Voice" : "Hlas", - "Car" : "Auto", - "Work pager" : "Pracovní pager", - "Social network" : "Sociální síť", - "Relationship" : "Vztah", - "Spouse" : "Manželka", - "Child" : "Dítě", - "Mother" : "Matka", - "Father" : "Otec", - "Parent" : "Rodič", - "Brother" : "Bratr", - "Sister" : "Sestra", - "Relative" : "Příbuzný", - "Friend" : "Přítel", - "Colleague" : "Kolega", - "Manager" : "Nadřízený", - "Assistant" : "Asistent", - "Related" : "Související", - "Contact" : "Kontakt", - "Emergency" : "Nouze", - "Co-worker" : "Spolupracovník", - "Gender" : "Pohlaví", - "Female" : "Žena", - "Male" : "Muž", - "Details" : "Detaily", - "Settings" : "Nastavení" -},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;" -} \ No newline at end of file diff --git a/l10n/da.js b/l10n/da.js deleted file mode 100644 index 6f3c76a7..00000000 --- a/l10n/da.js +++ /dev/null @@ -1,107 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontakter", - "Download" : "Download", - "Copy link" : "Kopier link", - "Click to copy the link to your clipboard" : "Klik her for at kopiere linket til din udklipsholder", - "Toggle sharing" : "Toggle deling", - "Delete" : "Slet", - "Rename" : "Omdøb", - "Share with users or groups" : "Del med brugere eller grupper", - "can edit" : "kan redigere", - "Close" : "Luk", - "Copied!" : "Kopieret!", - "Not supported!" : "Ikke understøttet!", - "Press ⌘-C to copy." : "Tryk ⌘-C for at kopiere.", - "Press Ctrl-C to copy." : "Tryk Ctrl-C for at kopiere.", - "Address book name" : "Adressebogsnavn", - "Only these special characters are allowed: -_.!?#|()" : "Det er kun tilladt med disse specialtegn: -_.!?#|()", - "Address book could not be created." : "Adressebog kunne ikke oprettes", - "The selected image is too big (max 1MB)" : "Det valgte billede er for stort (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Dette kort er beskadiget og er blevet ordnet. Vær venlig at tjekke data og gem for at lave ændringerne permanente.", - "No contacts in here" : "Ingen kontaktpersoner her", - "Name" : "Navn", - "Organization" : "Organisation", - "Title" : "Titel", - "Add field …" : "Tilføj felt...", - "Save changes" : "Gem ændringer", - "Address book" : "Adressebog", - "Loading contacts …" : "Henter kontakter …", - "Import into" : "Importer til", - "Importing..." : "Importerer...", - "Select your addressbook" : "Vælg din adressebog", - "No search result for {query}" : "Ingen søgeresultater for {query}", - "All contacts" : "Alle kontakter", - "Post office box" : "Postboks", - "Postal code" : "Postnummer", - "City" : "By", - "State or province" : "Stat eller provins", - "Country" : "Land", - "Address" : "Adresse", - "(new group)" : "(new group)", - "Last name" : "Efternavn", - "First name" : "Fornavn", - "Additional names" : "Mellemnavne", - "Prefix" : "Præfiks", - "Suffix" : "Suffiks", - "Importing into" : "Importer til", - "New contact" : "Ny kontakt", - "Not grouped" : "Ikke i gruppe", - "Sort by" : "Sortér efter", - "{addressbook} shared by {owner}" : "{addressbook} delt af {owner}", - "Contact not found." : "Kontakt blev ikke fundet.", - "You don't have permission to write to this addressbook." : "Du har ikke tilladelse til at skrive i denne adressebog.", - "Contact could not be created." : "Kontakt kunne ikke oprettes.", - "No contacts in file. Only vCard files are allowed." : "Der er ikke fundet nogen kontakter i filen. Kun vCard filer er tilladt.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Kun vCard version 4.0 (RFC6350) og version 3.0 (RFC2426) er tilladte.", - "Contact could not be moved." : "Kontakt kunne ikke flyttes.", - "Contact could not be saved." : "Kontakt kunne ikke gemmes.", - "Waiting for the server to be ready…" : "Venter på at serveren bliver klar...", - "Importing…" : "Importerer...", - "Display name" : "Vis navn", - "Nickname" : "Kaldenavn", - "Detailed name" : "Detaljeret navn", - "Notes" : "Noter", - "Website" : "Hjemmeside", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Hjemme", - "Work" : "Arbejde", - "Other" : "Andet", - "Groups" : "Grupper", - "Birthday" : "Fødselsdag", - "Anniversary" : "Årsdag", - "Date of death" : "Dødsdato", - "Email" : "E-mail", - "Instant messaging" : "Instant Messaging", - "Phone" : "Telefon", - "Mobile" : "Mobil", - "Work mobile" : "Arbdejsmobil", - "Fax" : "Fax", - "Fax home" : "Fax hjemme", - "Fax work" : "Fax arbejde", - "Pager" : "Personsøger", - "Voice" : "Telefonsvarer", - "Car" : "Bil", - "Work pager" : "Arbejdespager ", - "Social network" : "Socialt netværk", - "Relationship" : "Forhold", - "Spouse" : "Ægtefælle", - "Child" : "Barn", - "Mother" : "Mor", - "Father" : "Far", - "Parent" : "Forælder", - "Brother" : "Bror", - "Sister" : "Søster", - "Relative" : "Slægtning", - "Friend" : "Ven", - "Colleague" : "Kollega", - "Manager" : "Leder", - "Assistant" : "Assistent", - "Gender" : "Køn", - "Female" : "Kvinde", - "Male" : "Mand", - "Details" : "Detaljer", - "Settings" : "Indstillinger" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/da.json b/l10n/da.json deleted file mode 100644 index eb5f5c14..00000000 --- a/l10n/da.json +++ /dev/null @@ -1,105 +0,0 @@ -{ "translations": { - "Contacts" : "Kontakter", - "Download" : "Download", - "Copy link" : "Kopier link", - "Click to copy the link to your clipboard" : "Klik her for at kopiere linket til din udklipsholder", - "Toggle sharing" : "Toggle deling", - "Delete" : "Slet", - "Rename" : "Omdøb", - "Share with users or groups" : "Del med brugere eller grupper", - "can edit" : "kan redigere", - "Close" : "Luk", - "Copied!" : "Kopieret!", - "Not supported!" : "Ikke understøttet!", - "Press ⌘-C to copy." : "Tryk ⌘-C for at kopiere.", - "Press Ctrl-C to copy." : "Tryk Ctrl-C for at kopiere.", - "Address book name" : "Adressebogsnavn", - "Only these special characters are allowed: -_.!?#|()" : "Det er kun tilladt med disse specialtegn: -_.!?#|()", - "Address book could not be created." : "Adressebog kunne ikke oprettes", - "The selected image is too big (max 1MB)" : "Det valgte billede er for stort (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Dette kort er beskadiget og er blevet ordnet. Vær venlig at tjekke data og gem for at lave ændringerne permanente.", - "No contacts in here" : "Ingen kontaktpersoner her", - "Name" : "Navn", - "Organization" : "Organisation", - "Title" : "Titel", - "Add field …" : "Tilføj felt...", - "Save changes" : "Gem ændringer", - "Address book" : "Adressebog", - "Loading contacts …" : "Henter kontakter …", - "Import into" : "Importer til", - "Importing..." : "Importerer...", - "Select your addressbook" : "Vælg din adressebog", - "No search result for {query}" : "Ingen søgeresultater for {query}", - "All contacts" : "Alle kontakter", - "Post office box" : "Postboks", - "Postal code" : "Postnummer", - "City" : "By", - "State or province" : "Stat eller provins", - "Country" : "Land", - "Address" : "Adresse", - "(new group)" : "(new group)", - "Last name" : "Efternavn", - "First name" : "Fornavn", - "Additional names" : "Mellemnavne", - "Prefix" : "Præfiks", - "Suffix" : "Suffiks", - "Importing into" : "Importer til", - "New contact" : "Ny kontakt", - "Not grouped" : "Ikke i gruppe", - "Sort by" : "Sortér efter", - "{addressbook} shared by {owner}" : "{addressbook} delt af {owner}", - "Contact not found." : "Kontakt blev ikke fundet.", - "You don't have permission to write to this addressbook." : "Du har ikke tilladelse til at skrive i denne adressebog.", - "Contact could not be created." : "Kontakt kunne ikke oprettes.", - "No contacts in file. Only vCard files are allowed." : "Der er ikke fundet nogen kontakter i filen. Kun vCard filer er tilladt.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Kun vCard version 4.0 (RFC6350) og version 3.0 (RFC2426) er tilladte.", - "Contact could not be moved." : "Kontakt kunne ikke flyttes.", - "Contact could not be saved." : "Kontakt kunne ikke gemmes.", - "Waiting for the server to be ready…" : "Venter på at serveren bliver klar...", - "Importing…" : "Importerer...", - "Display name" : "Vis navn", - "Nickname" : "Kaldenavn", - "Detailed name" : "Detaljeret navn", - "Notes" : "Noter", - "Website" : "Hjemmeside", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Hjemme", - "Work" : "Arbejde", - "Other" : "Andet", - "Groups" : "Grupper", - "Birthday" : "Fødselsdag", - "Anniversary" : "Årsdag", - "Date of death" : "Dødsdato", - "Email" : "E-mail", - "Instant messaging" : "Instant Messaging", - "Phone" : "Telefon", - "Mobile" : "Mobil", - "Work mobile" : "Arbdejsmobil", - "Fax" : "Fax", - "Fax home" : "Fax hjemme", - "Fax work" : "Fax arbejde", - "Pager" : "Personsøger", - "Voice" : "Telefonsvarer", - "Car" : "Bil", - "Work pager" : "Arbejdespager ", - "Social network" : "Socialt netværk", - "Relationship" : "Forhold", - "Spouse" : "Ægtefælle", - "Child" : "Barn", - "Mother" : "Mor", - "Father" : "Far", - "Parent" : "Forælder", - "Brother" : "Bror", - "Sister" : "Søster", - "Relative" : "Slægtning", - "Friend" : "Ven", - "Colleague" : "Kollega", - "Manager" : "Leder", - "Assistant" : "Assistent", - "Gender" : "Køn", - "Female" : "Kvinde", - "Male" : "Mand", - "Details" : "Detaljer", - "Settings" : "Indstillinger" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/de.js b/l10n/de.js deleted file mode 100644 index 1882759b..00000000 --- a/l10n/de.js +++ /dev/null @@ -1,121 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontakte", - "Download" : "Herunterladen", - "Copy link" : "Link kopieren", - "Click to copy the link to your clipboard" : "Durch klicken wird der Link in die Zwischenablage kopiert", - "Toggle sharing" : "Freigabe umschalten", - "Delete" : "Löschen", - "Rename" : "Umbenennen", - "Share with users or groups" : "Mit Benutzern oder Gruppen teilen", - "can edit" : "kann bearbeiten", - "Close" : "Schließen", - "Enabled" : "Aktiviert", - "Disabled" : "Deaktiviert", - "Copied!" : "Kopiert!", - "Not supported!" : "Nicht unterstützt!", - "Press ⌘-C to copy." : "Zum Kopieren ⌘-C drücken.", - "Press Ctrl-C to copy." : "Zum Kopieren Strg-C drücken.", - "Address book name" : "Name des Adressbuchs", - "Only these special characters are allowed: -_.!?#|()" : "Es sind nur die folgenden Sonderzeichen erlaubt: -_.!?#|()", - "Address book could not be created." : "Adressbuch konnte nicht erstellt werden", - "Upload new image" : "Neues Bild hochladen", - "The selected image is too big (max 1MB)" : "Das ausgewählte Bild ist zu groß (max. 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Diese Karte ist beschädigt und wurde repariert. Überprüfe die Daten und speichere diese, um die Änderungen dauerhaft zu übernehmen.", - "No contacts in here" : "Keine Kontakte vorhanden", - "Name" : "Name", - "Organization" : "Organisation", - "Title" : "Titel", - "Add field …" : "Feld hinzufügen…", - "Save changes" : "Änderungen speichern", - "Address book" : "Adressbuch", - "Loading contacts …" : "Kontakte laden…", - "Import into" : "Importieren nach", - "Importing..." : "Importiere…", - "Select your addressbook" : "Wähle Dein Adressbuch", - "Import is disabled because no writable address book had been found." : "Der Import wurde deaktiviert, denn es wurde kein beschreibbares Adressbuch gefunden.", - "No search result for {query}" : "Keine Suchergebnisse zu {query}", - "All contacts" : "Alle Kontakte", - "Post office box" : "Postfach", - "Postal code" : "Postleitzahl", - "City" : "Stadt", - "State or province" : "Bundesland oder Region", - "Country" : "Land", - "Address" : "Adresse", - "(new group)" : "(neue Gruppe)", - "Last name" : "Nachname", - "First name" : "Vorname", - "Additional names" : "Zusätzliche Namen", - "Prefix" : "Präfix", - "Suffix" : "Suffix", - "Importing into" : "Importiere nach", - "New contact" : "Neuer Kontakt", - "Not grouped" : "Nicht gruppiert", - "Sort by" : "Sortiere nach", - "There is no address book available to create a contact." : "Es ist kein Adressbuch vorhanden um den Kontakt zu erstellen.", - "{addressbook} shared by {owner}" : "{addressbook} geteilt von {owner}", - "Contact not found." : "Kontakt nicht gefunden.", - "You don't have permission to write to this addressbook." : "Du hast nicht die Berechtigung um Einträge in diesem Adressbuch vorzunehmen", - "Contact could not be created." : "Kontakt konnte nicht erstellt werden.", - "No contacts in file. Only vCard files are allowed." : "Keine Adressen in der Datei. Es kann nur das vCard-Format verarbeitet werden.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Es werden nur vCard-Format 4.0 (RFC6350) oder 3.0 (RFC2426) unterstützt.", - "Contact could not be moved." : "Kontakt konnte nicht verschoben werden.", - "Contact could not be saved." : "Kontakt konnte nicht gespeichert werden.", - "Waiting for the server to be ready…" : "Warte bis der Server bereit ist…", - "Importing…" : "Importiere…", - "Display name" : "Anzeigename", - "Nickname" : "Spitzname", - "Detailed name" : "Detaillierter Name", - "Notes" : "Notizen", - "Website" : "Internetseite", - "Federated Cloud ID" : "Federated-Cloud-ID", - "Home" : "Privat", - "Work" : "Arbeit", - "Other" : "Andere", - "Groups" : "Gruppen", - "Birthday" : "Geburtstag", - "Anniversary" : "Jahrestag", - "Date of death" : "Todestag", - "Email" : "E-Mail", - "Instant messaging" : "Instant Messaging", - "Phone" : "Telefon", - "Mobile" : "Mobil", - "Work mobile" : "Mobil Arbeit", - "Fax" : "Fax", - "Fax home" : "Fax privat", - "Fax work" : "Fax Arbeit", - "Pager" : "Pager", - "Voice" : "Anruf", - "Car" : "Auto", - "Work pager" : "Pager Arbeit", - "Social network" : "Soziales Netzwerk", - "Relationship" : "Beziehung", - "Specify a relationship between you and the entity represented by this vCard." : "Wähle die Beziehungsart zwischen Dir und der Einheit, welche diese vCard darstellt.", - "Spouse" : "Partner", - "Child" : "Kind", - "Mother" : "Mutter", - "Father" : "Vater", - "Parent" : "Elternteil", - "Brother" : "Bruder", - "Sister" : "Schwester", - "Relative" : "Verwandter", - "Friend" : "Freund", - "Colleague" : "Arbeitskollege", - "Manager" : "Geschäftsleiter", - "Assistant" : "Assistent", - "Related" : "Verwandt", - "Specify a relationship between another entity and the entity represented by this vCard." : "Wähle die Beziehungsart zwischen Dir und der Einheit, welche diese vCard darstellt.", - "Contact" : "Kontakt", - "Agent" : "Vertreter", - "Emergency" : "Notfall", - "Co-worker" : "Kollege", - "Gender" : "Geschlecht", - "Female" : "Weiblich", - "Male" : "Männlich", - "Details" : "Details", - "A contacts app for Nextcloud" : "Eine Adressbuch-App für Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "Die Nextcloud-Kontaktapp ist eine Benutzeroberfläche für den CardDAV-Server von Nextcloud. Synchronisiere deine Kontakte von unterschiedlichen Geräten mit Nextcloud und bearbeite sie online.\n\n* 🚀 **Integration mit anderen Nextcloud-Anwendungen!** Aktuell Mail und Kalender - weitere sind in Planung.\n* 🎉 **Niemals einen Geburtstag vergessen!** Du kannst Geburtstage und andere wiederkehrende Ereignisse mit deinem Nextcloud Kalender synchronisieren.\n* 👥 **Teilen von Adressbüchern!** Du möchtest deine Kontakte mit Freunden oder Kollegen teilen? Kein Problem!\n* 🙈 **Wir erfinden das Rad nicht neu!** Basiert auf der großartigen und offenen SabreDAV-Bibliothek.", - "Settings" : "Einstellungen" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/de.json b/l10n/de.json deleted file mode 100644 index a7599667..00000000 --- a/l10n/de.json +++ /dev/null @@ -1,119 +0,0 @@ -{ "translations": { - "Contacts" : "Kontakte", - "Download" : "Herunterladen", - "Copy link" : "Link kopieren", - "Click to copy the link to your clipboard" : "Durch klicken wird der Link in die Zwischenablage kopiert", - "Toggle sharing" : "Freigabe umschalten", - "Delete" : "Löschen", - "Rename" : "Umbenennen", - "Share with users or groups" : "Mit Benutzern oder Gruppen teilen", - "can edit" : "kann bearbeiten", - "Close" : "Schließen", - "Enabled" : "Aktiviert", - "Disabled" : "Deaktiviert", - "Copied!" : "Kopiert!", - "Not supported!" : "Nicht unterstützt!", - "Press ⌘-C to copy." : "Zum Kopieren ⌘-C drücken.", - "Press Ctrl-C to copy." : "Zum Kopieren Strg-C drücken.", - "Address book name" : "Name des Adressbuchs", - "Only these special characters are allowed: -_.!?#|()" : "Es sind nur die folgenden Sonderzeichen erlaubt: -_.!?#|()", - "Address book could not be created." : "Adressbuch konnte nicht erstellt werden", - "Upload new image" : "Neues Bild hochladen", - "The selected image is too big (max 1MB)" : "Das ausgewählte Bild ist zu groß (max. 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Diese Karte ist beschädigt und wurde repariert. Überprüfe die Daten und speichere diese, um die Änderungen dauerhaft zu übernehmen.", - "No contacts in here" : "Keine Kontakte vorhanden", - "Name" : "Name", - "Organization" : "Organisation", - "Title" : "Titel", - "Add field …" : "Feld hinzufügen…", - "Save changes" : "Änderungen speichern", - "Address book" : "Adressbuch", - "Loading contacts …" : "Kontakte laden…", - "Import into" : "Importieren nach", - "Importing..." : "Importiere…", - "Select your addressbook" : "Wähle Dein Adressbuch", - "Import is disabled because no writable address book had been found." : "Der Import wurde deaktiviert, denn es wurde kein beschreibbares Adressbuch gefunden.", - "No search result for {query}" : "Keine Suchergebnisse zu {query}", - "All contacts" : "Alle Kontakte", - "Post office box" : "Postfach", - "Postal code" : "Postleitzahl", - "City" : "Stadt", - "State or province" : "Bundesland oder Region", - "Country" : "Land", - "Address" : "Adresse", - "(new group)" : "(neue Gruppe)", - "Last name" : "Nachname", - "First name" : "Vorname", - "Additional names" : "Zusätzliche Namen", - "Prefix" : "Präfix", - "Suffix" : "Suffix", - "Importing into" : "Importiere nach", - "New contact" : "Neuer Kontakt", - "Not grouped" : "Nicht gruppiert", - "Sort by" : "Sortiere nach", - "There is no address book available to create a contact." : "Es ist kein Adressbuch vorhanden um den Kontakt zu erstellen.", - "{addressbook} shared by {owner}" : "{addressbook} geteilt von {owner}", - "Contact not found." : "Kontakt nicht gefunden.", - "You don't have permission to write to this addressbook." : "Du hast nicht die Berechtigung um Einträge in diesem Adressbuch vorzunehmen", - "Contact could not be created." : "Kontakt konnte nicht erstellt werden.", - "No contacts in file. Only vCard files are allowed." : "Keine Adressen in der Datei. Es kann nur das vCard-Format verarbeitet werden.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Es werden nur vCard-Format 4.0 (RFC6350) oder 3.0 (RFC2426) unterstützt.", - "Contact could not be moved." : "Kontakt konnte nicht verschoben werden.", - "Contact could not be saved." : "Kontakt konnte nicht gespeichert werden.", - "Waiting for the server to be ready…" : "Warte bis der Server bereit ist…", - "Importing…" : "Importiere…", - "Display name" : "Anzeigename", - "Nickname" : "Spitzname", - "Detailed name" : "Detaillierter Name", - "Notes" : "Notizen", - "Website" : "Internetseite", - "Federated Cloud ID" : "Federated-Cloud-ID", - "Home" : "Privat", - "Work" : "Arbeit", - "Other" : "Andere", - "Groups" : "Gruppen", - "Birthday" : "Geburtstag", - "Anniversary" : "Jahrestag", - "Date of death" : "Todestag", - "Email" : "E-Mail", - "Instant messaging" : "Instant Messaging", - "Phone" : "Telefon", - "Mobile" : "Mobil", - "Work mobile" : "Mobil Arbeit", - "Fax" : "Fax", - "Fax home" : "Fax privat", - "Fax work" : "Fax Arbeit", - "Pager" : "Pager", - "Voice" : "Anruf", - "Car" : "Auto", - "Work pager" : "Pager Arbeit", - "Social network" : "Soziales Netzwerk", - "Relationship" : "Beziehung", - "Specify a relationship between you and the entity represented by this vCard." : "Wähle die Beziehungsart zwischen Dir und der Einheit, welche diese vCard darstellt.", - "Spouse" : "Partner", - "Child" : "Kind", - "Mother" : "Mutter", - "Father" : "Vater", - "Parent" : "Elternteil", - "Brother" : "Bruder", - "Sister" : "Schwester", - "Relative" : "Verwandter", - "Friend" : "Freund", - "Colleague" : "Arbeitskollege", - "Manager" : "Geschäftsleiter", - "Assistant" : "Assistent", - "Related" : "Verwandt", - "Specify a relationship between another entity and the entity represented by this vCard." : "Wähle die Beziehungsart zwischen Dir und der Einheit, welche diese vCard darstellt.", - "Contact" : "Kontakt", - "Agent" : "Vertreter", - "Emergency" : "Notfall", - "Co-worker" : "Kollege", - "Gender" : "Geschlecht", - "Female" : "Weiblich", - "Male" : "Männlich", - "Details" : "Details", - "A contacts app for Nextcloud" : "Eine Adressbuch-App für Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "Die Nextcloud-Kontaktapp ist eine Benutzeroberfläche für den CardDAV-Server von Nextcloud. Synchronisiere deine Kontakte von unterschiedlichen Geräten mit Nextcloud und bearbeite sie online.\n\n* 🚀 **Integration mit anderen Nextcloud-Anwendungen!** Aktuell Mail und Kalender - weitere sind in Planung.\n* 🎉 **Niemals einen Geburtstag vergessen!** Du kannst Geburtstage und andere wiederkehrende Ereignisse mit deinem Nextcloud Kalender synchronisieren.\n* 👥 **Teilen von Adressbüchern!** Du möchtest deine Kontakte mit Freunden oder Kollegen teilen? Kein Problem!\n* 🙈 **Wir erfinden das Rad nicht neu!** Basiert auf der großartigen und offenen SabreDAV-Bibliothek.", - "Settings" : "Einstellungen" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/de_DE.js b/l10n/de_DE.js deleted file mode 100644 index 080e3dfe..00000000 --- a/l10n/de_DE.js +++ /dev/null @@ -1,121 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontakte", - "Download" : "Herunterladen", - "Copy link" : "Link kopieren", - "Click to copy the link to your clipboard" : "Durch klicken wird der Link in die Zwischenablage kopiert", - "Toggle sharing" : "Freigabe umschalten", - "Delete" : "Löschen", - "Rename" : "Umbenennen", - "Share with users or groups" : "Mit Benutzern oder Gruppen teilen", - "can edit" : "kann bearbeiten", - "Close" : "Schließen", - "Enabled" : "Aktiviert", - "Disabled" : "Deaktiviert", - "Copied!" : "Kopiert!", - "Not supported!" : "Nicht unterstützt!", - "Press ⌘-C to copy." : "Zum Kopieren ⌘-C drücken.", - "Press Ctrl-C to copy." : "Zum Kopieren Strg-C drücken.", - "Address book name" : "Name des Adressbuchs", - "Only these special characters are allowed: -_.!?#|()" : "Es sind nur die folgenden Sonderzeichen erlaubt: -_.!?#|()", - "Address book could not be created." : "Adressbuch konnte nicht erstellt werden.", - "Upload new image" : "Neues Bild hochladen", - "The selected image is too big (max 1MB)" : "Das ausgewählte Bild ist zu groß (max. 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Diese Karte ist beschädigt und wurde repariert. Überprüfen Sie die Daten. Speichern Sie um die Änderungen dauerhaft zu übernehmen.", - "No contacts in here" : "Keine Kontakte vorhanden", - "Name" : "Name", - "Organization" : "Organisation", - "Title" : "Titel", - "Add field …" : "Feld hinzufügen…", - "Save changes" : "Änderungen speichern", - "Address book" : "Adressbuch", - "Loading contacts …" : "Kontakte laden…", - "Import into" : "Importieren nach", - "Importing..." : "Importiere…", - "Select your addressbook" : "Wählen Sie Ihr Adressbuch", - "Import is disabled because no writable address book had been found." : "Der Import ist deaktiviert, da kein beschreibbares Adressbuch gefunden wurde.", - "No search result for {query}" : "Keine Suchergebnisse zu {query}", - "All contacts" : "Alle Kontakte", - "Post office box" : "Postfach", - "Postal code" : "Postleitzahl", - "City" : "Stadt", - "State or province" : "Bundesland oder Region", - "Country" : "Land", - "Address" : "Adresse", - "(new group)" : "(neue Gruppe)", - "Last name" : "Nachname", - "First name" : "Vorname", - "Additional names" : "Zusätzliche Namen", - "Prefix" : "Präfix", - "Suffix" : "Suffix", - "Importing into" : "Importiere nach", - "New contact" : "Neuer Kontakt", - "Not grouped" : "Nicht gruppiert", - "Sort by" : "Sortiere nach", - "There is no address book available to create a contact." : "Es ist kein Adressbuch verfügbar, um einen Kontakt zu erstellen.", - "{addressbook} shared by {owner}" : "{addressbook} geteilt von {owner}", - "Contact not found." : "Kontakt nicht gefunden.", - "You don't have permission to write to this addressbook." : "Sie haben nicht die Berechtigung um Einträge in diesem Adressbuch vorzunehmen.", - "Contact could not be created." : "Kontakt konnte nicht erstellt werden.", - "No contacts in file. Only vCard files are allowed." : "Keine Adressen in der Datei. Es kann nur das vCard-Format verarbeitet werden.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Es werden nur vCard-Format 4.0 (RFC6350) oder 3.0 (RFC2426) unterstützt.", - "Contact could not be moved." : "Kontakt konnte nicht verschoben werden.", - "Contact could not be saved." : "Kontakt konnte nicht gespeichert werden.", - "Waiting for the server to be ready…" : "Warte bis der Server bereit ist…", - "Importing…" : "Importiere…", - "Display name" : "Anzeigename", - "Nickname" : "Spitzname", - "Detailed name" : "Detaillierter Name", - "Notes" : "Notizen", - "Website" : "Internetseite", - "Federated Cloud ID" : "Federated-Cloud-ID", - "Home" : "Privat", - "Work" : "Arbeit", - "Other" : "Andere", - "Groups" : "Gruppen", - "Birthday" : "Geburtstag", - "Anniversary" : "Jahrestag", - "Date of death" : "Todestag", - "Email" : "E-Mail", - "Instant messaging" : "Instant Messaging", - "Phone" : "Telefon", - "Mobile" : "Mobil", - "Work mobile" : "Mobil Arbeit", - "Fax" : "Fax", - "Fax home" : "Fax privat", - "Fax work" : "Fax Arbeit", - "Pager" : "Pager", - "Voice" : "Anruf", - "Car" : "Auto", - "Work pager" : "Pager Arbeit", - "Social network" : "Soziales Netzwerk", - "Relationship" : "Beziehung", - "Specify a relationship between you and the entity represented by this vCard." : "Wählen Sie die Beziehungsart zwischen Ihnen und der Einheit, welche diese vCard darstellt.", - "Spouse" : "Partner", - "Child" : "Kind", - "Mother" : "Mutter", - "Father" : "Vater", - "Parent" : "Eltern", - "Brother" : "Bruder", - "Sister" : "Schwester", - "Relative" : "Verwandter", - "Friend" : "Freund", - "Colleague" : "Kollege", - "Manager" : "Geschäftsleiter", - "Assistant" : "Assistent", - "Related" : "Verwandt", - "Specify a relationship between another entity and the entity represented by this vCard." : "Wählen Sie die Beziehungsart zwischen einer Einheit und der Einheit, welche diese vCard darstellt.", - "Contact" : "Kontakt", - "Agent" : "Vertreter", - "Emergency" : "Notfall", - "Co-worker" : "Kollege", - "Gender" : "Geschlecht", - "Female" : "Weiblich", - "Male" : "Männlich", - "Details" : "Details", - "A contacts app for Nextcloud" : "Eine Adressbuch-App für Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "Die Nextcloud Adressbuch-App ist eine Benutzeroberfläche für den CardDAV Server der Nextcloud. Synchronisieren Sie Kontakte von verschiedenen Geräten mit Ihrer Nextcloud und bearbeiten Sie sie online.\n* 🚀 ** Integration mit anderen Nextcloud-Apps! Aktuell Mail und Kalender – mehr dazu in Kürze.\n* 🎉 **Niemals einen Geburtstag vergessen!** Sie können Geburtstage und andere wiederkehrende Ereignisse mit Ihrem Nextcloud Kalender synchronisieren.\n* 👥 **Adressbücher teilen!** Sie möchten Ihre Kontakte mit Ihren Freunden oder Kollegen teilen? Kein Problem!\n* 🙈 **Wir erfinden das Rad nicht neu!** Basierend auf der großen und offenen SabreDAV-Bibliothek.", - "Settings" : "Einstellungen" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/de_DE.json b/l10n/de_DE.json deleted file mode 100644 index 4c32c744..00000000 --- a/l10n/de_DE.json +++ /dev/null @@ -1,119 +0,0 @@ -{ "translations": { - "Contacts" : "Kontakte", - "Download" : "Herunterladen", - "Copy link" : "Link kopieren", - "Click to copy the link to your clipboard" : "Durch klicken wird der Link in die Zwischenablage kopiert", - "Toggle sharing" : "Freigabe umschalten", - "Delete" : "Löschen", - "Rename" : "Umbenennen", - "Share with users or groups" : "Mit Benutzern oder Gruppen teilen", - "can edit" : "kann bearbeiten", - "Close" : "Schließen", - "Enabled" : "Aktiviert", - "Disabled" : "Deaktiviert", - "Copied!" : "Kopiert!", - "Not supported!" : "Nicht unterstützt!", - "Press ⌘-C to copy." : "Zum Kopieren ⌘-C drücken.", - "Press Ctrl-C to copy." : "Zum Kopieren Strg-C drücken.", - "Address book name" : "Name des Adressbuchs", - "Only these special characters are allowed: -_.!?#|()" : "Es sind nur die folgenden Sonderzeichen erlaubt: -_.!?#|()", - "Address book could not be created." : "Adressbuch konnte nicht erstellt werden.", - "Upload new image" : "Neues Bild hochladen", - "The selected image is too big (max 1MB)" : "Das ausgewählte Bild ist zu groß (max. 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Diese Karte ist beschädigt und wurde repariert. Überprüfen Sie die Daten. Speichern Sie um die Änderungen dauerhaft zu übernehmen.", - "No contacts in here" : "Keine Kontakte vorhanden", - "Name" : "Name", - "Organization" : "Organisation", - "Title" : "Titel", - "Add field …" : "Feld hinzufügen…", - "Save changes" : "Änderungen speichern", - "Address book" : "Adressbuch", - "Loading contacts …" : "Kontakte laden…", - "Import into" : "Importieren nach", - "Importing..." : "Importiere…", - "Select your addressbook" : "Wählen Sie Ihr Adressbuch", - "Import is disabled because no writable address book had been found." : "Der Import ist deaktiviert, da kein beschreibbares Adressbuch gefunden wurde.", - "No search result for {query}" : "Keine Suchergebnisse zu {query}", - "All contacts" : "Alle Kontakte", - "Post office box" : "Postfach", - "Postal code" : "Postleitzahl", - "City" : "Stadt", - "State or province" : "Bundesland oder Region", - "Country" : "Land", - "Address" : "Adresse", - "(new group)" : "(neue Gruppe)", - "Last name" : "Nachname", - "First name" : "Vorname", - "Additional names" : "Zusätzliche Namen", - "Prefix" : "Präfix", - "Suffix" : "Suffix", - "Importing into" : "Importiere nach", - "New contact" : "Neuer Kontakt", - "Not grouped" : "Nicht gruppiert", - "Sort by" : "Sortiere nach", - "There is no address book available to create a contact." : "Es ist kein Adressbuch verfügbar, um einen Kontakt zu erstellen.", - "{addressbook} shared by {owner}" : "{addressbook} geteilt von {owner}", - "Contact not found." : "Kontakt nicht gefunden.", - "You don't have permission to write to this addressbook." : "Sie haben nicht die Berechtigung um Einträge in diesem Adressbuch vorzunehmen.", - "Contact could not be created." : "Kontakt konnte nicht erstellt werden.", - "No contacts in file. Only vCard files are allowed." : "Keine Adressen in der Datei. Es kann nur das vCard-Format verarbeitet werden.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Es werden nur vCard-Format 4.0 (RFC6350) oder 3.0 (RFC2426) unterstützt.", - "Contact could not be moved." : "Kontakt konnte nicht verschoben werden.", - "Contact could not be saved." : "Kontakt konnte nicht gespeichert werden.", - "Waiting for the server to be ready…" : "Warte bis der Server bereit ist…", - "Importing…" : "Importiere…", - "Display name" : "Anzeigename", - "Nickname" : "Spitzname", - "Detailed name" : "Detaillierter Name", - "Notes" : "Notizen", - "Website" : "Internetseite", - "Federated Cloud ID" : "Federated-Cloud-ID", - "Home" : "Privat", - "Work" : "Arbeit", - "Other" : "Andere", - "Groups" : "Gruppen", - "Birthday" : "Geburtstag", - "Anniversary" : "Jahrestag", - "Date of death" : "Todestag", - "Email" : "E-Mail", - "Instant messaging" : "Instant Messaging", - "Phone" : "Telefon", - "Mobile" : "Mobil", - "Work mobile" : "Mobil Arbeit", - "Fax" : "Fax", - "Fax home" : "Fax privat", - "Fax work" : "Fax Arbeit", - "Pager" : "Pager", - "Voice" : "Anruf", - "Car" : "Auto", - "Work pager" : "Pager Arbeit", - "Social network" : "Soziales Netzwerk", - "Relationship" : "Beziehung", - "Specify a relationship between you and the entity represented by this vCard." : "Wählen Sie die Beziehungsart zwischen Ihnen und der Einheit, welche diese vCard darstellt.", - "Spouse" : "Partner", - "Child" : "Kind", - "Mother" : "Mutter", - "Father" : "Vater", - "Parent" : "Eltern", - "Brother" : "Bruder", - "Sister" : "Schwester", - "Relative" : "Verwandter", - "Friend" : "Freund", - "Colleague" : "Kollege", - "Manager" : "Geschäftsleiter", - "Assistant" : "Assistent", - "Related" : "Verwandt", - "Specify a relationship between another entity and the entity represented by this vCard." : "Wählen Sie die Beziehungsart zwischen einer Einheit und der Einheit, welche diese vCard darstellt.", - "Contact" : "Kontakt", - "Agent" : "Vertreter", - "Emergency" : "Notfall", - "Co-worker" : "Kollege", - "Gender" : "Geschlecht", - "Female" : "Weiblich", - "Male" : "Männlich", - "Details" : "Details", - "A contacts app for Nextcloud" : "Eine Adressbuch-App für Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "Die Nextcloud Adressbuch-App ist eine Benutzeroberfläche für den CardDAV Server der Nextcloud. Synchronisieren Sie Kontakte von verschiedenen Geräten mit Ihrer Nextcloud und bearbeiten Sie sie online.\n* 🚀 ** Integration mit anderen Nextcloud-Apps! Aktuell Mail und Kalender – mehr dazu in Kürze.\n* 🎉 **Niemals einen Geburtstag vergessen!** Sie können Geburtstage und andere wiederkehrende Ereignisse mit Ihrem Nextcloud Kalender synchronisieren.\n* 👥 **Adressbücher teilen!** Sie möchten Ihre Kontakte mit Ihren Freunden oder Kollegen teilen? Kein Problem!\n* 🙈 **Wir erfinden das Rad nicht neu!** Basierend auf der großen und offenen SabreDAV-Bibliothek.", - "Settings" : "Einstellungen" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/el.js b/l10n/el.js deleted file mode 100644 index bbc8e36e..00000000 --- a/l10n/el.js +++ /dev/null @@ -1,114 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Επαφές", - "Download" : "Λήψη", - "Copy link" : "Αντιγραφή συνδέσμου", - "Click to copy the link to your clipboard" : "Αντιγραφή του συνδέσμου στο πρόχειρο", - "Toggle sharing" : "Εναλλαγή διαμοιρασμού", - "Delete" : "Διαγραφή", - "Rename" : "Μετονομασία", - "Share with users or groups" : "Διαμοιρασμός με χρήστες ή ομάδες", - "can edit" : "με δυνατότητα επεξεργασίας", - "Close" : "Κλείσιμο", - "Enabled" : "Ενεργοποιημένο", - "Disabled" : "Απενεργοποιημένο", - "Copied!" : "Αντιγράφτηκε!", - "Not supported!" : "Δεν υποστηρίζεται!", - "Press ⌘-C to copy." : "Για αντιγραφή πατήστε ⌘-C.", - "Press Ctrl-C to copy." : "Για αντιγραφή πατήστε Ctrl-C.", - "Address book name" : "Όνομα βιβλίου διευθύνσεων", - "Only these special characters are allowed: -_.!?#|()" : "Επιτρέπονται μόνο αυτοί οι ειδικοί χαρακτήρες: -_.!?#|()", - "Address book could not be created." : "Το βιβλίο διευθύνσεων δεν μπορεί να δημιουργηθεί.", - "Upload new image" : "Μεταφόρτωση νέας εικόνας", - "The selected image is too big (max 1MB)" : "Η επιλεγμένη εικόνα είναι πολύ μεγάλη (Μεγ. 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Αυτή η κάρτα είναι κατεστραμμένη και έχει διορθωθεί. Παρακαλώ ελέγξτε τα δεδομένα και αποθηκεύσετε τα ώστε οι αλλαγές να γίνουν μόνιμες.", - "No contacts in here" : "Δεν υπάρχουν επαφές εδώ", - "Name" : "Όνομα", - "Organization" : "Οργανισμός", - "Title" : "Τίτλος", - "Add field …" : "Προσθήκη πεδίου...", - "Save changes" : "Αποθήκευση αλλαγών", - "Address book" : "Βιβλίο διευθύνσεων", - "Loading contacts …" : "Φόρτωση επαφών ...", - "Import into" : "Εισαγωγή σε", - "Importing..." : "Γίνεται εισαγωγή...", - "Select your addressbook" : "Επιλογή βιβλίου διευθύνσεων", - "Import is disabled because no writable address book had been found." : "Η λειτουργία εισαγωγής απενεργοποιήθηκε, καθώς δεν βρέθηκε κάποιο βιβλίο διευθύνσεων με δικαιώματα εγγραφής.", - "No search result for {query}" : "Δεν βρέθηκε αποτέλεσμα αναζήτησης για {query}", - "All contacts" : "Όλες οι επαφές", - "Post office box" : "Ταχυδρομική θυρίδα", - "Postal code" : "Ταχυδρομικός Κώδικας", - "City" : "Πόλη", - "State or province" : "Νομός ή περιφέρεια", - "Country" : "Χώρα", - "Address" : "Διεύθυνση", - "(new group)" : "(νέα ομάδα)", - "Last name" : "Επώνυμο", - "First name" : "Όνομα", - "Additional names" : "Επιπλέον ονόματα", - "Prefix" : "Πρόθεμα", - "Suffix" : "Κατάληξη", - "Importing into" : "Εισαγωγή σε", - "New contact" : "Νέα επαφή", - "Not grouped" : "Οχι ομαδοποιημένα", - "Sort by" : "Ταξινόμηση κατά", - "There is no address book available to create a contact." : "Δεν υπάρχει βιβλίο διευθύνσεων διαθέσιμο για την δημιουργία της επαφής.", - "{addressbook} shared by {owner}" : "Το {addressbook} διαμοιράστηκε από τον/την {owner}", - "Contact not found." : "Δεν βρέθηκε η επαφή.", - "You don't have permission to write to this addressbook." : "Δεν έχετε δικαίωμα εγγραφής σε αυτό το βιβλίο διευθύνσεων.", - "Contact could not be created." : "Αδυναμία δημιουργίας επαφής.", - "No contacts in file. Only vCard files are allowed." : "Δεν υπάρχουν επαφές στο αρχείο. Μόνο vCard αρχεία επιτρέπονται.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Υποστηρίζεται μόνο η VCard έκδοση 4.0 (RFC6350) ή έκδοση 3.0 (RFC2426).", - "Contact could not be moved." : "Η επαφή δεν μπορεί να μετακινηθεί.", - "Contact could not be saved." : "Αδυναμία αποθήκευσης επαφής.", - "Waiting for the server to be ready…" : "Αναμονή για προετοιμασία του διακομιστή...", - "Importing…" : "Γίνεται εισαγωγή...", - "Display name" : "Εμφανιζόμενο όνομα", - "Nickname" : "Παρατσούκλι", - "Detailed name" : "Λεπτομερές όνομα", - "Notes" : "Σημειώσεις", - "Website" : "Ιστοσελίδα", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Σπίτι", - "Work" : "Εργασία", - "Other" : "Άλλο", - "Groups" : "Ομάδες", - "Birthday" : "Γενέθλια", - "Anniversary" : "Επέτειος", - "Date of death" : "Ημερομηνία θανάτου", - "Email" : "Ηλ. ταχυδρομείο", - "Instant messaging" : "Άμεσα μηνύματα", - "Phone" : "Τηλέφωνο", - "Mobile" : "Κινητό", - "Work mobile" : "Κινητό εργασίας", - "Fax" : "Φαξ", - "Fax home" : "Φαξ σπίτι", - "Fax work" : "Φαξ εργασία", - "Pager" : "Βομβητής", - "Voice" : "Ομιλία", - "Car" : "Αμάξι", - "Work pager" : "Βομβητής δουλειάς", - "Social network" : "Κοινωνικό δίκτυο", - "Relationship" : "Σχέση", - "Spouse" : "Σύζηγος", - "Child" : "Παιδί", - "Mother" : "Μητέρα", - "Father" : "Πατέρας", - "Parent" : "Γονέας", - "Brother" : "Αδελφός", - "Sister" : "Αδελφή", - "Relative" : "Συγγενής", - "Friend" : "Φίλος", - "Colleague" : "Συνάδελφος", - "Manager" : "Διευθυντής", - "Assistant" : "Βοηθός", - "Contact" : "Επαφή", - "Co-worker" : "Συνεργάτης", - "Gender" : "Φύλλο", - "Female" : "Θηλυκό", - "Male" : "Αρσενικό", - "Details" : "Λεπτομέριες", - "Settings" : "Ρυθμίσεις" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/el.json b/l10n/el.json deleted file mode 100644 index 4b8f9e76..00000000 --- a/l10n/el.json +++ /dev/null @@ -1,112 +0,0 @@ -{ "translations": { - "Contacts" : "Επαφές", - "Download" : "Λήψη", - "Copy link" : "Αντιγραφή συνδέσμου", - "Click to copy the link to your clipboard" : "Αντιγραφή του συνδέσμου στο πρόχειρο", - "Toggle sharing" : "Εναλλαγή διαμοιρασμού", - "Delete" : "Διαγραφή", - "Rename" : "Μετονομασία", - "Share with users or groups" : "Διαμοιρασμός με χρήστες ή ομάδες", - "can edit" : "με δυνατότητα επεξεργασίας", - "Close" : "Κλείσιμο", - "Enabled" : "Ενεργοποιημένο", - "Disabled" : "Απενεργοποιημένο", - "Copied!" : "Αντιγράφτηκε!", - "Not supported!" : "Δεν υποστηρίζεται!", - "Press ⌘-C to copy." : "Για αντιγραφή πατήστε ⌘-C.", - "Press Ctrl-C to copy." : "Για αντιγραφή πατήστε Ctrl-C.", - "Address book name" : "Όνομα βιβλίου διευθύνσεων", - "Only these special characters are allowed: -_.!?#|()" : "Επιτρέπονται μόνο αυτοί οι ειδικοί χαρακτήρες: -_.!?#|()", - "Address book could not be created." : "Το βιβλίο διευθύνσεων δεν μπορεί να δημιουργηθεί.", - "Upload new image" : "Μεταφόρτωση νέας εικόνας", - "The selected image is too big (max 1MB)" : "Η επιλεγμένη εικόνα είναι πολύ μεγάλη (Μεγ. 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Αυτή η κάρτα είναι κατεστραμμένη και έχει διορθωθεί. Παρακαλώ ελέγξτε τα δεδομένα και αποθηκεύσετε τα ώστε οι αλλαγές να γίνουν μόνιμες.", - "No contacts in here" : "Δεν υπάρχουν επαφές εδώ", - "Name" : "Όνομα", - "Organization" : "Οργανισμός", - "Title" : "Τίτλος", - "Add field …" : "Προσθήκη πεδίου...", - "Save changes" : "Αποθήκευση αλλαγών", - "Address book" : "Βιβλίο διευθύνσεων", - "Loading contacts …" : "Φόρτωση επαφών ...", - "Import into" : "Εισαγωγή σε", - "Importing..." : "Γίνεται εισαγωγή...", - "Select your addressbook" : "Επιλογή βιβλίου διευθύνσεων", - "Import is disabled because no writable address book had been found." : "Η λειτουργία εισαγωγής απενεργοποιήθηκε, καθώς δεν βρέθηκε κάποιο βιβλίο διευθύνσεων με δικαιώματα εγγραφής.", - "No search result for {query}" : "Δεν βρέθηκε αποτέλεσμα αναζήτησης για {query}", - "All contacts" : "Όλες οι επαφές", - "Post office box" : "Ταχυδρομική θυρίδα", - "Postal code" : "Ταχυδρομικός Κώδικας", - "City" : "Πόλη", - "State or province" : "Νομός ή περιφέρεια", - "Country" : "Χώρα", - "Address" : "Διεύθυνση", - "(new group)" : "(νέα ομάδα)", - "Last name" : "Επώνυμο", - "First name" : "Όνομα", - "Additional names" : "Επιπλέον ονόματα", - "Prefix" : "Πρόθεμα", - "Suffix" : "Κατάληξη", - "Importing into" : "Εισαγωγή σε", - "New contact" : "Νέα επαφή", - "Not grouped" : "Οχι ομαδοποιημένα", - "Sort by" : "Ταξινόμηση κατά", - "There is no address book available to create a contact." : "Δεν υπάρχει βιβλίο διευθύνσεων διαθέσιμο για την δημιουργία της επαφής.", - "{addressbook} shared by {owner}" : "Το {addressbook} διαμοιράστηκε από τον/την {owner}", - "Contact not found." : "Δεν βρέθηκε η επαφή.", - "You don't have permission to write to this addressbook." : "Δεν έχετε δικαίωμα εγγραφής σε αυτό το βιβλίο διευθύνσεων.", - "Contact could not be created." : "Αδυναμία δημιουργίας επαφής.", - "No contacts in file. Only vCard files are allowed." : "Δεν υπάρχουν επαφές στο αρχείο. Μόνο vCard αρχεία επιτρέπονται.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Υποστηρίζεται μόνο η VCard έκδοση 4.0 (RFC6350) ή έκδοση 3.0 (RFC2426).", - "Contact could not be moved." : "Η επαφή δεν μπορεί να μετακινηθεί.", - "Contact could not be saved." : "Αδυναμία αποθήκευσης επαφής.", - "Waiting for the server to be ready…" : "Αναμονή για προετοιμασία του διακομιστή...", - "Importing…" : "Γίνεται εισαγωγή...", - "Display name" : "Εμφανιζόμενο όνομα", - "Nickname" : "Παρατσούκλι", - "Detailed name" : "Λεπτομερές όνομα", - "Notes" : "Σημειώσεις", - "Website" : "Ιστοσελίδα", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Σπίτι", - "Work" : "Εργασία", - "Other" : "Άλλο", - "Groups" : "Ομάδες", - "Birthday" : "Γενέθλια", - "Anniversary" : "Επέτειος", - "Date of death" : "Ημερομηνία θανάτου", - "Email" : "Ηλ. ταχυδρομείο", - "Instant messaging" : "Άμεσα μηνύματα", - "Phone" : "Τηλέφωνο", - "Mobile" : "Κινητό", - "Work mobile" : "Κινητό εργασίας", - "Fax" : "Φαξ", - "Fax home" : "Φαξ σπίτι", - "Fax work" : "Φαξ εργασία", - "Pager" : "Βομβητής", - "Voice" : "Ομιλία", - "Car" : "Αμάξι", - "Work pager" : "Βομβητής δουλειάς", - "Social network" : "Κοινωνικό δίκτυο", - "Relationship" : "Σχέση", - "Spouse" : "Σύζηγος", - "Child" : "Παιδί", - "Mother" : "Μητέρα", - "Father" : "Πατέρας", - "Parent" : "Γονέας", - "Brother" : "Αδελφός", - "Sister" : "Αδελφή", - "Relative" : "Συγγενής", - "Friend" : "Φίλος", - "Colleague" : "Συνάδελφος", - "Manager" : "Διευθυντής", - "Assistant" : "Βοηθός", - "Contact" : "Επαφή", - "Co-worker" : "Συνεργάτης", - "Gender" : "Φύλλο", - "Female" : "Θηλυκό", - "Male" : "Αρσενικό", - "Details" : "Λεπτομέριες", - "Settings" : "Ρυθμίσεις" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/en_GB.js b/l10n/en_GB.js deleted file mode 100644 index fb3e4900..00000000 --- a/l10n/en_GB.js +++ /dev/null @@ -1,121 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contacts", - "Download" : "Download", - "Copy link" : "Copy link", - "Click to copy the link to your clipboard" : "Click to copy the link to your clipboard", - "Toggle sharing" : "Toggle sharing", - "Delete" : "Delete", - "Rename" : "Rename", - "Share with users or groups" : "Share with users or groups", - "can edit" : "can edit", - "Close" : "Close", - "Enabled" : "Enabled", - "Disabled" : "Disabled", - "Copied!" : "Copied!", - "Not supported!" : "Not supported!", - "Press ⌘-C to copy." : "Press ⌘-C to copy.", - "Press Ctrl-C to copy." : "Press Ctrl-C to copy.", - "Address book name" : "Address book name", - "Only these special characters are allowed: -_.!?#|()" : "Only these special characters are allowed: -_.!?#|()", - "Address book could not be created." : "Address book could not be created.", - "Upload new image" : "Upload new image", - "The selected image is too big (max 1MB)" : "The selected image is too big (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent.", - "No contacts in here" : "No contacts in here", - "Name" : "Name", - "Organization" : "Organisation", - "Title" : "Title", - "Add field …" : "Add field …", - "Save changes" : "Save changes", - "Address book" : "Address book", - "Loading contacts …" : "Loading contacts …", - "Import into" : "Import into", - "Importing..." : "Importing...", - "Select your addressbook" : "Select your addressbook", - "Import is disabled because no writable address book had been found." : "Import is disabled because no writable address book had been found.", - "No search result for {query}" : "No search result for {query}", - "All contacts" : "All contacts", - "Post office box" : "Post office box", - "Postal code" : "Postcode", - "City" : "City", - "State or province" : "State or province", - "Country" : "Country", - "Address" : "Address", - "(new group)" : "(new group)", - "Last name" : "Surname", - "First name" : "First-name", - "Additional names" : "Middle names", - "Prefix" : "Prefix", - "Suffix" : "Suffix", - "Importing into" : "Importing into", - "New contact" : "New contact", - "Not grouped" : "Not grouped", - "Sort by" : "Sort by", - "There is no address book available to create a contact." : "There is no address book available to create a contact.", - "{addressbook} shared by {owner}" : "{addressbook} shared by {owner}", - "Contact not found." : "Contact not found.", - "You don't have permission to write to this addressbook." : "You don't have permission to write to this addressbook.", - "Contact could not be created." : "Contact could not be created.", - "No contacts in file. Only vCard files are allowed." : "No contacts in file. Only vCard files are allowed.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported.", - "Contact could not be moved." : "Contact could not be moved.", - "Contact could not be saved." : "Contact could not be saved.", - "Waiting for the server to be ready…" : "Waiting for the server to be ready…", - "Importing…" : "Importing…", - "Display name" : "Display name", - "Nickname" : "Nickname", - "Detailed name" : "Detailed name", - "Notes" : "Notes", - "Website" : "Website", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Home", - "Work" : "Work", - "Other" : "Other", - "Groups" : "Groups", - "Birthday" : "Birthday", - "Anniversary" : "Anniversary", - "Date of death" : "Date of death", - "Email" : "Email", - "Instant messaging" : "Instant messaging", - "Phone" : "Phone", - "Mobile" : "Mobile", - "Work mobile" : "Work mobile", - "Fax" : "Fax", - "Fax home" : "Fax home", - "Fax work" : "Fax work", - "Pager" : "Pager", - "Voice" : "Voice", - "Car" : "Car", - "Work pager" : "Work pager", - "Social network" : "Social network", - "Relationship" : "Relationship", - "Specify a relationship between you and the entity represented by this vCard." : "Specify a relationship between you and the entity represented by this vCard.", - "Spouse" : "Spouse", - "Child" : "Child", - "Mother" : "Mother", - "Father" : "Father", - "Parent" : "Parent", - "Brother" : "Brother", - "Sister" : "Sister", - "Relative" : "Relative", - "Friend" : "Friend", - "Colleague" : "Colleague", - "Manager" : "Manager", - "Assistant" : "Assistant", - "Related" : "Related", - "Specify a relationship between another entity and the entity represented by this vCard." : "Specify a relationship between another entity and the entity represented by this vCard.", - "Contact" : "Contact", - "Agent" : "Agent", - "Emergency" : "Emergency", - "Co-worker" : "Co-worker", - "Gender" : "Gender", - "Female" : "Female", - "Male" : "Male", - "Details" : "Details", - "A contacts app for Nextcloud" : "A contacts app for Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library.", - "Settings" : "Settings" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/en_GB.json b/l10n/en_GB.json deleted file mode 100644 index ff9236a7..00000000 --- a/l10n/en_GB.json +++ /dev/null @@ -1,119 +0,0 @@ -{ "translations": { - "Contacts" : "Contacts", - "Download" : "Download", - "Copy link" : "Copy link", - "Click to copy the link to your clipboard" : "Click to copy the link to your clipboard", - "Toggle sharing" : "Toggle sharing", - "Delete" : "Delete", - "Rename" : "Rename", - "Share with users or groups" : "Share with users or groups", - "can edit" : "can edit", - "Close" : "Close", - "Enabled" : "Enabled", - "Disabled" : "Disabled", - "Copied!" : "Copied!", - "Not supported!" : "Not supported!", - "Press ⌘-C to copy." : "Press ⌘-C to copy.", - "Press Ctrl-C to copy." : "Press Ctrl-C to copy.", - "Address book name" : "Address book name", - "Only these special characters are allowed: -_.!?#|()" : "Only these special characters are allowed: -_.!?#|()", - "Address book could not be created." : "Address book could not be created.", - "Upload new image" : "Upload new image", - "The selected image is too big (max 1MB)" : "The selected image is too big (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent.", - "No contacts in here" : "No contacts in here", - "Name" : "Name", - "Organization" : "Organisation", - "Title" : "Title", - "Add field …" : "Add field …", - "Save changes" : "Save changes", - "Address book" : "Address book", - "Loading contacts …" : "Loading contacts …", - "Import into" : "Import into", - "Importing..." : "Importing...", - "Select your addressbook" : "Select your addressbook", - "Import is disabled because no writable address book had been found." : "Import is disabled because no writable address book had been found.", - "No search result for {query}" : "No search result for {query}", - "All contacts" : "All contacts", - "Post office box" : "Post office box", - "Postal code" : "Postcode", - "City" : "City", - "State or province" : "State or province", - "Country" : "Country", - "Address" : "Address", - "(new group)" : "(new group)", - "Last name" : "Surname", - "First name" : "First-name", - "Additional names" : "Middle names", - "Prefix" : "Prefix", - "Suffix" : "Suffix", - "Importing into" : "Importing into", - "New contact" : "New contact", - "Not grouped" : "Not grouped", - "Sort by" : "Sort by", - "There is no address book available to create a contact." : "There is no address book available to create a contact.", - "{addressbook} shared by {owner}" : "{addressbook} shared by {owner}", - "Contact not found." : "Contact not found.", - "You don't have permission to write to this addressbook." : "You don't have permission to write to this addressbook.", - "Contact could not be created." : "Contact could not be created.", - "No contacts in file. Only vCard files are allowed." : "No contacts in file. Only vCard files are allowed.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported.", - "Contact could not be moved." : "Contact could not be moved.", - "Contact could not be saved." : "Contact could not be saved.", - "Waiting for the server to be ready…" : "Waiting for the server to be ready…", - "Importing…" : "Importing…", - "Display name" : "Display name", - "Nickname" : "Nickname", - "Detailed name" : "Detailed name", - "Notes" : "Notes", - "Website" : "Website", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Home", - "Work" : "Work", - "Other" : "Other", - "Groups" : "Groups", - "Birthday" : "Birthday", - "Anniversary" : "Anniversary", - "Date of death" : "Date of death", - "Email" : "Email", - "Instant messaging" : "Instant messaging", - "Phone" : "Phone", - "Mobile" : "Mobile", - "Work mobile" : "Work mobile", - "Fax" : "Fax", - "Fax home" : "Fax home", - "Fax work" : "Fax work", - "Pager" : "Pager", - "Voice" : "Voice", - "Car" : "Car", - "Work pager" : "Work pager", - "Social network" : "Social network", - "Relationship" : "Relationship", - "Specify a relationship between you and the entity represented by this vCard." : "Specify a relationship between you and the entity represented by this vCard.", - "Spouse" : "Spouse", - "Child" : "Child", - "Mother" : "Mother", - "Father" : "Father", - "Parent" : "Parent", - "Brother" : "Brother", - "Sister" : "Sister", - "Relative" : "Relative", - "Friend" : "Friend", - "Colleague" : "Colleague", - "Manager" : "Manager", - "Assistant" : "Assistant", - "Related" : "Related", - "Specify a relationship between another entity and the entity represented by this vCard." : "Specify a relationship between another entity and the entity represented by this vCard.", - "Contact" : "Contact", - "Agent" : "Agent", - "Emergency" : "Emergency", - "Co-worker" : "Co-worker", - "Gender" : "Gender", - "Female" : "Female", - "Male" : "Male", - "Details" : "Details", - "A contacts app for Nextcloud" : "A contacts app for Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library.", - "Settings" : "Settings" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/eo.js b/l10n/eo.js deleted file mode 100644 index 2dff8dd2..00000000 --- a/l10n/eo.js +++ /dev/null @@ -1,36 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontaktoj", - "Name" : "Nomo", - "Organization" : "Organizaĵo", - "Title" : "Titolo", - "Postal code" : "Poŝtkodo", - "City" : "Urbo", - "State or province" : "Ŝtato aŭ provinco", - "Country" : "Lando", - "Address" : "Adreso", - "Last name" : "Familia nomo", - "First name" : "Persona nomo", - "Additional names" : "Pliaj nomoj", - "New contact" : "Nova kontakto", - "Not grouped" : "Ne grupigita", - "Nickname" : "Kromnomo", - "Notes" : "Notoj", - "Website" : "TTT-ejo", - "Federated Cloud ID" : "Identigilo de federa nubo", - "Home" : "Hejmo", - "Work" : "Laboro", - "Other" : "Alia", - "Groups" : "Grupoj", - "Birthday" : "Naskiĝotago", - "Email" : "Retpoŝto", - "Instant messaging" : "Tujmesaĝado", - "Phone" : "Telefono", - "Mobile" : "Poŝtelefono", - "Fax" : "Fakso", - "Pager" : "Televokilo", - "Voice" : "Voĉo", - "Settings" : "Agordo" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/eo.json b/l10n/eo.json deleted file mode 100644 index 6334b74a..00000000 --- a/l10n/eo.json +++ /dev/null @@ -1,34 +0,0 @@ -{ "translations": { - "Contacts" : "Kontaktoj", - "Name" : "Nomo", - "Organization" : "Organizaĵo", - "Title" : "Titolo", - "Postal code" : "Poŝtkodo", - "City" : "Urbo", - "State or province" : "Ŝtato aŭ provinco", - "Country" : "Lando", - "Address" : "Adreso", - "Last name" : "Familia nomo", - "First name" : "Persona nomo", - "Additional names" : "Pliaj nomoj", - "New contact" : "Nova kontakto", - "Not grouped" : "Ne grupigita", - "Nickname" : "Kromnomo", - "Notes" : "Notoj", - "Website" : "TTT-ejo", - "Federated Cloud ID" : "Identigilo de federa nubo", - "Home" : "Hejmo", - "Work" : "Laboro", - "Other" : "Alia", - "Groups" : "Grupoj", - "Birthday" : "Naskiĝotago", - "Email" : "Retpoŝto", - "Instant messaging" : "Tujmesaĝado", - "Phone" : "Telefono", - "Mobile" : "Poŝtelefono", - "Fax" : "Fakso", - "Pager" : "Televokilo", - "Voice" : "Voĉo", - "Settings" : "Agordo" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es.js b/l10n/es.js deleted file mode 100644 index b77f29ac..00000000 --- a/l10n/es.js +++ /dev/null @@ -1,121 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar enlace", - "Click to copy the link to your clipboard" : "Haz clic para copiar el enlace al portapapeles", - "Toggle sharing" : "Marcar/desmarcar compartir", - "Delete" : "Eliminar", - "Rename" : "Cambiar nombre", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Activado", - "Disabled" : "Desactivado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Solo se admiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No se ha podido crear la libreta de direcciones.", - "Upload new image" : "Subir nueva imagen", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiada grande (máximo 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta esta corrupta y ha sido corregida. Por favor revise la información y ejecute guardar para hacer los cambios permanentes. ", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Añadir campo...", - "Save changes" : "Guardar cambios", - "Address book" : "Libro de direcciones", - "Loading contacts …" : "Cargando contactos...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de direcciones", - "Import is disabled because no writable address book had been found." : "La importación está desactivada porque no se ha encontrado ninguna libreta de direcciones en la que se pueda escribir.", - "No search result for {query}" : "Sin resultados para {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado de correos", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(nuevo grupo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Filtrado por", - "There is no address book available to create a contact." : "No hay libretas de direcciones disponibles para crear un contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "Contacto no encontrado.", - "You don't have permission to write to this addressbook." : "No tienes permiso para escribir en esta libreta de direcciones.", - "Contact could not be created." : "No se puede crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No hay contactos en el archivo. Solo se admiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Solo se admite las versiones de vCard 4.0 (RFC6350) o 3.0 (RFC2426).", - "Contact could not be moved." : "No se ha podido mover el contacto.", - "Contact could not be saved." : "No se ha podido guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté preparado...", - "Importing…" : "Importando...", - "Display name" : "Nombre mostrado", - "Nickname" : "Apodo", - "Detailed name" : "Nombre", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "ID Nube Federada", - "Home" : "Casa", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de fallecimiento", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono", - "Mobile" : "Móvil", - "Work mobile" : "Móvil del trabajo", - "Fax" : "Fax", - "Fax home" : "Fax hogareño", - "Fax work" : "Fax del trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Coche", - "Work pager" : "Busca del trabajo", - "Social network" : "Redes sociales", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica una relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Progenitor", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Pariente", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Mánager", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica una relación entre otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Mujer", - "Male" : "Hombre", - "Details" : "Detalles", - "A contacts app for Nextcloud" : "Una app de contactos para Nextcloud.", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "La app de Contactos de Nextcloud es una interfaz de usuario para el servidor CardDAV de Nextcloud. Sincroniza fácilmente los contactos de varios dispositivos con tu Nextcloud y edítalos en línea\n\n* 🚀 **Integración con otras apps de Nextcloud.** Actualmente Correo y Calendario; más por llegar.\n* 🎉 **No olvides nunca un calendario.** Puedes sincronizar los calendarios y otros eventos recurrentes con tu calendario de Nextcloud.\n* 👥 **Compartir libretas de dirección.** ¿Quieres compartir tus contactos con tus amigos y colegas? ¡No hay problema!\n* 🙈 **No reinventamos la rueda.l** Basada en la gran biblioteca de código abierto SabreDAV.", - "Settings" : "Ajustes" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es.json b/l10n/es.json deleted file mode 100644 index 85dc61ce..00000000 --- a/l10n/es.json +++ /dev/null @@ -1,119 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar enlace", - "Click to copy the link to your clipboard" : "Haz clic para copiar el enlace al portapapeles", - "Toggle sharing" : "Marcar/desmarcar compartir", - "Delete" : "Eliminar", - "Rename" : "Cambiar nombre", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Activado", - "Disabled" : "Desactivado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Solo se admiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No se ha podido crear la libreta de direcciones.", - "Upload new image" : "Subir nueva imagen", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiada grande (máximo 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta esta corrupta y ha sido corregida. Por favor revise la información y ejecute guardar para hacer los cambios permanentes. ", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Añadir campo...", - "Save changes" : "Guardar cambios", - "Address book" : "Libro de direcciones", - "Loading contacts …" : "Cargando contactos...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de direcciones", - "Import is disabled because no writable address book had been found." : "La importación está desactivada porque no se ha encontrado ninguna libreta de direcciones en la que se pueda escribir.", - "No search result for {query}" : "Sin resultados para {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado de correos", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(nuevo grupo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Filtrado por", - "There is no address book available to create a contact." : "No hay libretas de direcciones disponibles para crear un contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "Contacto no encontrado.", - "You don't have permission to write to this addressbook." : "No tienes permiso para escribir en esta libreta de direcciones.", - "Contact could not be created." : "No se puede crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No hay contactos en el archivo. Solo se admiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Solo se admite las versiones de vCard 4.0 (RFC6350) o 3.0 (RFC2426).", - "Contact could not be moved." : "No se ha podido mover el contacto.", - "Contact could not be saved." : "No se ha podido guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté preparado...", - "Importing…" : "Importando...", - "Display name" : "Nombre mostrado", - "Nickname" : "Apodo", - "Detailed name" : "Nombre", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "ID Nube Federada", - "Home" : "Casa", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de fallecimiento", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono", - "Mobile" : "Móvil", - "Work mobile" : "Móvil del trabajo", - "Fax" : "Fax", - "Fax home" : "Fax hogareño", - "Fax work" : "Fax del trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Coche", - "Work pager" : "Busca del trabajo", - "Social network" : "Redes sociales", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica una relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Progenitor", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Pariente", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Mánager", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica una relación entre otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Mujer", - "Male" : "Hombre", - "Details" : "Detalles", - "A contacts app for Nextcloud" : "Una app de contactos para Nextcloud.", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "La app de Contactos de Nextcloud es una interfaz de usuario para el servidor CardDAV de Nextcloud. Sincroniza fácilmente los contactos de varios dispositivos con tu Nextcloud y edítalos en línea\n\n* 🚀 **Integración con otras apps de Nextcloud.** Actualmente Correo y Calendario; más por llegar.\n* 🎉 **No olvides nunca un calendario.** Puedes sincronizar los calendarios y otros eventos recurrentes con tu calendario de Nextcloud.\n* 👥 **Compartir libretas de dirección.** ¿Quieres compartir tus contactos con tus amigos y colegas? ¡No hay problema!\n* 🙈 **No reinventamos la rueda.l** Basada en la gran biblioteca de código abierto SabreDAV.", - "Settings" : "Ajustes" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es_419.js b/l10n/es_419.js deleted file mode 100644 index 80a4173d..00000000 --- a/l10n/es_419.js +++ /dev/null @@ -1,111 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_419.json b/l10n/es_419.json deleted file mode 100644 index 4a05425d..00000000 --- a/l10n/es_419.json +++ /dev/null @@ -1,109 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es_AR.js b/l10n/es_AR.js deleted file mode 100644 index 8fad7feb..00000000 --- a/l10n/es_AR.js +++ /dev/null @@ -1,70 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presione ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presione Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Favor de verificar los datos y haga un guardado para hacer los cambios permanentes.", - "No contacts in here" : "Aquí no hay contactos", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Save changes" : "Guardar cambios", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Social network" : "Red social", - "Details" : "Detalles", - "Settings" : "Configuraciones " -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_AR.json b/l10n/es_AR.json deleted file mode 100644 index 49e62005..00000000 --- a/l10n/es_AR.json +++ /dev/null @@ -1,68 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presione ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presione Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Favor de verificar los datos y haga un guardado para hacer los cambios permanentes.", - "No contacts in here" : "Aquí no hay contactos", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Save changes" : "Guardar cambios", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Social network" : "Red social", - "Details" : "Detalles", - "Settings" : "Configuraciones " -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es_CL.js b/l10n/es_CL.js deleted file mode 100644 index 4902709d..00000000 --- a/l10n/es_CL.js +++ /dev/null @@ -1,119 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "Upload new image" : "Cargar imagen nueva", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica la relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica la relación entre alguna otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_CL.json b/l10n/es_CL.json deleted file mode 100644 index 3da75679..00000000 --- a/l10n/es_CL.json +++ /dev/null @@ -1,117 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "Upload new image" : "Cargar imagen nueva", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica la relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica la relación entre alguna otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es_CO.js b/l10n/es_CO.js deleted file mode 100644 index 4902709d..00000000 --- a/l10n/es_CO.js +++ /dev/null @@ -1,119 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "Upload new image" : "Cargar imagen nueva", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica la relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica la relación entre alguna otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_CO.json b/l10n/es_CO.json deleted file mode 100644 index 3da75679..00000000 --- a/l10n/es_CO.json +++ /dev/null @@ -1,117 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "Upload new image" : "Cargar imagen nueva", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica la relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica la relación entre alguna otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es_CR.js b/l10n/es_CR.js deleted file mode 100644 index 4902709d..00000000 --- a/l10n/es_CR.js +++ /dev/null @@ -1,119 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "Upload new image" : "Cargar imagen nueva", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica la relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica la relación entre alguna otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_CR.json b/l10n/es_CR.json deleted file mode 100644 index 3da75679..00000000 --- a/l10n/es_CR.json +++ /dev/null @@ -1,117 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "Upload new image" : "Cargar imagen nueva", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica la relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica la relación entre alguna otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es_DO.js b/l10n/es_DO.js deleted file mode 100644 index 4902709d..00000000 --- a/l10n/es_DO.js +++ /dev/null @@ -1,119 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "Upload new image" : "Cargar imagen nueva", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica la relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica la relación entre alguna otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_DO.json b/l10n/es_DO.json deleted file mode 100644 index 3da75679..00000000 --- a/l10n/es_DO.json +++ /dev/null @@ -1,117 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "Upload new image" : "Cargar imagen nueva", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica la relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica la relación entre alguna otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es_EC.js b/l10n/es_EC.js deleted file mode 100644 index 4902709d..00000000 --- a/l10n/es_EC.js +++ /dev/null @@ -1,119 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "Upload new image" : "Cargar imagen nueva", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica la relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica la relación entre alguna otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_EC.json b/l10n/es_EC.json deleted file mode 100644 index 3da75679..00000000 --- a/l10n/es_EC.json +++ /dev/null @@ -1,117 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "Upload new image" : "Cargar imagen nueva", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica la relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica la relación entre alguna otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es_GT.js b/l10n/es_GT.js deleted file mode 100644 index 4902709d..00000000 --- a/l10n/es_GT.js +++ /dev/null @@ -1,119 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "Upload new image" : "Cargar imagen nueva", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica la relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica la relación entre alguna otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_GT.json b/l10n/es_GT.json deleted file mode 100644 index 3da75679..00000000 --- a/l10n/es_GT.json +++ /dev/null @@ -1,117 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "Upload new image" : "Cargar imagen nueva", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica la relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica la relación entre alguna otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es_HN.js b/l10n/es_HN.js deleted file mode 100644 index 80a4173d..00000000 --- a/l10n/es_HN.js +++ /dev/null @@ -1,111 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_HN.json b/l10n/es_HN.json deleted file mode 100644 index 4a05425d..00000000 --- a/l10n/es_HN.json +++ /dev/null @@ -1,109 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es_MX.js b/l10n/es_MX.js deleted file mode 100644 index cbd25456..00000000 --- a/l10n/es_MX.js +++ /dev/null @@ -1,121 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "Upload new image" : "Cargar imagen nueva", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica la relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica la relación entre alguna otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "A contacts app for Nextcloud" : "Una aplicción de Contactos para Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "La aplicación de Contactos de Nextcloud es una interface para el servidor CardDAV de Nextcloud. Sincroniza facilmente los contactos desde diferentes dispositivos con tu Nextcloud y editalos en línea.\n* 🚀 **¡Integración con otras aplicaciones Nextcloud!** Actualmente Correo y Calendario – mas por llegar.\n* 🎉 **¡Que nunca se te olvide un cumpleaños!** Puedes sincronizar cumpleaños y otros eventos recurrentes con tu Caldendario de Nextcloud.\n* 👥 **¡Comparte libros de direcciones!** ¿Quieres compartir tus contactos con tus amigos o colegas? ¡No hay problema!\n* 🙈 **¡No estamos reinventando la rueda!** Basado en la grandiosa librería abierta SabreDAV.", - "Settings" : "Configuraciones " -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_MX.json b/l10n/es_MX.json deleted file mode 100644 index 2b390241..00000000 --- a/l10n/es_MX.json +++ /dev/null @@ -1,119 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "Upload new image" : "Cargar imagen nueva", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica la relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica la relación entre alguna otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "A contacts app for Nextcloud" : "Una aplicción de Contactos para Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "La aplicación de Contactos de Nextcloud es una interface para el servidor CardDAV de Nextcloud. Sincroniza facilmente los contactos desde diferentes dispositivos con tu Nextcloud y editalos en línea.\n* 🚀 **¡Integración con otras aplicaciones Nextcloud!** Actualmente Correo y Calendario – mas por llegar.\n* 🎉 **¡Que nunca se te olvide un cumpleaños!** Puedes sincronizar cumpleaños y otros eventos recurrentes con tu Caldendario de Nextcloud.\n* 👥 **¡Comparte libros de direcciones!** ¿Quieres compartir tus contactos con tus amigos o colegas? ¡No hay problema!\n* 🙈 **¡No estamos reinventando la rueda!** Basado en la grandiosa librería abierta SabreDAV.", - "Settings" : "Configuraciones " -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es_NI.js b/l10n/es_NI.js deleted file mode 100644 index 80a4173d..00000000 --- a/l10n/es_NI.js +++ /dev/null @@ -1,111 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_NI.json b/l10n/es_NI.json deleted file mode 100644 index 4a05425d..00000000 --- a/l10n/es_NI.json +++ /dev/null @@ -1,109 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es_PA.js b/l10n/es_PA.js deleted file mode 100644 index 80a4173d..00000000 --- a/l10n/es_PA.js +++ /dev/null @@ -1,111 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_PA.json b/l10n/es_PA.json deleted file mode 100644 index 4a05425d..00000000 --- a/l10n/es_PA.json +++ /dev/null @@ -1,109 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es_PE.js b/l10n/es_PE.js deleted file mode 100644 index 80a4173d..00000000 --- a/l10n/es_PE.js +++ /dev/null @@ -1,111 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_PE.json b/l10n/es_PE.json deleted file mode 100644 index 4a05425d..00000000 --- a/l10n/es_PE.json +++ /dev/null @@ -1,109 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es_PR.js b/l10n/es_PR.js deleted file mode 100644 index 80a4173d..00000000 --- a/l10n/es_PR.js +++ /dev/null @@ -1,111 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_PR.json b/l10n/es_PR.json deleted file mode 100644 index 4a05425d..00000000 --- a/l10n/es_PR.json +++ /dev/null @@ -1,109 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es_PY.js b/l10n/es_PY.js deleted file mode 100644 index 80a4173d..00000000 --- a/l10n/es_PY.js +++ /dev/null @@ -1,111 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_PY.json b/l10n/es_PY.json deleted file mode 100644 index 4a05425d..00000000 --- a/l10n/es_PY.json +++ /dev/null @@ -1,109 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es_SV.js b/l10n/es_SV.js deleted file mode 100644 index 4902709d..00000000 --- a/l10n/es_SV.js +++ /dev/null @@ -1,119 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "Upload new image" : "Cargar imagen nueva", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica la relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica la relación entre alguna otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_SV.json b/l10n/es_SV.json deleted file mode 100644 index 3da75679..00000000 --- a/l10n/es_SV.json +++ /dev/null @@ -1,117 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "Upload new image" : "Cargar imagen nueva", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Specify a relationship between you and the entity represented by this vCard." : "Especifica la relación entre tú y la entidad representada por esta vCard.", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especifica la relación entre alguna otra entidad y la entidad representada por esta vCard.", - "Contact" : "Contacto", - "Agent" : "Agente", - "Emergency" : "Emergencia", - "Co-worker" : "Compañero de trabajo", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/es_UY.js b/l10n/es_UY.js deleted file mode 100644 index 80a4173d..00000000 --- a/l10n/es_UY.js +++ /dev/null @@ -1,111 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/es_UY.json b/l10n/es_UY.json deleted file mode 100644 index 4a05425d..00000000 --- a/l10n/es_UY.json +++ /dev/null @@ -1,109 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar liga", - "Click to copy the link to your clipboard" : "Haz click para copiar la liga a tu porta papeles", - "Toggle sharing" : "Alternar comparitr", - "Delete" : "Borrar", - "Rename" : "Renombrar", - "Share with users or groups" : "Compartir con otros usuarios o grupos", - "can edit" : "puede editar", - "Close" : "Cerrar", - "Enabled" : "Habilitado", - "Disabled" : "Deshabilitado", - "Copied!" : "¡Copiado!", - "Not supported!" : "¡No soportado!", - "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", - "Address book name" : "Nombre de la libreta de direcciones", - "Only these special characters are allowed: -_.!?#|()" : "Sólo se permiten estos caracteres especiales: -_.!?#|()", - "Address book could not be created." : "No fue posible crear la libreta de direcciones. ", - "The selected image is too big (max 1MB)" : "La imagen seleccionada es demasiado grande (1MB máximo)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Esta tarjeta estaba corrupta y ha sido arreglada. Por favor verifica los datos y has un guardado para hacer los cambios permanentes.", - "No contacts in here" : "No hay contactos aquí", - "Name" : "Nombre", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Agregar campo ...", - "Save changes" : "Guardar cambios", - "Address book" : "Libreta de direcciones", - "Loading contacts …" : "Cargando contactos ...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecciona tu libreta de contactos", - "Import is disabled because no writable address book had been found." : "El importar está deshabilitado porque no se ha encontrado una libreta de direcciones a la que se pueda escribir.", - "No search result for {query}" : "No se encontraron resultados para la búsqueda {query}", - "All contacts" : "Todos los contactos", - "Post office box" : "Apartado postal", - "Postal code" : "Código postal", - "City" : "Ciudad", - "State or province" : "Estado o provincia", - "Country" : "País", - "Address" : "Dirección", - "(new group)" : "(grupo nuevo)", - "Last name" : "Apellido", - "First name" : "Nombre", - "Additional names" : "Nombres adicionales", - "Prefix" : "Prefijo", - "Suffix" : "Sufijo", - "Importing into" : "Importando a", - "New contact" : "Nuevo contacto", - "Not grouped" : "No agrupado", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "No existe una libreta de direcciones disponible para crear el contacto.", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "No se encontró el contacto.", - "You don't have permission to write to this addressbook." : "No tienes los permisos para escribir en esta libreta de direcciones", - "Contact could not be created." : "No fue posible crear el contacto.", - "No contacts in file. Only vCard files are allowed." : "No se encontró ningún archivo de contactos. Solo se permiten archivos vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sólo están soportadas las versiones 4.0 (RFC6350) o 3.0 (RFC2426) de los archivos vCard.", - "Contact could not be moved." : "No se pudo mover el contacto.", - "Contact could not be saved." : "No se pudo guardar el contacto.", - "Waiting for the server to be ready…" : "Esperando a que el servidor esté listo...", - "Importing…" : "Importando...", - "Display name" : "Nombre a desplegar", - "Nickname" : "Apodo", - "Detailed name" : "Nombre detallado", - "Notes" : "Notas", - "Website" : "Sitio web", - "Federated Cloud ID" : "Id de nube federada", - "Home" : "Particular", - "Work" : "Trabajo", - "Other" : "Otro", - "Groups" : "Grupos", - "Birthday" : "Fecha de nacimiento", - "Anniversary" : "Aniversario", - "Date of death" : "Fecha de defunción", - "Email" : "Correo electrónico", - "Instant messaging" : "Mensajería instantánea", - "Phone" : "Teléfono fijo", - "Mobile" : "Teléfono móvil", - "Work mobile" : "Número celular de trabajo", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax de trabajo", - "Pager" : "Localizador", - "Voice" : "Voz", - "Car" : "Auto", - "Work pager" : "Localizador de trabajo", - "Social network" : "Red social", - "Relationship" : "Relación", - "Spouse" : "Cónyuge", - "Child" : "Hijo", - "Mother" : "Madre", - "Father" : "Padre", - "Parent" : "Padre", - "Brother" : "Hermano", - "Sister" : "Hermana", - "Relative" : "Familiar", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Asistente", - "Gender" : "Género", - "Female" : "Femenino", - "Male" : "Masculino", - "Details" : "Detalles", - "Settings" : "Configuraciones " -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/et_EE.js b/l10n/et_EE.js deleted file mode 100644 index 1fd47b4d..00000000 --- a/l10n/et_EE.js +++ /dev/null @@ -1,111 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontaktid", - "Download" : "Lae alla", - "Copy link" : "Kopeeri link", - "Click to copy the link to your clipboard" : "Kliki, et kopeerida link lõikelauale", - "Toggle sharing" : "Lülita jagamine sisse", - "Delete" : "Kustuta", - "Rename" : "Nimeta ümber", - "Share with users or groups" : "Jaga kasutajate või gruppidega", - "can edit" : "Võib redigeerida", - "Close" : "Sulge", - "Enabled" : "Lubatud", - "Disabled" : "Keelatud", - "Copied!" : "Kopeeritud!", - "Not supported!" : "Pole toetatud!", - "Press ⌘-C to copy." : "Kopeerimiseks vajuta ⌘ + C.", - "Press Ctrl-C to copy." : "Kopeerimiseks vajuta Ctrl + C.", - "Address book name" : "Aadressiraamatu nimi", - "Only these special characters are allowed: -_.!?#|()" : "Lubatud on ainult järgnevad erimärgid: -_.!?#|()", - "Address book could not be created." : "Aadressiraamatu loomine ebaõnnestus.", - "The selected image is too big (max 1MB)" : "Valitud pilt on liiga suur (maks 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "See kaart on rikutud ja on fikseeritud. Palun kontrollige andmeid ja käivitage salvestis, et muuta muudatused püsivaks.", - "No contacts in here" : "Ühtegi kontakti pole", - "Name" : "Nimi", - "Organization" : "Organisatsioon", - "Title" : "Pealkiri", - "Add field …" : "Lisa väli ...", - "Save changes" : "Salvesta muudatused", - "Address book" : "Aadressiraamat", - "Loading contacts …" : "Laen kontakte ...", - "Import into" : "import sisse", - "Importing..." : "importimine...", - "Select your addressbook" : "Valige oma aadressiraamat", - "Import is disabled because no writable address book had been found." : "Importimine on keelatud, kuna ühtegi kirjutusõigusega aadressiraamatut ei leitud.", - "No search result for {query}" : "Otsingutulemused sõnadele {query}", - "All contacts" : "Kõik kontaktid", - "Post office box" : "Postkast", - "Postal code" : "Postiindeks", - "City" : "Linn", - "State or province" : "Maakond", - "Country" : "Riik", - "Address" : "Aadress", - "(new group)" : "(uus grupp)", - "Last name" : "Perekonnanimi", - "First name" : "Eesnimi", - "Additional names" : "Lisanimed", - "Prefix" : "Eesliide", - "Suffix" : "Järelliide", - "Importing into" : "Importimine sisse", - "New contact" : "Uus kontakt", - "Not grouped" : "Pole grupeeritud", - "Sort by" : "Sorteeri", - "There is no address book available to create a contact." : "Kontakti loomiseks pole ühtegi aadressiraamatut saadaval.", - "{addressbook} shared by {owner}" : "{owner} jagas aadressiraamatut {addressbook}", - "Contact not found." : "Kontakte ei leitud", - "You don't have permission to write to this addressbook." : "Sul puuduvad õigused käesolevasse aadressiraamatuse kirjutamiseks.", - "Contact could not be created." : "Kontakti loomine ebaõnnestus.", - "No contacts in file. Only vCard files are allowed." : "Failis pole kontakte. Lubatud on ainult VCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Ainult vCard versioon 4.0 (RFC6350) või versioon 3.0 (RFC2426) on toetatud.", - "Contact could not be moved." : "Kontakti liigutamine ebaõnnestus.", - "Contact could not be saved." : "Kontakti loomine ebaõnnestus.", - "Waiting for the server to be ready…" : "Server on kohe valmis...", - "Importing…" : "Impordin...", - "Display name" : "Kuva nimi", - "Nickname" : "Hüüdnimi", - "Detailed name" : "Üksikasjalik nimi", - "Notes" : "Märkmed", - "Website" : "Veebileht", - "Federated Cloud ID" : "Liitpilve ID", - "Home" : "Kodu", - "Work" : "Töö", - "Other" : "Muu", - "Groups" : "Grupid", - "Birthday" : "Sünnipäev", - "Anniversary" : "Aastapäev", - "Date of death" : "Surma kuupäev", - "Email" : "E-post", - "Instant messaging" : "Kiirsõnumid", - "Phone" : "Telefon", - "Mobile" : "Mobiil", - "Work mobile" : "Töötelefon (mobiil)", - "Fax" : "Faks", - "Fax home" : "Faks kodus", - "Fax work" : "Faks tööl", - "Pager" : "Piipar", - "Voice" : "Hääl", - "Car" : "Auto", - "Work pager" : "Piipar (tööl)", - "Social network" : "Sotsiaalvõrk", - "Relationship" : "Suhe", - "Spouse" : "Abikaasa", - "Child" : "Laps", - "Mother" : "Ema", - "Father" : "Isa", - "Parent" : "Vanem", - "Brother" : "Vend", - "Sister" : "Õde", - "Relative" : "Sugulane", - "Friend" : "Sõber", - "Colleague" : "Kolleeg", - "Manager" : "Juht", - "Assistant" : "Assistent", - "Gender" : "Sugu", - "Female" : "Naine", - "Male" : "Mees", - "Details" : "Üksikasjad", - "Settings" : "Seaded" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/et_EE.json b/l10n/et_EE.json deleted file mode 100644 index 781357c1..00000000 --- a/l10n/et_EE.json +++ /dev/null @@ -1,109 +0,0 @@ -{ "translations": { - "Contacts" : "Kontaktid", - "Download" : "Lae alla", - "Copy link" : "Kopeeri link", - "Click to copy the link to your clipboard" : "Kliki, et kopeerida link lõikelauale", - "Toggle sharing" : "Lülita jagamine sisse", - "Delete" : "Kustuta", - "Rename" : "Nimeta ümber", - "Share with users or groups" : "Jaga kasutajate või gruppidega", - "can edit" : "Võib redigeerida", - "Close" : "Sulge", - "Enabled" : "Lubatud", - "Disabled" : "Keelatud", - "Copied!" : "Kopeeritud!", - "Not supported!" : "Pole toetatud!", - "Press ⌘-C to copy." : "Kopeerimiseks vajuta ⌘ + C.", - "Press Ctrl-C to copy." : "Kopeerimiseks vajuta Ctrl + C.", - "Address book name" : "Aadressiraamatu nimi", - "Only these special characters are allowed: -_.!?#|()" : "Lubatud on ainult järgnevad erimärgid: -_.!?#|()", - "Address book could not be created." : "Aadressiraamatu loomine ebaõnnestus.", - "The selected image is too big (max 1MB)" : "Valitud pilt on liiga suur (maks 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "See kaart on rikutud ja on fikseeritud. Palun kontrollige andmeid ja käivitage salvestis, et muuta muudatused püsivaks.", - "No contacts in here" : "Ühtegi kontakti pole", - "Name" : "Nimi", - "Organization" : "Organisatsioon", - "Title" : "Pealkiri", - "Add field …" : "Lisa väli ...", - "Save changes" : "Salvesta muudatused", - "Address book" : "Aadressiraamat", - "Loading contacts …" : "Laen kontakte ...", - "Import into" : "import sisse", - "Importing..." : "importimine...", - "Select your addressbook" : "Valige oma aadressiraamat", - "Import is disabled because no writable address book had been found." : "Importimine on keelatud, kuna ühtegi kirjutusõigusega aadressiraamatut ei leitud.", - "No search result for {query}" : "Otsingutulemused sõnadele {query}", - "All contacts" : "Kõik kontaktid", - "Post office box" : "Postkast", - "Postal code" : "Postiindeks", - "City" : "Linn", - "State or province" : "Maakond", - "Country" : "Riik", - "Address" : "Aadress", - "(new group)" : "(uus grupp)", - "Last name" : "Perekonnanimi", - "First name" : "Eesnimi", - "Additional names" : "Lisanimed", - "Prefix" : "Eesliide", - "Suffix" : "Järelliide", - "Importing into" : "Importimine sisse", - "New contact" : "Uus kontakt", - "Not grouped" : "Pole grupeeritud", - "Sort by" : "Sorteeri", - "There is no address book available to create a contact." : "Kontakti loomiseks pole ühtegi aadressiraamatut saadaval.", - "{addressbook} shared by {owner}" : "{owner} jagas aadressiraamatut {addressbook}", - "Contact not found." : "Kontakte ei leitud", - "You don't have permission to write to this addressbook." : "Sul puuduvad õigused käesolevasse aadressiraamatuse kirjutamiseks.", - "Contact could not be created." : "Kontakti loomine ebaõnnestus.", - "No contacts in file. Only vCard files are allowed." : "Failis pole kontakte. Lubatud on ainult VCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Ainult vCard versioon 4.0 (RFC6350) või versioon 3.0 (RFC2426) on toetatud.", - "Contact could not be moved." : "Kontakti liigutamine ebaõnnestus.", - "Contact could not be saved." : "Kontakti loomine ebaõnnestus.", - "Waiting for the server to be ready…" : "Server on kohe valmis...", - "Importing…" : "Impordin...", - "Display name" : "Kuva nimi", - "Nickname" : "Hüüdnimi", - "Detailed name" : "Üksikasjalik nimi", - "Notes" : "Märkmed", - "Website" : "Veebileht", - "Federated Cloud ID" : "Liitpilve ID", - "Home" : "Kodu", - "Work" : "Töö", - "Other" : "Muu", - "Groups" : "Grupid", - "Birthday" : "Sünnipäev", - "Anniversary" : "Aastapäev", - "Date of death" : "Surma kuupäev", - "Email" : "E-post", - "Instant messaging" : "Kiirsõnumid", - "Phone" : "Telefon", - "Mobile" : "Mobiil", - "Work mobile" : "Töötelefon (mobiil)", - "Fax" : "Faks", - "Fax home" : "Faks kodus", - "Fax work" : "Faks tööl", - "Pager" : "Piipar", - "Voice" : "Hääl", - "Car" : "Auto", - "Work pager" : "Piipar (tööl)", - "Social network" : "Sotsiaalvõrk", - "Relationship" : "Suhe", - "Spouse" : "Abikaasa", - "Child" : "Laps", - "Mother" : "Ema", - "Father" : "Isa", - "Parent" : "Vanem", - "Brother" : "Vend", - "Sister" : "Õde", - "Relative" : "Sugulane", - "Friend" : "Sõber", - "Colleague" : "Kolleeg", - "Manager" : "Juht", - "Assistant" : "Assistent", - "Gender" : "Sugu", - "Female" : "Naine", - "Male" : "Mees", - "Details" : "Üksikasjad", - "Settings" : "Seaded" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/eu.js b/l10n/eu.js deleted file mode 100644 index 81028ffb..00000000 --- a/l10n/eu.js +++ /dev/null @@ -1,106 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontaktuak", - "Download" : "Jaitsi", - "Copy link" : "Esteka kopiatu", - "Click to copy the link to your clipboard" : "Klik egin esteka arbelara kopiatzeko", - "Toggle sharing" : "Partekatzea aldatu", - "Delete" : "Borratu", - "Rename" : "Izena aldatu", - "Share with users or groups" : "Erabiltzaile edo taldeekin partekatu", - "can edit" : "edita daiteke", - "Close" : "Itxi", - "Copied!" : "Kopiatuta!", - "Not supported!" : "Euskarririk ez!", - "Press ⌘-C to copy." : "⌘-C sakatu kopiatzeko.", - "Press Ctrl-C to copy." : "Ktrl-C sakatu kopiatzeko", - "Address book name" : "Agenda izena", - "Only these special characters are allowed: -_.!?#|()" : "Karaktere hauek bakarrik onartzen dira: -_.!?#|()", - "Address book could not be created." : "Helbide liburua ezin da sortu", - "The selected image is too big (max 1MB)" : "Aukeratutako irudia handiegia da (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Txartel hau nahastua zegoen eta konpondu da. Datuak konprobatu eta gorde aldaketak betikotzeko", - "No contacts in here" : "Kontakturik ez dago", - "Name" : "Izena", - "Organization" : "Erakundea", - "Title" : "Izenburua", - "Add field …" : "Eremua gehitu ...", - "Save changes" : "Aldaketak gorde", - "Address book" : "Helbide liburua", - "Loading contacts …" : "Kontaktuan kargatzen ...", - "Import into" : "Inportatu hona", - "Importing..." : "Inportatzen", - "Select your addressbook" : "Helbide liburua hautatu", - "No search result for {query}" : "{query} bilaketak ez du emaitzarik heman", - "All contacts" : "Kontaktu guztiak", - "Post office box" : "Posta kutxatila", - "Postal code" : "Posta kodea", - "City" : "Hiria", - "State or province" : "Estatu edo probintzia", - "Country" : "Herrialdea", - "Address" : "Helbidea", - "(new group)" : "(talde berria)", - "Last name" : "Abizena", - "First name" : "Izena", - "Additional names" : "Tarteko izenak", - "Prefix" : "Aurrizkia", - "Suffix" : "Atzizkia", - "Importing into" : "Informazioa inportatzen", - "New contact" : "Kontaktu berria", - "Not grouped" : "Taldekatu gabe", - "Sort by" : "Antolatu honela", - "{addressbook} shared by {owner}" : "{owner}-rek partakatutako {addressbook} ", - "Contact not found." : "Kontaktua ez da topatzen", - "You don't have permission to write to this addressbook." : "Ez duzu baimenik helbide-liburu honetan idazteko.", - "Contact could not be created." : "Kontaktua ezin izan da sortu.", - "No contacts in file. Only vCard files are allowed." : "Fitxategian ez dago kontakturik. vCard fitxategiak onartzen dira bakarrik", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "vCard 4.0 (RFC6350) edo 3.0 (RFC2426) bertsioak onartzen dira soilik.", - "Contact could not be saved." : "Kontaktua ezin da gorde", - "Waiting for the server to be ready…" : "Zerbitzaria martxan egon arte itxoiten...", - "Importing…" : "Inportatzen...", - "Display name" : "Izena erakutsi", - "Nickname" : "Ezizena", - "Detailed name" : "Izen osoa", - "Notes" : "Oharrak", - "Website" : "Webgunea", - "Federated Cloud ID" : "Federatutatako Hodei ID", - "Home" : "Etxekoa", - "Work" : "Lanekoa", - "Other" : "Bestelakoa", - "Groups" : "Taldeak", - "Birthday" : "Jaioteguna", - "Anniversary" : "Urteurrena", - "Date of death" : "Heriotze data", - "Email" : "E-posta", - "Instant messaging" : "Istanteko mezularitza", - "Phone" : "Telefonoa", - "Mobile" : "Mugikorra", - "Work mobile" : "Laneko mugikorra", - "Fax" : "Faxa", - "Fax home" : "Etxeko Faxa", - "Fax work" : "Laneko faxa", - "Pager" : "Bilagailua", - "Voice" : "Ahotsa", - "Car" : "Kotxea", - "Work pager" : "Laneko orriztapena", - "Social network" : "Sare soziala", - "Relationship" : "Erlazioa", - "Spouse" : "Emaztea", - "Child" : "Semea", - "Mother" : "Ama", - "Father" : "Aita", - "Parent" : "Ondokoa", - "Brother" : "Anaia", - "Sister" : "Arreba", - "Relative" : "Familiakoa", - "Friend" : "Laguna", - "Colleague" : "Lankidea", - "Manager" : "Jefea", - "Assistant" : "Asistentea", - "Gender" : "Generoa", - "Female" : "Emakumea", - "Male" : "Gizonezkoa", - "Details" : "Xehetasuna", - "Settings" : "Ezarpenak" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/eu.json b/l10n/eu.json deleted file mode 100644 index bbe8a82f..00000000 --- a/l10n/eu.json +++ /dev/null @@ -1,104 +0,0 @@ -{ "translations": { - "Contacts" : "Kontaktuak", - "Download" : "Jaitsi", - "Copy link" : "Esteka kopiatu", - "Click to copy the link to your clipboard" : "Klik egin esteka arbelara kopiatzeko", - "Toggle sharing" : "Partekatzea aldatu", - "Delete" : "Borratu", - "Rename" : "Izena aldatu", - "Share with users or groups" : "Erabiltzaile edo taldeekin partekatu", - "can edit" : "edita daiteke", - "Close" : "Itxi", - "Copied!" : "Kopiatuta!", - "Not supported!" : "Euskarririk ez!", - "Press ⌘-C to copy." : "⌘-C sakatu kopiatzeko.", - "Press Ctrl-C to copy." : "Ktrl-C sakatu kopiatzeko", - "Address book name" : "Agenda izena", - "Only these special characters are allowed: -_.!?#|()" : "Karaktere hauek bakarrik onartzen dira: -_.!?#|()", - "Address book could not be created." : "Helbide liburua ezin da sortu", - "The selected image is too big (max 1MB)" : "Aukeratutako irudia handiegia da (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Txartel hau nahastua zegoen eta konpondu da. Datuak konprobatu eta gorde aldaketak betikotzeko", - "No contacts in here" : "Kontakturik ez dago", - "Name" : "Izena", - "Organization" : "Erakundea", - "Title" : "Izenburua", - "Add field …" : "Eremua gehitu ...", - "Save changes" : "Aldaketak gorde", - "Address book" : "Helbide liburua", - "Loading contacts …" : "Kontaktuan kargatzen ...", - "Import into" : "Inportatu hona", - "Importing..." : "Inportatzen", - "Select your addressbook" : "Helbide liburua hautatu", - "No search result for {query}" : "{query} bilaketak ez du emaitzarik heman", - "All contacts" : "Kontaktu guztiak", - "Post office box" : "Posta kutxatila", - "Postal code" : "Posta kodea", - "City" : "Hiria", - "State or province" : "Estatu edo probintzia", - "Country" : "Herrialdea", - "Address" : "Helbidea", - "(new group)" : "(talde berria)", - "Last name" : "Abizena", - "First name" : "Izena", - "Additional names" : "Tarteko izenak", - "Prefix" : "Aurrizkia", - "Suffix" : "Atzizkia", - "Importing into" : "Informazioa inportatzen", - "New contact" : "Kontaktu berria", - "Not grouped" : "Taldekatu gabe", - "Sort by" : "Antolatu honela", - "{addressbook} shared by {owner}" : "{owner}-rek partakatutako {addressbook} ", - "Contact not found." : "Kontaktua ez da topatzen", - "You don't have permission to write to this addressbook." : "Ez duzu baimenik helbide-liburu honetan idazteko.", - "Contact could not be created." : "Kontaktua ezin izan da sortu.", - "No contacts in file. Only vCard files are allowed." : "Fitxategian ez dago kontakturik. vCard fitxategiak onartzen dira bakarrik", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "vCard 4.0 (RFC6350) edo 3.0 (RFC2426) bertsioak onartzen dira soilik.", - "Contact could not be saved." : "Kontaktua ezin da gorde", - "Waiting for the server to be ready…" : "Zerbitzaria martxan egon arte itxoiten...", - "Importing…" : "Inportatzen...", - "Display name" : "Izena erakutsi", - "Nickname" : "Ezizena", - "Detailed name" : "Izen osoa", - "Notes" : "Oharrak", - "Website" : "Webgunea", - "Federated Cloud ID" : "Federatutatako Hodei ID", - "Home" : "Etxekoa", - "Work" : "Lanekoa", - "Other" : "Bestelakoa", - "Groups" : "Taldeak", - "Birthday" : "Jaioteguna", - "Anniversary" : "Urteurrena", - "Date of death" : "Heriotze data", - "Email" : "E-posta", - "Instant messaging" : "Istanteko mezularitza", - "Phone" : "Telefonoa", - "Mobile" : "Mugikorra", - "Work mobile" : "Laneko mugikorra", - "Fax" : "Faxa", - "Fax home" : "Etxeko Faxa", - "Fax work" : "Laneko faxa", - "Pager" : "Bilagailua", - "Voice" : "Ahotsa", - "Car" : "Kotxea", - "Work pager" : "Laneko orriztapena", - "Social network" : "Sare soziala", - "Relationship" : "Erlazioa", - "Spouse" : "Emaztea", - "Child" : "Semea", - "Mother" : "Ama", - "Father" : "Aita", - "Parent" : "Ondokoa", - "Brother" : "Anaia", - "Sister" : "Arreba", - "Relative" : "Familiakoa", - "Friend" : "Laguna", - "Colleague" : "Lankidea", - "Manager" : "Jefea", - "Assistant" : "Asistentea", - "Gender" : "Generoa", - "Female" : "Emakumea", - "Male" : "Gizonezkoa", - "Details" : "Xehetasuna", - "Settings" : "Ezarpenak" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/fa.js b/l10n/fa.js deleted file mode 100644 index e0ac76b8..00000000 --- a/l10n/fa.js +++ /dev/null @@ -1,96 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "مخاطبین", - "Download" : "دانلود", - "Copy link" : "کپی کردن لینک", - "Click to copy the link to your clipboard" : "کپی کردن لینک در حافظه", - "Toggle sharing" : "نمایش/عدم نمایش اشتراک گذاری", - "Delete" : "حذف", - "Rename" : "تغییرنام", - "Share with users or groups" : "اشتراک گذاری با کاربران یا گروه ها ...", - "can edit" : "توانایی ویرایش", - "Close" : "بستن", - "Copied!" : "کپی انجام شد!", - "Not supported!" : "پشتیبانی وجود ندارد!", - "Press ⌘-C to copy." : "برای کپی کردن از دکمه های C+⌘ استفاده نمایید", - "Press Ctrl-C to copy." : "برای کپی کردن از دکمه Ctrl+C استفاده نمایید", - "Address book name" : "نام دفترچه آدرس", - "The selected image is too big (max 1MB)" : "تصویر انتخاب شده بسیار بزرگ است ( نهایتاْ 1MB )", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "این کارت مشکل داشته و تعمیر شده است. لطفاْ برای ثبت دائمی تغییرات اطلاعات آن را بررسی کرده و ذخیره کنید.", - "No contacts in here" : "مخاطبی اینجا وجود ندارد", - "Name" : "نام", - "Organization" : "سازمان", - "Title" : "عنوان", - "Save changes" : "ذخیره تغییرات", - "Address book" : "دفترچه آدرس", - "Import into" : "وارد کردن به", - "Importing..." : "در حال وارد کردن ...", - "Select your addressbook" : "دفترچه آدرس خود را انتخاب نمایید", - "No search result for {query}" : "جستجو برای {query} نتیجه ای نداشت", - "All contacts" : "تمام مخاطبین", - "Post office box" : "صندوق پستی محل کار", - "Postal code" : "کد پستی", - "City" : "شهر", - "State or province" : "استان", - "Country" : "کشور", - "Address" : "آدرس", - "(new group)" : "(گروه جدید)", - "Last name" : "نام‌خانوادگی", - "First name" : "نام", - "Additional names" : "نام های دیگر", - "Prefix" : "پیشوند", - "Suffix" : "پسوند", - "Importing into" : "در حال وارد کردن به", - "New contact" : "مخاطب جدید", - "Not grouped" : "گروه بندی نشده", - "Sort by" : "مرتب‌سازی بر اساس", - "{addressbook} shared by {owner}" : "{addressbook} به اشتراک گذاری شده توسط {owner}", - "Contact not found." : "مخاطب یافت نشد.", - "Contact could not be created." : "مخاطب نمی تواند ایجاد شود.", - "No contacts in file. Only vCard files are allowed." : "هیچ مخاطبی در فایل وجود ندارد فقط فایلهای vCard مجاز هستند.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported.", - "Contact could not be saved." : "مخاطب نمی تواند ذخیره شود.", - "Display name" : "نام جهت نمایش", - "Nickname" : "نام مستعار", - "Detailed name" : "نام کامل", - "Notes" : "یادداشت ها", - "Website" : "وب‌سایت", - "Federated Cloud ID" : "Federated Cloud شناسه", - "Home" : "خانه", - "Work" : "کار", - "Other" : "دیگر", - "Groups" : "گروه ها", - "Birthday" : "روزتولد", - "Anniversary" : "سالگرد", - "Date of death" : "تاریخ فوت", - "Email" : "پست الکترونیکی", - "Instant messaging" : "پیام رسانی فوری", - "Phone" : "شماره تلفن", - "Mobile" : "موبایل", - "Fax" : "دورنگار:", - "Fax home" : "دورنگار منزل", - "Fax work" : "دورنگار محل کار", - "Pager" : "صفحه", - "Voice" : "صدا", - "Social network" : "شبکه اجتماعی", - "Relationship" : "رابطه", - "Spouse" : "همسر", - "Child" : "فرزند", - "Mother" : "مادر", - "Father" : "پدر", - "Parent" : "والدین", - "Brother" : "برادر", - "Sister" : "خواهر", - "Relative" : "مرتبط", - "Friend" : "دوست", - "Colleague" : "کالج", - "Manager" : "مدیر", - "Assistant" : "راهنما", - "Gender" : "جنسیت", - "Female" : "مؤنث", - "Male" : "مذکر", - "Details" : "جزئیات", - "Settings" : "تنظیمات" -}, -"nplurals=2; plural=(n > 1);"); diff --git a/l10n/fa.json b/l10n/fa.json deleted file mode 100644 index cf08c546..00000000 --- a/l10n/fa.json +++ /dev/null @@ -1,94 +0,0 @@ -{ "translations": { - "Contacts" : "مخاطبین", - "Download" : "دانلود", - "Copy link" : "کپی کردن لینک", - "Click to copy the link to your clipboard" : "کپی کردن لینک در حافظه", - "Toggle sharing" : "نمایش/عدم نمایش اشتراک گذاری", - "Delete" : "حذف", - "Rename" : "تغییرنام", - "Share with users or groups" : "اشتراک گذاری با کاربران یا گروه ها ...", - "can edit" : "توانایی ویرایش", - "Close" : "بستن", - "Copied!" : "کپی انجام شد!", - "Not supported!" : "پشتیبانی وجود ندارد!", - "Press ⌘-C to copy." : "برای کپی کردن از دکمه های C+⌘ استفاده نمایید", - "Press Ctrl-C to copy." : "برای کپی کردن از دکمه Ctrl+C استفاده نمایید", - "Address book name" : "نام دفترچه آدرس", - "The selected image is too big (max 1MB)" : "تصویر انتخاب شده بسیار بزرگ است ( نهایتاْ 1MB )", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "این کارت مشکل داشته و تعمیر شده است. لطفاْ برای ثبت دائمی تغییرات اطلاعات آن را بررسی کرده و ذخیره کنید.", - "No contacts in here" : "مخاطبی اینجا وجود ندارد", - "Name" : "نام", - "Organization" : "سازمان", - "Title" : "عنوان", - "Save changes" : "ذخیره تغییرات", - "Address book" : "دفترچه آدرس", - "Import into" : "وارد کردن به", - "Importing..." : "در حال وارد کردن ...", - "Select your addressbook" : "دفترچه آدرس خود را انتخاب نمایید", - "No search result for {query}" : "جستجو برای {query} نتیجه ای نداشت", - "All contacts" : "تمام مخاطبین", - "Post office box" : "صندوق پستی محل کار", - "Postal code" : "کد پستی", - "City" : "شهر", - "State or province" : "استان", - "Country" : "کشور", - "Address" : "آدرس", - "(new group)" : "(گروه جدید)", - "Last name" : "نام‌خانوادگی", - "First name" : "نام", - "Additional names" : "نام های دیگر", - "Prefix" : "پیشوند", - "Suffix" : "پسوند", - "Importing into" : "در حال وارد کردن به", - "New contact" : "مخاطب جدید", - "Not grouped" : "گروه بندی نشده", - "Sort by" : "مرتب‌سازی بر اساس", - "{addressbook} shared by {owner}" : "{addressbook} به اشتراک گذاری شده توسط {owner}", - "Contact not found." : "مخاطب یافت نشد.", - "Contact could not be created." : "مخاطب نمی تواند ایجاد شود.", - "No contacts in file. Only vCard files are allowed." : "هیچ مخاطبی در فایل وجود ندارد فقط فایلهای vCard مجاز هستند.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported.", - "Contact could not be saved." : "مخاطب نمی تواند ذخیره شود.", - "Display name" : "نام جهت نمایش", - "Nickname" : "نام مستعار", - "Detailed name" : "نام کامل", - "Notes" : "یادداشت ها", - "Website" : "وب‌سایت", - "Federated Cloud ID" : "Federated Cloud شناسه", - "Home" : "خانه", - "Work" : "کار", - "Other" : "دیگر", - "Groups" : "گروه ها", - "Birthday" : "روزتولد", - "Anniversary" : "سالگرد", - "Date of death" : "تاریخ فوت", - "Email" : "پست الکترونیکی", - "Instant messaging" : "پیام رسانی فوری", - "Phone" : "شماره تلفن", - "Mobile" : "موبایل", - "Fax" : "دورنگار:", - "Fax home" : "دورنگار منزل", - "Fax work" : "دورنگار محل کار", - "Pager" : "صفحه", - "Voice" : "صدا", - "Social network" : "شبکه اجتماعی", - "Relationship" : "رابطه", - "Spouse" : "همسر", - "Child" : "فرزند", - "Mother" : "مادر", - "Father" : "پدر", - "Parent" : "والدین", - "Brother" : "برادر", - "Sister" : "خواهر", - "Relative" : "مرتبط", - "Friend" : "دوست", - "Colleague" : "کالج", - "Manager" : "مدیر", - "Assistant" : "راهنما", - "Gender" : "جنسیت", - "Female" : "مؤنث", - "Male" : "مذکر", - "Details" : "جزئیات", - "Settings" : "تنظیمات" -},"pluralForm" :"nplurals=2; plural=(n > 1);" -} \ No newline at end of file diff --git a/l10n/fi.js b/l10n/fi.js deleted file mode 100644 index 1d2d3e13..00000000 --- a/l10n/fi.js +++ /dev/null @@ -1,114 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Yhteystiedot", - "Download" : "Lataa", - "Copy link" : "Kopioi linkki", - "Click to copy the link to your clipboard" : "Klikkaa kopioidaksesi linkin leikepöydälle", - "Toggle sharing" : "Jakaminen päälle/pois", - "Delete" : "Poista", - "Rename" : "Nimeä uudelleen", - "Share with users or groups" : "Jaa käyttäjien tai ryhmien kanssa", - "can edit" : "voi muokata", - "Close" : "Sulje", - "Enabled" : "Käytössä", - "Disabled" : "Pois käytöstä", - "Copied!" : "Kopioitu!", - "Not supported!" : "Ei tuettu!", - "Press ⌘-C to copy." : "Paina ⌘-C kopioidaksesi.", - "Press Ctrl-C to copy." : "Paina Ctrl-C kopioidaksesi.", - "Address book name" : "Osoitekirjan nimi", - "Only these special characters are allowed: -_.!?#|()" : "Vain seuraavat erikoismerkit ovat sallittuja: -_.!?#|()", - "Address book could not be created." : "Osoitekirjaa ei voitu luoda.", - "Upload new image" : "Lähetä uusi kuva", - "The selected image is too big (max 1MB)" : "Valittu kuva on liian suuri kooltaan (enintään 1 Mt)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Tämä yhteystietokortti on vioittunut ja se on korjattu. Tarkista tiedot ja tallenna vahvistaaksesi muutokset pysyvästi.", - "No contacts in here" : "Ei yhteytietoja", - "Name" : "Nimi", - "Organization" : "Organisaatio", - "Title" : "Otsikko", - "Add field …" : "Lisää kenttä…", - "Save changes" : "Tallenna muutokset", - "Address book" : "Osoitekirja", - "Loading contacts …" : "Ladataan yhteystietoja…", - "Import into" : "Tuo kirjaan", - "Importing..." : "Tuodaan...", - "Select your addressbook" : "Valitse osoitekirja", - "Import is disabled because no writable address book had been found." : "Tuonti ei ole käytössä, koska yhtäkään kirjoitettavissa olevaa osoitekirjaa ei löytynyt.", - "No search result for {query}" : "Ei tuloksia haulle {query}", - "All contacts" : "Kaikki yhteystiedot", - "Post office box" : "Postilokero", - "Postal code" : "Postinumero", - "City" : "Paikkakunta", - "State or province" : "Maakunta tai osavaltio", - "Country" : "Maa", - "Address" : "Osoite", - "(new group)" : "(uusi ryhmä)", - "Last name" : "Sukunimi", - "First name" : "Etunimi", - "Additional names" : "Lisänimet", - "Prefix" : "Etuliite", - "Suffix" : "Takaliite", - "New contact" : "Uusi yhteystieto", - "Not grouped" : "Ei ryhmitelty", - "Sort by" : "Lajittelujärjestys", - "There is no address book available to create a contact." : "Ei osoitekirjaa saatavilla, johon luoda yhteystieto.", - "{addressbook} shared by {owner}" : "Osoitekirjan {addressbook} jakoi {owner}", - "Contact not found." : "Yhteystietoa ei löytynyt.", - "You don't have permission to write to this addressbook." : "Sinulla ei ole oikeutta kirjoittaa tähän osoitekirjaan.", - "Contact could not be created." : "Yhteystiedon luominen ei onnistunut.", - "No contacts in file. Only vCard files are allowed." : "Ei yhteystietoja tiedostossa. Vain vCard-tiedostot hyväksytään.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Vain vCardin versiota 4.0 (RFC6350) tai 3.0 (RFC2426) tuetaan.", - "Contact could not be moved." : "Yhteystietoa ei voitu siirtää.", - "Contact could not be saved." : "Yhteystiedon tallennus epäonnistui", - "Waiting for the server to be ready…" : "Odotetaan palvelimen olevan valmis…", - "Importing…" : "Tuodaan…", - "Display name" : "Näyttönimi", - "Nickname" : "Kutsumanimi", - "Detailed name" : "Täsmällinen nimi", - "Notes" : "Huomiot", - "Website" : "Verkkosivusto", - "Federated Cloud ID" : "Federoidun pilven tunniste", - "Home" : "Koti", - "Work" : "Työ", - "Other" : "Muu", - "Groups" : "Ryhmät", - "Birthday" : "Syntymäpäivä", - "Anniversary" : "Vuosipäivä", - "Date of death" : "Kuolinpäivä", - "Email" : "Sähköpostiosoite", - "Instant messaging" : "Pikaviestintä", - "Phone" : "Puhelin", - "Mobile" : "Mobiili", - "Work mobile" : "Työmatkapuhelin", - "Fax" : "Faksi", - "Fax home" : "Faksi, koti", - "Fax work" : "Faksi, työ", - "Pager" : "Hakulaite", - "Voice" : "Ääni", - "Car" : "Auto", - "Work pager" : "Työhakulaite", - "Social network" : "Sosiaalinen verkosto", - "Relationship" : "Ihmissuhde", - "Spouse" : "Puoliso", - "Child" : "Lapsi", - "Mother" : "Äiti", - "Father" : "Isä", - "Parent" : "Vanhempi", - "Brother" : "Veli", - "Sister" : "Sisko", - "Relative" : "Sukulainen", - "Friend" : "Kaveri", - "Colleague" : "Työkaveri", - "Manager" : "Esimies", - "Assistant" : "Avustaja", - "Emergency" : "Hätä", - "Co-worker" : "Työkaveri", - "Gender" : "Sukupuoli", - "Female" : "Nainen", - "Male" : "Mies", - "Details" : "Tiedot", - "A contacts app for Nextcloud" : "Yhteystietosovellus Nextcloudille", - "Settings" : "Asetukset" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/fi.json b/l10n/fi.json deleted file mode 100644 index c99556e7..00000000 --- a/l10n/fi.json +++ /dev/null @@ -1,112 +0,0 @@ -{ "translations": { - "Contacts" : "Yhteystiedot", - "Download" : "Lataa", - "Copy link" : "Kopioi linkki", - "Click to copy the link to your clipboard" : "Klikkaa kopioidaksesi linkin leikepöydälle", - "Toggle sharing" : "Jakaminen päälle/pois", - "Delete" : "Poista", - "Rename" : "Nimeä uudelleen", - "Share with users or groups" : "Jaa käyttäjien tai ryhmien kanssa", - "can edit" : "voi muokata", - "Close" : "Sulje", - "Enabled" : "Käytössä", - "Disabled" : "Pois käytöstä", - "Copied!" : "Kopioitu!", - "Not supported!" : "Ei tuettu!", - "Press ⌘-C to copy." : "Paina ⌘-C kopioidaksesi.", - "Press Ctrl-C to copy." : "Paina Ctrl-C kopioidaksesi.", - "Address book name" : "Osoitekirjan nimi", - "Only these special characters are allowed: -_.!?#|()" : "Vain seuraavat erikoismerkit ovat sallittuja: -_.!?#|()", - "Address book could not be created." : "Osoitekirjaa ei voitu luoda.", - "Upload new image" : "Lähetä uusi kuva", - "The selected image is too big (max 1MB)" : "Valittu kuva on liian suuri kooltaan (enintään 1 Mt)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Tämä yhteystietokortti on vioittunut ja se on korjattu. Tarkista tiedot ja tallenna vahvistaaksesi muutokset pysyvästi.", - "No contacts in here" : "Ei yhteytietoja", - "Name" : "Nimi", - "Organization" : "Organisaatio", - "Title" : "Otsikko", - "Add field …" : "Lisää kenttä…", - "Save changes" : "Tallenna muutokset", - "Address book" : "Osoitekirja", - "Loading contacts …" : "Ladataan yhteystietoja…", - "Import into" : "Tuo kirjaan", - "Importing..." : "Tuodaan...", - "Select your addressbook" : "Valitse osoitekirja", - "Import is disabled because no writable address book had been found." : "Tuonti ei ole käytössä, koska yhtäkään kirjoitettavissa olevaa osoitekirjaa ei löytynyt.", - "No search result for {query}" : "Ei tuloksia haulle {query}", - "All contacts" : "Kaikki yhteystiedot", - "Post office box" : "Postilokero", - "Postal code" : "Postinumero", - "City" : "Paikkakunta", - "State or province" : "Maakunta tai osavaltio", - "Country" : "Maa", - "Address" : "Osoite", - "(new group)" : "(uusi ryhmä)", - "Last name" : "Sukunimi", - "First name" : "Etunimi", - "Additional names" : "Lisänimet", - "Prefix" : "Etuliite", - "Suffix" : "Takaliite", - "New contact" : "Uusi yhteystieto", - "Not grouped" : "Ei ryhmitelty", - "Sort by" : "Lajittelujärjestys", - "There is no address book available to create a contact." : "Ei osoitekirjaa saatavilla, johon luoda yhteystieto.", - "{addressbook} shared by {owner}" : "Osoitekirjan {addressbook} jakoi {owner}", - "Contact not found." : "Yhteystietoa ei löytynyt.", - "You don't have permission to write to this addressbook." : "Sinulla ei ole oikeutta kirjoittaa tähän osoitekirjaan.", - "Contact could not be created." : "Yhteystiedon luominen ei onnistunut.", - "No contacts in file. Only vCard files are allowed." : "Ei yhteystietoja tiedostossa. Vain vCard-tiedostot hyväksytään.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Vain vCardin versiota 4.0 (RFC6350) tai 3.0 (RFC2426) tuetaan.", - "Contact could not be moved." : "Yhteystietoa ei voitu siirtää.", - "Contact could not be saved." : "Yhteystiedon tallennus epäonnistui", - "Waiting for the server to be ready…" : "Odotetaan palvelimen olevan valmis…", - "Importing…" : "Tuodaan…", - "Display name" : "Näyttönimi", - "Nickname" : "Kutsumanimi", - "Detailed name" : "Täsmällinen nimi", - "Notes" : "Huomiot", - "Website" : "Verkkosivusto", - "Federated Cloud ID" : "Federoidun pilven tunniste", - "Home" : "Koti", - "Work" : "Työ", - "Other" : "Muu", - "Groups" : "Ryhmät", - "Birthday" : "Syntymäpäivä", - "Anniversary" : "Vuosipäivä", - "Date of death" : "Kuolinpäivä", - "Email" : "Sähköpostiosoite", - "Instant messaging" : "Pikaviestintä", - "Phone" : "Puhelin", - "Mobile" : "Mobiili", - "Work mobile" : "Työmatkapuhelin", - "Fax" : "Faksi", - "Fax home" : "Faksi, koti", - "Fax work" : "Faksi, työ", - "Pager" : "Hakulaite", - "Voice" : "Ääni", - "Car" : "Auto", - "Work pager" : "Työhakulaite", - "Social network" : "Sosiaalinen verkosto", - "Relationship" : "Ihmissuhde", - "Spouse" : "Puoliso", - "Child" : "Lapsi", - "Mother" : "Äiti", - "Father" : "Isä", - "Parent" : "Vanhempi", - "Brother" : "Veli", - "Sister" : "Sisko", - "Relative" : "Sukulainen", - "Friend" : "Kaveri", - "Colleague" : "Työkaveri", - "Manager" : "Esimies", - "Assistant" : "Avustaja", - "Emergency" : "Hätä", - "Co-worker" : "Työkaveri", - "Gender" : "Sukupuoli", - "Female" : "Nainen", - "Male" : "Mies", - "Details" : "Tiedot", - "A contacts app for Nextcloud" : "Yhteystietosovellus Nextcloudille", - "Settings" : "Asetukset" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/fr.js b/l10n/fr.js deleted file mode 100644 index 86cef7e5..00000000 --- a/l10n/fr.js +++ /dev/null @@ -1,121 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contacts", - "Download" : "Télécharger", - "Copy link" : "Copier le lien", - "Click to copy the link to your clipboard" : "Cliquez pour copier le lien dans votre presse-papier", - "Toggle sharing" : "Activer / Désactiver le partage", - "Delete" : "Supprimer", - "Rename" : "Renommer", - "Share with users or groups" : "Partager avec des utilisateurs ou des groupes", - "can edit" : "peut modifier", - "Close" : "Fermer", - "Enabled" : "Activé", - "Disabled" : "Désactivé", - "Copied!" : "Copié !", - "Not supported!" : "Non pris en charge !", - "Press ⌘-C to copy." : "Appuyez sur ⌘-C pour copier.", - "Press Ctrl-C to copy." : "Appuyez sur Ctrl-C pour copier.", - "Address book name" : "Nom du carnet d'adresses", - "Only these special characters are allowed: -_.!?#|()" : "Seuls ces caractères spéciaux sont autorisés : -_.!?#|()", - "Address book could not be created." : "Impossible de créer le carnet d'adresses.", - "Upload new image" : "Téléverser une nouvelle image", - "The selected image is too big (max 1MB)" : "L'image sélectionnée est trop volumineuse (1 Mo max)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Cette carte est corrompue et a été corrigée. Veuillez vérifier les données et lancer une sauvegarde pour rendre les changements définitifs.", - "No contacts in here" : "Aucun contact", - "Name" : "Nom", - "Organization" : "Société", - "Title" : "Titre", - "Add field …" : "Ajouter un champ…", - "Save changes" : "Enregistrer les modifications", - "Address book" : "Carnet d'adresses", - "Loading contacts …" : "Chargement des contacts...", - "Import into" : "Importer vers", - "Importing..." : "Importation en cours", - "Select your addressbook" : "Sélectionner votre carnet d'adresses", - "Import is disabled because no writable address book had been found." : "L'importation est désactivé car aucun carnet d'adresses modifiable n'a été trouvé.", - "No search result for {query}" : "Aucun résultat pour {query}", - "All contacts" : "Tous les contacts", - "Post office box" : "Boîte postale", - "Postal code" : "Code postal", - "City" : "Ville", - "State or province" : "État ou région", - "Country" : "Pays", - "Address" : "Adresse", - "(new group)" : "(nouveau groupe)", - "Last name" : "Nom", - "First name" : "Prénom", - "Additional names" : "Noms supplémentaires", - "Prefix" : "Préfixe", - "Suffix" : "Suffixe", - "Importing into" : "Importer dans", - "New contact" : "Nouveau contact", - "Not grouped" : "Non groupés", - "Sort by" : "Trier par", - "There is no address book available to create a contact." : "Il n'y a aucun carnet d'adresses disponible pour créer un contact.", - "{addressbook} shared by {owner}" : "{addressbook} partagé par {owner}", - "Contact not found." : "Contact introuvable.", - "You don't have permission to write to this addressbook." : "Vous n'avez pas la permission d'écrire dans ce carnet d'adresses.", - "Contact could not be created." : "Ce contact n'a pu être créé.", - "No contacts in file. Only vCard files are allowed." : "Aucun contact dans le fichier. Seuls les fichiers vCard sont autorisés.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Seules les vCard version 4.0 (RFC6350) ou version 3.0 (RFC2426) sont supportées.", - "Contact could not be moved." : "Ce contact n'a pas pu être déplacé.", - "Contact could not be saved." : "Ce contact n'a pu être enregistré.", - "Waiting for the server to be ready…" : "En attente d'une réponse du serveur...", - "Importing…" : "Importation en cours...", - "Display name" : "Nom affiché", - "Nickname" : "Surnom", - "Detailed name" : "Nom complet", - "Notes" : "Notes", - "Website" : "Site web", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Domicile", - "Work" : "Travail", - "Other" : "Autre", - "Groups" : "Groupes", - "Birthday" : "Anniversaire", - "Anniversary" : "Autre date", - "Date of death" : "Date de décès", - "Email" : "Adresse de courriel", - "Instant messaging" : "Messagerie instantanée", - "Phone" : "Téléphone", - "Mobile" : "Mobile", - "Work mobile" : "Téléphone portable professionnel", - "Fax" : "Fax", - "Fax home" : "Fax personnel", - "Fax work" : "Fax pro", - "Pager" : "Bipeur", - "Voice" : "Voix", - "Car" : "Voiture", - "Work pager" : "Bip professionnel", - "Social network" : "Réseau social", - "Relationship" : "Relation", - "Specify a relationship between you and the entity represented by this vCard." : "Indiquez une relation entre vous et l'entité représentée par cette vCard.", - "Spouse" : "Conjoint", - "Child" : "Enfant", - "Mother" : "Mère", - "Father" : "Père", - "Parent" : "Parent", - "Brother" : "Frère", - "Sister" : "Sœur", - "Relative" : "Membre de la famille", - "Friend" : "Ami", - "Colleague" : "Collègue", - "Manager" : "Directeur", - "Assistant" : "Assistant", - "Related" : "En relation", - "Specify a relationship between another entity and the entity represented by this vCard." : "Spécifiez une relation entre l'entité représentée par cette vCard et une autre entité.", - "Contact" : "Contact", - "Agent" : "Agent", - "Emergency" : "Urgence", - "Co-worker" : "Collaborateur", - "Gender" : "Sexe", - "Female" : "Féminin", - "Male" : "Masculin", - "Details" : "Détails", - "A contacts app for Nextcloud" : "Application contacts pour Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "L'application de contacts Nextcloud est une interface utilisateur pour le serveur CardDAV de Nextcloud. Synchronisez facilement les contacts de divers appareils avec votre Nextcloud et modifiez-les en ligne.\n\n* 🚀 ** Intégration avec d'autres applications Nextcloud! ** Actuellement Mail et agenda - plus à venir.\n* 🎉 ** N'oubliez jamais plus d'anniversaire! ** Vous pouvez synchroniser les anniversaires et autres événements récurrents avec votre agenda Nextcloud.\n* 👥 ** Partage de carnet d’adresses ! ** Vous souhaitez partager vos contacts avec vos amis ou vos collègues? Aucun problème!\n* 🙈 ** Nous ne réinventons pas la roue! ** Basé sur la superbe bibliothèque ouverte SabreDAV.", - "Settings" : "Paramètres" -}, -"nplurals=2; plural=(n > 1);"); diff --git a/l10n/fr.json b/l10n/fr.json deleted file mode 100644 index 7ebd38de..00000000 --- a/l10n/fr.json +++ /dev/null @@ -1,119 +0,0 @@ -{ "translations": { - "Contacts" : "Contacts", - "Download" : "Télécharger", - "Copy link" : "Copier le lien", - "Click to copy the link to your clipboard" : "Cliquez pour copier le lien dans votre presse-papier", - "Toggle sharing" : "Activer / Désactiver le partage", - "Delete" : "Supprimer", - "Rename" : "Renommer", - "Share with users or groups" : "Partager avec des utilisateurs ou des groupes", - "can edit" : "peut modifier", - "Close" : "Fermer", - "Enabled" : "Activé", - "Disabled" : "Désactivé", - "Copied!" : "Copié !", - "Not supported!" : "Non pris en charge !", - "Press ⌘-C to copy." : "Appuyez sur ⌘-C pour copier.", - "Press Ctrl-C to copy." : "Appuyez sur Ctrl-C pour copier.", - "Address book name" : "Nom du carnet d'adresses", - "Only these special characters are allowed: -_.!?#|()" : "Seuls ces caractères spéciaux sont autorisés : -_.!?#|()", - "Address book could not be created." : "Impossible de créer le carnet d'adresses.", - "Upload new image" : "Téléverser une nouvelle image", - "The selected image is too big (max 1MB)" : "L'image sélectionnée est trop volumineuse (1 Mo max)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Cette carte est corrompue et a été corrigée. Veuillez vérifier les données et lancer une sauvegarde pour rendre les changements définitifs.", - "No contacts in here" : "Aucun contact", - "Name" : "Nom", - "Organization" : "Société", - "Title" : "Titre", - "Add field …" : "Ajouter un champ…", - "Save changes" : "Enregistrer les modifications", - "Address book" : "Carnet d'adresses", - "Loading contacts …" : "Chargement des contacts...", - "Import into" : "Importer vers", - "Importing..." : "Importation en cours", - "Select your addressbook" : "Sélectionner votre carnet d'adresses", - "Import is disabled because no writable address book had been found." : "L'importation est désactivé car aucun carnet d'adresses modifiable n'a été trouvé.", - "No search result for {query}" : "Aucun résultat pour {query}", - "All contacts" : "Tous les contacts", - "Post office box" : "Boîte postale", - "Postal code" : "Code postal", - "City" : "Ville", - "State or province" : "État ou région", - "Country" : "Pays", - "Address" : "Adresse", - "(new group)" : "(nouveau groupe)", - "Last name" : "Nom", - "First name" : "Prénom", - "Additional names" : "Noms supplémentaires", - "Prefix" : "Préfixe", - "Suffix" : "Suffixe", - "Importing into" : "Importer dans", - "New contact" : "Nouveau contact", - "Not grouped" : "Non groupés", - "Sort by" : "Trier par", - "There is no address book available to create a contact." : "Il n'y a aucun carnet d'adresses disponible pour créer un contact.", - "{addressbook} shared by {owner}" : "{addressbook} partagé par {owner}", - "Contact not found." : "Contact introuvable.", - "You don't have permission to write to this addressbook." : "Vous n'avez pas la permission d'écrire dans ce carnet d'adresses.", - "Contact could not be created." : "Ce contact n'a pu être créé.", - "No contacts in file. Only vCard files are allowed." : "Aucun contact dans le fichier. Seuls les fichiers vCard sont autorisés.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Seules les vCard version 4.0 (RFC6350) ou version 3.0 (RFC2426) sont supportées.", - "Contact could not be moved." : "Ce contact n'a pas pu être déplacé.", - "Contact could not be saved." : "Ce contact n'a pu être enregistré.", - "Waiting for the server to be ready…" : "En attente d'une réponse du serveur...", - "Importing…" : "Importation en cours...", - "Display name" : "Nom affiché", - "Nickname" : "Surnom", - "Detailed name" : "Nom complet", - "Notes" : "Notes", - "Website" : "Site web", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Domicile", - "Work" : "Travail", - "Other" : "Autre", - "Groups" : "Groupes", - "Birthday" : "Anniversaire", - "Anniversary" : "Autre date", - "Date of death" : "Date de décès", - "Email" : "Adresse de courriel", - "Instant messaging" : "Messagerie instantanée", - "Phone" : "Téléphone", - "Mobile" : "Mobile", - "Work mobile" : "Téléphone portable professionnel", - "Fax" : "Fax", - "Fax home" : "Fax personnel", - "Fax work" : "Fax pro", - "Pager" : "Bipeur", - "Voice" : "Voix", - "Car" : "Voiture", - "Work pager" : "Bip professionnel", - "Social network" : "Réseau social", - "Relationship" : "Relation", - "Specify a relationship between you and the entity represented by this vCard." : "Indiquez une relation entre vous et l'entité représentée par cette vCard.", - "Spouse" : "Conjoint", - "Child" : "Enfant", - "Mother" : "Mère", - "Father" : "Père", - "Parent" : "Parent", - "Brother" : "Frère", - "Sister" : "Sœur", - "Relative" : "Membre de la famille", - "Friend" : "Ami", - "Colleague" : "Collègue", - "Manager" : "Directeur", - "Assistant" : "Assistant", - "Related" : "En relation", - "Specify a relationship between another entity and the entity represented by this vCard." : "Spécifiez une relation entre l'entité représentée par cette vCard et une autre entité.", - "Contact" : "Contact", - "Agent" : "Agent", - "Emergency" : "Urgence", - "Co-worker" : "Collaborateur", - "Gender" : "Sexe", - "Female" : "Féminin", - "Male" : "Masculin", - "Details" : "Détails", - "A contacts app for Nextcloud" : "Application contacts pour Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "L'application de contacts Nextcloud est une interface utilisateur pour le serveur CardDAV de Nextcloud. Synchronisez facilement les contacts de divers appareils avec votre Nextcloud et modifiez-les en ligne.\n\n* 🚀 ** Intégration avec d'autres applications Nextcloud! ** Actuellement Mail et agenda - plus à venir.\n* 🎉 ** N'oubliez jamais plus d'anniversaire! ** Vous pouvez synchroniser les anniversaires et autres événements récurrents avec votre agenda Nextcloud.\n* 👥 ** Partage de carnet d’adresses ! ** Vous souhaitez partager vos contacts avec vos amis ou vos collègues? Aucun problème!\n* 🙈 ** Nous ne réinventons pas la roue! ** Basé sur la superbe bibliothèque ouverte SabreDAV.", - "Settings" : "Paramètres" -},"pluralForm" :"nplurals=2; plural=(n > 1);" -} \ No newline at end of file diff --git a/l10n/gl.js b/l10n/gl.js deleted file mode 100644 index 0b67e708..00000000 --- a/l10n/gl.js +++ /dev/null @@ -1,75 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar a ligazón", - "Click to copy the link to your clipboard" : "Copiar a ligazón ao portapapeis", - "Delete" : "Eliminar", - "Rename" : "Renomear", - "Share with users or groups" : "Compartir con usuarios ou grupos", - "can edit" : "pode editar", - "Close" : "Pechar", - "Copied!" : "Copiado!", - "Press ⌘-C to copy." : "Prema ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Prema Ctrl-C para copiar.", - "Address book name" : "Nome do caderno de enderezos", - "Only these special characters are allowed: -_.!?#|()" : "So se permiten estes caracteres especiais: -_.!?#|()", - "Address book could not be created." : "Non se puido crear o caderno de enderezos.", - "The selected image is too big (max 1MB)" : "A imaxe que seleccionou é demasiado grande (máx. 1MB)", - "Name" : "Nome", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Engadir un campo...", - "Save changes" : "Gardar cambios", - "Address book" : "Caderno de enderezos", - "Loading contacts …" : "Cargando contactos...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Seleccione o caderno de enderezos", - "No search result for {query}" : "Sen resultados de busca para {query}", - "All contacts" : "Todos os contactos", - "Postal code" : "Código postal", - "City" : "Cidade", - "State or province" : "Estado ou provincia", - "Country" : "País", - "Address" : "Enderezo", - "(new group)" : "(novo grupo)", - "Last name" : "Apelidos", - "First name" : "Nome", - "Prefix" : "Prefixo", - "Suffix" : "Sufixo", - "Importing into" : "Importando a", - "New contact" : "Novo contacto", - "Sort by" : "Ordenado por", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "Non se atopou o contacto.", - "Contact could not be created." : "Non se puido crear o contacto.", - "No contacts in file. Only vCard files are allowed." : "Non hai contactos no ficheiro. Só se admiten ficheiros VCard.", - "Contact could not be saved." : "Non se puido gardar o contacto", - "Waiting for the server to be ready…" : "Agardando polo servidor...", - "Importing…" : "Importando...", - "Display name" : "Nome para amosar", - "Notes" : "Notas", - "Email" : "Correo-e", - "Instant messaging" : "Mensaxería instantánea", - "Phone" : "Teléfono", - "Mobile" : "Móbil", - "Fax" : "Fax", - "Fax work" : "Fax do traballo", - "Car" : "Coche", - "Social network" : "Rede social", - "Spouse" : "Muller", - "Child" : "Fillo/a", - "Mother" : "Nai", - "Father" : "Pai", - "Parent" : "Nai/Pai", - "Brother" : "Irmán", - "Sister" : "Irmá", - "Relative" : "Familiar", - "Assistant" : "Asistente", - "Gender" : "Xénero", - "Details" : "Detalles", - "Settings" : "Axustes" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/gl.json b/l10n/gl.json deleted file mode 100644 index f485ba4e..00000000 --- a/l10n/gl.json +++ /dev/null @@ -1,73 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descargar", - "Copy link" : "Copiar a ligazón", - "Click to copy the link to your clipboard" : "Copiar a ligazón ao portapapeis", - "Delete" : "Eliminar", - "Rename" : "Renomear", - "Share with users or groups" : "Compartir con usuarios ou grupos", - "can edit" : "pode editar", - "Close" : "Pechar", - "Copied!" : "Copiado!", - "Press ⌘-C to copy." : "Prema ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Prema Ctrl-C para copiar.", - "Address book name" : "Nome do caderno de enderezos", - "Only these special characters are allowed: -_.!?#|()" : "So se permiten estes caracteres especiais: -_.!?#|()", - "Address book could not be created." : "Non se puido crear o caderno de enderezos.", - "The selected image is too big (max 1MB)" : "A imaxe que seleccionou é demasiado grande (máx. 1MB)", - "Name" : "Nome", - "Organization" : "Organización", - "Title" : "Título", - "Add field …" : "Engadir un campo...", - "Save changes" : "Gardar cambios", - "Address book" : "Caderno de enderezos", - "Loading contacts …" : "Cargando contactos...", - "Import into" : "Importar a", - "Importing..." : "Importando...", - "Select your addressbook" : "Seleccione o caderno de enderezos", - "No search result for {query}" : "Sen resultados de busca para {query}", - "All contacts" : "Todos os contactos", - "Postal code" : "Código postal", - "City" : "Cidade", - "State or province" : "Estado ou provincia", - "Country" : "País", - "Address" : "Enderezo", - "(new group)" : "(novo grupo)", - "Last name" : "Apelidos", - "First name" : "Nome", - "Prefix" : "Prefixo", - "Suffix" : "Sufixo", - "Importing into" : "Importando a", - "New contact" : "Novo contacto", - "Sort by" : "Ordenado por", - "{addressbook} shared by {owner}" : "{addressbook} compartido por {owner}", - "Contact not found." : "Non se atopou o contacto.", - "Contact could not be created." : "Non se puido crear o contacto.", - "No contacts in file. Only vCard files are allowed." : "Non hai contactos no ficheiro. Só se admiten ficheiros VCard.", - "Contact could not be saved." : "Non se puido gardar o contacto", - "Waiting for the server to be ready…" : "Agardando polo servidor...", - "Importing…" : "Importando...", - "Display name" : "Nome para amosar", - "Notes" : "Notas", - "Email" : "Correo-e", - "Instant messaging" : "Mensaxería instantánea", - "Phone" : "Teléfono", - "Mobile" : "Móbil", - "Fax" : "Fax", - "Fax work" : "Fax do traballo", - "Car" : "Coche", - "Social network" : "Rede social", - "Spouse" : "Muller", - "Child" : "Fillo/a", - "Mother" : "Nai", - "Father" : "Pai", - "Parent" : "Nai/Pai", - "Brother" : "Irmán", - "Sister" : "Irmá", - "Relative" : "Familiar", - "Assistant" : "Asistente", - "Gender" : "Xénero", - "Details" : "Detalles", - "Settings" : "Axustes" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/he.js b/l10n/he.js deleted file mode 100644 index 42ef7274..00000000 --- a/l10n/he.js +++ /dev/null @@ -1,121 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "אנשי קשר", - "Download" : "הורדה", - "Copy link" : "העתק קישור", - "Click to copy the link to your clipboard" : "העתק את הקישור", - "Toggle sharing" : "לחץ לשיתוף", - "Delete" : "מחק", - "Rename" : "שנה שם", - "Share with users or groups" : "שיתוף עם משתמשים או קבוצות", - "can edit" : "ניתן לערוך", - "Close" : "סגור", - "Enabled" : "מופעל", - "Disabled" : "מושבת", - "Copied!" : "הועתק!", - "Not supported!" : "לא נתמך!", - "Press ⌘-C to copy." : "לחץ ⌘+C כדי להעתיק.", - "Press Ctrl-C to copy." : "לחץ Ctrl+C כדי להעתיק.", - "Address book name" : "שם ספר כתובות", - "Only these special characters are allowed: -_.!?#|()" : "מותר להשתמש בתווים מיוחדים אלה בלבד: -_.!?#|()", - "Address book could not be created." : "לא ניתן ליצור ספר כתובות.", - "Upload new image" : "העלאת תמונה חדשה", - "The selected image is too big (max 1MB)" : "התמונה הנבחרת גדולה מדי (מקסימום 1 מגה בייט)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "הייתה שגיאה בטעינת איש קשר והיא תוקנה, נא לבדוק את המידע ולשמור על מנת ששינויים ישמרו לתמיד.", - "No contacts in here" : "אין כאן אנשי קשר", - "Name" : "שם", - "Organization" : "ארגון", - "Title" : "תפקיד", - "Add field …" : "הוספת שדה", - "Save changes" : "שמור שינויים", - "Address book" : "רשימת אנשי קשר", - "Loading contacts …" : "אנשי הקשר נטענים…", - "Import into" : "ייבוא לתוך", - "Importing..." : "מתבצע ייבוא…", - "Select your addressbook" : "בחירת ספר הכתובות שלך", - "Import is disabled because no writable address book had been found." : "הייבוא מושבת כיוון שלא נמצא אף ספר כתובות שניתן לכתוב לתוכו.", - "No search result for {query}" : "אין תוצאות חיפוש עבור {query}", - "All contacts" : "כל אנשי הקשר", - "Post office box" : "תיבת דואר", - "Postal code" : "מיקוד", - "City" : "עיר", - "State or province" : "מדינה או מחוז", - "Country" : "מדינה", - "Address" : "כתובת", - "(new group)" : "(קבוצה חדשה)", - "Last name" : "שם משפחה", - "First name" : "שם פרטי", - "Additional names" : "שמות נוספים", - "Prefix" : "תואר", - "Suffix" : "סיומת", - "Importing into" : "מתבצע ייבוא לתוך", - "New contact" : "איש קשר חדש", - "Not grouped" : "לא שויך לקבוצה", - "Sort by" : "מיון", - "There is no address book available to create a contact." : "אין ספר כתובות זמין לטובת יצירת איש קשר.", - "{addressbook} shared by {owner}" : "{addressbook} שותף על ידי {owner}", - "Contact not found." : "איש קשר לא נמצא", - "You don't have permission to write to this addressbook." : "אין לך הרשאות לכתיבה לספר כתובות זה.", - "Contact could not be created." : "לא ניתן היה ליצור איש קשר.", - "No contacts in file. Only vCard files are allowed." : "אין אנשי קשר בקובץ. רק קובצי VCard ניתנים לשימוש.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "רק vCard גרסה 4.0 (RFC6350) או גרסה 3.0 (RFC2426) נתמכים.", - "Contact could not be moved." : "לא ניתן להעביר את איש הקשר.", - "Contact could not be saved." : "לא ניתן היה לשמור את איש קשר.", - "Waiting for the server to be ready…" : "בהמתנה לזמינות השרת…", - "Importing…" : "מתבצע ייבוא…", - "Display name" : "שם תצוגה", - "Nickname" : "כינוי", - "Detailed name" : "פרטי שם", - "Notes" : "הערות", - "Website" : "אתר אינטרנט", - "Federated Cloud ID" : "מספר זיהוי ענן מאוגד", - "Home" : "בית", - "Work" : "עבודה", - "Other" : "אחר", - "Groups" : "קבוצות", - "Birthday" : "יום הולדת", - "Anniversary" : "יום השנה", - "Date of death" : "תאריך פטירה", - "Email" : "דואר אלקטרוני", - "Instant messaging" : "מסרים מיידיים", - "Phone" : "טלפון", - "Mobile" : "נייד", - "Work mobile" : "סלולרי מהעבודה", - "Fax" : "פקס", - "Fax home" : "פקס בבית", - "Fax work" : "פקס בעבודה", - "Pager" : "זימונית", - "Voice" : "קולי", - "Car" : "רכב", - "Work pager" : "זימונית מהעבודה", - "Social network" : "רשת חברתית", - "Relationship" : "קשר", - "Specify a relationship between you and the entity represented by this vCard." : "הגדרת קשר בינך לבין הישות המיוצגת על ידי vCard זה.", - "Spouse" : "בן/בת זוג", - "Child" : "בן/בת", - "Mother" : "אימא", - "Father" : "אבא", - "Parent" : "הורה", - "Brother" : "אח", - "Sister" : "אחות", - "Relative" : "קרוב/ת משפחה", - "Friend" : "חבר/ה", - "Colleague" : "חבר/ה לעבודה", - "Manager" : "מנהל/ת", - "Assistant" : "עוזר/ת", - "Related" : "מקושר/ת", - "Specify a relationship between another entity and the entity represented by this vCard." : "נא להגדיר קשר בין ישות אחרת והישות שמיוצגת על ידי כרטיס vCard זה.", - "Contact" : "איש/אשת קשר", - "Agent" : "סוכן/נת", - "Emergency" : "חירום", - "Co-worker" : "חבר/ה לעבודה", - "Gender" : "מגדר", - "Female" : "נקבה", - "Male" : "זכר", - "Details" : "פרטים", - "A contacts app for Nextcloud" : "יישומון אנשי קשר ל־Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "יישומון אנשי הקשר של Nextcloud הוא מנשק משתמש לשרת ה־CardDAV של Nextcloud. ניתן לסנכרן אנשי קשר ממגוון מכשירים אל Nextcloud ולערוך אותם באופן מקוון.\n\n* 🚀 **שילוב ביישומונים אחרים של Nextcloud!** כרגע דוא״ל ולוח שנה – יהיו נוספים בקרוב.\n* 🎉 **לא שוכחים עוד ימי הולדת!** ניתן לסנכרן ימי הולדת ואירועים מחזוריים נוספים עם לוח השנה שלך ב־Nextcloud.\n* 👥 **שיתוף ספרי כתובות!** חשוב לך לשתף את אנשי הקשר שלך עם חבריך או חבריך לעבודה? אין שום בעיה!\n* 🙈 **אנחנו לא ממציאים את הגלגל מחדש!** על בסיס ספריית SabreDAV הפתוחה והנהדרת.", - "Settings" : "הגדרות" -}, -"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;"); diff --git a/l10n/he.json b/l10n/he.json deleted file mode 100644 index 6a353fd4..00000000 --- a/l10n/he.json +++ /dev/null @@ -1,119 +0,0 @@ -{ "translations": { - "Contacts" : "אנשי קשר", - "Download" : "הורדה", - "Copy link" : "העתק קישור", - "Click to copy the link to your clipboard" : "העתק את הקישור", - "Toggle sharing" : "לחץ לשיתוף", - "Delete" : "מחק", - "Rename" : "שנה שם", - "Share with users or groups" : "שיתוף עם משתמשים או קבוצות", - "can edit" : "ניתן לערוך", - "Close" : "סגור", - "Enabled" : "מופעל", - "Disabled" : "מושבת", - "Copied!" : "הועתק!", - "Not supported!" : "לא נתמך!", - "Press ⌘-C to copy." : "לחץ ⌘+C כדי להעתיק.", - "Press Ctrl-C to copy." : "לחץ Ctrl+C כדי להעתיק.", - "Address book name" : "שם ספר כתובות", - "Only these special characters are allowed: -_.!?#|()" : "מותר להשתמש בתווים מיוחדים אלה בלבד: -_.!?#|()", - "Address book could not be created." : "לא ניתן ליצור ספר כתובות.", - "Upload new image" : "העלאת תמונה חדשה", - "The selected image is too big (max 1MB)" : "התמונה הנבחרת גדולה מדי (מקסימום 1 מגה בייט)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "הייתה שגיאה בטעינת איש קשר והיא תוקנה, נא לבדוק את המידע ולשמור על מנת ששינויים ישמרו לתמיד.", - "No contacts in here" : "אין כאן אנשי קשר", - "Name" : "שם", - "Organization" : "ארגון", - "Title" : "תפקיד", - "Add field …" : "הוספת שדה", - "Save changes" : "שמור שינויים", - "Address book" : "רשימת אנשי קשר", - "Loading contacts …" : "אנשי הקשר נטענים…", - "Import into" : "ייבוא לתוך", - "Importing..." : "מתבצע ייבוא…", - "Select your addressbook" : "בחירת ספר הכתובות שלך", - "Import is disabled because no writable address book had been found." : "הייבוא מושבת כיוון שלא נמצא אף ספר כתובות שניתן לכתוב לתוכו.", - "No search result for {query}" : "אין תוצאות חיפוש עבור {query}", - "All contacts" : "כל אנשי הקשר", - "Post office box" : "תיבת דואר", - "Postal code" : "מיקוד", - "City" : "עיר", - "State or province" : "מדינה או מחוז", - "Country" : "מדינה", - "Address" : "כתובת", - "(new group)" : "(קבוצה חדשה)", - "Last name" : "שם משפחה", - "First name" : "שם פרטי", - "Additional names" : "שמות נוספים", - "Prefix" : "תואר", - "Suffix" : "סיומת", - "Importing into" : "מתבצע ייבוא לתוך", - "New contact" : "איש קשר חדש", - "Not grouped" : "לא שויך לקבוצה", - "Sort by" : "מיון", - "There is no address book available to create a contact." : "אין ספר כתובות זמין לטובת יצירת איש קשר.", - "{addressbook} shared by {owner}" : "{addressbook} שותף על ידי {owner}", - "Contact not found." : "איש קשר לא נמצא", - "You don't have permission to write to this addressbook." : "אין לך הרשאות לכתיבה לספר כתובות זה.", - "Contact could not be created." : "לא ניתן היה ליצור איש קשר.", - "No contacts in file. Only vCard files are allowed." : "אין אנשי קשר בקובץ. רק קובצי VCard ניתנים לשימוש.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "רק vCard גרסה 4.0 (RFC6350) או גרסה 3.0 (RFC2426) נתמכים.", - "Contact could not be moved." : "לא ניתן להעביר את איש הקשר.", - "Contact could not be saved." : "לא ניתן היה לשמור את איש קשר.", - "Waiting for the server to be ready…" : "בהמתנה לזמינות השרת…", - "Importing…" : "מתבצע ייבוא…", - "Display name" : "שם תצוגה", - "Nickname" : "כינוי", - "Detailed name" : "פרטי שם", - "Notes" : "הערות", - "Website" : "אתר אינטרנט", - "Federated Cloud ID" : "מספר זיהוי ענן מאוגד", - "Home" : "בית", - "Work" : "עבודה", - "Other" : "אחר", - "Groups" : "קבוצות", - "Birthday" : "יום הולדת", - "Anniversary" : "יום השנה", - "Date of death" : "תאריך פטירה", - "Email" : "דואר אלקטרוני", - "Instant messaging" : "מסרים מיידיים", - "Phone" : "טלפון", - "Mobile" : "נייד", - "Work mobile" : "סלולרי מהעבודה", - "Fax" : "פקס", - "Fax home" : "פקס בבית", - "Fax work" : "פקס בעבודה", - "Pager" : "זימונית", - "Voice" : "קולי", - "Car" : "רכב", - "Work pager" : "זימונית מהעבודה", - "Social network" : "רשת חברתית", - "Relationship" : "קשר", - "Specify a relationship between you and the entity represented by this vCard." : "הגדרת קשר בינך לבין הישות המיוצגת על ידי vCard זה.", - "Spouse" : "בן/בת זוג", - "Child" : "בן/בת", - "Mother" : "אימא", - "Father" : "אבא", - "Parent" : "הורה", - "Brother" : "אח", - "Sister" : "אחות", - "Relative" : "קרוב/ת משפחה", - "Friend" : "חבר/ה", - "Colleague" : "חבר/ה לעבודה", - "Manager" : "מנהל/ת", - "Assistant" : "עוזר/ת", - "Related" : "מקושר/ת", - "Specify a relationship between another entity and the entity represented by this vCard." : "נא להגדיר קשר בין ישות אחרת והישות שמיוצגת על ידי כרטיס vCard זה.", - "Contact" : "איש/אשת קשר", - "Agent" : "סוכן/נת", - "Emergency" : "חירום", - "Co-worker" : "חבר/ה לעבודה", - "Gender" : "מגדר", - "Female" : "נקבה", - "Male" : "זכר", - "Details" : "פרטים", - "A contacts app for Nextcloud" : "יישומון אנשי קשר ל־Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "יישומון אנשי הקשר של Nextcloud הוא מנשק משתמש לשרת ה־CardDAV של Nextcloud. ניתן לסנכרן אנשי קשר ממגוון מכשירים אל Nextcloud ולערוך אותם באופן מקוון.\n\n* 🚀 **שילוב ביישומונים אחרים של Nextcloud!** כרגע דוא״ל ולוח שנה – יהיו נוספים בקרוב.\n* 🎉 **לא שוכחים עוד ימי הולדת!** ניתן לסנכרן ימי הולדת ואירועים מחזוריים נוספים עם לוח השנה שלך ב־Nextcloud.\n* 👥 **שיתוף ספרי כתובות!** חשוב לך לשתף את אנשי הקשר שלך עם חבריך או חבריך לעבודה? אין שום בעיה!\n* 🙈 **אנחנו לא ממציאים את הגלגל מחדש!** על בסיס ספריית SabreDAV הפתוחה והנהדרת.", - "Settings" : "הגדרות" -},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;" -} \ No newline at end of file diff --git a/l10n/hr.js b/l10n/hr.js deleted file mode 100644 index 41a3d0fe..00000000 --- a/l10n/hr.js +++ /dev/null @@ -1,35 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontakti", - "Name" : "Naziv", - "Organization" : "Organizacija", - "Title" : "Titula", - "Postal code" : "Poštanski broj", - "City" : "Grad", - "State or province" : "Savezna država ili pokrajina", - "Country" : "Država", - "Address" : "Adresa", - "Last name" : "Prezime", - "First name" : "Ime", - "Additional names" : "Dodatna imena", - "New contact" : "Novi kontakt", - "Not grouped" : "Nije grupirano", - "Nickname" : "Nadimak", - "Notes" : "Bilješke", - "Website" : "Web-mjesto", - "Home" : "Kuća", - "Work" : "Posao", - "Other" : "Ostalo", - "Groups" : "Grupe", - "Birthday" : "Rođendan", - "Email" : "E-pošta", - "Instant messaging" : "Razmjena izravnih poruka", - "Phone" : "Telefon", - "Mobile" : "Mobitel", - "Fax" : "Faks", - "Pager" : "Dojavljivač", - "Voice" : "Glas", - "Settings" : "Postavke" -}, -"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"); diff --git a/l10n/hr.json b/l10n/hr.json deleted file mode 100644 index 153195ef..00000000 --- a/l10n/hr.json +++ /dev/null @@ -1,33 +0,0 @@ -{ "translations": { - "Contacts" : "Kontakti", - "Name" : "Naziv", - "Organization" : "Organizacija", - "Title" : "Titula", - "Postal code" : "Poštanski broj", - "City" : "Grad", - "State or province" : "Savezna država ili pokrajina", - "Country" : "Država", - "Address" : "Adresa", - "Last name" : "Prezime", - "First name" : "Ime", - "Additional names" : "Dodatna imena", - "New contact" : "Novi kontakt", - "Not grouped" : "Nije grupirano", - "Nickname" : "Nadimak", - "Notes" : "Bilješke", - "Website" : "Web-mjesto", - "Home" : "Kuća", - "Work" : "Posao", - "Other" : "Ostalo", - "Groups" : "Grupe", - "Birthday" : "Rođendan", - "Email" : "E-pošta", - "Instant messaging" : "Razmjena izravnih poruka", - "Phone" : "Telefon", - "Mobile" : "Mobitel", - "Fax" : "Faks", - "Pager" : "Dojavljivač", - "Voice" : "Glas", - "Settings" : "Postavke" -},"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;" -} \ No newline at end of file diff --git a/l10n/hu.js b/l10n/hu.js deleted file mode 100644 index 2608d7d1..00000000 --- a/l10n/hu.js +++ /dev/null @@ -1,115 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Névjegyek", - "Download" : "Letöltés", - "Copy link" : "Hivatkozás másolása", - "Click to copy the link to your clipboard" : "Kattints a hivatkozás vágólapra másolásához", - "Toggle sharing" : "Megosztás váltása", - "Delete" : "Törlés", - "Rename" : "Átnevez", - "Share with users or groups" : "Megosztás felhasználókkal vagy csoportokkal", - "can edit" : "szerkesztheti", - "Close" : "Bezárás", - "Enabled" : "Engedélyezve", - "Disabled" : "Letiltva", - "Copied!" : "Másolva!", - "Not supported!" : "Nem támogatott!", - "Press ⌘-C to copy." : "Nyomj ⌘-C-t a másoláshoz.", - "Press Ctrl-C to copy." : "Nyomj Ctrl-C-t a másoláshoz.", - "Address book name" : "Címjegyzék neve", - "Only these special characters are allowed: -_.!?#|()" : "Csak ezek a speciális karakterek használhatók: -_.!?#|()", - "Address book could not be created." : "Címjegyzék nem hozható létre.", - "Upload new image" : "Új kép feltöltése", - "The selected image is too big (max 1MB)" : "A kiválasztott kép túl nagy (max. 1 MB)!", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Ez a kártya hibás volt, de ki lett javítva. Kérlek ellenőrizd az adatokat és a véglegesítéshez mentsd el.", - "No contacts in here" : "Nincsenek névjegyek", - "Name" : "Név", - "Organization" : "Szervezet", - "Title" : "Cím", - "Add field …" : "Mező hozzáadása...", - "Save changes" : "Változások mentése", - "Address book" : "Címjegyzék", - "Loading contacts …" : "Névjegyek betöltése...", - "Import into" : "Importálás ebbe", - "Importing..." : "Importálás...", - "Select your addressbook" : "Válaszd ki címjegyzékedet", - "Import is disabled because no writable address book had been found." : "Az importálás nincs engedélyezve mert nem található írható címjegyzék.", - "No search result for {query}" : "{query} keresésre nincs találat.", - "All contacts" : "Összes névjegy", - "Post office box" : "Postafiók", - "Postal code" : "Irányítószám", - "City" : "Város", - "State or province" : "Megye vagy tartomány", - "Country" : "Ország", - "Address" : "Cím", - "(new group)" : "(új csoport)", - "Last name" : "Vezetéknév", - "First name" : "Keresztnév", - "Additional names" : "További nevek", - "Prefix" : "Előtag", - "Suffix" : "Utótag", - "Importing into" : "Importálás ebbe", - "New contact" : "Új névjegy", - "Not grouped" : "Nem csoportosított", - "Sort by" : "Rendezés elve", - "There is no address book available to create a contact." : "Nem áll rendelkezésre címjegyzék kapcsolat létrehozásához.", - "{addressbook} shared by {owner}" : "{addressbook} megosztója {owner}", - "Contact not found." : "A névjegy nem található.", - "You don't have permission to write to this addressbook." : "Nincs jogosultságod ebbe a címjegyzékbe írni.", - "Contact could not be created." : "A névjegy nem hozható létre.", - "No contacts in file. Only vCard files are allowed." : "A fájl nem tartalmaz névjegyeket. Kizárólag vCard fájlok engedélyezettek.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Csak a vCard 4.0-ás (RFC6350) vagy a 3.0-ás verzió (RFC2426) támogatott", - "Contact could not be moved." : "Kapcsolat nem mozgatható.", - "Contact could not be saved." : "A névjegy nem menthető el.", - "Waiting for the server to be ready…" : "Várakozás a szerverre...", - "Importing…" : "Importálás...", - "Display name" : "Név megjelenítés", - "Nickname" : "Becenév", - "Detailed name" : "Részletes név", - "Notes" : "Jegyzetek", - "Website" : "Weboldal", - "Federated Cloud ID" : "Egyesített Felhő Azonosító", - "Home" : "Otthoni", - "Work" : "Munkahelyi", - "Other" : "más", - "Groups" : "Csoportok", - "Birthday" : "Születésap", - "Anniversary" : "Évforduló", - "Date of death" : "Halálozás dátuma", - "Email" : "E-mail", - "Instant messaging" : "Azonnali üzenetküldés", - "Phone" : "Telefonszám", - "Mobile" : "Mobil", - "Work mobile" : "Munkahelyi mobil", - "Fax" : "Fax", - "Fax home" : "Otthoni fax", - "Fax work" : "Munkahelyi fax", - "Pager" : "Személyhívó", - "Voice" : "Hang", - "Car" : "Autó", - "Work pager" : "Munkahelyi csipogó", - "Social network" : "Közösségi hálózat", - "Relationship" : "Kapcsolat", - "Spouse" : "Házastárs", - "Child" : "Gyermek", - "Mother" : "Anya", - "Father" : "Apa", - "Parent" : "Szülő", - "Brother" : "Fiútestvér", - "Sister" : "Lánytestvér", - "Relative" : "Rokon", - "Friend" : "Ismerős", - "Colleague" : "Kolléga", - "Manager" : "Vezető", - "Assistant" : "Asszisztens", - "Agent" : "Ügynök", - "Emergency" : "Vészhelyzet", - "Co-worker" : "Munkatárs", - "Gender" : "Nem", - "Female" : "Nő", - "Male" : "Férfi", - "Details" : "Részletek", - "Settings" : "Beállítások" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/hu.json b/l10n/hu.json deleted file mode 100644 index f948aebc..00000000 --- a/l10n/hu.json +++ /dev/null @@ -1,113 +0,0 @@ -{ "translations": { - "Contacts" : "Névjegyek", - "Download" : "Letöltés", - "Copy link" : "Hivatkozás másolása", - "Click to copy the link to your clipboard" : "Kattints a hivatkozás vágólapra másolásához", - "Toggle sharing" : "Megosztás váltása", - "Delete" : "Törlés", - "Rename" : "Átnevez", - "Share with users or groups" : "Megosztás felhasználókkal vagy csoportokkal", - "can edit" : "szerkesztheti", - "Close" : "Bezárás", - "Enabled" : "Engedélyezve", - "Disabled" : "Letiltva", - "Copied!" : "Másolva!", - "Not supported!" : "Nem támogatott!", - "Press ⌘-C to copy." : "Nyomj ⌘-C-t a másoláshoz.", - "Press Ctrl-C to copy." : "Nyomj Ctrl-C-t a másoláshoz.", - "Address book name" : "Címjegyzék neve", - "Only these special characters are allowed: -_.!?#|()" : "Csak ezek a speciális karakterek használhatók: -_.!?#|()", - "Address book could not be created." : "Címjegyzék nem hozható létre.", - "Upload new image" : "Új kép feltöltése", - "The selected image is too big (max 1MB)" : "A kiválasztott kép túl nagy (max. 1 MB)!", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Ez a kártya hibás volt, de ki lett javítva. Kérlek ellenőrizd az adatokat és a véglegesítéshez mentsd el.", - "No contacts in here" : "Nincsenek névjegyek", - "Name" : "Név", - "Organization" : "Szervezet", - "Title" : "Cím", - "Add field …" : "Mező hozzáadása...", - "Save changes" : "Változások mentése", - "Address book" : "Címjegyzék", - "Loading contacts …" : "Névjegyek betöltése...", - "Import into" : "Importálás ebbe", - "Importing..." : "Importálás...", - "Select your addressbook" : "Válaszd ki címjegyzékedet", - "Import is disabled because no writable address book had been found." : "Az importálás nincs engedélyezve mert nem található írható címjegyzék.", - "No search result for {query}" : "{query} keresésre nincs találat.", - "All contacts" : "Összes névjegy", - "Post office box" : "Postafiók", - "Postal code" : "Irányítószám", - "City" : "Város", - "State or province" : "Megye vagy tartomány", - "Country" : "Ország", - "Address" : "Cím", - "(new group)" : "(új csoport)", - "Last name" : "Vezetéknév", - "First name" : "Keresztnév", - "Additional names" : "További nevek", - "Prefix" : "Előtag", - "Suffix" : "Utótag", - "Importing into" : "Importálás ebbe", - "New contact" : "Új névjegy", - "Not grouped" : "Nem csoportosított", - "Sort by" : "Rendezés elve", - "There is no address book available to create a contact." : "Nem áll rendelkezésre címjegyzék kapcsolat létrehozásához.", - "{addressbook} shared by {owner}" : "{addressbook} megosztója {owner}", - "Contact not found." : "A névjegy nem található.", - "You don't have permission to write to this addressbook." : "Nincs jogosultságod ebbe a címjegyzékbe írni.", - "Contact could not be created." : "A névjegy nem hozható létre.", - "No contacts in file. Only vCard files are allowed." : "A fájl nem tartalmaz névjegyeket. Kizárólag vCard fájlok engedélyezettek.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Csak a vCard 4.0-ás (RFC6350) vagy a 3.0-ás verzió (RFC2426) támogatott", - "Contact could not be moved." : "Kapcsolat nem mozgatható.", - "Contact could not be saved." : "A névjegy nem menthető el.", - "Waiting for the server to be ready…" : "Várakozás a szerverre...", - "Importing…" : "Importálás...", - "Display name" : "Név megjelenítés", - "Nickname" : "Becenév", - "Detailed name" : "Részletes név", - "Notes" : "Jegyzetek", - "Website" : "Weboldal", - "Federated Cloud ID" : "Egyesített Felhő Azonosító", - "Home" : "Otthoni", - "Work" : "Munkahelyi", - "Other" : "más", - "Groups" : "Csoportok", - "Birthday" : "Születésap", - "Anniversary" : "Évforduló", - "Date of death" : "Halálozás dátuma", - "Email" : "E-mail", - "Instant messaging" : "Azonnali üzenetküldés", - "Phone" : "Telefonszám", - "Mobile" : "Mobil", - "Work mobile" : "Munkahelyi mobil", - "Fax" : "Fax", - "Fax home" : "Otthoni fax", - "Fax work" : "Munkahelyi fax", - "Pager" : "Személyhívó", - "Voice" : "Hang", - "Car" : "Autó", - "Work pager" : "Munkahelyi csipogó", - "Social network" : "Közösségi hálózat", - "Relationship" : "Kapcsolat", - "Spouse" : "Házastárs", - "Child" : "Gyermek", - "Mother" : "Anya", - "Father" : "Apa", - "Parent" : "Szülő", - "Brother" : "Fiútestvér", - "Sister" : "Lánytestvér", - "Relative" : "Rokon", - "Friend" : "Ismerős", - "Colleague" : "Kolléga", - "Manager" : "Vezető", - "Assistant" : "Asszisztens", - "Agent" : "Ügynök", - "Emergency" : "Vészhelyzet", - "Co-worker" : "Munkatárs", - "Gender" : "Nem", - "Female" : "Nő", - "Male" : "Férfi", - "Details" : "Részletek", - "Settings" : "Beállítások" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/ia.js b/l10n/ia.js deleted file mode 100644 index b9e069de..00000000 --- a/l10n/ia.js +++ /dev/null @@ -1,66 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Discargar", - "Delete" : "Deler", - "Share with users or groups" : "Compartir con usatores o gruppos", - "can edit" : "pote modificar", - "Close" : "Clauder", - "Copied!" : "Copiate!", - "Not supported!" : "Non supportate!", - "Press ⌘-C to copy." : "Pulsa ⌘-C pro copiar.", - "Press Ctrl-C to copy." : "Pulsa Ctrl-C pro copiar.", - "Address book name" : "Nomine del adressario", - "The selected image is too big (max 1MB)" : "Le imagine selectionate es troppo grande (maxime 1MG)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Iste carta es corrumpite e illo esseva reparate. Per favor, verifica le datos e salveguarda lo pro facer le cambios permanente.", - "No contacts in here" : "Nulle contactos ci.", - "Name" : "Nomine", - "Organization" : "Organisation", - "Title" : "Titulo", - "Save changes" : "Salveguardar cambios", - "No search result for {query}" : "Nulle resultato trovate pro {query}", - "All contacts" : "Tote contactos", - "Post office box" : "Cassa postal", - "Postal code" : "Codice postal", - "City" : "Citate", - "State or province" : "Stato o provincia", - "Country" : "Pais", - "Address" : "Adresse", - "(new group)" : "(nove gruppo)", - "Last name" : "Ultime nomine", - "First name" : "Prime nomine", - "Additional names" : "Nomines additional", - "Prefix" : "Prefixo", - "Suffix" : "Suffixo", - "New contact" : "Nove contacto", - "Not grouped" : "Non gruppate", - "Sort by" : "Arrangiar per", - "{addressbook} shared by {owner}" : "{addressbook} compartite per {owner}", - "Contact could not be created." : "Contacto non poteva esser create.", - "Display name" : "Monstrar nomine", - "Nickname" : "Pseudonymo", - "Detailed name" : "Nomine detaliate", - "Notes" : "Notas", - "Website" : "Sito web", - "Federated Cloud ID" : "ID del Nube Federate", - "Home" : "Domo", - "Work" : "Travalio", - "Other" : "Altere", - "Groups" : "Gruppos", - "Birthday" : "Anniversario de nativitate", - "Anniversary" : "Anniversario de evento", - "Date of death" : "Data de morte", - "Email" : "E-posta", - "Instant messaging" : "Messageria instantanee", - "Phone" : "Phono", - "Mobile" : "Mobile", - "Fax" : "Fax", - "Fax home" : "Fax a domicilio", - "Fax work" : "Fax a travalio", - "Pager" : "Pager", - "Voice" : "Voce", - "Social network" : "Medios Social", - "Settings" : "Configurationes" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/ia.json b/l10n/ia.json deleted file mode 100644 index 213cadbd..00000000 --- a/l10n/ia.json +++ /dev/null @@ -1,64 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Discargar", - "Delete" : "Deler", - "Share with users or groups" : "Compartir con usatores o gruppos", - "can edit" : "pote modificar", - "Close" : "Clauder", - "Copied!" : "Copiate!", - "Not supported!" : "Non supportate!", - "Press ⌘-C to copy." : "Pulsa ⌘-C pro copiar.", - "Press Ctrl-C to copy." : "Pulsa Ctrl-C pro copiar.", - "Address book name" : "Nomine del adressario", - "The selected image is too big (max 1MB)" : "Le imagine selectionate es troppo grande (maxime 1MG)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Iste carta es corrumpite e illo esseva reparate. Per favor, verifica le datos e salveguarda lo pro facer le cambios permanente.", - "No contacts in here" : "Nulle contactos ci.", - "Name" : "Nomine", - "Organization" : "Organisation", - "Title" : "Titulo", - "Save changes" : "Salveguardar cambios", - "No search result for {query}" : "Nulle resultato trovate pro {query}", - "All contacts" : "Tote contactos", - "Post office box" : "Cassa postal", - "Postal code" : "Codice postal", - "City" : "Citate", - "State or province" : "Stato o provincia", - "Country" : "Pais", - "Address" : "Adresse", - "(new group)" : "(nove gruppo)", - "Last name" : "Ultime nomine", - "First name" : "Prime nomine", - "Additional names" : "Nomines additional", - "Prefix" : "Prefixo", - "Suffix" : "Suffixo", - "New contact" : "Nove contacto", - "Not grouped" : "Non gruppate", - "Sort by" : "Arrangiar per", - "{addressbook} shared by {owner}" : "{addressbook} compartite per {owner}", - "Contact could not be created." : "Contacto non poteva esser create.", - "Display name" : "Monstrar nomine", - "Nickname" : "Pseudonymo", - "Detailed name" : "Nomine detaliate", - "Notes" : "Notas", - "Website" : "Sito web", - "Federated Cloud ID" : "ID del Nube Federate", - "Home" : "Domo", - "Work" : "Travalio", - "Other" : "Altere", - "Groups" : "Gruppos", - "Birthday" : "Anniversario de nativitate", - "Anniversary" : "Anniversario de evento", - "Date of death" : "Data de morte", - "Email" : "E-posta", - "Instant messaging" : "Messageria instantanee", - "Phone" : "Phono", - "Mobile" : "Mobile", - "Fax" : "Fax", - "Fax home" : "Fax a domicilio", - "Fax work" : "Fax a travalio", - "Pager" : "Pager", - "Voice" : "Voce", - "Social network" : "Medios Social", - "Settings" : "Configurationes" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/id.js b/l10n/id.js deleted file mode 100644 index b917706b..00000000 --- a/l10n/id.js +++ /dev/null @@ -1,61 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontak", - "Download" : "Unduh", - "Delete" : "Hapus", - "Share with users or groups" : "Bagi dengan pengguna atau grup", - "can edit" : "dapat menyunting", - "Address book name" : "Nama buku alamat", - "The selected image is too big (max 1MB)" : "Gambar terpilih terlalu besar (maks 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Kartu ini korup dan telah diperbaiki. Harap cek data dan picu simpan untuk membuat perubahan permanen.", - "No contacts in here" : "Tidak ada kontak disini", - "Name" : "Nama", - "Organization" : "Organisasi", - "Title" : "Judul", - "Save changes" : "Simpan perubahan", - "No search result for {query}" : "Tidak ada hasil untuk pencarian {query}", - "All contacts" : "Semua kontak", - "Post office box" : "PO BOX", - "Postal code" : "Kode pos", - "City" : "Kota", - "State or province" : "Provinsi", - "Country" : "Negara", - "Address" : "Alamat", - "(new group)" : "(grup baru)", - "Last name" : "Nama belakang", - "First name" : "Nama depan", - "Additional names" : "Nama tambahan", - "Prefix" : "Prefix", - "Suffix" : "Suffix", - "New contact" : "Kontak baru", - "Not grouped" : "Tidak dikelompokkan", - "Sort by" : "Urut berdasarkan", - "{addressbook} shared by {owner}" : "{addressbook} dibagikan oleh {owner}", - "Contact could not be created." : "Kontak tidak dapat dibuat.", - "Display name" : "Nama tampilan", - "Nickname" : "Nama panggilan", - "Detailed name" : "Nama lengkap", - "Notes" : "Catatan", - "Website" : "Situs Web", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Depan", - "Work" : "Kantor", - "Other" : "Lainnya", - "Groups" : "Grup", - "Birthday" : "Tanggal lahir", - "Anniversary" : "Ulang tahun", - "Date of death" : "Tanggal kematian", - "Email" : "Email", - "Instant messaging" : "Pesan Instan", - "Phone" : "Telpon", - "Mobile" : "Ponsel", - "Fax" : "Fax", - "Fax home" : "Fax rumah", - "Fax work" : "Fax kerja", - "Pager" : "Pager", - "Voice" : "Suara", - "Social network" : "Media sosial", - "Settings" : "Pengaturan" -}, -"nplurals=1; plural=0;"); diff --git a/l10n/id.json b/l10n/id.json deleted file mode 100644 index 7a330d7c..00000000 --- a/l10n/id.json +++ /dev/null @@ -1,59 +0,0 @@ -{ "translations": { - "Contacts" : "Kontak", - "Download" : "Unduh", - "Delete" : "Hapus", - "Share with users or groups" : "Bagi dengan pengguna atau grup", - "can edit" : "dapat menyunting", - "Address book name" : "Nama buku alamat", - "The selected image is too big (max 1MB)" : "Gambar terpilih terlalu besar (maks 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Kartu ini korup dan telah diperbaiki. Harap cek data dan picu simpan untuk membuat perubahan permanen.", - "No contacts in here" : "Tidak ada kontak disini", - "Name" : "Nama", - "Organization" : "Organisasi", - "Title" : "Judul", - "Save changes" : "Simpan perubahan", - "No search result for {query}" : "Tidak ada hasil untuk pencarian {query}", - "All contacts" : "Semua kontak", - "Post office box" : "PO BOX", - "Postal code" : "Kode pos", - "City" : "Kota", - "State or province" : "Provinsi", - "Country" : "Negara", - "Address" : "Alamat", - "(new group)" : "(grup baru)", - "Last name" : "Nama belakang", - "First name" : "Nama depan", - "Additional names" : "Nama tambahan", - "Prefix" : "Prefix", - "Suffix" : "Suffix", - "New contact" : "Kontak baru", - "Not grouped" : "Tidak dikelompokkan", - "Sort by" : "Urut berdasarkan", - "{addressbook} shared by {owner}" : "{addressbook} dibagikan oleh {owner}", - "Contact could not be created." : "Kontak tidak dapat dibuat.", - "Display name" : "Nama tampilan", - "Nickname" : "Nama panggilan", - "Detailed name" : "Nama lengkap", - "Notes" : "Catatan", - "Website" : "Situs Web", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Depan", - "Work" : "Kantor", - "Other" : "Lainnya", - "Groups" : "Grup", - "Birthday" : "Tanggal lahir", - "Anniversary" : "Ulang tahun", - "Date of death" : "Tanggal kematian", - "Email" : "Email", - "Instant messaging" : "Pesan Instan", - "Phone" : "Telpon", - "Mobile" : "Ponsel", - "Fax" : "Fax", - "Fax home" : "Fax rumah", - "Fax work" : "Fax kerja", - "Pager" : "Pager", - "Voice" : "Suara", - "Social network" : "Media sosial", - "Settings" : "Pengaturan" -},"pluralForm" :"nplurals=1; plural=0;" -} \ No newline at end of file diff --git a/l10n/is.js b/l10n/is.js deleted file mode 100644 index 206c3a1e..00000000 --- a/l10n/is.js +++ /dev/null @@ -1,119 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Tengiliðir", - "Download" : "Niðurhal", - "Copy link" : "Afrita tengil", - "Click to copy the link to your clipboard" : "Smelltu til að afrita tengilinn á klippispjaldið", - "Toggle sharing" : "Víxla deilingu af/á", - "Delete" : "Eyða", - "Rename" : "Endurnefna", - "Share with users or groups" : "Deila með notendum eða hópum", - "can edit" : "getur breytt", - "Close" : "Loka", - "Enabled" : "Virkt", - "Disabled" : "Óvirkt", - "Copied!" : "Afritað!", - "Not supported!" : "Ekki stutt!", - "Press ⌘-C to copy." : "Ýttu á ⌘-C til að afrita.", - "Press Ctrl-C to copy." : "Ýttu á Ctrl-C til að afrita.", - "Address book name" : "Heiti nafnaskrár", - "Only these special characters are allowed: -_.!?#|()" : "Aðeins þessir sérstafir eru leyfðir: -_.!?#|()", - "Address book could not be created." : "Tókst ekki að búa til nafnaskrá.", - "Upload new image" : "Senda inn nýja mynd", - "The selected image is too big (max 1MB)" : "Valin mynd er of stór (hám. 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Þetta nafnspjald er skemmt en viðgerð hefur farið fram. Farðu vel yfir upplýsingarnar og vistaðu það síðan til að gera breytingarnar varanlegar.", - "No contacts in here" : "Engir tengiliðir hér", - "Name" : "Nafn", - "Organization" : "Stofnun/félag", - "Title" : "Titill", - "Add field …" : "Bæta við reit …", - "Save changes" : "Vista breytingar", - "Address book" : "Nafnaskrá", - "Loading contacts …" : "Hleð inn tengiliðum …", - "Import into" : "Flytja inn í", - "Importing..." : "Innflutningur...", - "Select your addressbook" : "Veldu nafnaskrá", - "Import is disabled because no writable address book had been found." : "Innflutningur er óvirkur því engin skrifanleg nafnaskrá fannst.", - "No search result for {query}" : "Engar leitarniðurstöður fyrir {query}", - "All contacts" : "Allir tengiliðir", - "Post office box" : "Pósthólf", - "Postal code" : "Póstnúmer", - "City" : "Borg", - "State or province" : "Ríki eða fylki", - "Country" : "Land", - "Address" : "Slóð", - "(new group)" : "(nýr hópur)", - "Last name" : "Kenninafn", - "First name" : "Eiginnafn", - "Additional names" : "Aukanöfn", - "Prefix" : "Forskeyti", - "Suffix" : "Viðskeyti", - "Importing into" : "Flyt inn í", - "New contact" : "Nýr tengiliður", - "Not grouped" : "Ekki hópað", - "Sort by" : "Raða eftir", - "There is no address book available to create a contact." : "Engin nafnaskrá er til staðar svo hægt sé að útbúa tengilið.", - "{addressbook} shared by {owner}" : "{addressbook} deilt af {owner}", - "Contact not found." : "Tengiliður fannst ekki.", - "You don't have permission to write to this addressbook." : "Þú hefur ekki heimild til að skrifa í þessa nafnaskrá.", - "Contact could not be created." : "Ekki var hægt að búa til tengilið.", - "No contacts in file. Only vCard files are allowed." : "Engir tengiliðir í skrá. Einungis er tekið við vCard-skrám.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Einungis vCard útgáfa 4.0 (RFC6350) eða útgáfa 3.0 (RFC2426) eru studdar.", - "Contact could not be moved." : "Ekki var hægt að færa tengilið.", - "Contact could not be saved." : "Ekki var hægt að vista tengilið.", - "Waiting for the server to be ready…" : "Bíð eftir að þjónn sé tilbúinn…", - "Importing…" : "Innflutningur…", - "Display name" : "Birtingarnafn", - "Nickname" : "Gælunafn", - "Detailed name" : "Ítarlegt nafn", - "Notes" : "Minnispunktar", - "Website" : "Vefsvæði", - "Federated Cloud ID" : "Skýjasambandsauðkenni (Federated Cloud ID)", - "Home" : "Heima", - "Work" : "Vinna", - "Other" : "Annað", - "Groups" : "Hópar", - "Birthday" : "Afmælisdagur", - "Anniversary" : "Afmæli", - "Date of death" : "Dánardægur", - "Email" : "Netfang", - "Instant messaging" : "Snarskilaboð", - "Phone" : "Sími", - "Mobile" : "Farsími", - "Work mobile" : "Vinna á ferðinni", - "Fax" : "Fax", - "Fax home" : "Heimafax", - "Fax work" : "Vinnufax", - "Pager" : "Símboði", - "Voice" : "Raddskilaboð", - "Car" : "Bíll", - "Work pager" : "Vinnufriðþjófur", - "Social network" : "Samfélagsnet", - "Relationship" : "Vensl", - "Specify a relationship between you and the entity represented by this vCard." : "Tiltaktu venslin milli þín og þess aðila sem þetta vCard-nafnspjald stendur fyrir.", - "Spouse" : "Maki", - "Child" : "Barn", - "Mother" : "Móðir", - "Father" : "Faðir", - "Parent" : "Foreldri", - "Brother" : "Bróðir", - "Sister" : "Systir", - "Relative" : "Ættingi", - "Friend" : "Vinur", - "Colleague" : "Samstarfsmaður", - "Manager" : "Yfirmaður", - "Assistant" : "Aðstoðarmaður", - "Related" : "Venslað", - "Specify a relationship between another entity and the entity represented by this vCard." : "Tiltaktu venslin milli annars aðila og þess aðila sem þetta vCard-nafnspjald stendur fyrir.", - "Contact" : "Tengiliður", - "Agent" : "Umboðsaðili", - "Emergency" : "Neyðartilfelli", - "Co-worker" : "Samstarfsmaður", - "Gender" : "Kyn", - "Female" : "Kona", - "Male" : "Karl", - "Details" : "Nánar", - "Settings" : "Stillingar" -}, -"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/l10n/is.json b/l10n/is.json deleted file mode 100644 index c0e18c85..00000000 --- a/l10n/is.json +++ /dev/null @@ -1,117 +0,0 @@ -{ "translations": { - "Contacts" : "Tengiliðir", - "Download" : "Niðurhal", - "Copy link" : "Afrita tengil", - "Click to copy the link to your clipboard" : "Smelltu til að afrita tengilinn á klippispjaldið", - "Toggle sharing" : "Víxla deilingu af/á", - "Delete" : "Eyða", - "Rename" : "Endurnefna", - "Share with users or groups" : "Deila með notendum eða hópum", - "can edit" : "getur breytt", - "Close" : "Loka", - "Enabled" : "Virkt", - "Disabled" : "Óvirkt", - "Copied!" : "Afritað!", - "Not supported!" : "Ekki stutt!", - "Press ⌘-C to copy." : "Ýttu á ⌘-C til að afrita.", - "Press Ctrl-C to copy." : "Ýttu á Ctrl-C til að afrita.", - "Address book name" : "Heiti nafnaskrár", - "Only these special characters are allowed: -_.!?#|()" : "Aðeins þessir sérstafir eru leyfðir: -_.!?#|()", - "Address book could not be created." : "Tókst ekki að búa til nafnaskrá.", - "Upload new image" : "Senda inn nýja mynd", - "The selected image is too big (max 1MB)" : "Valin mynd er of stór (hám. 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Þetta nafnspjald er skemmt en viðgerð hefur farið fram. Farðu vel yfir upplýsingarnar og vistaðu það síðan til að gera breytingarnar varanlegar.", - "No contacts in here" : "Engir tengiliðir hér", - "Name" : "Nafn", - "Organization" : "Stofnun/félag", - "Title" : "Titill", - "Add field …" : "Bæta við reit …", - "Save changes" : "Vista breytingar", - "Address book" : "Nafnaskrá", - "Loading contacts …" : "Hleð inn tengiliðum …", - "Import into" : "Flytja inn í", - "Importing..." : "Innflutningur...", - "Select your addressbook" : "Veldu nafnaskrá", - "Import is disabled because no writable address book had been found." : "Innflutningur er óvirkur því engin skrifanleg nafnaskrá fannst.", - "No search result for {query}" : "Engar leitarniðurstöður fyrir {query}", - "All contacts" : "Allir tengiliðir", - "Post office box" : "Pósthólf", - "Postal code" : "Póstnúmer", - "City" : "Borg", - "State or province" : "Ríki eða fylki", - "Country" : "Land", - "Address" : "Slóð", - "(new group)" : "(nýr hópur)", - "Last name" : "Kenninafn", - "First name" : "Eiginnafn", - "Additional names" : "Aukanöfn", - "Prefix" : "Forskeyti", - "Suffix" : "Viðskeyti", - "Importing into" : "Flyt inn í", - "New contact" : "Nýr tengiliður", - "Not grouped" : "Ekki hópað", - "Sort by" : "Raða eftir", - "There is no address book available to create a contact." : "Engin nafnaskrá er til staðar svo hægt sé að útbúa tengilið.", - "{addressbook} shared by {owner}" : "{addressbook} deilt af {owner}", - "Contact not found." : "Tengiliður fannst ekki.", - "You don't have permission to write to this addressbook." : "Þú hefur ekki heimild til að skrifa í þessa nafnaskrá.", - "Contact could not be created." : "Ekki var hægt að búa til tengilið.", - "No contacts in file. Only vCard files are allowed." : "Engir tengiliðir í skrá. Einungis er tekið við vCard-skrám.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Einungis vCard útgáfa 4.0 (RFC6350) eða útgáfa 3.0 (RFC2426) eru studdar.", - "Contact could not be moved." : "Ekki var hægt að færa tengilið.", - "Contact could not be saved." : "Ekki var hægt að vista tengilið.", - "Waiting for the server to be ready…" : "Bíð eftir að þjónn sé tilbúinn…", - "Importing…" : "Innflutningur…", - "Display name" : "Birtingarnafn", - "Nickname" : "Gælunafn", - "Detailed name" : "Ítarlegt nafn", - "Notes" : "Minnispunktar", - "Website" : "Vefsvæði", - "Federated Cloud ID" : "Skýjasambandsauðkenni (Federated Cloud ID)", - "Home" : "Heima", - "Work" : "Vinna", - "Other" : "Annað", - "Groups" : "Hópar", - "Birthday" : "Afmælisdagur", - "Anniversary" : "Afmæli", - "Date of death" : "Dánardægur", - "Email" : "Netfang", - "Instant messaging" : "Snarskilaboð", - "Phone" : "Sími", - "Mobile" : "Farsími", - "Work mobile" : "Vinna á ferðinni", - "Fax" : "Fax", - "Fax home" : "Heimafax", - "Fax work" : "Vinnufax", - "Pager" : "Símboði", - "Voice" : "Raddskilaboð", - "Car" : "Bíll", - "Work pager" : "Vinnufriðþjófur", - "Social network" : "Samfélagsnet", - "Relationship" : "Vensl", - "Specify a relationship between you and the entity represented by this vCard." : "Tiltaktu venslin milli þín og þess aðila sem þetta vCard-nafnspjald stendur fyrir.", - "Spouse" : "Maki", - "Child" : "Barn", - "Mother" : "Móðir", - "Father" : "Faðir", - "Parent" : "Foreldri", - "Brother" : "Bróðir", - "Sister" : "Systir", - "Relative" : "Ættingi", - "Friend" : "Vinur", - "Colleague" : "Samstarfsmaður", - "Manager" : "Yfirmaður", - "Assistant" : "Aðstoðarmaður", - "Related" : "Venslað", - "Specify a relationship between another entity and the entity represented by this vCard." : "Tiltaktu venslin milli annars aðila og þess aðila sem þetta vCard-nafnspjald stendur fyrir.", - "Contact" : "Tengiliður", - "Agent" : "Umboðsaðili", - "Emergency" : "Neyðartilfelli", - "Co-worker" : "Samstarfsmaður", - "Gender" : "Kyn", - "Female" : "Kona", - "Male" : "Karl", - "Details" : "Nánar", - "Settings" : "Stillingar" -},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" -} \ No newline at end of file diff --git a/l10n/it.js b/l10n/it.js deleted file mode 100644 index a4c1e149..00000000 --- a/l10n/it.js +++ /dev/null @@ -1,121 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contatti", - "Download" : "Scarica", - "Copy link" : "Copia collegamento", - "Click to copy the link to your clipboard" : "Fai clic per copiare il collegamento negli appunti", - "Toggle sharing" : "Commuta condivisione", - "Delete" : "Elimina", - "Rename" : "Rinomina", - "Share with users or groups" : "Condividi con utenti o gruppi", - "can edit" : "può modificare", - "Close" : "Chiudi", - "Enabled" : "Abilitata", - "Disabled" : "Disabilitata", - "Copied!" : "Copiato!", - "Not supported!" : "Non supportato!", - "Press ⌘-C to copy." : "Premi ⌘-C per copiare.", - "Press Ctrl-C to copy." : "Premi Ctrl-C per copiare.", - "Address book name" : "Nome della rubrica", - "Only these special characters are allowed: -_.!?#|()" : "Sono consentiti solo caratteri speciali: -_.!?#|()", - "Address book could not be created." : "La rubrica non può essere creata.", - "Upload new image" : "Carica nuova immagine", - "The selected image is too big (max 1MB)" : "L'immagine selezionata è troppo grande (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Questa scheda è danneggiata e deve essere riparata. Controlla i dati ed esegui un salvataggio per rendere definitive le modifiche.", - "No contacts in here" : "Nessun contatto qui", - "Name" : "Nome", - "Organization" : "Organizzazione", - "Title" : "Titolo", - "Add field …" : "Aggiungi campo...", - "Save changes" : "Salva le modifiche", - "Address book" : "Rubrica", - "Loading contacts …" : "Caricamento contatti in corso...", - "Import into" : "Importa in", - "Importing..." : "Importazione in corso...", - "Select your addressbook" : "Seleziona la tua rubrica", - "Import is disabled because no writable address book had been found." : "L'importazione è disabilitata poiché non è stata trovata alcuna rubrica scrivibile.", - "No search result for {query}" : "Nessun risultato di ricerca per {query}", - "All contacts" : "Tutti i contatti", - "Post office box" : "Casella postale", - "Postal code" : "CAP", - "City" : "Città", - "State or province" : "Stato o regione", - "Country" : "Stato", - "Address" : "Indirizzo", - "(new group)" : "(nuovo gruppo)", - "Last name" : "Cognome", - "First name" : "Nome", - "Additional names" : "Nomi aggiuntivi", - "Prefix" : "Prefisso", - "Suffix" : "Suffisso", - "Importing into" : "Importazione in", - "New contact" : "Nuovo contatto", - "Not grouped" : "Non raggruppati", - "Sort by" : "Ordina per", - "There is no address book available to create a contact." : "Non è disponibile alcuna rubrica per creare un contatto.", - "{addressbook} shared by {owner}" : "{addressbook} condivisa da {owner}", - "Contact not found." : "Contatto non trovato.", - "You don't have permission to write to this addressbook." : "Non hai i permessi per scrivere in questa rubrica.", - "Contact could not be created." : "Il contatto non può essere creato.", - "No contacts in file. Only vCard files are allowed." : "Nessun contatto nel file. Sono consentiti solo file vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sono supportate solo le versioni 4.0 (RFC6350) e 3.0 (RFC2426) di vCard.", - "Contact could not be moved." : "Il contatto non può essere spostato.", - "Contact could not be saved." : "Il contatto non può essere salvato.", - "Waiting for the server to be ready…" : "In attesa che il server sia pronto...", - "Importing…" : "Importazione in corso...", - "Display name" : "Nome visualizzato", - "Nickname" : "Pseudonimo", - "Detailed name" : "Nome dettagliato", - "Notes" : "Note", - "Website" : "Sito web", - "Federated Cloud ID" : "ID di cloud federata", - "Home" : "Home", - "Work" : "Lavoro", - "Other" : "Altro", - "Groups" : "Gruppi", - "Birthday" : "Compleanno", - "Anniversary" : "Anniversario", - "Date of death" : "Data di morte", - "Email" : "Posta elettronica", - "Instant messaging" : "Messaggistica istantanea", - "Phone" : "Telefono", - "Mobile" : "Cellulare", - "Work mobile" : "Cellulare lavoro", - "Fax" : "Fax", - "Fax home" : "Fax casa", - "Fax work" : "Fax lavoro", - "Pager" : "Cercapersone", - "Voice" : "Voce", - "Car" : "Automobile", - "Work pager" : "Cercapersone lavoro", - "Social network" : "Rete sociale", - "Relationship" : "Rapporto", - "Specify a relationship between you and the entity represented by this vCard." : "Specifica un rapporto tra te e l'entità rappresentata da questa vCard.", - "Spouse" : "Coniuge", - "Child" : "Figlio", - "Mother" : "Madre", - "Father" : "Padrr", - "Parent" : "Genitore", - "Brother" : "Fratello", - "Sister" : "Sorella", - "Relative" : "Parente", - "Friend" : "Amico", - "Colleague" : "Collega", - "Manager" : "Responsabile", - "Assistant" : "Assistente", - "Related" : "Collegato", - "Specify a relationship between another entity and the entity represented by this vCard." : "Specifica un rapporto tra un'altra entità e l'entità rappresentata da questa vCard.", - "Contact" : "Contatto", - "Agent" : "Agente", - "Emergency" : "Emergenza", - "Co-worker" : "Collega", - "Gender" : "Sesso", - "Female" : "Femmina", - "Male" : "Maschio", - "Details" : "Dettagli", - "A contacts app for Nextcloud" : "Un'applicazione di contatti per Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "L'applicazione Contatti di Nextcloud è un'interfaccia utente per il server CardDAV di Nextcloud. Sincronizza i contatti in modo semplice da diversi dispositivi con il tuo Nextcloud e li modifica in linea.\n\n* 🚀 **Integrazione con altre applicazioni di Nextcloud!** Attualmente Posta e Calendario – altre arriveranno.\n* 🎉 **Non dimenticare mai un compleanno!** Puoi sincronizzare i compleanni e gli altri eventi ricorrenti con il tuo calendario di Nextcloud.\n* 👥 **Condivisione di rubriche!** Desideri condividere i tuoi contatti con i tuoi amici o colleghi? Nessun problema!\n* 🙈 **Non stiamo reinventando la ruota!** Basata sull'ottima libreria open source SabreDAV.", - "Settings" : "Impostazioni" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/it.json b/l10n/it.json deleted file mode 100644 index b44c5e31..00000000 --- a/l10n/it.json +++ /dev/null @@ -1,119 +0,0 @@ -{ "translations": { - "Contacts" : "Contatti", - "Download" : "Scarica", - "Copy link" : "Copia collegamento", - "Click to copy the link to your clipboard" : "Fai clic per copiare il collegamento negli appunti", - "Toggle sharing" : "Commuta condivisione", - "Delete" : "Elimina", - "Rename" : "Rinomina", - "Share with users or groups" : "Condividi con utenti o gruppi", - "can edit" : "può modificare", - "Close" : "Chiudi", - "Enabled" : "Abilitata", - "Disabled" : "Disabilitata", - "Copied!" : "Copiato!", - "Not supported!" : "Non supportato!", - "Press ⌘-C to copy." : "Premi ⌘-C per copiare.", - "Press Ctrl-C to copy." : "Premi Ctrl-C per copiare.", - "Address book name" : "Nome della rubrica", - "Only these special characters are allowed: -_.!?#|()" : "Sono consentiti solo caratteri speciali: -_.!?#|()", - "Address book could not be created." : "La rubrica non può essere creata.", - "Upload new image" : "Carica nuova immagine", - "The selected image is too big (max 1MB)" : "L'immagine selezionata è troppo grande (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Questa scheda è danneggiata e deve essere riparata. Controlla i dati ed esegui un salvataggio per rendere definitive le modifiche.", - "No contacts in here" : "Nessun contatto qui", - "Name" : "Nome", - "Organization" : "Organizzazione", - "Title" : "Titolo", - "Add field …" : "Aggiungi campo...", - "Save changes" : "Salva le modifiche", - "Address book" : "Rubrica", - "Loading contacts …" : "Caricamento contatti in corso...", - "Import into" : "Importa in", - "Importing..." : "Importazione in corso...", - "Select your addressbook" : "Seleziona la tua rubrica", - "Import is disabled because no writable address book had been found." : "L'importazione è disabilitata poiché non è stata trovata alcuna rubrica scrivibile.", - "No search result for {query}" : "Nessun risultato di ricerca per {query}", - "All contacts" : "Tutti i contatti", - "Post office box" : "Casella postale", - "Postal code" : "CAP", - "City" : "Città", - "State or province" : "Stato o regione", - "Country" : "Stato", - "Address" : "Indirizzo", - "(new group)" : "(nuovo gruppo)", - "Last name" : "Cognome", - "First name" : "Nome", - "Additional names" : "Nomi aggiuntivi", - "Prefix" : "Prefisso", - "Suffix" : "Suffisso", - "Importing into" : "Importazione in", - "New contact" : "Nuovo contatto", - "Not grouped" : "Non raggruppati", - "Sort by" : "Ordina per", - "There is no address book available to create a contact." : "Non è disponibile alcuna rubrica per creare un contatto.", - "{addressbook} shared by {owner}" : "{addressbook} condivisa da {owner}", - "Contact not found." : "Contatto non trovato.", - "You don't have permission to write to this addressbook." : "Non hai i permessi per scrivere in questa rubrica.", - "Contact could not be created." : "Il contatto non può essere creato.", - "No contacts in file. Only vCard files are allowed." : "Nessun contatto nel file. Sono consentiti solo file vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Sono supportate solo le versioni 4.0 (RFC6350) e 3.0 (RFC2426) di vCard.", - "Contact could not be moved." : "Il contatto non può essere spostato.", - "Contact could not be saved." : "Il contatto non può essere salvato.", - "Waiting for the server to be ready…" : "In attesa che il server sia pronto...", - "Importing…" : "Importazione in corso...", - "Display name" : "Nome visualizzato", - "Nickname" : "Pseudonimo", - "Detailed name" : "Nome dettagliato", - "Notes" : "Note", - "Website" : "Sito web", - "Federated Cloud ID" : "ID di cloud federata", - "Home" : "Home", - "Work" : "Lavoro", - "Other" : "Altro", - "Groups" : "Gruppi", - "Birthday" : "Compleanno", - "Anniversary" : "Anniversario", - "Date of death" : "Data di morte", - "Email" : "Posta elettronica", - "Instant messaging" : "Messaggistica istantanea", - "Phone" : "Telefono", - "Mobile" : "Cellulare", - "Work mobile" : "Cellulare lavoro", - "Fax" : "Fax", - "Fax home" : "Fax casa", - "Fax work" : "Fax lavoro", - "Pager" : "Cercapersone", - "Voice" : "Voce", - "Car" : "Automobile", - "Work pager" : "Cercapersone lavoro", - "Social network" : "Rete sociale", - "Relationship" : "Rapporto", - "Specify a relationship between you and the entity represented by this vCard." : "Specifica un rapporto tra te e l'entità rappresentata da questa vCard.", - "Spouse" : "Coniuge", - "Child" : "Figlio", - "Mother" : "Madre", - "Father" : "Padrr", - "Parent" : "Genitore", - "Brother" : "Fratello", - "Sister" : "Sorella", - "Relative" : "Parente", - "Friend" : "Amico", - "Colleague" : "Collega", - "Manager" : "Responsabile", - "Assistant" : "Assistente", - "Related" : "Collegato", - "Specify a relationship between another entity and the entity represented by this vCard." : "Specifica un rapporto tra un'altra entità e l'entità rappresentata da questa vCard.", - "Contact" : "Contatto", - "Agent" : "Agente", - "Emergency" : "Emergenza", - "Co-worker" : "Collega", - "Gender" : "Sesso", - "Female" : "Femmina", - "Male" : "Maschio", - "Details" : "Dettagli", - "A contacts app for Nextcloud" : "Un'applicazione di contatti per Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "L'applicazione Contatti di Nextcloud è un'interfaccia utente per il server CardDAV di Nextcloud. Sincronizza i contatti in modo semplice da diversi dispositivi con il tuo Nextcloud e li modifica in linea.\n\n* 🚀 **Integrazione con altre applicazioni di Nextcloud!** Attualmente Posta e Calendario – altre arriveranno.\n* 🎉 **Non dimenticare mai un compleanno!** Puoi sincronizzare i compleanni e gli altri eventi ricorrenti con il tuo calendario di Nextcloud.\n* 👥 **Condivisione di rubriche!** Desideri condividere i tuoi contatti con i tuoi amici o colleghi? Nessun problema!\n* 🙈 **Non stiamo reinventando la ruota!** Basata sull'ottima libreria open source SabreDAV.", - "Settings" : "Impostazioni" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/ja.js b/l10n/ja.js deleted file mode 100644 index 263030f1..00000000 --- a/l10n/ja.js +++ /dev/null @@ -1,110 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "アドレス帳", - "Download" : "ダウンロード", - "Copy link" : "リンクをコピー", - "Click to copy the link to your clipboard" : "クリックするとクリップボードにリンクがコピーされます", - "Toggle sharing" : "共有をオン・オフ", - "Delete" : "削除", - "Rename" : "名前を変更", - "Share with users or groups" : "ユーザーまたはグループと共有する", - "can edit" : "編集を許可", - "Close" : "閉じる", - "Enabled" : "有効", - "Disabled" : "無効", - "Copied!" : "コピーしました!", - "Not supported!" : "サポートされていません!", - "Press ⌘-C to copy." : "⌘-Cを押してコピーします。", - "Press Ctrl-C to copy." : "Ctrl-Cを押してコピーします。", - "Address book name" : "アドレス帳名", - "Only these special characters are allowed: -_.!?#|()" : "これらの特殊文字のみ許可されます: -_.!?#|()", - "Address book could not be created." : "アドレス帳を作成できませんでした。", - "The selected image is too big (max 1MB)" : "選択した画像容量が大きすぎます (最大1 MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "このカードは壊れていて、修正されました。 データを確認して、変更を確定するために保存を押してください。", - "No contacts in here" : "連絡先がありません", - "Name" : "名前", - "Organization" : "所属", - "Title" : "タイトル", - "Add field …" : "項目を追加", - "Save changes" : "変更を保存", - "Address book" : "連絡帳", - "Loading contacts …" : "連絡先を読み込み中...", - "Import into" : "インポート", - "Importing..." : "インポート中...", - "Select your addressbook" : "アドレス帳を選択してください", - "Import is disabled because no writable address book had been found." : "書き込み可能なアドレス帳が見つからないため,インポートできません", - "No search result for {query}" : "{query} に関する検索結果はありません。", - "All contacts" : "すべての連絡先", - "Post office box" : "私書箱", - "Postal code" : "郵便番号", - "City" : "市町村", - "State or province" : "州/県", - "Country" : "国名", - "Address" : "アドレス", - "(new group)" : "(新規グループ)", - "Last name" : "姓", - "First name" : "名", - "Additional names" : "ミドルネーム", - "Prefix" : "プレフィックス", - "Suffix" : "サフィックス", - "Importing into" : "インポート", - "New contact" : "新しい連絡先", - "Not grouped" : "グループ化されていません", - "Sort by" : "ソート", - "There is no address book available to create a contact." : "連絡先を作成するためのアドレス帳がありません", - "{addressbook} shared by {owner}" : " {owner}と共有中の{addressbook} ", - "Contact not found." : "連絡先がありません", - "You don't have permission to write to this addressbook." : "アドレス帳への書き込み権限がありません", - "Contact could not be created." : "連絡先を作成できませんでした。", - "No contacts in file. Only vCard files are allowed." : "ファイルに連絡先がありません。vCardファイルのみ有効です", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "vCard のバージョンは、4.0 (RFC6350) または、3.0 (RFC2426) をサポートしています。", - "Contact could not be moved." : "連絡先を移動できませんでした", - "Contact could not be saved." : "連絡先を保存できませんでした。", - "Waiting for the server to be ready…" : "サーバー状況確認中", - "Importing…" : "読み込み中...", - "Display name" : "表示名", - "Nickname" : "ニックネーム", - "Detailed name" : "詳細名", - "Notes" : "ノート", - "Website" : "ウェブサイト", - "Federated Cloud ID" : "クラウド連携ID", - "Home" : "自宅", - "Work" : "職場", - "Other" : "その他", - "Groups" : "グループ", - "Birthday" : "誕生日", - "Anniversary" : "記念日", - "Date of death" : "命日", - "Email" : "メール", - "Instant messaging" : "インスタントメッセージ", - "Phone" : "電話番号", - "Mobile" : "携帯", - "Work mobile" : "職場携帯", - "Fax" : "FAX", - "Fax home" : "自宅FAX", - "Fax work" : "職場FAX", - "Pager" : "ポケベル", - "Voice" : "音声番号", - "Car" : "自動車", - "Social network" : "ソーシャルネットワーク", - "Relationship" : "つながり", - "Spouse" : "配偶者", - "Child" : "子供", - "Mother" : "母親", - "Father" : "父親", - "Parent" : "両親", - "Brother" : "兄弟", - "Sister" : "姉妹", - "Relative" : "親族", - "Friend" : "友人", - "Colleague" : "同僚", - "Manager" : "マネージャー", - "Assistant" : "アシスタント", - "Gender" : "性別", - "Female" : "女性", - "Male" : "男性", - "Details" : "詳細", - "Settings" : "設定" -}, -"nplurals=1; plural=0;"); diff --git a/l10n/ja.json b/l10n/ja.json deleted file mode 100644 index 36a76f28..00000000 --- a/l10n/ja.json +++ /dev/null @@ -1,108 +0,0 @@ -{ "translations": { - "Contacts" : "アドレス帳", - "Download" : "ダウンロード", - "Copy link" : "リンクをコピー", - "Click to copy the link to your clipboard" : "クリックするとクリップボードにリンクがコピーされます", - "Toggle sharing" : "共有をオン・オフ", - "Delete" : "削除", - "Rename" : "名前を変更", - "Share with users or groups" : "ユーザーまたはグループと共有する", - "can edit" : "編集を許可", - "Close" : "閉じる", - "Enabled" : "有効", - "Disabled" : "無効", - "Copied!" : "コピーしました!", - "Not supported!" : "サポートされていません!", - "Press ⌘-C to copy." : "⌘-Cを押してコピーします。", - "Press Ctrl-C to copy." : "Ctrl-Cを押してコピーします。", - "Address book name" : "アドレス帳名", - "Only these special characters are allowed: -_.!?#|()" : "これらの特殊文字のみ許可されます: -_.!?#|()", - "Address book could not be created." : "アドレス帳を作成できませんでした。", - "The selected image is too big (max 1MB)" : "選択した画像容量が大きすぎます (最大1 MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "このカードは壊れていて、修正されました。 データを確認して、変更を確定するために保存を押してください。", - "No contacts in here" : "連絡先がありません", - "Name" : "名前", - "Organization" : "所属", - "Title" : "タイトル", - "Add field …" : "項目を追加", - "Save changes" : "変更を保存", - "Address book" : "連絡帳", - "Loading contacts …" : "連絡先を読み込み中...", - "Import into" : "インポート", - "Importing..." : "インポート中...", - "Select your addressbook" : "アドレス帳を選択してください", - "Import is disabled because no writable address book had been found." : "書き込み可能なアドレス帳が見つからないため,インポートできません", - "No search result for {query}" : "{query} に関する検索結果はありません。", - "All contacts" : "すべての連絡先", - "Post office box" : "私書箱", - "Postal code" : "郵便番号", - "City" : "市町村", - "State or province" : "州/県", - "Country" : "国名", - "Address" : "アドレス", - "(new group)" : "(新規グループ)", - "Last name" : "姓", - "First name" : "名", - "Additional names" : "ミドルネーム", - "Prefix" : "プレフィックス", - "Suffix" : "サフィックス", - "Importing into" : "インポート", - "New contact" : "新しい連絡先", - "Not grouped" : "グループ化されていません", - "Sort by" : "ソート", - "There is no address book available to create a contact." : "連絡先を作成するためのアドレス帳がありません", - "{addressbook} shared by {owner}" : " {owner}と共有中の{addressbook} ", - "Contact not found." : "連絡先がありません", - "You don't have permission to write to this addressbook." : "アドレス帳への書き込み権限がありません", - "Contact could not be created." : "連絡先を作成できませんでした。", - "No contacts in file. Only vCard files are allowed." : "ファイルに連絡先がありません。vCardファイルのみ有効です", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "vCard のバージョンは、4.0 (RFC6350) または、3.0 (RFC2426) をサポートしています。", - "Contact could not be moved." : "連絡先を移動できませんでした", - "Contact could not be saved." : "連絡先を保存できませんでした。", - "Waiting for the server to be ready…" : "サーバー状況確認中", - "Importing…" : "読み込み中...", - "Display name" : "表示名", - "Nickname" : "ニックネーム", - "Detailed name" : "詳細名", - "Notes" : "ノート", - "Website" : "ウェブサイト", - "Federated Cloud ID" : "クラウド連携ID", - "Home" : "自宅", - "Work" : "職場", - "Other" : "その他", - "Groups" : "グループ", - "Birthday" : "誕生日", - "Anniversary" : "記念日", - "Date of death" : "命日", - "Email" : "メール", - "Instant messaging" : "インスタントメッセージ", - "Phone" : "電話番号", - "Mobile" : "携帯", - "Work mobile" : "職場携帯", - "Fax" : "FAX", - "Fax home" : "自宅FAX", - "Fax work" : "職場FAX", - "Pager" : "ポケベル", - "Voice" : "音声番号", - "Car" : "自動車", - "Social network" : "ソーシャルネットワーク", - "Relationship" : "つながり", - "Spouse" : "配偶者", - "Child" : "子供", - "Mother" : "母親", - "Father" : "父親", - "Parent" : "両親", - "Brother" : "兄弟", - "Sister" : "姉妹", - "Relative" : "親族", - "Friend" : "友人", - "Colleague" : "同僚", - "Manager" : "マネージャー", - "Assistant" : "アシスタント", - "Gender" : "性別", - "Female" : "女性", - "Male" : "男性", - "Details" : "詳細", - "Settings" : "設定" -},"pluralForm" :"nplurals=1; plural=0;" -} \ No newline at end of file diff --git a/l10n/ka_GE.js b/l10n/ka_GE.js deleted file mode 100644 index 8f8bc9f0..00000000 --- a/l10n/ka_GE.js +++ /dev/null @@ -1,111 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "კონტაქტები", - "Download" : "ჩამოტვირთვა", - "Copy link" : "ბმულის კოპირება", - "Click to copy the link to your clipboard" : "ბმულის ბუფერში გადასატანად დააწკაპუნეთ", - "Toggle sharing" : "გაზიარების გადართვა", - "Delete" : "გაუქმება", - "Rename" : "სახელის შეცვლა", - "Share with users or groups" : "გაზიარება მოხმარებლებთან ან ჯგუფებთან", - "can edit" : "შეუძლია შეცვლა", - "Close" : "დახურვა", - "Enabled" : "მოქმედია", - "Disabled" : "არაა მოქმედი", - "Copied!" : "კოპირებულია!", - "Not supported!" : "არაა მხარდაჭერილი!", - "Press ⌘-C to copy." : "კოპირებისთვის დააჭირეთ ⌘-C-ს.", - "Press Ctrl-C to copy." : "კოპირებისთვის დააჭირეთ Ctrl-C-ს.", - "Address book name" : "მისამართების წიგნის სახელი", - "Only these special characters are allowed: -_.!?#|()" : "მხოლოდ შემდეგი სპეციალური ნიშნებია დაშვებული: -_.!?#|()", - "Address book could not be created." : "მისამართების წიგნი ვერ იქმნება.", - "The selected image is too big (max 1MB)" : "არჩეული სურათი ძალიან დიდია (მაქს. 1მბ)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "ეს ბარათი დაზიანებულია და გამოკეთდა. შესწორების დასამახსოვრებლად გთხოვთ შეამოწმოთ მონაცემი და განახორციელოთ მისი შენახვა.", - "No contacts in here" : "აქ კონტაქტები არაა", - "Name" : "სახელი", - "Organization" : "ორგანიზაცია", - "Title" : "სახელი", - "Add field …" : "დაამატეთ ველი ...", - "Save changes" : "ცვლილებების შენახვა", - "Address book" : "მისამართების წიგნი", - "Loading contacts …" : "კონტაქტების ჩატვირთვა ...", - "Import into" : "იმპორტირება", - "Importing..." : "იმპორტირება...", - "Select your addressbook" : "აირჩიეთ თქვენი მისამართების წიგნი", - "Import is disabled because no writable address book had been found." : "იმპორტირება უმოქმედოა, ვერც ერთი წერადი მისამართების წიგნი ვერ იქნა ნაპოვნი. ", - "No search result for {query}" : "ძიების შედეგები {query}-სთვის არაა", - "All contacts" : "ყველა კონტაქტი", - "Post office box" : "საფოსტო ყუთი", - "Postal code" : "საფოსტო კოდი", - "City" : "ქალაქი", - "State or province" : "შტატი ან პროვინცია", - "Country" : "ქვეყანა", - "Address" : "მისამართი", - "(new group)" : "(ახალი ჯგუფი)", - "Last name" : "გვარი", - "First name" : "სახელი", - "Additional names" : "დამატებითი სახელები", - "Prefix" : "პრეფიქსი", - "Suffix" : "სუფიქსი", - "Importing into" : "იმპორტირება", - "New contact" : "ახალი კონტაქტი", - "Not grouped" : "არაა დაჯგუფებული", - "Sort by" : "დალაგება", - "There is no address book available to create a contact." : "კონტაქტის შესაქმნელად არც ერთი მისამართების წიგნი არაა ხელმისაწვდომი.", - "{addressbook} shared by {owner}" : "{owner} მომხმარებლის მიერ გაზიარებული {addressbook}", - "Contact not found." : "კონტაქტი ვერ იქნა ნაპოვნი.", - "You don't have permission to write to this addressbook." : "ამ მისამართების წიგნში ჩაწერის უფლება არ გაქვთ.", - "Contact could not be created." : "კონტაქტი ვერ შეიქმნა.", - "No contacts in file. Only vCard files are allowed." : "ამ ფაილში კონტაქტები არაა. მხოლოდ vCard ფაილებია ნებადართული.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "მხოლოდ vCard ვერსია 4.0 (RFC6350) ან ვერსიაა 3.0 (RFC2426) მხარდაჭერილი.", - "Contact could not be moved." : "კონტაქტი ვერ გადაადგილდა.", - "Contact could not be saved." : "კონტაქტის შენახვა არ მოხერხდა.", - "Waiting for the server to be ready…" : "ველოდებით სერვერის მომზადებას...", - "Importing…" : "იმპორტირება...", - "Display name" : "დისპლეი სახელი", - "Nickname" : "ნიკნეიმი", - "Detailed name" : "დეტალური სახელი", - "Notes" : "შენიშვნები", - "Website" : "ვებ-საიტი", - "Federated Cloud ID" : "ფედერალური ქლაუდ ID", - "Home" : "სახლი", - "Work" : "სამსახური", - "Other" : "სხვა", - "Groups" : "ჯგუფები", - "Birthday" : "დაბადების დრე", - "Anniversary" : "დაბადების დღე", - "Date of death" : "გადრდაცვალების დღე", - "Email" : "ელ-ფოსტა", - "Instant messaging" : "მესინჯერი", - "Phone" : "ტელეფონი", - "Mobile" : "მობილური", - "Work mobile" : "სამუშაო ტელეფონი", - "Fax" : "ფაქსი", - "Fax home" : "სახლის ფაქსი", - "Fax work" : "სამსახურის ფაქსი", - "Pager" : "პეიჯერი", - "Voice" : "ხმა", - "Car" : "მაქნანა", - "Work pager" : "სამუშაო პეიჯერი", - "Social network" : "სოციალური ქსელი", - "Relationship" : "ურთიერთობა", - "Spouse" : "მეუღლე", - "Child" : "შვილი", - "Mother" : "დედა", - "Father" : "მამა", - "Parent" : "მშობელი", - "Brother" : "ძმა", - "Sister" : "და", - "Relative" : "ნათესავი", - "Friend" : "მეგობარი", - "Colleague" : "კოლეგა", - "Manager" : "მენეჯერი", - "Assistant" : "ასისტენტი", - "Gender" : "სქესი", - "Female" : "მდედორობითი", - "Male" : "მამრობითი", - "Details" : "დეტალები", - "Settings" : "პარამეტრები" -}, -"nplurals=2; plural=(n!=1);"); diff --git a/l10n/ka_GE.json b/l10n/ka_GE.json deleted file mode 100644 index e528909c..00000000 --- a/l10n/ka_GE.json +++ /dev/null @@ -1,109 +0,0 @@ -{ "translations": { - "Contacts" : "კონტაქტები", - "Download" : "ჩამოტვირთვა", - "Copy link" : "ბმულის კოპირება", - "Click to copy the link to your clipboard" : "ბმულის ბუფერში გადასატანად დააწკაპუნეთ", - "Toggle sharing" : "გაზიარების გადართვა", - "Delete" : "გაუქმება", - "Rename" : "სახელის შეცვლა", - "Share with users or groups" : "გაზიარება მოხმარებლებთან ან ჯგუფებთან", - "can edit" : "შეუძლია შეცვლა", - "Close" : "დახურვა", - "Enabled" : "მოქმედია", - "Disabled" : "არაა მოქმედი", - "Copied!" : "კოპირებულია!", - "Not supported!" : "არაა მხარდაჭერილი!", - "Press ⌘-C to copy." : "კოპირებისთვის დააჭირეთ ⌘-C-ს.", - "Press Ctrl-C to copy." : "კოპირებისთვის დააჭირეთ Ctrl-C-ს.", - "Address book name" : "მისამართების წიგნის სახელი", - "Only these special characters are allowed: -_.!?#|()" : "მხოლოდ შემდეგი სპეციალური ნიშნებია დაშვებული: -_.!?#|()", - "Address book could not be created." : "მისამართების წიგნი ვერ იქმნება.", - "The selected image is too big (max 1MB)" : "არჩეული სურათი ძალიან დიდია (მაქს. 1მბ)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "ეს ბარათი დაზიანებულია და გამოკეთდა. შესწორების დასამახსოვრებლად გთხოვთ შეამოწმოთ მონაცემი და განახორციელოთ მისი შენახვა.", - "No contacts in here" : "აქ კონტაქტები არაა", - "Name" : "სახელი", - "Organization" : "ორგანიზაცია", - "Title" : "სახელი", - "Add field …" : "დაამატეთ ველი ...", - "Save changes" : "ცვლილებების შენახვა", - "Address book" : "მისამართების წიგნი", - "Loading contacts …" : "კონტაქტების ჩატვირთვა ...", - "Import into" : "იმპორტირება", - "Importing..." : "იმპორტირება...", - "Select your addressbook" : "აირჩიეთ თქვენი მისამართების წიგნი", - "Import is disabled because no writable address book had been found." : "იმპორტირება უმოქმედოა, ვერც ერთი წერადი მისამართების წიგნი ვერ იქნა ნაპოვნი. ", - "No search result for {query}" : "ძიების შედეგები {query}-სთვის არაა", - "All contacts" : "ყველა კონტაქტი", - "Post office box" : "საფოსტო ყუთი", - "Postal code" : "საფოსტო კოდი", - "City" : "ქალაქი", - "State or province" : "შტატი ან პროვინცია", - "Country" : "ქვეყანა", - "Address" : "მისამართი", - "(new group)" : "(ახალი ჯგუფი)", - "Last name" : "გვარი", - "First name" : "სახელი", - "Additional names" : "დამატებითი სახელები", - "Prefix" : "პრეფიქსი", - "Suffix" : "სუფიქსი", - "Importing into" : "იმპორტირება", - "New contact" : "ახალი კონტაქტი", - "Not grouped" : "არაა დაჯგუფებული", - "Sort by" : "დალაგება", - "There is no address book available to create a contact." : "კონტაქტის შესაქმნელად არც ერთი მისამართების წიგნი არაა ხელმისაწვდომი.", - "{addressbook} shared by {owner}" : "{owner} მომხმარებლის მიერ გაზიარებული {addressbook}", - "Contact not found." : "კონტაქტი ვერ იქნა ნაპოვნი.", - "You don't have permission to write to this addressbook." : "ამ მისამართების წიგნში ჩაწერის უფლება არ გაქვთ.", - "Contact could not be created." : "კონტაქტი ვერ შეიქმნა.", - "No contacts in file. Only vCard files are allowed." : "ამ ფაილში კონტაქტები არაა. მხოლოდ vCard ფაილებია ნებადართული.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "მხოლოდ vCard ვერსია 4.0 (RFC6350) ან ვერსიაა 3.0 (RFC2426) მხარდაჭერილი.", - "Contact could not be moved." : "კონტაქტი ვერ გადაადგილდა.", - "Contact could not be saved." : "კონტაქტის შენახვა არ მოხერხდა.", - "Waiting for the server to be ready…" : "ველოდებით სერვერის მომზადებას...", - "Importing…" : "იმპორტირება...", - "Display name" : "დისპლეი სახელი", - "Nickname" : "ნიკნეიმი", - "Detailed name" : "დეტალური სახელი", - "Notes" : "შენიშვნები", - "Website" : "ვებ-საიტი", - "Federated Cloud ID" : "ფედერალური ქლაუდ ID", - "Home" : "სახლი", - "Work" : "სამსახური", - "Other" : "სხვა", - "Groups" : "ჯგუფები", - "Birthday" : "დაბადების დრე", - "Anniversary" : "დაბადების დღე", - "Date of death" : "გადრდაცვალების დღე", - "Email" : "ელ-ფოსტა", - "Instant messaging" : "მესინჯერი", - "Phone" : "ტელეფონი", - "Mobile" : "მობილური", - "Work mobile" : "სამუშაო ტელეფონი", - "Fax" : "ფაქსი", - "Fax home" : "სახლის ფაქსი", - "Fax work" : "სამსახურის ფაქსი", - "Pager" : "პეიჯერი", - "Voice" : "ხმა", - "Car" : "მაქნანა", - "Work pager" : "სამუშაო პეიჯერი", - "Social network" : "სოციალური ქსელი", - "Relationship" : "ურთიერთობა", - "Spouse" : "მეუღლე", - "Child" : "შვილი", - "Mother" : "დედა", - "Father" : "მამა", - "Parent" : "მშობელი", - "Brother" : "ძმა", - "Sister" : "და", - "Relative" : "ნათესავი", - "Friend" : "მეგობარი", - "Colleague" : "კოლეგა", - "Manager" : "მენეჯერი", - "Assistant" : "ასისტენტი", - "Gender" : "სქესი", - "Female" : "მდედორობითი", - "Male" : "მამრობითი", - "Details" : "დეტალები", - "Settings" : "პარამეტრები" -},"pluralForm" :"nplurals=2; plural=(n!=1);" -} \ No newline at end of file diff --git a/l10n/ko.js b/l10n/ko.js deleted file mode 100644 index cbc6caa4..00000000 --- a/l10n/ko.js +++ /dev/null @@ -1,111 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "연락처", - "Download" : "다운로드", - "Copy link" : "링크 복사", - "Click to copy the link to your clipboard" : "링크를 클립보드로 복사하려면 누르십시오", - "Toggle sharing" : "공유 전환", - "Delete" : "삭제", - "Rename" : "이름 바꾸기", - "Share with users or groups" : "사용자 및 그룹과 공유", - "can edit" : "편집 가능", - "Close" : "닫기", - "Enabled" : "활성화됨", - "Disabled" : "비활성화됨", - "Copied!" : "복사 성공!", - "Not supported!" : "지원하지 않음!", - "Press ⌘-C to copy." : "복사하려면 ⌘-C 키를 누르십시오.", - "Press Ctrl-C to copy." : "복사하려면 Ctrl-C 키를 누르십시오.", - "Address book name" : "주소록 이름", - "Only these special characters are allowed: -_.!?#|()" : "다음 특수 문자만 사용할 수 있습니다: -_.!?#|()", - "Address book could not be created." : "주소록을 만들 수 없습니다.", - "The selected image is too big (max 1MB)" : "선택한 사진이 너무 큼(최대 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "이 카드가 손상되었으며 복구되었습니다. 데이터를 확인한 후, 변경 사항을 저장하려면 저장을 요청하십시오.", - "No contacts in here" : "여기에 연락처 없음", - "Name" : "이름", - "Organization" : "조직", - "Title" : "직위", - "Add field …" : "필드 추가…", - "Save changes" : "변경 사항 저장", - "Address book" : "주소록", - "Loading contacts …" : "연락처 불러오는 중…", - "Import into" : "다음으로 가져오기", - "Importing..." : "가져오는 중...", - "Select your addressbook" : "내 주소록 선택", - "Import is disabled because no writable address book had been found." : "기록할 수 있는 주소록을 찾을 수 없어서 가져올 수 없습니다.", - "No search result for {query}" : "{query} 검색 결과가 없음", - "All contacts" : "모든 연락처", - "Post office box" : "우편 사서함", - "Postal code" : "우편 번호", - "City" : "도시", - "State or province" : "도 및 광역시", - "Country" : "국가", - "Address" : "주소", - "(new group)" : "(새 그룹)", - "Last name" : "성", - "First name" : "이름", - "Additional names" : "추가 이름", - "Prefix" : "접두사", - "Suffix" : "접미사", - "Importing into" : "다음으로 가져오는 중", - "New contact" : "새 연락처", - "Not grouped" : "그룹에 없음", - "Sort by" : "정렬 순서", - "There is no address book available to create a contact." : "연락처를 추가할 수 있는 주소록이 없습니다.", - "{addressbook} shared by {owner}" : "{owner} 님이 공유한 {addressbook}", - "Contact not found." : "연락처를 찾을 수 없습니다.", - "You don't have permission to write to this addressbook." : "이 주소록에 기록할 수 있는 권한이 없습니다.", - "Contact could not be created." : "연락처를 만들 수 없습니다.", - "No contacts in file. Only vCard files are allowed." : "파일에 연락처가 없습니다. vCard 파일만 사용할 수 있습니다.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "vCard 버전 4.0(RFC 6350) 및 3.0(RFC 2426)만 지원합니다.", - "Contact could not be moved." : "연락처를 이동할 수 없습니다.", - "Contact could not be saved." : "연락처를 저장할 수 없습니다.", - "Waiting for the server to be ready…" : "서버가 준비되는 동안 기다리는 중…", - "Importing…" : "가져오는 중…", - "Display name" : "표시 이름", - "Nickname" : "별명", - "Detailed name" : "자세한 이름", - "Notes" : "메모", - "Website" : "웹 사이트", - "Federated Cloud ID" : "연합 클라우드 ID", - "Home" : "가정", - "Work" : "직장", - "Other" : "기타", - "Groups" : "그룹", - "Birthday" : "생일", - "Anniversary" : "기념일", - "Date of death" : "사망일", - "Email" : "이메일", - "Instant messaging" : "인스턴트 메시지", - "Phone" : "전화 번호", - "Mobile" : "휴대폰", - "Work mobile" : "직장 휴대폰", - "Fax" : "팩스 번호", - "Fax home" : "집 팩스", - "Fax work" : "직장 팩스", - "Pager" : "호출기", - "Voice" : "음성 번호", - "Car" : "카폰", - "Work pager" : "직장 호출기", - "Social network" : "소셜 네트워크", - "Relationship" : "관계", - "Spouse" : "배우자", - "Child" : "자식", - "Mother" : "어머니", - "Father" : "아버지", - "Parent" : "부모", - "Brother" : "남자 형제", - "Sister" : "여자 형제", - "Relative" : "친척", - "Friend" : "친구", - "Colleague" : "동료", - "Manager" : "관리자", - "Assistant" : "비서", - "Gender" : "성별", - "Female" : "여성", - "Male" : "남성", - "Details" : "자세한 정보", - "Settings" : "설정" -}, -"nplurals=1; plural=0;"); diff --git a/l10n/ko.json b/l10n/ko.json deleted file mode 100644 index 2e367b5e..00000000 --- a/l10n/ko.json +++ /dev/null @@ -1,109 +0,0 @@ -{ "translations": { - "Contacts" : "연락처", - "Download" : "다운로드", - "Copy link" : "링크 복사", - "Click to copy the link to your clipboard" : "링크를 클립보드로 복사하려면 누르십시오", - "Toggle sharing" : "공유 전환", - "Delete" : "삭제", - "Rename" : "이름 바꾸기", - "Share with users or groups" : "사용자 및 그룹과 공유", - "can edit" : "편집 가능", - "Close" : "닫기", - "Enabled" : "활성화됨", - "Disabled" : "비활성화됨", - "Copied!" : "복사 성공!", - "Not supported!" : "지원하지 않음!", - "Press ⌘-C to copy." : "복사하려면 ⌘-C 키를 누르십시오.", - "Press Ctrl-C to copy." : "복사하려면 Ctrl-C 키를 누르십시오.", - "Address book name" : "주소록 이름", - "Only these special characters are allowed: -_.!?#|()" : "다음 특수 문자만 사용할 수 있습니다: -_.!?#|()", - "Address book could not be created." : "주소록을 만들 수 없습니다.", - "The selected image is too big (max 1MB)" : "선택한 사진이 너무 큼(최대 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "이 카드가 손상되었으며 복구되었습니다. 데이터를 확인한 후, 변경 사항을 저장하려면 저장을 요청하십시오.", - "No contacts in here" : "여기에 연락처 없음", - "Name" : "이름", - "Organization" : "조직", - "Title" : "직위", - "Add field …" : "필드 추가…", - "Save changes" : "변경 사항 저장", - "Address book" : "주소록", - "Loading contacts …" : "연락처 불러오는 중…", - "Import into" : "다음으로 가져오기", - "Importing..." : "가져오는 중...", - "Select your addressbook" : "내 주소록 선택", - "Import is disabled because no writable address book had been found." : "기록할 수 있는 주소록을 찾을 수 없어서 가져올 수 없습니다.", - "No search result for {query}" : "{query} 검색 결과가 없음", - "All contacts" : "모든 연락처", - "Post office box" : "우편 사서함", - "Postal code" : "우편 번호", - "City" : "도시", - "State or province" : "도 및 광역시", - "Country" : "국가", - "Address" : "주소", - "(new group)" : "(새 그룹)", - "Last name" : "성", - "First name" : "이름", - "Additional names" : "추가 이름", - "Prefix" : "접두사", - "Suffix" : "접미사", - "Importing into" : "다음으로 가져오는 중", - "New contact" : "새 연락처", - "Not grouped" : "그룹에 없음", - "Sort by" : "정렬 순서", - "There is no address book available to create a contact." : "연락처를 추가할 수 있는 주소록이 없습니다.", - "{addressbook} shared by {owner}" : "{owner} 님이 공유한 {addressbook}", - "Contact not found." : "연락처를 찾을 수 없습니다.", - "You don't have permission to write to this addressbook." : "이 주소록에 기록할 수 있는 권한이 없습니다.", - "Contact could not be created." : "연락처를 만들 수 없습니다.", - "No contacts in file. Only vCard files are allowed." : "파일에 연락처가 없습니다. vCard 파일만 사용할 수 있습니다.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "vCard 버전 4.0(RFC 6350) 및 3.0(RFC 2426)만 지원합니다.", - "Contact could not be moved." : "연락처를 이동할 수 없습니다.", - "Contact could not be saved." : "연락처를 저장할 수 없습니다.", - "Waiting for the server to be ready…" : "서버가 준비되는 동안 기다리는 중…", - "Importing…" : "가져오는 중…", - "Display name" : "표시 이름", - "Nickname" : "별명", - "Detailed name" : "자세한 이름", - "Notes" : "메모", - "Website" : "웹 사이트", - "Federated Cloud ID" : "연합 클라우드 ID", - "Home" : "가정", - "Work" : "직장", - "Other" : "기타", - "Groups" : "그룹", - "Birthday" : "생일", - "Anniversary" : "기념일", - "Date of death" : "사망일", - "Email" : "이메일", - "Instant messaging" : "인스턴트 메시지", - "Phone" : "전화 번호", - "Mobile" : "휴대폰", - "Work mobile" : "직장 휴대폰", - "Fax" : "팩스 번호", - "Fax home" : "집 팩스", - "Fax work" : "직장 팩스", - "Pager" : "호출기", - "Voice" : "음성 번호", - "Car" : "카폰", - "Work pager" : "직장 호출기", - "Social network" : "소셜 네트워크", - "Relationship" : "관계", - "Spouse" : "배우자", - "Child" : "자식", - "Mother" : "어머니", - "Father" : "아버지", - "Parent" : "부모", - "Brother" : "남자 형제", - "Sister" : "여자 형제", - "Relative" : "친척", - "Friend" : "친구", - "Colleague" : "동료", - "Manager" : "관리자", - "Assistant" : "비서", - "Gender" : "성별", - "Female" : "여성", - "Male" : "남성", - "Details" : "자세한 정보", - "Settings" : "설정" -},"pluralForm" :"nplurals=1; plural=0;" -} \ No newline at end of file diff --git a/l10n/lt_LT.js b/l10n/lt_LT.js deleted file mode 100644 index c1586c4d..00000000 --- a/l10n/lt_LT.js +++ /dev/null @@ -1,113 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontaktai", - "Download" : "Atsisiųsti", - "Copy link" : "Kopijuoti nuorodą", - "Click to copy the link to your clipboard" : "Kopijuoti nuorodą į iškarpinę", - "Toggle sharing" : "Perjungti dalinimo būseną", - "Delete" : "Ištrinti", - "Rename" : "Pervadinti", - "Share with users or groups" : "Pasidalinti su...", - "can edit" : "leidžiama redaguoti", - "Close" : "Užverti", - "Enabled" : "Įjungta", - "Disabled" : "Išjungta", - "Copied!" : "Nukopijuota!", - "Not supported!" : "Nepalaikoma!", - "Press ⌘-C to copy." : "Nukopijuokite su ⌘-C.", - "Press Ctrl-C to copy." : "Nukopijuokite su Ctrl-C.", - "Address book name" : "Adresatų knygos pavadinimas", - "Only these special characters are allowed: -_.!?#|()" : "Yra leidžiami tik šie specialūs simboliai: -_.!?#|()", - "Address book could not be created." : "Nepavyko sukurti adresų knygos.", - "Upload new image" : "Įkelti naują paveikslą", - "The selected image is too big (max 1MB)" : "Didžiausias nuotraukos dydis yra 1 MB", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Ši kortelė nebuvo teisingai išsaugota. Patikrinkite duomenų teisingumą ir išsaugokite.", - "No contacts in here" : "Nėra adresatų", - "Name" : "Vardas", - "Organization" : "Darbo vieta", - "Title" : "Pareigos", - "Add field …" : "Pridėti informaciją...", - "Save changes" : "Įrašyti pakeitimus", - "Address book" : "Adresatų knyga", - "Loading contacts …" : "Įkeliami kontaktai…", - "Import into" : "Importuoti į", - "Importing..." : "Importuojama...", - "Select your addressbook" : "Pasirinkti adresų knygą", - "Import is disabled because no writable address book had been found." : "Importavimas yra išjungtas, nes nerasta jokios rašymui skirtos adresų knygos.", - "No search result for {query}" : "Nieko nerasta pagal \"{query}\"", - "All contacts" : "Visi adresatai", - "Post office box" : "Pašto dėžutės numeris", - "Postal code" : "Pašto kodas", - "City" : "Miestas", - "State or province" : "Rajonas", - "Country" : "Valstybė", - "Address" : "Adresas", - "(new group)" : "(nauja grupė)", - "Last name" : "Pavardė", - "First name" : "Vardas", - "Additional names" : "Kiti vardai", - "Prefix" : "Kreipiniai", - "Suffix" : "Patikslinimai", - "Importing into" : "Importuojama į", - "New contact" : "Naujas adresatas", - "Not grouped" : "Negrupuoti", - "Sort by" : "Rikiuoti pagal", - "There is no address book available to create a contact." : "Kontakto kūrimui nėra prieinama jokia adresų knyga.", - "{addressbook} shared by {owner}" : "{owner} pradėjo bendrinti {addressbook}", - "Contact not found." : "Kontaktinis asmuo nerastas.", - "You don't have permission to write to this addressbook." : "Jūs neturite leidimo rašyti į šią adresų knygelę.", - "Contact could not be created." : "Nepavyko sukurti adresato.", - "No contacts in file. Only vCard files are allowed." : "Byloje nėra adresatų duomenų. Tik vCard tipo bylos palaikomos.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Palaikomos vCard 4.0 versija (RFC6350) ir vCard 3.0 versija (RFC2426).", - "Contact could not be moved." : "Nepavyko perkelti kontakto.", - "Contact could not be saved." : "Nepavyko įrašyti adresato.", - "Waiting for the server to be ready…" : "Laukiama kol serveris bus pasiruošęs...", - "Importing…" : "Importuojama...", - "Display name" : "Rodomas vardas", - "Nickname" : "Slapyvardis", - "Detailed name" : "Pilnas vardas", - "Notes" : "Apie", - "Website" : "Svetainė", - "Federated Cloud ID" : "Centralizuoto Serverio ID", - "Home" : "Namų", - "Work" : "Darbo", - "Other" : "Neapibrėžtas", - "Groups" : "Grupės", - "Birthday" : "Gimimo data", - "Anniversary" : "Santuokos data", - "Date of death" : "Mirties data", - "Email" : "Elektroninio pašto adresas", - "Instant messaging" : "Momentinių pranešimų paskyra", - "Phone" : "Telefono numeris", - "Mobile" : "Mobilusis", - "Work mobile" : "Darbo mobilusis", - "Fax" : "Telefakso", - "Fax home" : "Namų telefakso", - "Fax work" : "Darbinio telefakso", - "Pager" : "Pranešimų gaviklio", - "Voice" : "Balso pašto", - "Car" : "Automobilis", - "Work pager" : "Darbo pranešimų gaviklis", - "Social network" : "Socialinio tinklo paskyra", - "Relationship" : "Ryšiai", - "Spouse" : "Sutuoktinis", - "Child" : "Vaikas", - "Mother" : "Mama", - "Father" : "Tėtis", - "Parent" : "Tėvai", - "Brother" : "Brolis", - "Sister" : "Sesuo", - "Relative" : "Giminaičiai", - "Friend" : "Draugas", - "Colleague" : "Bendradarbiai", - "Manager" : "Vadovas", - "Assistant" : "Asistentas", - "Co-worker" : "Bendradarbis", - "Gender" : "Lytis", - "Female" : "Moteris", - "Male" : "Vyras", - "Details" : "Išsamesnė informacija", - "Settings" : "Nustatymai" -}, -"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"); diff --git a/l10n/lt_LT.json b/l10n/lt_LT.json deleted file mode 100644 index cb6e8c75..00000000 --- a/l10n/lt_LT.json +++ /dev/null @@ -1,111 +0,0 @@ -{ "translations": { - "Contacts" : "Kontaktai", - "Download" : "Atsisiųsti", - "Copy link" : "Kopijuoti nuorodą", - "Click to copy the link to your clipboard" : "Kopijuoti nuorodą į iškarpinę", - "Toggle sharing" : "Perjungti dalinimo būseną", - "Delete" : "Ištrinti", - "Rename" : "Pervadinti", - "Share with users or groups" : "Pasidalinti su...", - "can edit" : "leidžiama redaguoti", - "Close" : "Užverti", - "Enabled" : "Įjungta", - "Disabled" : "Išjungta", - "Copied!" : "Nukopijuota!", - "Not supported!" : "Nepalaikoma!", - "Press ⌘-C to copy." : "Nukopijuokite su ⌘-C.", - "Press Ctrl-C to copy." : "Nukopijuokite su Ctrl-C.", - "Address book name" : "Adresatų knygos pavadinimas", - "Only these special characters are allowed: -_.!?#|()" : "Yra leidžiami tik šie specialūs simboliai: -_.!?#|()", - "Address book could not be created." : "Nepavyko sukurti adresų knygos.", - "Upload new image" : "Įkelti naują paveikslą", - "The selected image is too big (max 1MB)" : "Didžiausias nuotraukos dydis yra 1 MB", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Ši kortelė nebuvo teisingai išsaugota. Patikrinkite duomenų teisingumą ir išsaugokite.", - "No contacts in here" : "Nėra adresatų", - "Name" : "Vardas", - "Organization" : "Darbo vieta", - "Title" : "Pareigos", - "Add field …" : "Pridėti informaciją...", - "Save changes" : "Įrašyti pakeitimus", - "Address book" : "Adresatų knyga", - "Loading contacts …" : "Įkeliami kontaktai…", - "Import into" : "Importuoti į", - "Importing..." : "Importuojama...", - "Select your addressbook" : "Pasirinkti adresų knygą", - "Import is disabled because no writable address book had been found." : "Importavimas yra išjungtas, nes nerasta jokios rašymui skirtos adresų knygos.", - "No search result for {query}" : "Nieko nerasta pagal \"{query}\"", - "All contacts" : "Visi adresatai", - "Post office box" : "Pašto dėžutės numeris", - "Postal code" : "Pašto kodas", - "City" : "Miestas", - "State or province" : "Rajonas", - "Country" : "Valstybė", - "Address" : "Adresas", - "(new group)" : "(nauja grupė)", - "Last name" : "Pavardė", - "First name" : "Vardas", - "Additional names" : "Kiti vardai", - "Prefix" : "Kreipiniai", - "Suffix" : "Patikslinimai", - "Importing into" : "Importuojama į", - "New contact" : "Naujas adresatas", - "Not grouped" : "Negrupuoti", - "Sort by" : "Rikiuoti pagal", - "There is no address book available to create a contact." : "Kontakto kūrimui nėra prieinama jokia adresų knyga.", - "{addressbook} shared by {owner}" : "{owner} pradėjo bendrinti {addressbook}", - "Contact not found." : "Kontaktinis asmuo nerastas.", - "You don't have permission to write to this addressbook." : "Jūs neturite leidimo rašyti į šią adresų knygelę.", - "Contact could not be created." : "Nepavyko sukurti adresato.", - "No contacts in file. Only vCard files are allowed." : "Byloje nėra adresatų duomenų. Tik vCard tipo bylos palaikomos.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Palaikomos vCard 4.0 versija (RFC6350) ir vCard 3.0 versija (RFC2426).", - "Contact could not be moved." : "Nepavyko perkelti kontakto.", - "Contact could not be saved." : "Nepavyko įrašyti adresato.", - "Waiting for the server to be ready…" : "Laukiama kol serveris bus pasiruošęs...", - "Importing…" : "Importuojama...", - "Display name" : "Rodomas vardas", - "Nickname" : "Slapyvardis", - "Detailed name" : "Pilnas vardas", - "Notes" : "Apie", - "Website" : "Svetainė", - "Federated Cloud ID" : "Centralizuoto Serverio ID", - "Home" : "Namų", - "Work" : "Darbo", - "Other" : "Neapibrėžtas", - "Groups" : "Grupės", - "Birthday" : "Gimimo data", - "Anniversary" : "Santuokos data", - "Date of death" : "Mirties data", - "Email" : "Elektroninio pašto adresas", - "Instant messaging" : "Momentinių pranešimų paskyra", - "Phone" : "Telefono numeris", - "Mobile" : "Mobilusis", - "Work mobile" : "Darbo mobilusis", - "Fax" : "Telefakso", - "Fax home" : "Namų telefakso", - "Fax work" : "Darbinio telefakso", - "Pager" : "Pranešimų gaviklio", - "Voice" : "Balso pašto", - "Car" : "Automobilis", - "Work pager" : "Darbo pranešimų gaviklis", - "Social network" : "Socialinio tinklo paskyra", - "Relationship" : "Ryšiai", - "Spouse" : "Sutuoktinis", - "Child" : "Vaikas", - "Mother" : "Mama", - "Father" : "Tėtis", - "Parent" : "Tėvai", - "Brother" : "Brolis", - "Sister" : "Sesuo", - "Relative" : "Giminaičiai", - "Friend" : "Draugas", - "Colleague" : "Bendradarbiai", - "Manager" : "Vadovas", - "Assistant" : "Asistentas", - "Co-worker" : "Bendradarbis", - "Gender" : "Lytis", - "Female" : "Moteris", - "Male" : "Vyras", - "Details" : "Išsamesnė informacija", - "Settings" : "Nustatymai" -},"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);" -} \ No newline at end of file diff --git a/l10n/lv.js b/l10n/lv.js deleted file mode 100644 index adabc694..00000000 --- a/l10n/lv.js +++ /dev/null @@ -1,62 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontakti", - "Download" : "Lejupielādēt", - "Delete" : "Dzēst", - "Rename" : "Pārsaukt", - "Share with users or groups" : "Koplietot ar lietotājiem vai grupām", - "can edit" : "var rediģēt", - "Address book name" : "Adrešu grāmatas nosaukums", - "The selected image is too big (max 1MB)" : "Izvēlētais attēls ir pārāk liels. (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Šī karte ir bojāta un nav noteikta. Lūdzu, pārbaudiet datus, iesakām izmaiņas saglabātu pastāvīgi.", - "No contacts in here" : "Šeit nav kontaktpersonu", - "Name" : "Nosaukums", - "Organization" : "Organizācija", - "Title" : "Nosaukums", - "Save changes" : "Saglabāt izmaiņas", - "No search result for {query}" : "Nav meklēšanas rezultātu {query}", - "All contacts" : "Visi kontakti", - "Post office box" : "Pasta kastīte", - "Postal code" : "Pasta kods", - "City" : "Pilsēta", - "State or province" : "Štats vai apgabals", - "Country" : "Valsts", - "Address" : "Adrese", - "(new group)" : "(jauna grupa)", - "Last name" : "Uzvārds", - "First name" : "Vārds", - "Additional names" : "Papildu vārdi", - "Prefix" : "Priedēklis", - "Suffix" : "Piedēklis", - "New contact" : "Jauns kontakts", - "Not grouped" : "Negrupēts", - "Sort by" : "Kārtot pēc", - "{addressbook} shared by {owner}" : "{addressbook} koplietots {owner}", - "Contact could not be created." : "Kontaktpersonu nevar izveidot.", - "Display name" : "Ekrāna vārds", - "Nickname" : "Iesauka", - "Detailed name" : "Izvērsts nosaukums", - "Notes" : "Piezīmes", - "Website" : "Mājaslapa", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Mājas", - "Work" : "Darbs", - "Other" : "Cits", - "Groups" : "Grupas", - "Birthday" : "Dzimšanas diena", - "Anniversary" : "Gadadiena", - "Date of death" : "Miršanas datums", - "Email" : "E-pasts", - "Instant messaging" : "Tūlītējā ziņojumapmaiņa", - "Phone" : "Tālrunis", - "Mobile" : "Mobilais", - "Fax" : "Fakss", - "Fax home" : "Fax mājās", - "Fax work" : "Fax darbā", - "Pager" : "Peidžeris", - "Voice" : "Balss", - "Social network" : "Sociālais tīkls", - "Settings" : "Iestatījumi" -}, -"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); diff --git a/l10n/lv.json b/l10n/lv.json deleted file mode 100644 index 47e824dc..00000000 --- a/l10n/lv.json +++ /dev/null @@ -1,60 +0,0 @@ -{ "translations": { - "Contacts" : "Kontakti", - "Download" : "Lejupielādēt", - "Delete" : "Dzēst", - "Rename" : "Pārsaukt", - "Share with users or groups" : "Koplietot ar lietotājiem vai grupām", - "can edit" : "var rediģēt", - "Address book name" : "Adrešu grāmatas nosaukums", - "The selected image is too big (max 1MB)" : "Izvēlētais attēls ir pārāk liels. (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Šī karte ir bojāta un nav noteikta. Lūdzu, pārbaudiet datus, iesakām izmaiņas saglabātu pastāvīgi.", - "No contacts in here" : "Šeit nav kontaktpersonu", - "Name" : "Nosaukums", - "Organization" : "Organizācija", - "Title" : "Nosaukums", - "Save changes" : "Saglabāt izmaiņas", - "No search result for {query}" : "Nav meklēšanas rezultātu {query}", - "All contacts" : "Visi kontakti", - "Post office box" : "Pasta kastīte", - "Postal code" : "Pasta kods", - "City" : "Pilsēta", - "State or province" : "Štats vai apgabals", - "Country" : "Valsts", - "Address" : "Adrese", - "(new group)" : "(jauna grupa)", - "Last name" : "Uzvārds", - "First name" : "Vārds", - "Additional names" : "Papildu vārdi", - "Prefix" : "Priedēklis", - "Suffix" : "Piedēklis", - "New contact" : "Jauns kontakts", - "Not grouped" : "Negrupēts", - "Sort by" : "Kārtot pēc", - "{addressbook} shared by {owner}" : "{addressbook} koplietots {owner}", - "Contact could not be created." : "Kontaktpersonu nevar izveidot.", - "Display name" : "Ekrāna vārds", - "Nickname" : "Iesauka", - "Detailed name" : "Izvērsts nosaukums", - "Notes" : "Piezīmes", - "Website" : "Mājaslapa", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Mājas", - "Work" : "Darbs", - "Other" : "Cits", - "Groups" : "Grupas", - "Birthday" : "Dzimšanas diena", - "Anniversary" : "Gadadiena", - "Date of death" : "Miršanas datums", - "Email" : "E-pasts", - "Instant messaging" : "Tūlītējā ziņojumapmaiņa", - "Phone" : "Tālrunis", - "Mobile" : "Mobilais", - "Fax" : "Fakss", - "Fax home" : "Fax mājās", - "Fax work" : "Fax darbā", - "Pager" : "Peidžeris", - "Voice" : "Balss", - "Social network" : "Sociālais tīkls", - "Settings" : "Iestatījumi" -},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" -} \ No newline at end of file diff --git a/l10n/mk.js b/l10n/mk.js deleted file mode 100644 index 04954e75..00000000 --- a/l10n/mk.js +++ /dev/null @@ -1,44 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Контакти", - "Address book name" : "Име на адресната книга", - "No contacts in here" : "Тука нема контакти", - "Name" : "Име", - "Organization" : "Организација", - "Title" : "Наслов", - "No search result for {query}" : "Нема резултати од пребарувањето за {query}", - "All contacts" : "Сите контакти", - "Postal code" : "Поштенски број", - "City" : "Град", - "State or province" : "Град или провинција", - "Country" : "Држава", - "Address" : "Адреса", - "(new group)" : "(нова група)", - "Last name" : "Презиме", - "First name" : "Име", - "Additional names" : "Дополнителни имиња", - "New contact" : "Нов контакт", - "Not grouped" : "Не групирани", - "{addressbook} shared by {owner}" : "{addressbook} споделено од {owner}", - "Nickname" : "Прекар", - "Notes" : "Белешки", - "Website" : "Веб сајт", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Дома", - "Work" : "Работа", - "Other" : "Останато", - "Groups" : "Групи", - "Birthday" : "Роденден", - "Email" : "Е-пошта", - "Instant messaging" : "Инстантни пораки", - "Phone" : "Телефон", - "Mobile" : "Мобилен", - "Fax" : "Факс", - "Fax home" : "Fax дома", - "Fax work" : "Fax на работа", - "Pager" : "Пејџер", - "Voice" : "Глас", - "Settings" : "Подесувања" -}, -"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); diff --git a/l10n/mk.json b/l10n/mk.json deleted file mode 100644 index 70053f60..00000000 --- a/l10n/mk.json +++ /dev/null @@ -1,42 +0,0 @@ -{ "translations": { - "Contacts" : "Контакти", - "Address book name" : "Име на адресната книга", - "No contacts in here" : "Тука нема контакти", - "Name" : "Име", - "Organization" : "Организација", - "Title" : "Наслов", - "No search result for {query}" : "Нема резултати од пребарувањето за {query}", - "All contacts" : "Сите контакти", - "Postal code" : "Поштенски број", - "City" : "Град", - "State or province" : "Град или провинција", - "Country" : "Држава", - "Address" : "Адреса", - "(new group)" : "(нова група)", - "Last name" : "Презиме", - "First name" : "Име", - "Additional names" : "Дополнителни имиња", - "New contact" : "Нов контакт", - "Not grouped" : "Не групирани", - "{addressbook} shared by {owner}" : "{addressbook} споделено од {owner}", - "Nickname" : "Прекар", - "Notes" : "Белешки", - "Website" : "Веб сајт", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Дома", - "Work" : "Работа", - "Other" : "Останато", - "Groups" : "Групи", - "Birthday" : "Роденден", - "Email" : "Е-пошта", - "Instant messaging" : "Инстантни пораки", - "Phone" : "Телефон", - "Mobile" : "Мобилен", - "Fax" : "Факс", - "Fax home" : "Fax дома", - "Fax work" : "Fax на работа", - "Pager" : "Пејџер", - "Voice" : "Глас", - "Settings" : "Подесувања" -},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" -} \ No newline at end of file diff --git a/l10n/mn.js b/l10n/mn.js deleted file mode 100644 index 9c02c61d..00000000 --- a/l10n/mn.js +++ /dev/null @@ -1,60 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Харилцагчид", - "Download" : "Татаж авах", - "Delete" : "Устгах", - "Rename" : "Нэр солих", - "Share with users or groups" : "Бусдад түгээх", - "can edit" : "засаж чадна", - "Close" : "Хаах", - "Copied!" : "Хуулав!", - "Not supported!" : "Дэмжигдэхгүй", - "Press ⌘-C to copy." : "Хуулахын тулд ⌘-C дарна уу.", - "Press Ctrl-C to copy." : "Хуулахын тулд Ctrl-C дарна уу.", - "Address book name" : "Хаягийн дэвтрийн нэр", - "The selected image is too big (max 1MB)" : "Сонгосон зурагийн хэмжээ хэтэрхий том байна (хамгийн ихдээ 1MB)", - "No contacts in here" : "Энд харилцагчид байхгүй байна", - "Name" : "Нэр", - "Organization" : "Байгууллага", - "Title" : "Цол/Албан тушаал", - "Save changes" : "Өөрчлөлтийг хадгалах", - "No search result for {query}" : "Хайлтын үр дүн хоосон: {query}", - "All contacts" : "Бүх харилцагчид", - "Post office box" : "Шуудангийн хайрцаг", - "Postal code" : "Шуудангийн код", - "City" : "Хот", - "State or province" : "Аймаг", - "Country" : "Улс", - "Address" : "Хаяг", - "(new group)" : "(шинэ баг)", - "Last name" : "Овог", - "First name" : "Нэр", - "Additional names" : "Нэмэлт нэрүүд", - "New contact" : "Шинэ харилцагч", - "Not grouped" : "Багт ороогүй", - "Sort by" : "Эрэмбэлэх", - "{addressbook} shared by {owner}" : "{owner} дараахь хаягийн дэвтрийг түгээв: {addressbook} ", - "Contact could not be created." : "Харилцагчийг үүсгэж чадсангүй.", - "Display name" : "Харагдах нэр", - "Nickname" : "Товч нэр", - "Detailed name" : "Дэлгэрэнгүй нэр", - "Notes" : "Тэмдэглэл", - "Website" : "Цахим хуудас", - "Home" : "Гэр", - "Work" : "Ажил", - "Other" : "Бусад", - "Groups" : "Багууд", - "Birthday" : "Төрсөн өдөр", - "Date of death" : "Нас барсан огноо", - "Email" : "Цахим шуудан", - "Phone" : "Утас", - "Mobile" : "Гар утас", - "Fax" : "Факс", - "Fax home" : "Гэрийн факс", - "Fax work" : "Ажлын факс", - "Social network" : "Олон нийтийн сүлжээ", - "Details" : "Дэлгэрэнгүй", - "Settings" : "Тохиргоо" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/mn.json b/l10n/mn.json deleted file mode 100644 index 3f6ae624..00000000 --- a/l10n/mn.json +++ /dev/null @@ -1,58 +0,0 @@ -{ "translations": { - "Contacts" : "Харилцагчид", - "Download" : "Татаж авах", - "Delete" : "Устгах", - "Rename" : "Нэр солих", - "Share with users or groups" : "Бусдад түгээх", - "can edit" : "засаж чадна", - "Close" : "Хаах", - "Copied!" : "Хуулав!", - "Not supported!" : "Дэмжигдэхгүй", - "Press ⌘-C to copy." : "Хуулахын тулд ⌘-C дарна уу.", - "Press Ctrl-C to copy." : "Хуулахын тулд Ctrl-C дарна уу.", - "Address book name" : "Хаягийн дэвтрийн нэр", - "The selected image is too big (max 1MB)" : "Сонгосон зурагийн хэмжээ хэтэрхий том байна (хамгийн ихдээ 1MB)", - "No contacts in here" : "Энд харилцагчид байхгүй байна", - "Name" : "Нэр", - "Organization" : "Байгууллага", - "Title" : "Цол/Албан тушаал", - "Save changes" : "Өөрчлөлтийг хадгалах", - "No search result for {query}" : "Хайлтын үр дүн хоосон: {query}", - "All contacts" : "Бүх харилцагчид", - "Post office box" : "Шуудангийн хайрцаг", - "Postal code" : "Шуудангийн код", - "City" : "Хот", - "State or province" : "Аймаг", - "Country" : "Улс", - "Address" : "Хаяг", - "(new group)" : "(шинэ баг)", - "Last name" : "Овог", - "First name" : "Нэр", - "Additional names" : "Нэмэлт нэрүүд", - "New contact" : "Шинэ харилцагч", - "Not grouped" : "Багт ороогүй", - "Sort by" : "Эрэмбэлэх", - "{addressbook} shared by {owner}" : "{owner} дараахь хаягийн дэвтрийг түгээв: {addressbook} ", - "Contact could not be created." : "Харилцагчийг үүсгэж чадсангүй.", - "Display name" : "Харагдах нэр", - "Nickname" : "Товч нэр", - "Detailed name" : "Дэлгэрэнгүй нэр", - "Notes" : "Тэмдэглэл", - "Website" : "Цахим хуудас", - "Home" : "Гэр", - "Work" : "Ажил", - "Other" : "Бусад", - "Groups" : "Багууд", - "Birthday" : "Төрсөн өдөр", - "Date of death" : "Нас барсан огноо", - "Email" : "Цахим шуудан", - "Phone" : "Утас", - "Mobile" : "Гар утас", - "Fax" : "Факс", - "Fax home" : "Гэрийн факс", - "Fax work" : "Ажлын факс", - "Social network" : "Олон нийтийн сүлжээ", - "Details" : "Дэлгэрэнгүй", - "Settings" : "Тохиргоо" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/nb.js b/l10n/nb.js deleted file mode 100644 index 5d8311ab..00000000 --- a/l10n/nb.js +++ /dev/null @@ -1,111 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontakter", - "Download" : "Last ned", - "Copy link" : "Kopier lenke", - "Click to copy the link to your clipboard" : "Klikk for å kopiere nettadressen til din utklippstavle", - "Toggle sharing" : "Veksle deling", - "Delete" : "Slett", - "Rename" : "Gi nytt navn", - "Share with users or groups" : "Del med brukere eller grupper", - "can edit" : "kan redigere", - "Close" : "Lukk", - "Enabled" : "Aktiver", - "Disabled" : "Deaktiver", - "Copied!" : "Kopiert!", - "Not supported!" : "Ikke støttet!", - "Press ⌘-C to copy." : "Trykk ⌘-C for å kopiere", - "Press Ctrl-C to copy." : "Trykk Ctrl-C for å kopiere", - "Address book name" : "Navn på adressebok", - "Only these special characters are allowed: -_.!?#|()" : "Kun disse spesialtegnene er tillatt: -_.!?#|()", - "Address book could not be created." : "Kunne ikke opprette adressebok.", - "The selected image is too big (max 1MB)" : "Det valgte bildet er for stort (maks 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Dette kortet var ødelagt, men er nå fikset. Sjekk at datene og hendelsen stemmer for å gjøre endringene permanente.", - "No contacts in here" : "Ingen kontakter her", - "Name" : "Navn", - "Organization" : "Organisasjon", - "Title" : "Tittel", - "Add field …" : "Legg til felt…", - "Save changes" : "Lagre endringer", - "Address book" : "Adressebok", - "Loading contacts …" : "Laster inn kontakter…", - "Import into" : "Importer inn i", - "Importing..." : "Importerer …", - "Select your addressbook" : "Velg din adressebok", - "Import is disabled because no writable address book had been found." : "Import er deaktivert siden det ikke finnes noe adressebøker som er skrivbare", - "No search result for {query}" : "Intet søkeresultat for {query}", - "All contacts" : "Alle kontakter", - "Post office box" : "Postboks", - "Postal code" : "Postnummer", - "City" : "By", - "State or province" : "Stat eller fylke", - "Country" : "Land", - "Address" : "Adresse", - "(new group)" : "(ny gruppe)", - "Last name" : "Etternavn", - "First name" : "Fornavn", - "Additional names" : "Ev. mellomnavn", - "Prefix" : "Prefiks", - "Suffix" : "Suffiks", - "Importing into" : "Importerer til", - "New contact" : "Ny kontakt", - "Not grouped" : "Ikke gruppert", - "Sort by" : "Sorter etter", - "There is no address book available to create a contact." : "Det finnes ingen adressebok å legge til kontakt i.", - "{addressbook} shared by {owner}" : "{addressbook} delt av {owner}", - "Contact not found." : "Fant ikke kontakten.", - "You don't have permission to write to this addressbook." : "Du har ikke skrivetilgang til denne adresseboka.", - "Contact could not be created." : "Kontakten kunne ikke opprettes", - "No contacts in file. Only vCard files are allowed." : "Ingen kontakter i filen. Kun vCard filer er tillatt.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Kun vCard versjon 4.0 (RFC6350) eller versjon 3.0 (RFC2426) er støttet.", - "Contact could not be moved." : "Kontakten kunne ikke flyttes.", - "Contact could not be saved." : "Kontakten kunne ikke lagres.", - "Waiting for the server to be ready…" : "Venter på at tjeneres skal bli klar…", - "Importing…" : "Importerer…", - "Display name" : "Visningsnavn", - "Nickname" : "Kallenavn", - "Detailed name" : "Detaljert navn", - "Notes" : "Notater", - "Website" : "Nettsted", - "Federated Cloud ID" : "ID for sammenknyttet sky", - "Home" : "Hjem", - "Work" : "Jobb", - "Other" : "Annet", - "Groups" : "Grupper", - "Birthday" : "Bursdag", - "Anniversary" : "Jubileum", - "Date of death" : "Dødsdato", - "Email" : "E-post", - "Instant messaging" : "Direktemeldinger", - "Phone" : "Telefon", - "Mobile" : "Mobil", - "Work mobile" : "Arbeidstelefon", - "Fax" : "Faks", - "Fax home" : "Faks hjemme", - "Fax work" : "Faks jobb", - "Pager" : "Pager", - "Voice" : "Svarer", - "Car" : "Bil", - "Work pager" : "Arbeidspersonsøker", - "Social network" : "Sosialt nettverk", - "Relationship" : "Forhold", - "Spouse" : "Ektefelle", - "Child" : "Barn", - "Mother" : "Mor", - "Father" : "Far", - "Parent" : "Forelder", - "Brother" : "Bror", - "Sister" : "Søster", - "Relative" : "Slektning", - "Friend" : "Venn", - "Colleague" : "Kollega", - "Manager" : "Sjef", - "Assistant" : "Assistent", - "Gender" : "Kjønn", - "Female" : "Mann", - "Male" : "Dame", - "Details" : "Detaljer", - "Settings" : "Innstillinger" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/nb.json b/l10n/nb.json deleted file mode 100644 index 5863c8a7..00000000 --- a/l10n/nb.json +++ /dev/null @@ -1,109 +0,0 @@ -{ "translations": { - "Contacts" : "Kontakter", - "Download" : "Last ned", - "Copy link" : "Kopier lenke", - "Click to copy the link to your clipboard" : "Klikk for å kopiere nettadressen til din utklippstavle", - "Toggle sharing" : "Veksle deling", - "Delete" : "Slett", - "Rename" : "Gi nytt navn", - "Share with users or groups" : "Del med brukere eller grupper", - "can edit" : "kan redigere", - "Close" : "Lukk", - "Enabled" : "Aktiver", - "Disabled" : "Deaktiver", - "Copied!" : "Kopiert!", - "Not supported!" : "Ikke støttet!", - "Press ⌘-C to copy." : "Trykk ⌘-C for å kopiere", - "Press Ctrl-C to copy." : "Trykk Ctrl-C for å kopiere", - "Address book name" : "Navn på adressebok", - "Only these special characters are allowed: -_.!?#|()" : "Kun disse spesialtegnene er tillatt: -_.!?#|()", - "Address book could not be created." : "Kunne ikke opprette adressebok.", - "The selected image is too big (max 1MB)" : "Det valgte bildet er for stort (maks 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Dette kortet var ødelagt, men er nå fikset. Sjekk at datene og hendelsen stemmer for å gjøre endringene permanente.", - "No contacts in here" : "Ingen kontakter her", - "Name" : "Navn", - "Organization" : "Organisasjon", - "Title" : "Tittel", - "Add field …" : "Legg til felt…", - "Save changes" : "Lagre endringer", - "Address book" : "Adressebok", - "Loading contacts …" : "Laster inn kontakter…", - "Import into" : "Importer inn i", - "Importing..." : "Importerer …", - "Select your addressbook" : "Velg din adressebok", - "Import is disabled because no writable address book had been found." : "Import er deaktivert siden det ikke finnes noe adressebøker som er skrivbare", - "No search result for {query}" : "Intet søkeresultat for {query}", - "All contacts" : "Alle kontakter", - "Post office box" : "Postboks", - "Postal code" : "Postnummer", - "City" : "By", - "State or province" : "Stat eller fylke", - "Country" : "Land", - "Address" : "Adresse", - "(new group)" : "(ny gruppe)", - "Last name" : "Etternavn", - "First name" : "Fornavn", - "Additional names" : "Ev. mellomnavn", - "Prefix" : "Prefiks", - "Suffix" : "Suffiks", - "Importing into" : "Importerer til", - "New contact" : "Ny kontakt", - "Not grouped" : "Ikke gruppert", - "Sort by" : "Sorter etter", - "There is no address book available to create a contact." : "Det finnes ingen adressebok å legge til kontakt i.", - "{addressbook} shared by {owner}" : "{addressbook} delt av {owner}", - "Contact not found." : "Fant ikke kontakten.", - "You don't have permission to write to this addressbook." : "Du har ikke skrivetilgang til denne adresseboka.", - "Contact could not be created." : "Kontakten kunne ikke opprettes", - "No contacts in file. Only vCard files are allowed." : "Ingen kontakter i filen. Kun vCard filer er tillatt.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Kun vCard versjon 4.0 (RFC6350) eller versjon 3.0 (RFC2426) er støttet.", - "Contact could not be moved." : "Kontakten kunne ikke flyttes.", - "Contact could not be saved." : "Kontakten kunne ikke lagres.", - "Waiting for the server to be ready…" : "Venter på at tjeneres skal bli klar…", - "Importing…" : "Importerer…", - "Display name" : "Visningsnavn", - "Nickname" : "Kallenavn", - "Detailed name" : "Detaljert navn", - "Notes" : "Notater", - "Website" : "Nettsted", - "Federated Cloud ID" : "ID for sammenknyttet sky", - "Home" : "Hjem", - "Work" : "Jobb", - "Other" : "Annet", - "Groups" : "Grupper", - "Birthday" : "Bursdag", - "Anniversary" : "Jubileum", - "Date of death" : "Dødsdato", - "Email" : "E-post", - "Instant messaging" : "Direktemeldinger", - "Phone" : "Telefon", - "Mobile" : "Mobil", - "Work mobile" : "Arbeidstelefon", - "Fax" : "Faks", - "Fax home" : "Faks hjemme", - "Fax work" : "Faks jobb", - "Pager" : "Pager", - "Voice" : "Svarer", - "Car" : "Bil", - "Work pager" : "Arbeidspersonsøker", - "Social network" : "Sosialt nettverk", - "Relationship" : "Forhold", - "Spouse" : "Ektefelle", - "Child" : "Barn", - "Mother" : "Mor", - "Father" : "Far", - "Parent" : "Forelder", - "Brother" : "Bror", - "Sister" : "Søster", - "Relative" : "Slektning", - "Friend" : "Venn", - "Colleague" : "Kollega", - "Manager" : "Sjef", - "Assistant" : "Assistent", - "Gender" : "Kjønn", - "Female" : "Mann", - "Male" : "Dame", - "Details" : "Detaljer", - "Settings" : "Innstillinger" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/nl.js b/l10n/nl.js deleted file mode 100644 index db0c420a..00000000 --- a/l10n/nl.js +++ /dev/null @@ -1,119 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactpersonen", - "Download" : "Downloaden", - "Copy link" : "Link kopiëren", - "Click to copy the link to your clipboard" : "Klik om de link naar je klembord te kopiëren", - "Toggle sharing" : "Gedeelde omschakelen", - "Delete" : "Verwijderen", - "Rename" : "Hernoemen", - "Share with users or groups" : "Delen met gebruikers of groepen", - "can edit" : "kan bewerken", - "Close" : "Sluiten", - "Enabled" : "Ingeschakeld", - "Disabled" : "Uitgeschakeld", - "Copied!" : "Gekopieerd!", - "Not supported!" : "Niet ondersteund!", - "Press ⌘-C to copy." : "Druk op ⌘-C om te kopiëren.", - "Press Ctrl-C to copy." : "Druk op Ctrl-C om te kopiëren.", - "Address book name" : "Adresboek naam", - "Only these special characters are allowed: -_.!?#|()" : "Alleen de volgende speciale tekens zijn toegestaan: - _ . ! ? # | ( )", - "Address book could not be created." : "Adresboek kon niet gemaakt worden", - "Upload new image" : "Nieuwe afbeelding uploaden", - "The selected image is too big (max 1MB)" : "De geselecteerde afbeelding is te groot (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Deze kaart is corrupt en weer hersteld. Controleer de gegevens en start het opslaan ervan om de wijzigingen permanent te maken.", - "No contacts in here" : "Hier geen contactpersonen gevonden", - "Name" : "Naam", - "Organization" : "Organisatie", - "Title" : "Titel", - "Add field …" : "Veld toevoegen ...", - "Save changes" : "Wijzigingen bewaren", - "Address book" : "Adresboek", - "Loading contacts …" : "Contacten laden ...", - "Import into" : "Importeer in", - "Importing..." : "Importeren...", - "Select your addressbook" : "Selecteer je adresboek", - "Import is disabled because no writable address book had been found." : "Import is uitgeschakeld omdat er geen beschrijfbaar adresboek is gevonden.", - "No search result for {query}" : "Geen zoekresultaten voor {query}", - "All contacts" : "Alle contactpersonen", - "Post office box" : "Postbus", - "Postal code" : "Postcode", - "City" : "Stad", - "State or province" : "Staat of provincie", - "Country" : "Land", - "Address" : "Adres", - "(new group)" : "(nieuwe groep)", - "Last name" : "Achternaam", - "First name" : "Voornaam", - "Additional names" : "Extra namen", - "Prefix" : "Voorvoegsel", - "Suffix" : "Achtervoegsel", - "Importing into" : "Importeren in", - "New contact" : "Nieuwe contactpersoon", - "Not grouped" : "Niet gegroepeerd", - "Sort by" : "Sorteer op", - "There is no address book available to create a contact." : "Er is geen adresboek aanwezig om contactpersonen in op te slaan.", - "{addressbook} shared by {owner}" : "{addressbook} gedeeld door {owner}", - "Contact not found." : "Contact niet gevonden.", - "You don't have permission to write to this addressbook." : "Je hebt geen rechten om wijzigen aan te brengen op dit adresboek.", - "Contact could not be created." : "Contact kon niet worden aangemaakt.", - "No contacts in file. Only vCard files are allowed." : "Geen contacten in bestand. Alleen VCard bestanden zijn toegestaan.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Alleen VCard versie 4.0 (RFC6350) of versie 3.0 (RFC2426) worden ondersteund.", - "Contact could not be moved." : "Contactpersoon kon niet verplaatst worden.", - "Contact could not be saved." : "Contact kon niet worden opgeslagen.", - "Waiting for the server to be ready…" : "Wachten tot de server gereed is...", - "Importing…" : "Importeren...", - "Display name" : "Weergavenaam", - "Nickname" : "Roepnaam", - "Detailed name" : "Gedetailleerde naam", - "Notes" : "Notities", - "Website" : "Website", - "Federated Cloud ID" : "Gefedereerde Cloud ID", - "Home" : "Thuis", - "Work" : "Werk", - "Other" : "Overig", - "Groups" : "Groepen", - "Birthday" : "Verjaardag", - "Anniversary" : "Jubileum", - "Date of death" : "Sterfdatum", - "Email" : "Email", - "Instant messaging" : "Instant messaging", - "Phone" : "Telefoon", - "Mobile" : "Mobiel", - "Work mobile" : "Werk mobiel", - "Fax" : "Fax", - "Fax home" : "Fax thuis", - "Fax work" : "Fax werk", - "Pager" : "Pieper", - "Voice" : "Stem", - "Car" : "Auto", - "Work pager" : "Werk pieper", - "Social network" : "Social network", - "Relationship" : "Relatie", - "Specify a relationship between you and the entity represented by this vCard." : "Specificeer een relatie tussen jou en de entiteit in deze vCard.", - "Spouse" : "Echtgenoot", - "Child" : "kind", - "Mother" : "Moeder", - "Father" : "Vader", - "Parent" : "Ouder", - "Brother" : "Broer", - "Sister" : "Zus", - "Relative" : "Familielid", - "Friend" : "Vriend", - "Colleague" : "Collega", - "Manager" : "Manager", - "Assistant" : "Assistent", - "Related" : "Gerelateerd", - "Specify a relationship between another entity and the entity represented by this vCard." : "Specificeer een relatie tussen de entiteit in deze vCard en een andere entiteit.", - "Contact" : "Contactpersonen", - "Agent" : "Agent", - "Emergency" : "Nood", - "Co-worker" : "Medewerker", - "Gender" : "Geslacht", - "Female" : "Vrouw", - "Male" : "Man", - "Details" : "Details", - "Settings" : "Instellingen" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/nl.json b/l10n/nl.json deleted file mode 100644 index 7cda6f20..00000000 --- a/l10n/nl.json +++ /dev/null @@ -1,117 +0,0 @@ -{ "translations": { - "Contacts" : "Contactpersonen", - "Download" : "Downloaden", - "Copy link" : "Link kopiëren", - "Click to copy the link to your clipboard" : "Klik om de link naar je klembord te kopiëren", - "Toggle sharing" : "Gedeelde omschakelen", - "Delete" : "Verwijderen", - "Rename" : "Hernoemen", - "Share with users or groups" : "Delen met gebruikers of groepen", - "can edit" : "kan bewerken", - "Close" : "Sluiten", - "Enabled" : "Ingeschakeld", - "Disabled" : "Uitgeschakeld", - "Copied!" : "Gekopieerd!", - "Not supported!" : "Niet ondersteund!", - "Press ⌘-C to copy." : "Druk op ⌘-C om te kopiëren.", - "Press Ctrl-C to copy." : "Druk op Ctrl-C om te kopiëren.", - "Address book name" : "Adresboek naam", - "Only these special characters are allowed: -_.!?#|()" : "Alleen de volgende speciale tekens zijn toegestaan: - _ . ! ? # | ( )", - "Address book could not be created." : "Adresboek kon niet gemaakt worden", - "Upload new image" : "Nieuwe afbeelding uploaden", - "The selected image is too big (max 1MB)" : "De geselecteerde afbeelding is te groot (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Deze kaart is corrupt en weer hersteld. Controleer de gegevens en start het opslaan ervan om de wijzigingen permanent te maken.", - "No contacts in here" : "Hier geen contactpersonen gevonden", - "Name" : "Naam", - "Organization" : "Organisatie", - "Title" : "Titel", - "Add field …" : "Veld toevoegen ...", - "Save changes" : "Wijzigingen bewaren", - "Address book" : "Adresboek", - "Loading contacts …" : "Contacten laden ...", - "Import into" : "Importeer in", - "Importing..." : "Importeren...", - "Select your addressbook" : "Selecteer je adresboek", - "Import is disabled because no writable address book had been found." : "Import is uitgeschakeld omdat er geen beschrijfbaar adresboek is gevonden.", - "No search result for {query}" : "Geen zoekresultaten voor {query}", - "All contacts" : "Alle contactpersonen", - "Post office box" : "Postbus", - "Postal code" : "Postcode", - "City" : "Stad", - "State or province" : "Staat of provincie", - "Country" : "Land", - "Address" : "Adres", - "(new group)" : "(nieuwe groep)", - "Last name" : "Achternaam", - "First name" : "Voornaam", - "Additional names" : "Extra namen", - "Prefix" : "Voorvoegsel", - "Suffix" : "Achtervoegsel", - "Importing into" : "Importeren in", - "New contact" : "Nieuwe contactpersoon", - "Not grouped" : "Niet gegroepeerd", - "Sort by" : "Sorteer op", - "There is no address book available to create a contact." : "Er is geen adresboek aanwezig om contactpersonen in op te slaan.", - "{addressbook} shared by {owner}" : "{addressbook} gedeeld door {owner}", - "Contact not found." : "Contact niet gevonden.", - "You don't have permission to write to this addressbook." : "Je hebt geen rechten om wijzigen aan te brengen op dit adresboek.", - "Contact could not be created." : "Contact kon niet worden aangemaakt.", - "No contacts in file. Only vCard files are allowed." : "Geen contacten in bestand. Alleen VCard bestanden zijn toegestaan.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Alleen VCard versie 4.0 (RFC6350) of versie 3.0 (RFC2426) worden ondersteund.", - "Contact could not be moved." : "Contactpersoon kon niet verplaatst worden.", - "Contact could not be saved." : "Contact kon niet worden opgeslagen.", - "Waiting for the server to be ready…" : "Wachten tot de server gereed is...", - "Importing…" : "Importeren...", - "Display name" : "Weergavenaam", - "Nickname" : "Roepnaam", - "Detailed name" : "Gedetailleerde naam", - "Notes" : "Notities", - "Website" : "Website", - "Federated Cloud ID" : "Gefedereerde Cloud ID", - "Home" : "Thuis", - "Work" : "Werk", - "Other" : "Overig", - "Groups" : "Groepen", - "Birthday" : "Verjaardag", - "Anniversary" : "Jubileum", - "Date of death" : "Sterfdatum", - "Email" : "Email", - "Instant messaging" : "Instant messaging", - "Phone" : "Telefoon", - "Mobile" : "Mobiel", - "Work mobile" : "Werk mobiel", - "Fax" : "Fax", - "Fax home" : "Fax thuis", - "Fax work" : "Fax werk", - "Pager" : "Pieper", - "Voice" : "Stem", - "Car" : "Auto", - "Work pager" : "Werk pieper", - "Social network" : "Social network", - "Relationship" : "Relatie", - "Specify a relationship between you and the entity represented by this vCard." : "Specificeer een relatie tussen jou en de entiteit in deze vCard.", - "Spouse" : "Echtgenoot", - "Child" : "kind", - "Mother" : "Moeder", - "Father" : "Vader", - "Parent" : "Ouder", - "Brother" : "Broer", - "Sister" : "Zus", - "Relative" : "Familielid", - "Friend" : "Vriend", - "Colleague" : "Collega", - "Manager" : "Manager", - "Assistant" : "Assistent", - "Related" : "Gerelateerd", - "Specify a relationship between another entity and the entity represented by this vCard." : "Specificeer een relatie tussen de entiteit in deze vCard en een andere entiteit.", - "Contact" : "Contactpersonen", - "Agent" : "Agent", - "Emergency" : "Nood", - "Co-worker" : "Medewerker", - "Gender" : "Geslacht", - "Female" : "Vrouw", - "Male" : "Man", - "Details" : "Details", - "Settings" : "Instellingen" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/no-php b/l10n/no-php deleted file mode 100644 index e69de29b..00000000 diff --git a/l10n/oc.js b/l10n/oc.js deleted file mode 100644 index c04997fd..00000000 --- a/l10n/oc.js +++ /dev/null @@ -1,38 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactes", - "Name" : "Nom", - "Organization" : "Societat", - "Title" : "Títol", - "All contacts" : "Totes los contactes", - "Postal code" : "Còde postal", - "City" : "Vila", - "State or province" : "Estat o region", - "Country" : "País", - "Address" : "Adreça", - "(new group)" : "(grop novèl)", - "Last name" : "Nom", - "First name" : "Prenom", - "Additional names" : "Noms suplementaris", - "New contact" : "Contacte novèl", - "Not grouped" : "Pas gropats", - "Nickname" : "Escais", - "Notes" : "Nòtas", - "Website" : "Site web", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Domicili", - "Work" : "Professional(a)", - "Other" : "Autre", - "Groups" : "Gropes", - "Birthday" : "Anniversari", - "Email" : "Adreça corrièl", - "Instant messaging" : "Messatjariá instantanèa", - "Phone" : "Telefòn", - "Mobile" : "Mobil", - "Fax" : "Fax", - "Pager" : "Messatgièr", - "Voice" : "Votz", - "Settings" : "Paramètres" -}, -"nplurals=2; plural=(n > 1);"); diff --git a/l10n/oc.json b/l10n/oc.json deleted file mode 100644 index b8dcda40..00000000 --- a/l10n/oc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ "translations": { - "Contacts" : "Contactes", - "Name" : "Nom", - "Organization" : "Societat", - "Title" : "Títol", - "All contacts" : "Totes los contactes", - "Postal code" : "Còde postal", - "City" : "Vila", - "State or province" : "Estat o region", - "Country" : "País", - "Address" : "Adreça", - "(new group)" : "(grop novèl)", - "Last name" : "Nom", - "First name" : "Prenom", - "Additional names" : "Noms suplementaris", - "New contact" : "Contacte novèl", - "Not grouped" : "Pas gropats", - "Nickname" : "Escais", - "Notes" : "Nòtas", - "Website" : "Site web", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Domicili", - "Work" : "Professional(a)", - "Other" : "Autre", - "Groups" : "Gropes", - "Birthday" : "Anniversari", - "Email" : "Adreça corrièl", - "Instant messaging" : "Messatjariá instantanèa", - "Phone" : "Telefòn", - "Mobile" : "Mobil", - "Fax" : "Fax", - "Pager" : "Messatgièr", - "Voice" : "Votz", - "Settings" : "Paramètres" -},"pluralForm" :"nplurals=2; plural=(n > 1);" -} \ No newline at end of file diff --git a/l10n/pl.js b/l10n/pl.js deleted file mode 100644 index 2e2adecc..00000000 --- a/l10n/pl.js +++ /dev/null @@ -1,119 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontakty", - "Download" : "Ściągnij", - "Copy link" : "Skopiuj link", - "Click to copy the link to your clipboard" : "Kliknij, aby skopiować link do schowka", - "Toggle sharing" : "Przełącz udostępnianie", - "Delete" : "Skasuj", - "Rename" : "Zmień nazwę", - "Share with users or groups" : "Udostępnij użytkownikom lub grupom", - "can edit" : "może edytować", - "Close" : "Zamknij", - "Enabled" : "Włączone", - "Disabled" : "Wyłączone", - "Copied!" : "Skopiowano!", - "Not supported!" : "Nie wspierane!", - "Press ⌘-C to copy." : "Aby skopiować wciśnij ⌘-C.", - "Press Ctrl-C to copy." : "Aby skopiować wciśnij Ctrl-C.", - "Address book name" : "Nazwa książki adresowej", - "Only these special characters are allowed: -_.!?#|()" : "Tylko te znaki specjalne są dozwolone: -_.!?#|()", - "Address book could not be created." : "Nie można utworzyć książki adresowej.", - "Upload new image" : "Wyślij nowe zdjęcie", - "The selected image is too big (max 1MB)" : "Wybrany plik jest zbyt duży (maks. 1 MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Karta kontaktu jest uszkodzona i musi być naprawiona. Sprawdź dane i zapisz, aby zmienić dane na stałe.", - "No contacts in here" : "Nie ma tu żadnych kontaktów", - "Name" : "Nazwa", - "Organization" : "Organizacja", - "Title" : "Tytuł", - "Add field …" : "Dodaj pole…", - "Save changes" : "Zapisz zmiany", - "Address book" : "Książka adresowa", - "Loading contacts …" : "Ładowanie kontaktów…", - "Import into" : "Importuj do", - "Importing..." : "Importowanie…", - "Select your addressbook" : "Wybierz książkę adresową", - "Import is disabled because no writable address book had been found." : "Import wyłączony, ponieważ nie znaleziono książki adresowej do zapisu.", - "No search result for {query}" : "Brak wyników wyszukiwania dla zapytania {query}", - "All contacts" : "Wszystkie kontakty", - "Post office box" : "Skrytka pocztowa", - "Postal code" : "Kod pocztowy", - "City" : "Miasto", - "State or province" : "Województwo ", - "Country" : "Kraj", - "Address" : "Adres", - "(new group)" : "(nowa grupa)", - "Last name" : "Nazwisko", - "First name" : "Imię", - "Additional names" : "Dodatkowe nazwy", - "Prefix" : "Przedrostek", - "Suffix" : "Przyrostek", - "Importing into" : "Importowanie do", - "New contact" : "Nowy kontakt", - "Not grouped" : "Nie zgrupowane", - "Sort by" : "Sortowanie po", - "There is no address book available to create a contact." : "Brak książki adresowej aby utworzyć kontakt.", - "{addressbook} shared by {owner}" : "Książka {addressbook} udostępniona przez {owner}", - "Contact not found." : "Nie znaleziono kontaktu.", - "You don't have permission to write to this addressbook." : "Nie masz uprawnień do zapisu dla tej książki adresowej.", - "Contact could not be created." : "Nie można utworzyć kontaktu", - "No contacts in file. Only vCard files are allowed." : "Nie znaleziono kontaktów w pliku. Dozwolone są tylko pliki vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Wspierane są tylko vCard w wersji 4.0 (RFC6350) lub 3.0 (RFC2426).", - "Contact could not be moved." : "Nie udało się przenieść kontaktu", - "Contact could not be saved." : "Nie udało się zapisać kontaktu.", - "Waiting for the server to be ready…" : "Czekam, aż serwer będzie gotowy…", - "Importing…" : "Importowanie…", - "Display name" : "Wyświetlana nazwa", - "Nickname" : "Pseudonim", - "Detailed name" : "Szczegółowa nazwa", - "Notes" : "Notatki", - "Website" : "Strona WWW", - "Federated Cloud ID" : "ID Chmury Stowarzyszonej", - "Home" : "Dom", - "Work" : "Praca", - "Other" : "Inne", - "Groups" : "Grupy", - "Birthday" : "Urodziny", - "Anniversary" : "Rocznica", - "Date of death" : "Data śmierci", - "Email" : "E-mail", - "Instant messaging" : "Wiadomości błyskawiczne", - "Phone" : "Telefon", - "Mobile" : "Komórka", - "Work mobile" : "Numer służbowy", - "Fax" : "Faks", - "Fax home" : "Faks domowy", - "Fax work" : "Faks w pracy", - "Pager" : "Pager", - "Voice" : "Połączenie głosowe", - "Car" : "Samochód", - "Work pager" : "Pager służbowy", - "Social network" : "Sieć społecznościowa", - "Relationship" : "Relacja", - "Specify a relationship between you and the entity represented by this vCard." : "Wskaż relacje między Tobą a osobą reprezentowaną w tym vCard.", - "Spouse" : "Partner", - "Child" : "Dziecko", - "Mother" : "Matka", - "Father" : "Ojciec", - "Parent" : "Rodzic", - "Brother" : "Brat", - "Sister" : "Siostra", - "Relative" : "Pokrewieństwo", - "Friend" : "Przyjaciel", - "Colleague" : "Kolega/Koleżanka", - "Manager" : "Menadżer", - "Assistant" : "Asystent", - "Related" : "Powiązany", - "Specify a relationship between another entity and the entity represented by this vCard." : "Wskaż relacje między inną osobą a osobą reprezentowaną w tym vCard.", - "Contact" : "Kontakt", - "Agent" : "Agent", - "Emergency" : "Nagła pomoc", - "Co-worker" : "Współpracownik", - "Gender" : "Płeć", - "Female" : "Kobieta", - "Male" : "Mężczyzna", - "Details" : "Szczegóły", - "Settings" : "Ustawienia" -}, -"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"); diff --git a/l10n/pl.json b/l10n/pl.json deleted file mode 100644 index aa89fba2..00000000 --- a/l10n/pl.json +++ /dev/null @@ -1,117 +0,0 @@ -{ "translations": { - "Contacts" : "Kontakty", - "Download" : "Ściągnij", - "Copy link" : "Skopiuj link", - "Click to copy the link to your clipboard" : "Kliknij, aby skopiować link do schowka", - "Toggle sharing" : "Przełącz udostępnianie", - "Delete" : "Skasuj", - "Rename" : "Zmień nazwę", - "Share with users or groups" : "Udostępnij użytkownikom lub grupom", - "can edit" : "może edytować", - "Close" : "Zamknij", - "Enabled" : "Włączone", - "Disabled" : "Wyłączone", - "Copied!" : "Skopiowano!", - "Not supported!" : "Nie wspierane!", - "Press ⌘-C to copy." : "Aby skopiować wciśnij ⌘-C.", - "Press Ctrl-C to copy." : "Aby skopiować wciśnij Ctrl-C.", - "Address book name" : "Nazwa książki adresowej", - "Only these special characters are allowed: -_.!?#|()" : "Tylko te znaki specjalne są dozwolone: -_.!?#|()", - "Address book could not be created." : "Nie można utworzyć książki adresowej.", - "Upload new image" : "Wyślij nowe zdjęcie", - "The selected image is too big (max 1MB)" : "Wybrany plik jest zbyt duży (maks. 1 MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Karta kontaktu jest uszkodzona i musi być naprawiona. Sprawdź dane i zapisz, aby zmienić dane na stałe.", - "No contacts in here" : "Nie ma tu żadnych kontaktów", - "Name" : "Nazwa", - "Organization" : "Organizacja", - "Title" : "Tytuł", - "Add field …" : "Dodaj pole…", - "Save changes" : "Zapisz zmiany", - "Address book" : "Książka adresowa", - "Loading contacts …" : "Ładowanie kontaktów…", - "Import into" : "Importuj do", - "Importing..." : "Importowanie…", - "Select your addressbook" : "Wybierz książkę adresową", - "Import is disabled because no writable address book had been found." : "Import wyłączony, ponieważ nie znaleziono książki adresowej do zapisu.", - "No search result for {query}" : "Brak wyników wyszukiwania dla zapytania {query}", - "All contacts" : "Wszystkie kontakty", - "Post office box" : "Skrytka pocztowa", - "Postal code" : "Kod pocztowy", - "City" : "Miasto", - "State or province" : "Województwo ", - "Country" : "Kraj", - "Address" : "Adres", - "(new group)" : "(nowa grupa)", - "Last name" : "Nazwisko", - "First name" : "Imię", - "Additional names" : "Dodatkowe nazwy", - "Prefix" : "Przedrostek", - "Suffix" : "Przyrostek", - "Importing into" : "Importowanie do", - "New contact" : "Nowy kontakt", - "Not grouped" : "Nie zgrupowane", - "Sort by" : "Sortowanie po", - "There is no address book available to create a contact." : "Brak książki adresowej aby utworzyć kontakt.", - "{addressbook} shared by {owner}" : "Książka {addressbook} udostępniona przez {owner}", - "Contact not found." : "Nie znaleziono kontaktu.", - "You don't have permission to write to this addressbook." : "Nie masz uprawnień do zapisu dla tej książki adresowej.", - "Contact could not be created." : "Nie można utworzyć kontaktu", - "No contacts in file. Only vCard files are allowed." : "Nie znaleziono kontaktów w pliku. Dozwolone są tylko pliki vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Wspierane są tylko vCard w wersji 4.0 (RFC6350) lub 3.0 (RFC2426).", - "Contact could not be moved." : "Nie udało się przenieść kontaktu", - "Contact could not be saved." : "Nie udało się zapisać kontaktu.", - "Waiting for the server to be ready…" : "Czekam, aż serwer będzie gotowy…", - "Importing…" : "Importowanie…", - "Display name" : "Wyświetlana nazwa", - "Nickname" : "Pseudonim", - "Detailed name" : "Szczegółowa nazwa", - "Notes" : "Notatki", - "Website" : "Strona WWW", - "Federated Cloud ID" : "ID Chmury Stowarzyszonej", - "Home" : "Dom", - "Work" : "Praca", - "Other" : "Inne", - "Groups" : "Grupy", - "Birthday" : "Urodziny", - "Anniversary" : "Rocznica", - "Date of death" : "Data śmierci", - "Email" : "E-mail", - "Instant messaging" : "Wiadomości błyskawiczne", - "Phone" : "Telefon", - "Mobile" : "Komórka", - "Work mobile" : "Numer służbowy", - "Fax" : "Faks", - "Fax home" : "Faks domowy", - "Fax work" : "Faks w pracy", - "Pager" : "Pager", - "Voice" : "Połączenie głosowe", - "Car" : "Samochód", - "Work pager" : "Pager służbowy", - "Social network" : "Sieć społecznościowa", - "Relationship" : "Relacja", - "Specify a relationship between you and the entity represented by this vCard." : "Wskaż relacje między Tobą a osobą reprezentowaną w tym vCard.", - "Spouse" : "Partner", - "Child" : "Dziecko", - "Mother" : "Matka", - "Father" : "Ojciec", - "Parent" : "Rodzic", - "Brother" : "Brat", - "Sister" : "Siostra", - "Relative" : "Pokrewieństwo", - "Friend" : "Przyjaciel", - "Colleague" : "Kolega/Koleżanka", - "Manager" : "Menadżer", - "Assistant" : "Asystent", - "Related" : "Powiązany", - "Specify a relationship between another entity and the entity represented by this vCard." : "Wskaż relacje między inną osobą a osobą reprezentowaną w tym vCard.", - "Contact" : "Kontakt", - "Agent" : "Agent", - "Emergency" : "Nagła pomoc", - "Co-worker" : "Współpracownik", - "Gender" : "Płeć", - "Female" : "Kobieta", - "Male" : "Mężczyzna", - "Details" : "Szczegóły", - "Settings" : "Ustawienia" -},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);" -} \ No newline at end of file diff --git a/l10n/pt_BR.js b/l10n/pt_BR.js deleted file mode 100644 index 13de925a..00000000 --- a/l10n/pt_BR.js +++ /dev/null @@ -1,121 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contatos", - "Download" : "Baixar", - "Copy link" : "Copiar link", - "Click to copy the link to your clipboard" : "Clique para copiar o link para a área de transferência", - "Toggle sharing" : "Alterar compartilhamento", - "Delete" : "Excluir", - "Rename" : "Renomear", - "Share with users or groups" : "Compartilhar com usuários ou grupos", - "can edit" : "pode editar", - "Close" : "Fechar", - "Enabled" : "Ativado", - "Disabled" : "Desativado", - "Copied!" : "Copiado!", - "Not supported!" : "Não suportado!", - "Press ⌘-C to copy." : "Pressione ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Pressione Ctrl-C para copiar.", - "Address book name" : "Nome do livro de endereços", - "Only these special characters are allowed: -_.!?#|()" : "Somente estes caracteres especiais são permitidos: -_.!?#|()", - "Address book could not be created." : "O catálogo de endereços não pôde ser criado.", - "Upload new image" : "Enviar nova imagem", - "The selected image is too big (max 1MB)" : "A imagem selecionada é grande demais (máximo 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Este cartão está corrompido e foi corrigido. Verifique os dados e salve para tornar as alterações permanentes.", - "No contacts in here" : "Nenhum contato aqui", - "Name" : "Nome", - "Organization" : "Organização", - "Title" : "Título", - "Add field …" : "Adicionar campo...", - "Save changes" : "Salvar modificações", - "Address book" : "Catálogo de endereços", - "Loading contacts …" : "Carregando contatos...", - "Import into" : "Importar para", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecione seu catálogo de endereços", - "Import is disabled because no writable address book had been found." : "A importação está desativada pois nenhum catálogo de endereço gravável foi encontrado.", - "No search result for {query}" : "Nenhum resultado na busca por {query}", - "All contacts" : "Todos os contatos", - "Post office box" : "Caixa de correio", - "Postal code" : "Código postal", - "City" : "Cidade", - "State or province" : "Estado ou província", - "Country" : "País", - "Address" : "Endereço", - "(new group)" : "(novo grupo)", - "Last name" : "Sobrenome", - "First name" : "Primeiro nome", - "Additional names" : "Nomes adicionais", - "Prefix" : "Prefixo", - "Suffix" : "Sufixo", - "Importing into" : "Importando para", - "New contact" : "Novo contato", - "Not grouped" : "Não agrupado", - "Sort by" : "Classificar por", - "There is no address book available to create a contact." : "Não há um catálogo de endereços disponível para criar um contato.", - "{addressbook} shared by {owner}" : "{addressbook} compartilhado por {owner}", - "Contact not found." : "Contato não encontrado.", - "You don't have permission to write to this addressbook." : "Você não tem permissão para escrever neste catálogo de endereços", - "Contact could not be created." : "O contato não pôde ser criado.", - "No contacts in file. Only vCard files are allowed." : "Sem contatos arquivados. Somente arquivos vCard são permitidos.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Somente vCard versão 4.0 (RFC6350) ou 3.0 (RFC2426) são suportados.", - "Contact could not be moved." : "O contato não pôde ser movido.", - "Contact could not be saved." : "O contato não pôde ser salvo.", - "Waiting for the server to be ready…" : "Esperando o servidor estar pronto...", - "Importing…" : "Importando...", - "Display name" : "Mostrar o nome", - "Nickname" : "Apelido", - "Detailed name" : "Nome detalhado", - "Notes" : "Anotações", - "Website" : "Website", - "Federated Cloud ID" : "ID da Nuvem Federada", - "Home" : "Casa", - "Work" : "Trabalho", - "Other" : "Outro", - "Groups" : "Grupos", - "Birthday" : "Aniversário", - "Anniversary" : "Aniversário", - "Date of death" : "Data da morte", - "Email" : "Email", - "Instant messaging" : "Mensagem instantânea", - "Phone" : "Telefone", - "Mobile" : "Móvel", - "Work mobile" : "Celular do trabalho", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax do trabalho", - "Pager" : "Pager", - "Voice" : "Voz", - "Car" : "Carro", - "Work pager" : "Pager do trabalho", - "Social network" : "Rede social", - "Relationship" : "Relacionamento", - "Specify a relationship between you and the entity represented by this vCard." : "Especifcar um relacionamento entre você e a entidade representada por este vCard.", - "Spouse" : "Esposo(a)", - "Child" : "Filho(a)", - "Mother" : "Mãe", - "Father" : "Pai", - "Parent" : "Pais", - "Brother" : "Irmão", - "Sister" : "Irmã", - "Relative" : "Parente", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Assistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especificar um relacionamento entre outra entidade e a entidade representada por este vCard.", - "Contact" : "Contactar", - "Agent" : "Agente", - "Emergency" : "Emergência", - "Co-worker" : "Colega de trabalho", - "Gender" : "Gênero", - "Female" : "Mulher", - "Male" : "Homem", - "Details" : "Detalhes", - "A contacts app for Nextcloud" : "Um aplicativo de contatos para Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "O aplicativo de contatos Nextcloud é uma interface de usuário para o servidor CardDAV do Nextcloud. Sincronize facilmente os contatos em vários dispositivos e edite-os online.\n\n* 🚀 **Integração com outros aplicativos Nextcloud!** Atualmente, Mail e Calendar - mais por vir.\n* 🎉 **Nunca esqueça um aniversário!** Você pode sincronizar aniversários e outros eventos recorrentes com o seu Calendário Nextcloud.\n* 👥 **Compartilhamento de Catálogo deEndereços!** Você quer compartilhar seus contatos com seus amigos ou colegas de trabalho? Sem problemas!\n* 🙈 **Não estamos reinventando a roda!** Com base na grande e aberta biblioteca SabreDAV.", - "Settings" : "Configurações" -}, -"nplurals=2; plural=(n > 1);"); diff --git a/l10n/pt_BR.json b/l10n/pt_BR.json deleted file mode 100644 index d4a06af3..00000000 --- a/l10n/pt_BR.json +++ /dev/null @@ -1,119 +0,0 @@ -{ "translations": { - "Contacts" : "Contatos", - "Download" : "Baixar", - "Copy link" : "Copiar link", - "Click to copy the link to your clipboard" : "Clique para copiar o link para a área de transferência", - "Toggle sharing" : "Alterar compartilhamento", - "Delete" : "Excluir", - "Rename" : "Renomear", - "Share with users or groups" : "Compartilhar com usuários ou grupos", - "can edit" : "pode editar", - "Close" : "Fechar", - "Enabled" : "Ativado", - "Disabled" : "Desativado", - "Copied!" : "Copiado!", - "Not supported!" : "Não suportado!", - "Press ⌘-C to copy." : "Pressione ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Pressione Ctrl-C para copiar.", - "Address book name" : "Nome do livro de endereços", - "Only these special characters are allowed: -_.!?#|()" : "Somente estes caracteres especiais são permitidos: -_.!?#|()", - "Address book could not be created." : "O catálogo de endereços não pôde ser criado.", - "Upload new image" : "Enviar nova imagem", - "The selected image is too big (max 1MB)" : "A imagem selecionada é grande demais (máximo 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Este cartão está corrompido e foi corrigido. Verifique os dados e salve para tornar as alterações permanentes.", - "No contacts in here" : "Nenhum contato aqui", - "Name" : "Nome", - "Organization" : "Organização", - "Title" : "Título", - "Add field …" : "Adicionar campo...", - "Save changes" : "Salvar modificações", - "Address book" : "Catálogo de endereços", - "Loading contacts …" : "Carregando contatos...", - "Import into" : "Importar para", - "Importing..." : "Importando...", - "Select your addressbook" : "Selecione seu catálogo de endereços", - "Import is disabled because no writable address book had been found." : "A importação está desativada pois nenhum catálogo de endereço gravável foi encontrado.", - "No search result for {query}" : "Nenhum resultado na busca por {query}", - "All contacts" : "Todos os contatos", - "Post office box" : "Caixa de correio", - "Postal code" : "Código postal", - "City" : "Cidade", - "State or province" : "Estado ou província", - "Country" : "País", - "Address" : "Endereço", - "(new group)" : "(novo grupo)", - "Last name" : "Sobrenome", - "First name" : "Primeiro nome", - "Additional names" : "Nomes adicionais", - "Prefix" : "Prefixo", - "Suffix" : "Sufixo", - "Importing into" : "Importando para", - "New contact" : "Novo contato", - "Not grouped" : "Não agrupado", - "Sort by" : "Classificar por", - "There is no address book available to create a contact." : "Não há um catálogo de endereços disponível para criar um contato.", - "{addressbook} shared by {owner}" : "{addressbook} compartilhado por {owner}", - "Contact not found." : "Contato não encontrado.", - "You don't have permission to write to this addressbook." : "Você não tem permissão para escrever neste catálogo de endereços", - "Contact could not be created." : "O contato não pôde ser criado.", - "No contacts in file. Only vCard files are allowed." : "Sem contatos arquivados. Somente arquivos vCard são permitidos.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Somente vCard versão 4.0 (RFC6350) ou 3.0 (RFC2426) são suportados.", - "Contact could not be moved." : "O contato não pôde ser movido.", - "Contact could not be saved." : "O contato não pôde ser salvo.", - "Waiting for the server to be ready…" : "Esperando o servidor estar pronto...", - "Importing…" : "Importando...", - "Display name" : "Mostrar o nome", - "Nickname" : "Apelido", - "Detailed name" : "Nome detalhado", - "Notes" : "Anotações", - "Website" : "Website", - "Federated Cloud ID" : "ID da Nuvem Federada", - "Home" : "Casa", - "Work" : "Trabalho", - "Other" : "Outro", - "Groups" : "Grupos", - "Birthday" : "Aniversário", - "Anniversary" : "Aniversário", - "Date of death" : "Data da morte", - "Email" : "Email", - "Instant messaging" : "Mensagem instantânea", - "Phone" : "Telefone", - "Mobile" : "Móvel", - "Work mobile" : "Celular do trabalho", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax do trabalho", - "Pager" : "Pager", - "Voice" : "Voz", - "Car" : "Carro", - "Work pager" : "Pager do trabalho", - "Social network" : "Rede social", - "Relationship" : "Relacionamento", - "Specify a relationship between you and the entity represented by this vCard." : "Especifcar um relacionamento entre você e a entidade representada por este vCard.", - "Spouse" : "Esposo(a)", - "Child" : "Filho(a)", - "Mother" : "Mãe", - "Father" : "Pai", - "Parent" : "Pais", - "Brother" : "Irmão", - "Sister" : "Irmã", - "Relative" : "Parente", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gerente", - "Assistant" : "Assistente", - "Related" : "Relacionado", - "Specify a relationship between another entity and the entity represented by this vCard." : "Especificar um relacionamento entre outra entidade e a entidade representada por este vCard.", - "Contact" : "Contactar", - "Agent" : "Agente", - "Emergency" : "Emergência", - "Co-worker" : "Colega de trabalho", - "Gender" : "Gênero", - "Female" : "Mulher", - "Male" : "Homem", - "Details" : "Detalhes", - "A contacts app for Nextcloud" : "Um aplicativo de contatos para Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "O aplicativo de contatos Nextcloud é uma interface de usuário para o servidor CardDAV do Nextcloud. Sincronize facilmente os contatos em vários dispositivos e edite-os online.\n\n* 🚀 **Integração com outros aplicativos Nextcloud!** Atualmente, Mail e Calendar - mais por vir.\n* 🎉 **Nunca esqueça um aniversário!** Você pode sincronizar aniversários e outros eventos recorrentes com o seu Calendário Nextcloud.\n* 👥 **Compartilhamento de Catálogo deEndereços!** Você quer compartilhar seus contatos com seus amigos ou colegas de trabalho? Sem problemas!\n* 🙈 **Não estamos reinventando a roda!** Com base na grande e aberta biblioteca SabreDAV.", - "Settings" : "Configurações" -},"pluralForm" :"nplurals=2; plural=(n > 1);" -} \ No newline at end of file diff --git a/l10n/pt_PT.js b/l10n/pt_PT.js deleted file mode 100644 index 5f372d69..00000000 --- a/l10n/pt_PT.js +++ /dev/null @@ -1,111 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contactos", - "Download" : "Descarregar", - "Copy link" : "Copiar hiperligação", - "Click to copy the link to your clipboard" : "Clicar para copiar a hiperligação para a área de transferência", - "Toggle sharing" : "Alternar partilha", - "Delete" : "Apagar", - "Rename" : "Renomear", - "Share with users or groups" : "Partilhe com os utilizadores ou grupos", - "can edit" : "pode editar", - "Close" : "Fechar", - "Enabled" : "Ativada", - "Disabled" : "Desactivado", - "Copied!" : "Copiado!", - "Not supported!" : "Não suportado!", - "Press ⌘-C to copy." : "Pressione ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Pressione Ctrl-C para copiar.", - "Address book name" : "Nome do livro de endereços", - "Only these special characters are allowed: -_.!?#|()" : "Apenas estes caracteres especiais são permitidos: -_.!?#|()", - "Address book could not be created." : "O livro de endereços não pode ser criado", - "The selected image is too big (max 1MB)" : "A imagem selecionada é demasiado grande (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Este cartão está corrompido e foi arranjado. Por favor verifique os dados e guarde para tornar as mudanças permanentes", - "No contacts in here" : "Nenhum contacto aqui", - "Name" : "Nome", - "Organization" : "Organização", - "Title" : "Título ", - "Add field …" : "Adicionar campo …", - "Save changes" : "Guardar alterações", - "Address book" : "Livro de endereços", - "Loading contacts …" : "A carregar contactos …", - "Import into" : "Importar para", - "Importing..." : "A importar...", - "Select your addressbook" : "Seleccione o seu livro de endereços", - "Import is disabled because no writable address book had been found." : "Importação desactivada por não ter encontrado um livro de endereços com permissão de escrita", - "No search result for {query}" : "Sem resultados de pesquisa para {query}", - "All contacts" : "Todos os contactos", - "Post office box" : "Apartado", - "Postal code" : "Código Postal", - "City" : "Cidade", - "State or province" : "Distrito", - "Country" : "País", - "Address" : "Endereço", - "(new group)" : "(novo grupo)", - "Last name" : "Ultimo Nome", - "First name" : "Primeiro Nome", - "Additional names" : "Nomes adicionais", - "Prefix" : "Prefixo", - "Suffix" : "Sufixo", - "Importing into" : "Importar para", - "New contact" : "Novo contacto", - "Not grouped" : "Não agrupados", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "Não existe nenhum livro de endereços disponível para criar um contacto.", - "{addressbook} shared by {owner}" : "{addressbook} partilhado por {owner}", - "Contact not found." : "Contacto não encontrado", - "You don't have permission to write to this addressbook." : "Não tem permissões para escrever neste livro de endereços.", - "Contact could not be created." : "Não foi possível criar o contacto.", - "No contacts in file. Only vCard files are allowed." : "Nenhum contacto no ficheiro. Apenas ficheiros vCard são permitidos.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Apenas vCard versão 4.0 (RFC6350) ou versão 3.0 (RFC2426) são suportados.", - "Contact could not be moved." : "Não foi possível mover o contacto.", - "Contact could not be saved." : "Não foi possível guardar o contacto.", - "Waiting for the server to be ready…" : "A aguardar a disponibilidade do servidor...", - "Importing…" : "A importar...", - "Display name" : "Nome de apresentação", - "Nickname" : "Alcunha", - "Detailed name" : "Nome em detalhe", - "Notes" : "Notas", - "Website" : "Site da Internet", - "Federated Cloud ID" : "Id. da Nuvem Federada", - "Home" : "Início", - "Work" : "Emprego", - "Other" : "Outro", - "Groups" : "Grupos", - "Birthday" : "Aniversário", - "Anniversary" : "Aniversário", - "Date of death" : "Data de falecimento", - "Email" : "Correio Eletrónico", - "Instant messaging" : "Mensagens Instantâneas", - "Phone" : "Telefone", - "Mobile" : "Telemóvel", - "Work mobile" : "Telefone de trabalho", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax do emprego", - "Pager" : "Pager", - "Voice" : "Voz", - "Car" : "Carro", - "Work pager" : "Pager de trabalho", - "Social network" : "Rede Social", - "Relationship" : "Relação", - "Spouse" : "Cônjuge", - "Child" : "Filho", - "Mother" : "Mãe", - "Father" : "Pai", - "Parent" : "Progenitor", - "Brother" : "Irmão", - "Sister" : "Irmã", - "Relative" : "Parente", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gestor", - "Assistant" : "Assistente", - "Gender" : "Género", - "Female" : "Feminino", - "Male" : "Masculino", - "Details" : "Detalhes", - "Settings" : "Definições" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/pt_PT.json b/l10n/pt_PT.json deleted file mode 100644 index b6fa16ef..00000000 --- a/l10n/pt_PT.json +++ /dev/null @@ -1,109 +0,0 @@ -{ "translations": { - "Contacts" : "Contactos", - "Download" : "Descarregar", - "Copy link" : "Copiar hiperligação", - "Click to copy the link to your clipboard" : "Clicar para copiar a hiperligação para a área de transferência", - "Toggle sharing" : "Alternar partilha", - "Delete" : "Apagar", - "Rename" : "Renomear", - "Share with users or groups" : "Partilhe com os utilizadores ou grupos", - "can edit" : "pode editar", - "Close" : "Fechar", - "Enabled" : "Ativada", - "Disabled" : "Desactivado", - "Copied!" : "Copiado!", - "Not supported!" : "Não suportado!", - "Press ⌘-C to copy." : "Pressione ⌘-C para copiar.", - "Press Ctrl-C to copy." : "Pressione Ctrl-C para copiar.", - "Address book name" : "Nome do livro de endereços", - "Only these special characters are allowed: -_.!?#|()" : "Apenas estes caracteres especiais são permitidos: -_.!?#|()", - "Address book could not be created." : "O livro de endereços não pode ser criado", - "The selected image is too big (max 1MB)" : "A imagem selecionada é demasiado grande (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Este cartão está corrompido e foi arranjado. Por favor verifique os dados e guarde para tornar as mudanças permanentes", - "No contacts in here" : "Nenhum contacto aqui", - "Name" : "Nome", - "Organization" : "Organização", - "Title" : "Título ", - "Add field …" : "Adicionar campo …", - "Save changes" : "Guardar alterações", - "Address book" : "Livro de endereços", - "Loading contacts …" : "A carregar contactos …", - "Import into" : "Importar para", - "Importing..." : "A importar...", - "Select your addressbook" : "Seleccione o seu livro de endereços", - "Import is disabled because no writable address book had been found." : "Importação desactivada por não ter encontrado um livro de endereços com permissão de escrita", - "No search result for {query}" : "Sem resultados de pesquisa para {query}", - "All contacts" : "Todos os contactos", - "Post office box" : "Apartado", - "Postal code" : "Código Postal", - "City" : "Cidade", - "State or province" : "Distrito", - "Country" : "País", - "Address" : "Endereço", - "(new group)" : "(novo grupo)", - "Last name" : "Ultimo Nome", - "First name" : "Primeiro Nome", - "Additional names" : "Nomes adicionais", - "Prefix" : "Prefixo", - "Suffix" : "Sufixo", - "Importing into" : "Importar para", - "New contact" : "Novo contacto", - "Not grouped" : "Não agrupados", - "Sort by" : "Ordenar por", - "There is no address book available to create a contact." : "Não existe nenhum livro de endereços disponível para criar um contacto.", - "{addressbook} shared by {owner}" : "{addressbook} partilhado por {owner}", - "Contact not found." : "Contacto não encontrado", - "You don't have permission to write to this addressbook." : "Não tem permissões para escrever neste livro de endereços.", - "Contact could not be created." : "Não foi possível criar o contacto.", - "No contacts in file. Only vCard files are allowed." : "Nenhum contacto no ficheiro. Apenas ficheiros vCard são permitidos.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Apenas vCard versão 4.0 (RFC6350) ou versão 3.0 (RFC2426) são suportados.", - "Contact could not be moved." : "Não foi possível mover o contacto.", - "Contact could not be saved." : "Não foi possível guardar o contacto.", - "Waiting for the server to be ready…" : "A aguardar a disponibilidade do servidor...", - "Importing…" : "A importar...", - "Display name" : "Nome de apresentação", - "Nickname" : "Alcunha", - "Detailed name" : "Nome em detalhe", - "Notes" : "Notas", - "Website" : "Site da Internet", - "Federated Cloud ID" : "Id. da Nuvem Federada", - "Home" : "Início", - "Work" : "Emprego", - "Other" : "Outro", - "Groups" : "Grupos", - "Birthday" : "Aniversário", - "Anniversary" : "Aniversário", - "Date of death" : "Data de falecimento", - "Email" : "Correio Eletrónico", - "Instant messaging" : "Mensagens Instantâneas", - "Phone" : "Telefone", - "Mobile" : "Telemóvel", - "Work mobile" : "Telefone de trabalho", - "Fax" : "Fax", - "Fax home" : "Fax de casa", - "Fax work" : "Fax do emprego", - "Pager" : "Pager", - "Voice" : "Voz", - "Car" : "Carro", - "Work pager" : "Pager de trabalho", - "Social network" : "Rede Social", - "Relationship" : "Relação", - "Spouse" : "Cônjuge", - "Child" : "Filho", - "Mother" : "Mãe", - "Father" : "Pai", - "Parent" : "Progenitor", - "Brother" : "Irmão", - "Sister" : "Irmã", - "Relative" : "Parente", - "Friend" : "Amigo", - "Colleague" : "Colega", - "Manager" : "Gestor", - "Assistant" : "Assistente", - "Gender" : "Género", - "Female" : "Feminino", - "Male" : "Masculino", - "Details" : "Detalhes", - "Settings" : "Definições" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/ro.js b/l10n/ro.js deleted file mode 100644 index d87eb0af..00000000 --- a/l10n/ro.js +++ /dev/null @@ -1,111 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Contacte", - "Download" : "Descărcare", - "Copy link" : "Copiază linkul", - "Click to copy the link to your clipboard" : "Click pentru copierea linkului", - "Toggle sharing" : "Schimbă partajarea", - "Delete" : "Șterge", - "Rename" : "Redenumește", - "Share with users or groups" : "Partajează cu utilizatori sau grupuri", - "can edit" : "poate edita", - "Close" : "Închide", - "Enabled" : "Activat", - "Disabled" : "Dezactivat", - "Copied!" : "S-a copiat!", - "Not supported!" : "Nu este suportat!", - "Press ⌘-C to copy." : "Apasă ⌘-C pentru copiere.", - "Press Ctrl-C to copy." : "Apasă Ctrl-C pentru copiere.", - "Address book name" : "Numele listă de contacte", - "Only these special characters are allowed: -_.!?#|()" : "Numai aceste caractere speciale sunt permise: -_.!?#|()", - "Address book could not be created." : "Lista de contacte nu a putut fi creată.", - "The selected image is too big (max 1MB)" : "Imaginea selectată este prea mare (maxim 1 MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Acest card este corupt și a fost reparat. Verifică datele și declanșează operațiunea de salvare pentru a face modificările permanente.", - "No contacts in here" : "Niciun contact aici", - "Name" : "Nume", - "Organization" : "Organizație", - "Title" : "Titlu", - "Add field …" : "Adaugă câmp ...", - "Save changes" : "Salvează modificările", - "Address book" : "Listă de contacte", - "Loading contacts …" : "Se încarcă contactele ...", - "Import into" : "Importă în", - "Importing..." : "Se importă...", - "Select your addressbook" : "Selectează lista ta de contacte", - "Import is disabled because no writable address book had been found." : "Importul este dezactivat deoarece nu a fost găsită nicio listă de contacte.", - "No search result for {query}" : "Niciun rezultat pentru {query}", - "All contacts" : "Toate contactele", - "Post office box" : "Oficiul poștal", - "Postal code" : "Codul poștal", - "City" : "Oraș", - "State or province" : "Județ sau provincie", - "Country" : "Țară", - "Address" : "Adresă", - "(new group)" : "(grup nou)", - "Last name" : "Nume", - "First name" : "Prenume", - "Additional names" : "Nume adiționale", - "Prefix" : "Prefix", - "Suffix" : "Sufix", - "Importing into" : "Se importă în", - "New contact" : "Contact nou ", - "Not grouped" : "Negrupate", - "Sort by" : "Sortează după", - "There is no address book available to create a contact." : "Nicio listă de contacte disponibilă pentru a crea un contact.", - "{addressbook} shared by {owner}" : "{addressbook} partajat de {owner}", - "Contact not found." : "Contactul nu a fost găsit.", - "You don't have permission to write to this addressbook." : "Nu aveți dreptul de a scrie în această listă de contacte.", - "Contact could not be created." : "Persoana de contact nu a putut fi creată.", - "No contacts in file. Only vCard files are allowed." : "Nici un contact în fișier. Numai fișierele vCard sunt permise.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Numai VCard versiunea 4.0 (RFC6350) sau versiunea 3.0 (RFC2426) sunt suportate.", - "Contact could not be moved." : "Contactul nu a putut fi mutat.", - "Contact could not be saved." : "Contactul nu a fost salvat.", - "Waiting for the server to be ready…" : "Se așteaptă ca serverul să fie disponibil...", - "Importing…" : "Se importă...", - "Display name" : "Nume afișat", - "Nickname" : "Pseudonim", - "Detailed name" : "Nume detaliat", - "Notes" : "Notă", - "Website" : "Website", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Acasă", - "Work" : "Serviciu", - "Other" : "Altele", - "Groups" : "Grupuri", - "Birthday" : "Zi de naștere", - "Anniversary" : "Aniversare", - "Date of death" : "Data decesului", - "Email" : "Email", - "Instant messaging" : "Mesagerie instantă", - "Phone" : "Telefon", - "Mobile" : "Mobil", - "Work mobile" : "Telefon serviciu", - "Fax" : "Fax", - "Fax home" : "Fax - acasă", - "Fax work" : "Fax - serviciu", - "Pager" : "Pager", - "Voice" : "Voce", - "Car" : "Mașina", - "Work pager" : "Pager de serviciu", - "Social network" : "Rețea socială", - "Relationship" : "Legătură", - "Spouse" : "Soție", - "Child" : "Copil", - "Mother" : "Mamă", - "Father" : "Tată", - "Parent" : "Părinte", - "Brother" : "Frate", - "Sister" : "Soră", - "Relative" : "Rudă", - "Friend" : "Prieten", - "Colleague" : "Coleg", - "Manager" : "Director", - "Assistant" : "Asistent", - "Gender" : "Sex", - "Female" : "Femeie", - "Male" : "Bărbat", - "Details" : "Detalii", - "Settings" : "Setări" -}, -"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); diff --git a/l10n/ro.json b/l10n/ro.json deleted file mode 100644 index 32260c55..00000000 --- a/l10n/ro.json +++ /dev/null @@ -1,109 +0,0 @@ -{ "translations": { - "Contacts" : "Contacte", - "Download" : "Descărcare", - "Copy link" : "Copiază linkul", - "Click to copy the link to your clipboard" : "Click pentru copierea linkului", - "Toggle sharing" : "Schimbă partajarea", - "Delete" : "Șterge", - "Rename" : "Redenumește", - "Share with users or groups" : "Partajează cu utilizatori sau grupuri", - "can edit" : "poate edita", - "Close" : "Închide", - "Enabled" : "Activat", - "Disabled" : "Dezactivat", - "Copied!" : "S-a copiat!", - "Not supported!" : "Nu este suportat!", - "Press ⌘-C to copy." : "Apasă ⌘-C pentru copiere.", - "Press Ctrl-C to copy." : "Apasă Ctrl-C pentru copiere.", - "Address book name" : "Numele listă de contacte", - "Only these special characters are allowed: -_.!?#|()" : "Numai aceste caractere speciale sunt permise: -_.!?#|()", - "Address book could not be created." : "Lista de contacte nu a putut fi creată.", - "The selected image is too big (max 1MB)" : "Imaginea selectată este prea mare (maxim 1 MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Acest card este corupt și a fost reparat. Verifică datele și declanșează operațiunea de salvare pentru a face modificările permanente.", - "No contacts in here" : "Niciun contact aici", - "Name" : "Nume", - "Organization" : "Organizație", - "Title" : "Titlu", - "Add field …" : "Adaugă câmp ...", - "Save changes" : "Salvează modificările", - "Address book" : "Listă de contacte", - "Loading contacts …" : "Se încarcă contactele ...", - "Import into" : "Importă în", - "Importing..." : "Se importă...", - "Select your addressbook" : "Selectează lista ta de contacte", - "Import is disabled because no writable address book had been found." : "Importul este dezactivat deoarece nu a fost găsită nicio listă de contacte.", - "No search result for {query}" : "Niciun rezultat pentru {query}", - "All contacts" : "Toate contactele", - "Post office box" : "Oficiul poștal", - "Postal code" : "Codul poștal", - "City" : "Oraș", - "State or province" : "Județ sau provincie", - "Country" : "Țară", - "Address" : "Adresă", - "(new group)" : "(grup nou)", - "Last name" : "Nume", - "First name" : "Prenume", - "Additional names" : "Nume adiționale", - "Prefix" : "Prefix", - "Suffix" : "Sufix", - "Importing into" : "Se importă în", - "New contact" : "Contact nou ", - "Not grouped" : "Negrupate", - "Sort by" : "Sortează după", - "There is no address book available to create a contact." : "Nicio listă de contacte disponibilă pentru a crea un contact.", - "{addressbook} shared by {owner}" : "{addressbook} partajat de {owner}", - "Contact not found." : "Contactul nu a fost găsit.", - "You don't have permission to write to this addressbook." : "Nu aveți dreptul de a scrie în această listă de contacte.", - "Contact could not be created." : "Persoana de contact nu a putut fi creată.", - "No contacts in file. Only vCard files are allowed." : "Nici un contact în fișier. Numai fișierele vCard sunt permise.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Numai VCard versiunea 4.0 (RFC6350) sau versiunea 3.0 (RFC2426) sunt suportate.", - "Contact could not be moved." : "Contactul nu a putut fi mutat.", - "Contact could not be saved." : "Contactul nu a fost salvat.", - "Waiting for the server to be ready…" : "Se așteaptă ca serverul să fie disponibil...", - "Importing…" : "Se importă...", - "Display name" : "Nume afișat", - "Nickname" : "Pseudonim", - "Detailed name" : "Nume detaliat", - "Notes" : "Notă", - "Website" : "Website", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Acasă", - "Work" : "Serviciu", - "Other" : "Altele", - "Groups" : "Grupuri", - "Birthday" : "Zi de naștere", - "Anniversary" : "Aniversare", - "Date of death" : "Data decesului", - "Email" : "Email", - "Instant messaging" : "Mesagerie instantă", - "Phone" : "Telefon", - "Mobile" : "Mobil", - "Work mobile" : "Telefon serviciu", - "Fax" : "Fax", - "Fax home" : "Fax - acasă", - "Fax work" : "Fax - serviciu", - "Pager" : "Pager", - "Voice" : "Voce", - "Car" : "Mașina", - "Work pager" : "Pager de serviciu", - "Social network" : "Rețea socială", - "Relationship" : "Legătură", - "Spouse" : "Soție", - "Child" : "Copil", - "Mother" : "Mamă", - "Father" : "Tată", - "Parent" : "Părinte", - "Brother" : "Frate", - "Sister" : "Soră", - "Relative" : "Rudă", - "Friend" : "Prieten", - "Colleague" : "Coleg", - "Manager" : "Director", - "Assistant" : "Asistent", - "Gender" : "Sex", - "Female" : "Femeie", - "Male" : "Bărbat", - "Details" : "Detalii", - "Settings" : "Setări" -},"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" -} \ No newline at end of file diff --git a/l10n/ru.js b/l10n/ru.js deleted file mode 100644 index 52ffcd05..00000000 --- a/l10n/ru.js +++ /dev/null @@ -1,121 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Контакты", - "Download" : "Скачать", - "Copy link" : "Скопировать ссылку", - "Click to copy the link to your clipboard" : "Нажмите для копирования ссылки в буфер обмена", - "Toggle sharing" : "Переключить общий доступ", - "Delete" : "Удалить", - "Rename" : "Переименовать", - "Share with users or groups" : "Поделиться с пользователями или группами", - "can edit" : "можно редактировать", - "Close" : "Закрыть", - "Enabled" : "Включено", - "Disabled" : "Отключено", - "Copied!" : "Скопировано!", - "Not supported!" : "Не поддерживается!", - "Press ⌘-C to copy." : "Нажмите ⌘-C для копирования.", - "Press Ctrl-C to copy." : "Нажмите Ctrl-C для копирования.", - "Address book name" : "Название адресной книги", - "Only these special characters are allowed: -_.!?#|()" : "Допустимы только следующие специальные символы: -_.!?#|()", - "Address book could not be created." : "Не удалось создать адресную книгу.", - "Upload new image" : "Загрузить изображение", - "The selected image is too big (max 1MB)" : "Выбранное изображение слишком велико (макс. 1 МБ)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Эта поврежденная карточка была исправлена. Проверьте данные и выберите «сохранить» для сохранения изменений. ", - "No contacts in here" : "Здесь нет контактов", - "Name" : "имя, отчество и фамилия контакта", - "Organization" : "Организация", - "Title" : "Должность", - "Add field …" : "Добавить поле…", - "Save changes" : "Сохранить изменения", - "Address book" : "Адресная книга", - "Loading contacts …" : "Загрузка контактов…", - "Import into" : "Импортировать в", - "Importing..." : "Производится импорт…", - "Select your addressbook" : "Выберите адресную книгу", - "Import is disabled because no writable address book had been found." : "Возможность импорта отключена, т.к. отсутствуют адресные книги, в которые можно выполнить запись.", - "No search result for {query}" : "По запросу {query} ничего не найдено", - "All contacts" : "Все контакты", - "Post office box" : "Абонентский ящик", - "Postal code" : "Почтовый индекс", - "City" : "Город", - "State or province" : "Область или район", - "Country" : "Страна", - "Address" : "Адрес", - "(new group)" : "(новая группа)", - "Last name" : "Фамилия", - "First name" : "Имя", - "Additional names" : "Отчество", - "Prefix" : "Префикс", - "Suffix" : "Суффикс", - "Importing into" : "Производится импорт в", - "New contact" : "Новый контакт", - "Not grouped" : "Без группы", - "Sort by" : "Сортировать по", - "There is no address book available to create a contact." : "Отсутствует адресная книга, в которой можно создать контакт.", - "{addressbook} shared by {owner}" : "{addressbook} от {owner}", - "Contact not found." : "Контакт не найден.", - "You don't have permission to write to this addressbook." : "Недостаточно прав для записи в эту адресную книгу.", - "Contact could not be created." : "Не удалось создать контакт.", - "No contacts in file. Only vCard files are allowed." : "В файле нет контактов. Допустимы только файлы формата vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Поддерживается только формат vCard версии 4.0 (RFC6350) или версии 3.0 (RFC2426).", - "Contact could not be moved." : "Контакт не может быть перемещён.", - "Contact could not be saved." : "Контакт не может быть сохранён.", - "Waiting for the server to be ready…" : "Ожидание готовности сервера…", - "Importing…" : "Импортируется…", - "Display name" : "Отображаемое имя", - "Nickname" : "Псевдоним", - "Detailed name" : "Подробное имя", - "Notes" : "Заметки", - "Website" : "Сайт", - "Federated Cloud ID" : "ID в объединении облачных хранилищ", - "Home" : "Домашний", - "Work" : "Рабочий", - "Other" : "Другой", - "Groups" : "Группы", - "Birthday" : "День рождения", - "Anniversary" : "Годовщина", - "Date of death" : "Дата смерти", - "Email" : "Эл. почта", - "Instant messaging" : "Мгновенные сообщения", - "Phone" : "Телефон", - "Mobile" : "Мобильный", - "Work mobile" : "Рабочий мобильный", - "Fax" : "Факс", - "Fax home" : "Факс домашний", - "Fax work" : "Факс рабочий", - "Pager" : "Пейджер", - "Voice" : "Голосовая почта", - "Car" : "Номер в авто", - "Work pager" : "Рабочий пейджер", - "Social network" : "Социальная сеть", - "Relationship" : "Отношнения", - "Specify a relationship between you and the entity represented by this vCard." : "Указать отношения между собой и этим контактом.", - "Spouse" : "Супруг", - "Child" : "Ребёнок", - "Mother" : "Мать", - "Father" : "Отец", - "Parent" : "Родитель", - "Brother" : "Брат", - "Sister" : "Сестра", - "Relative" : "Родственник", - "Friend" : "Друг", - "Colleague" : "Коллега", - "Manager" : "Руководитель", - "Assistant" : "Помощник", - "Related" : "Связи", - "Specify a relationship between another entity and the entity represented by this vCard." : "Указать отношение между этим и другим контактом.", - "Contact" : "Контакт", - "Agent" : "Агент", - "Emergency" : "Экстренный случай", - "Co-worker" : "Коллега", - "Gender" : "Пол", - "Female" : "Женщина", - "Male" : "Мужчина", - "Details" : "Подробно", - "A contacts app for Nextcloud" : "Контакты для Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "Приложение контактов Nextcloud является пользовательским интерфейсом для сервера CardDAV Nextcloud. Можно легко синхронизировать контакты с разных устройств с помощью Nextcloud и редактировать их в Интернете. * * 🚀 ** Интеграция с другими приложениями Nextcloud! ** В настоящее время почта и календарь - в будущем еще больше. * * 🎉 ** Никогда не забывайте день рождения! ** Вы можете синхронизировать дни рождения и другие повторяющиеся события с вашим календарем Nextcloud. * * 👥 ** Совместное использование адресных книг! ** Вы хотите поделиться своими контактами с друзьями или коллегами? Нет проблем! * 🙈 ** Мы не изобретаем колесо! ** Основано на хорошей и открытой библиотеке SabreDAV.", - "Settings" : "Настройки" -}, -"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/l10n/ru.json b/l10n/ru.json deleted file mode 100644 index 4919a5b0..00000000 --- a/l10n/ru.json +++ /dev/null @@ -1,119 +0,0 @@ -{ "translations": { - "Contacts" : "Контакты", - "Download" : "Скачать", - "Copy link" : "Скопировать ссылку", - "Click to copy the link to your clipboard" : "Нажмите для копирования ссылки в буфер обмена", - "Toggle sharing" : "Переключить общий доступ", - "Delete" : "Удалить", - "Rename" : "Переименовать", - "Share with users or groups" : "Поделиться с пользователями или группами", - "can edit" : "можно редактировать", - "Close" : "Закрыть", - "Enabled" : "Включено", - "Disabled" : "Отключено", - "Copied!" : "Скопировано!", - "Not supported!" : "Не поддерживается!", - "Press ⌘-C to copy." : "Нажмите ⌘-C для копирования.", - "Press Ctrl-C to copy." : "Нажмите Ctrl-C для копирования.", - "Address book name" : "Название адресной книги", - "Only these special characters are allowed: -_.!?#|()" : "Допустимы только следующие специальные символы: -_.!?#|()", - "Address book could not be created." : "Не удалось создать адресную книгу.", - "Upload new image" : "Загрузить изображение", - "The selected image is too big (max 1MB)" : "Выбранное изображение слишком велико (макс. 1 МБ)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Эта поврежденная карточка была исправлена. Проверьте данные и выберите «сохранить» для сохранения изменений. ", - "No contacts in here" : "Здесь нет контактов", - "Name" : "имя, отчество и фамилия контакта", - "Organization" : "Организация", - "Title" : "Должность", - "Add field …" : "Добавить поле…", - "Save changes" : "Сохранить изменения", - "Address book" : "Адресная книга", - "Loading contacts …" : "Загрузка контактов…", - "Import into" : "Импортировать в", - "Importing..." : "Производится импорт…", - "Select your addressbook" : "Выберите адресную книгу", - "Import is disabled because no writable address book had been found." : "Возможность импорта отключена, т.к. отсутствуют адресные книги, в которые можно выполнить запись.", - "No search result for {query}" : "По запросу {query} ничего не найдено", - "All contacts" : "Все контакты", - "Post office box" : "Абонентский ящик", - "Postal code" : "Почтовый индекс", - "City" : "Город", - "State or province" : "Область или район", - "Country" : "Страна", - "Address" : "Адрес", - "(new group)" : "(новая группа)", - "Last name" : "Фамилия", - "First name" : "Имя", - "Additional names" : "Отчество", - "Prefix" : "Префикс", - "Suffix" : "Суффикс", - "Importing into" : "Производится импорт в", - "New contact" : "Новый контакт", - "Not grouped" : "Без группы", - "Sort by" : "Сортировать по", - "There is no address book available to create a contact." : "Отсутствует адресная книга, в которой можно создать контакт.", - "{addressbook} shared by {owner}" : "{addressbook} от {owner}", - "Contact not found." : "Контакт не найден.", - "You don't have permission to write to this addressbook." : "Недостаточно прав для записи в эту адресную книгу.", - "Contact could not be created." : "Не удалось создать контакт.", - "No contacts in file. Only vCard files are allowed." : "В файле нет контактов. Допустимы только файлы формата vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Поддерживается только формат vCard версии 4.0 (RFC6350) или версии 3.0 (RFC2426).", - "Contact could not be moved." : "Контакт не может быть перемещён.", - "Contact could not be saved." : "Контакт не может быть сохранён.", - "Waiting for the server to be ready…" : "Ожидание готовности сервера…", - "Importing…" : "Импортируется…", - "Display name" : "Отображаемое имя", - "Nickname" : "Псевдоним", - "Detailed name" : "Подробное имя", - "Notes" : "Заметки", - "Website" : "Сайт", - "Federated Cloud ID" : "ID в объединении облачных хранилищ", - "Home" : "Домашний", - "Work" : "Рабочий", - "Other" : "Другой", - "Groups" : "Группы", - "Birthday" : "День рождения", - "Anniversary" : "Годовщина", - "Date of death" : "Дата смерти", - "Email" : "Эл. почта", - "Instant messaging" : "Мгновенные сообщения", - "Phone" : "Телефон", - "Mobile" : "Мобильный", - "Work mobile" : "Рабочий мобильный", - "Fax" : "Факс", - "Fax home" : "Факс домашний", - "Fax work" : "Факс рабочий", - "Pager" : "Пейджер", - "Voice" : "Голосовая почта", - "Car" : "Номер в авто", - "Work pager" : "Рабочий пейджер", - "Social network" : "Социальная сеть", - "Relationship" : "Отношнения", - "Specify a relationship between you and the entity represented by this vCard." : "Указать отношения между собой и этим контактом.", - "Spouse" : "Супруг", - "Child" : "Ребёнок", - "Mother" : "Мать", - "Father" : "Отец", - "Parent" : "Родитель", - "Brother" : "Брат", - "Sister" : "Сестра", - "Relative" : "Родственник", - "Friend" : "Друг", - "Colleague" : "Коллега", - "Manager" : "Руководитель", - "Assistant" : "Помощник", - "Related" : "Связи", - "Specify a relationship between another entity and the entity represented by this vCard." : "Указать отношение между этим и другим контактом.", - "Contact" : "Контакт", - "Agent" : "Агент", - "Emergency" : "Экстренный случай", - "Co-worker" : "Коллега", - "Gender" : "Пол", - "Female" : "Женщина", - "Male" : "Мужчина", - "Details" : "Подробно", - "A contacts app for Nextcloud" : "Контакты для Nextcloud", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "Приложение контактов Nextcloud является пользовательским интерфейсом для сервера CardDAV Nextcloud. Можно легко синхронизировать контакты с разных устройств с помощью Nextcloud и редактировать их в Интернете. * * 🚀 ** Интеграция с другими приложениями Nextcloud! ** В настоящее время почта и календарь - в будущем еще больше. * * 🎉 ** Никогда не забывайте день рождения! ** Вы можете синхронизировать дни рождения и другие повторяющиеся события с вашим календарем Nextcloud. * * 👥 ** Совместное использование адресных книг! ** Вы хотите поделиться своими контактами с друзьями или коллегами? Нет проблем! * 🙈 ** Мы не изобретаем колесо! ** Основано на хорошей и открытой библиотеке SabreDAV.", - "Settings" : "Настройки" -},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" -} \ No newline at end of file diff --git a/l10n/sk.js b/l10n/sk.js deleted file mode 100644 index 0ee40ae5..00000000 --- a/l10n/sk.js +++ /dev/null @@ -1,120 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontakty", - "Download" : "Stiahnuť", - "Copy link" : "Kopírovať odkaz", - "Click to copy the link to your clipboard" : "Skopírovať odkaz do schránky", - "Toggle sharing" : "Zapnúť zdieľanie", - "Delete" : "Zmazať", - "Rename" : "Premenovať", - "Share with users or groups" : "Sprístupniť používateľom alebo skupinám", - "can edit" : "môže upravovať", - "Close" : "Zatvoriť", - "Enabled" : "Povolené", - "Disabled" : "Zakázané", - "Copied!" : "Skopírované!", - "Not supported!" : "Nepodporované!", - "Press ⌘-C to copy." : "Pre kopírovanie, stlačte ⌘-C.", - "Press Ctrl-C to copy." : "Pre kopírovanie, stlačte Ctrl-C.", - "Address book name" : "Názov adresára kontaktov", - "Only these special characters are allowed: -_.!?#|()" : "Povolené sú len tieto špeciálne znaky: -_.!?#|()", - "Address book could not be created." : "Adresár sa nepodarilo sa vytvoriť", - "Upload new image" : "Nahrať nový obrázok", - "The selected image is too big (max 1MB)" : "Vybraný obrázok je príliš veľký (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Poškodená karta bola opravená. Skontrolujte prosím údaje a stlačte uložiť pre uplatnenie zmien. ", - "No contacts in here" : "Nie sú tu žiadne kontakty", - "Name" : "Názov", - "Organization" : "Organizácia", - "Title" : "Pracovná funkcia", - "Add field …" : "Pridať pole ...", - "Save changes" : "Uložiť zmeny", - "Address book" : "Adresár", - "Loading contacts …" : "Načítavajú sa kontakty ...", - "Import into" : "Importovať do", - "Importing..." : "Importujem...", - "Select your addressbook" : "Vyberte svoj adresár", - "Import is disabled because no writable address book had been found." : "Import je zakázaný, pretože nebol nájdený žiaden zapisovateľný adresár kontaktov.", - "No search result for {query}" : "Žiadne výsledky vyhľadávania pre {query}", - "All contacts" : "Všetky kontakty", - "Post office box" : "Poštová adresa", - "Postal code" : "PSČ", - "City" : "Mesto", - "State or province" : "Kraj alebo oblasť", - "Country" : "Krajina", - "Address" : "Adresa", - "(new group)" : "(nová skupina)", - "Last name" : "Priezvisko", - "First name" : "Krstné meno", - "Additional names" : "Ďalšie mená", - "Prefix" : "Titul pred menom", - "Suffix" : "Titul po mene", - "Importing into" : "Importujem do", - "New contact" : "Nový kontakt", - "Not grouped" : "Bez skupiny", - "Sort by" : "Zoradiť podľa", - "There is no address book available to create a contact." : "Na vytvorenie kontaktu nie je k dispozícii žiadny adresár kontaktov.", - "{addressbook} shared by {owner}" : "{addressbook} sprístupňuje {owner}", - "Contact not found." : "Kontakt sa nenašiel", - "You don't have permission to write to this addressbook." : "Pre zápis do tohto adresára nemáte oprávnenia.", - "Contact could not be created." : "Kontakt nieje možné vytvoriť", - "No contacts in file. Only vCard files are allowed." : "V súbore nie sú žiadne kontakty. Podporované sú len súbory vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Podporované sú iba formáty vCard verzie 4.0 (RFC6350) alebo verzie 3.0 (RFC2426).", - "Contact could not be moved." : "Kontakt sa nedá presunúť", - "Contact could not be saved." : "Kontakt nie je možné uložiť", - "Waiting for the server to be ready…" : "Čaká sa než bude pripravený server...", - "Importing…" : "Importuje sa...", - "Display name" : "Zobrazované meno", - "Nickname" : "Prezývka", - "Detailed name" : "Podrobné meno", - "Notes" : "Poznámky", - "Website" : "Webstránka", - "Federated Cloud ID" : "Združené Cloud ID", - "Home" : "Domov", - "Work" : "Práca", - "Other" : "Iné", - "Groups" : "Skupiny", - "Birthday" : "Narodeniny", - "Anniversary" : "Výročie", - "Date of death" : "Dátum smrti", - "Email" : "Email", - "Instant messaging" : "Instant messaging", - "Phone" : "Telefón", - "Mobile" : "Mobil", - "Work mobile" : "Pracovný mobil", - "Fax" : "Fax", - "Fax home" : "Fax doma", - "Fax work" : "Fax v práci", - "Pager" : "Pager", - "Voice" : "Odkazová schránka", - "Car" : "Auto", - "Work pager" : "Pracovný pager", - "Social network" : "Sociálna sieť", - "Relationship" : "Vzťah", - "Specify a relationship between you and the entity represented by this vCard." : "Vzťah medzi entitou reprezentovanou touto vCard vizitkou a Vami.", - "Spouse" : "Partner/ka", - "Child" : "Dieťa", - "Mother" : "Matka", - "Father" : "Otec", - "Parent" : "Rodič", - "Brother" : "Brat", - "Sister" : "Sestra", - "Relative" : "Príbuzný", - "Friend" : "Kamarát/ka", - "Colleague" : "Kolega", - "Manager" : "Manažér", - "Assistant" : "Asistent", - "Related" : "Súvisiace", - "Specify a relationship between another entity and the entity represented by this vCard." : "Vzťah medzi entitou reprezentovanou touto vCard vizitkou a ďalšou entitou.", - "Contact" : "Kontakt", - "Agent" : "Agent", - "Emergency" : "Núdzový kontakt", - "Co-worker" : "Spolupracovník", - "Gender" : "Pohlavie", - "Female" : "Žena", - "Male" : "Muž", - "Details" : "Podrobnosti", - "A contacts app for Nextcloud" : "Apka kontaktov pre Nextcloud", - "Settings" : "Nastavenia" -}, -"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"); diff --git a/l10n/sk.json b/l10n/sk.json deleted file mode 100644 index 63b2e17e..00000000 --- a/l10n/sk.json +++ /dev/null @@ -1,118 +0,0 @@ -{ "translations": { - "Contacts" : "Kontakty", - "Download" : "Stiahnuť", - "Copy link" : "Kopírovať odkaz", - "Click to copy the link to your clipboard" : "Skopírovať odkaz do schránky", - "Toggle sharing" : "Zapnúť zdieľanie", - "Delete" : "Zmazať", - "Rename" : "Premenovať", - "Share with users or groups" : "Sprístupniť používateľom alebo skupinám", - "can edit" : "môže upravovať", - "Close" : "Zatvoriť", - "Enabled" : "Povolené", - "Disabled" : "Zakázané", - "Copied!" : "Skopírované!", - "Not supported!" : "Nepodporované!", - "Press ⌘-C to copy." : "Pre kopírovanie, stlačte ⌘-C.", - "Press Ctrl-C to copy." : "Pre kopírovanie, stlačte Ctrl-C.", - "Address book name" : "Názov adresára kontaktov", - "Only these special characters are allowed: -_.!?#|()" : "Povolené sú len tieto špeciálne znaky: -_.!?#|()", - "Address book could not be created." : "Adresár sa nepodarilo sa vytvoriť", - "Upload new image" : "Nahrať nový obrázok", - "The selected image is too big (max 1MB)" : "Vybraný obrázok je príliš veľký (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Poškodená karta bola opravená. Skontrolujte prosím údaje a stlačte uložiť pre uplatnenie zmien. ", - "No contacts in here" : "Nie sú tu žiadne kontakty", - "Name" : "Názov", - "Organization" : "Organizácia", - "Title" : "Pracovná funkcia", - "Add field …" : "Pridať pole ...", - "Save changes" : "Uložiť zmeny", - "Address book" : "Adresár", - "Loading contacts …" : "Načítavajú sa kontakty ...", - "Import into" : "Importovať do", - "Importing..." : "Importujem...", - "Select your addressbook" : "Vyberte svoj adresár", - "Import is disabled because no writable address book had been found." : "Import je zakázaný, pretože nebol nájdený žiaden zapisovateľný adresár kontaktov.", - "No search result for {query}" : "Žiadne výsledky vyhľadávania pre {query}", - "All contacts" : "Všetky kontakty", - "Post office box" : "Poštová adresa", - "Postal code" : "PSČ", - "City" : "Mesto", - "State or province" : "Kraj alebo oblasť", - "Country" : "Krajina", - "Address" : "Adresa", - "(new group)" : "(nová skupina)", - "Last name" : "Priezvisko", - "First name" : "Krstné meno", - "Additional names" : "Ďalšie mená", - "Prefix" : "Titul pred menom", - "Suffix" : "Titul po mene", - "Importing into" : "Importujem do", - "New contact" : "Nový kontakt", - "Not grouped" : "Bez skupiny", - "Sort by" : "Zoradiť podľa", - "There is no address book available to create a contact." : "Na vytvorenie kontaktu nie je k dispozícii žiadny adresár kontaktov.", - "{addressbook} shared by {owner}" : "{addressbook} sprístupňuje {owner}", - "Contact not found." : "Kontakt sa nenašiel", - "You don't have permission to write to this addressbook." : "Pre zápis do tohto adresára nemáte oprávnenia.", - "Contact could not be created." : "Kontakt nieje možné vytvoriť", - "No contacts in file. Only vCard files are allowed." : "V súbore nie sú žiadne kontakty. Podporované sú len súbory vCard.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Podporované sú iba formáty vCard verzie 4.0 (RFC6350) alebo verzie 3.0 (RFC2426).", - "Contact could not be moved." : "Kontakt sa nedá presunúť", - "Contact could not be saved." : "Kontakt nie je možné uložiť", - "Waiting for the server to be ready…" : "Čaká sa než bude pripravený server...", - "Importing…" : "Importuje sa...", - "Display name" : "Zobrazované meno", - "Nickname" : "Prezývka", - "Detailed name" : "Podrobné meno", - "Notes" : "Poznámky", - "Website" : "Webstránka", - "Federated Cloud ID" : "Združené Cloud ID", - "Home" : "Domov", - "Work" : "Práca", - "Other" : "Iné", - "Groups" : "Skupiny", - "Birthday" : "Narodeniny", - "Anniversary" : "Výročie", - "Date of death" : "Dátum smrti", - "Email" : "Email", - "Instant messaging" : "Instant messaging", - "Phone" : "Telefón", - "Mobile" : "Mobil", - "Work mobile" : "Pracovný mobil", - "Fax" : "Fax", - "Fax home" : "Fax doma", - "Fax work" : "Fax v práci", - "Pager" : "Pager", - "Voice" : "Odkazová schránka", - "Car" : "Auto", - "Work pager" : "Pracovný pager", - "Social network" : "Sociálna sieť", - "Relationship" : "Vzťah", - "Specify a relationship between you and the entity represented by this vCard." : "Vzťah medzi entitou reprezentovanou touto vCard vizitkou a Vami.", - "Spouse" : "Partner/ka", - "Child" : "Dieťa", - "Mother" : "Matka", - "Father" : "Otec", - "Parent" : "Rodič", - "Brother" : "Brat", - "Sister" : "Sestra", - "Relative" : "Príbuzný", - "Friend" : "Kamarát/ka", - "Colleague" : "Kolega", - "Manager" : "Manažér", - "Assistant" : "Asistent", - "Related" : "Súvisiace", - "Specify a relationship between another entity and the entity represented by this vCard." : "Vzťah medzi entitou reprezentovanou touto vCard vizitkou a ďalšou entitou.", - "Contact" : "Kontakt", - "Agent" : "Agent", - "Emergency" : "Núdzový kontakt", - "Co-worker" : "Spolupracovník", - "Gender" : "Pohlavie", - "Female" : "Žena", - "Male" : "Muž", - "Details" : "Podrobnosti", - "A contacts app for Nextcloud" : "Apka kontaktov pre Nextcloud", - "Settings" : "Nastavenia" -},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);" -} \ No newline at end of file diff --git a/l10n/sl.js b/l10n/sl.js deleted file mode 100644 index 4f83438b..00000000 --- a/l10n/sl.js +++ /dev/null @@ -1,112 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Stiki", - "Download" : "Prejmi", - "Copy link" : "Kopiraj povezavo", - "Click to copy the link to your clipboard" : "Klikni, da kopiraš povezavo na tvoje odlagališče", - "Toggle sharing" : "Preklopi deljenje", - "Delete" : "Pobriši", - "Rename" : "Preimenuj", - "Share with users or groups" : "Deli z uporabniki ali skupinami", - "can edit" : "lahko ureja", - "Close" : "Zapri", - "Enabled" : "Omogočeno", - "Disabled" : "Onemogočeno", - "Copied!" : "Kopirano!", - "Not supported!" : "Ni podprto!", - "Press ⌘-C to copy." : "Pritisni ⌘-C za kopiranje.", - "Press Ctrl-C to copy." : "Pritisni Ctrl-C za kopiranje.", - "Address book name" : "Ime imenika", - "Only these special characters are allowed: -_.!?#|()" : "Dovoljeni so le sledeči posebni znaki: -_.!?#|()", - "Address book could not be created." : "Imenika ni mogoče ustvariti.", - "Upload new image" : "Naloži novo sliko", - "The selected image is too big (max 1MB)" : "Izbrana slika je prevelika (omejitev je 1 MB).", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Ta kartica je počkodovana in je bila popravljena. Preveri podatke in shrani, da bodo spremembe trajne.", - "No contacts in here" : "Ni dodanega nobenega stika!", - "Name" : "Ime", - "Organization" : "Ustanova", - "Title" : "Naziv/funkcija", - "Add field …" : "Dodaj polje", - "Save changes" : "Shrani spremembe", - "Address book" : "Imenik", - "Loading contacts …" : "Nalaganje stikov ...", - "Import into" : "Uvozi v", - "Importing..." : "Uvažanje ...", - "Select your addressbook" : "Izberi imenik", - "Import is disabled because no writable address book had been found." : "Uvoz je onemogočen! Ni mogoče najti zapisljivega imenika.", - "No search result for {query}" : "Ni zadetkov iskanja za {query}", - "All contacts" : "Vsi stiki", - "Post office box" : "Poštni predal", - "Postal code" : "Poštna številka", - "City" : "Mesto", - "State or province" : "Zvezna država ali provinca", - "Country" : "Država", - "Address" : "Naslov", - "(new group)" : "(nova skupina)", - "Last name" : "Priimek", - "First name" : "Ime", - "Additional names" : "Druga imena", - "Prefix" : "Predpona", - "Suffix" : "Pripona", - "Importing into" : "Uvažanje informacij", - "New contact" : "Nov stik", - "Not grouped" : "Brez skupine", - "Sort by" : "Uredi po", - "There is no address book available to create a contact." : "Za ustvarjanje stika ni na voljo nobenega imenika", - "{addressbook} shared by {owner}" : "Souporabo imenika {addressbook} je omogočil uporabnik {owner}", - "Contact not found." : "Stika ne najdem.", - "You don't have permission to write to this addressbook." : "Nimate dovoljenja za zapisovanje v imenik", - "Contact could not be created." : "Stika ni mogoče ustvariti.", - "No contacts in file. Only vCard files are allowed." : "V datoteki ni stikov. Dovoljene so samo vCard datoteke.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Podprti sta le različici vCard 4.0 (RFC6350) in vCard 3.0 (RFC2426).", - "Contact could not be moved." : "Stika ni mogoče premakniti", - "Contact could not be saved." : "Stikov ne morem shraniti.", - "Waiting for the server to be ready…" : "Čakanje na strežnik ...", - "Importing…" : "Uvažanje", - "Display name" : "Prikaži ime", - "Nickname" : "Vzdevek", - "Detailed name" : "Podrobno ime", - "Notes" : "Zapiski", - "Website" : "Spletna stran", - "Federated Cloud ID" : "ID zveznega oblaka", - "Home" : "Domači naslov", - "Work" : "Službeni naslov", - "Other" : "Drugo", - "Groups" : "Skupine", - "Birthday" : "Rojstni dan", - "Anniversary" : "Obletnica", - "Date of death" : "Datum smrti", - "Email" : "Elektronski naslov", - "Instant messaging" : "Hipno sporočanje", - "Phone" : "Telefon", - "Mobile" : "Mobilni telefon", - "Work mobile" : "Službeni mobilni telefon", - "Fax" : "Faks", - "Fax home" : "Domači faks", - "Fax work" : "Službeni faks", - "Pager" : "Pozivnik", - "Voice" : "Glas", - "Car" : "Avto", - "Work pager" : "Službeni pager", - "Social network" : "Družbeno omrežje", - "Relationship" : "Razmerje", - "Spouse" : "Partner", - "Child" : "Otrok", - "Mother" : "Mati", - "Father" : "Oče", - "Parent" : "Starš", - "Brother" : "Brat", - "Sister" : "Sestra", - "Relative" : "Sorodnik", - "Friend" : "Prijatelj", - "Colleague" : "kolega", - "Manager" : "Vodja", - "Assistant" : "Asistent", - "Gender" : "Spol", - "Female" : "Ženska", - "Male" : "Moški", - "Details" : "Podrobnosti", - "Settings" : "Nastavitve" -}, -"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); diff --git a/l10n/sl.json b/l10n/sl.json deleted file mode 100644 index 48984e32..00000000 --- a/l10n/sl.json +++ /dev/null @@ -1,110 +0,0 @@ -{ "translations": { - "Contacts" : "Stiki", - "Download" : "Prejmi", - "Copy link" : "Kopiraj povezavo", - "Click to copy the link to your clipboard" : "Klikni, da kopiraš povezavo na tvoje odlagališče", - "Toggle sharing" : "Preklopi deljenje", - "Delete" : "Pobriši", - "Rename" : "Preimenuj", - "Share with users or groups" : "Deli z uporabniki ali skupinami", - "can edit" : "lahko ureja", - "Close" : "Zapri", - "Enabled" : "Omogočeno", - "Disabled" : "Onemogočeno", - "Copied!" : "Kopirano!", - "Not supported!" : "Ni podprto!", - "Press ⌘-C to copy." : "Pritisni ⌘-C za kopiranje.", - "Press Ctrl-C to copy." : "Pritisni Ctrl-C za kopiranje.", - "Address book name" : "Ime imenika", - "Only these special characters are allowed: -_.!?#|()" : "Dovoljeni so le sledeči posebni znaki: -_.!?#|()", - "Address book could not be created." : "Imenika ni mogoče ustvariti.", - "Upload new image" : "Naloži novo sliko", - "The selected image is too big (max 1MB)" : "Izbrana slika je prevelika (omejitev je 1 MB).", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Ta kartica je počkodovana in je bila popravljena. Preveri podatke in shrani, da bodo spremembe trajne.", - "No contacts in here" : "Ni dodanega nobenega stika!", - "Name" : "Ime", - "Organization" : "Ustanova", - "Title" : "Naziv/funkcija", - "Add field …" : "Dodaj polje", - "Save changes" : "Shrani spremembe", - "Address book" : "Imenik", - "Loading contacts …" : "Nalaganje stikov ...", - "Import into" : "Uvozi v", - "Importing..." : "Uvažanje ...", - "Select your addressbook" : "Izberi imenik", - "Import is disabled because no writable address book had been found." : "Uvoz je onemogočen! Ni mogoče najti zapisljivega imenika.", - "No search result for {query}" : "Ni zadetkov iskanja za {query}", - "All contacts" : "Vsi stiki", - "Post office box" : "Poštni predal", - "Postal code" : "Poštna številka", - "City" : "Mesto", - "State or province" : "Zvezna država ali provinca", - "Country" : "Država", - "Address" : "Naslov", - "(new group)" : "(nova skupina)", - "Last name" : "Priimek", - "First name" : "Ime", - "Additional names" : "Druga imena", - "Prefix" : "Predpona", - "Suffix" : "Pripona", - "Importing into" : "Uvažanje informacij", - "New contact" : "Nov stik", - "Not grouped" : "Brez skupine", - "Sort by" : "Uredi po", - "There is no address book available to create a contact." : "Za ustvarjanje stika ni na voljo nobenega imenika", - "{addressbook} shared by {owner}" : "Souporabo imenika {addressbook} je omogočil uporabnik {owner}", - "Contact not found." : "Stika ne najdem.", - "You don't have permission to write to this addressbook." : "Nimate dovoljenja za zapisovanje v imenik", - "Contact could not be created." : "Stika ni mogoče ustvariti.", - "No contacts in file. Only vCard files are allowed." : "V datoteki ni stikov. Dovoljene so samo vCard datoteke.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Podprti sta le različici vCard 4.0 (RFC6350) in vCard 3.0 (RFC2426).", - "Contact could not be moved." : "Stika ni mogoče premakniti", - "Contact could not be saved." : "Stikov ne morem shraniti.", - "Waiting for the server to be ready…" : "Čakanje na strežnik ...", - "Importing…" : "Uvažanje", - "Display name" : "Prikaži ime", - "Nickname" : "Vzdevek", - "Detailed name" : "Podrobno ime", - "Notes" : "Zapiski", - "Website" : "Spletna stran", - "Federated Cloud ID" : "ID zveznega oblaka", - "Home" : "Domači naslov", - "Work" : "Službeni naslov", - "Other" : "Drugo", - "Groups" : "Skupine", - "Birthday" : "Rojstni dan", - "Anniversary" : "Obletnica", - "Date of death" : "Datum smrti", - "Email" : "Elektronski naslov", - "Instant messaging" : "Hipno sporočanje", - "Phone" : "Telefon", - "Mobile" : "Mobilni telefon", - "Work mobile" : "Službeni mobilni telefon", - "Fax" : "Faks", - "Fax home" : "Domači faks", - "Fax work" : "Službeni faks", - "Pager" : "Pozivnik", - "Voice" : "Glas", - "Car" : "Avto", - "Work pager" : "Službeni pager", - "Social network" : "Družbeno omrežje", - "Relationship" : "Razmerje", - "Spouse" : "Partner", - "Child" : "Otrok", - "Mother" : "Mati", - "Father" : "Oče", - "Parent" : "Starš", - "Brother" : "Brat", - "Sister" : "Sestra", - "Relative" : "Sorodnik", - "Friend" : "Prijatelj", - "Colleague" : "kolega", - "Manager" : "Vodja", - "Assistant" : "Asistent", - "Gender" : "Spol", - "Female" : "Ženska", - "Male" : "Moški", - "Details" : "Podrobnosti", - "Settings" : "Nastavitve" -},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" -} \ No newline at end of file diff --git a/l10n/sq.js b/l10n/sq.js deleted file mode 100644 index a6dc9a38..00000000 --- a/l10n/sq.js +++ /dev/null @@ -1,109 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontaktet", - "Download" : "Shkarko", - "Copy link" : "Kopjo linkun", - "Click to copy the link to your clipboard" : "Kliko për të kopjuar linkun në klipbord", - "Toggle sharing" : "Toggle sharing", - "Delete" : "Fshije", - "Rename" : "Riemëro", - "Share with users or groups" : "Nda me përdoruesit ose grupet", - "can edit" : "mund të modifikoni", - "Close" : "Mbylle", - "Enabled" : "I aktivizuar", - "Disabled" : "I çaktivizuar", - "Copied!" : "U kopjua!", - "Not supported!" : "Nuk mbështetet!", - "Press ⌘-C to copy." : "Shtyp ⌘-C për të kopjuar.", - "Press Ctrl-C to copy." : "Shtyp Ctrl-C për të kopjuar.", - "Address book name" : "Emër libri adresash", - "Only these special characters are allowed: -_.!?#|()" : "Lejohen vetëm këto karaktere speciale: -_.!?#|()", - "Address book could not be created." : "Libri i adresave nuk mund të krijohet. ", - "The selected image is too big (max 1MB)" : "Figura e përzgjedhur është shumë e madhe (maksimumi 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Kjo kartë është e korruptuar dhe u rregullua. Ju lutemi kontrolloni të dhënat dhe shtypni në save që ti bëni ndryshimet permanente. ", - "No contacts in here" : "S’ka kontakte këtu", - "Name" : "Emër", - "Organization" : "Organizim", - "Title" : "Titull", - "Add field …" : "Shto fushen ...", - "Save changes" : "Ruaj ndryshimet", - "Address book" : "Libri i adresave", - "Loading contacts …" : "Duke ngarkuar kontaktet ...", - "Import into" : "Importo tek ", - "Importing..." : "Duke u importuar ...", - "Select your addressbook" : "Zgjedhni librin tuaj të adresave", - "Import is disabled because no writable address book had been found." : "Importi është i çaktivizuar sepse nuk është gjetur libër adresash i shkrueshëm ", - "No search result for {query}" : "Nuk pati rezultate kërkimi për {query}", - "All contacts" : "Të gjithë kontaktet", - "Post office box" : "Kuti postare në postë", - "Postal code" : "Kod postar", - "City" : "Qytet", - "State or province" : "Shtet ose provincë", - "Country" : "Vend", - "Address" : "Adresë", - "(new group)" : "(grup i ri)", - "Last name" : "Mbiemër", - "First name" : "Emër", - "Additional names" : "Emra shtesë", - "Prefix" : "Parashtesë", - "Suffix" : "Prapashtesë", - "Importing into" : "Duke u importuar në", - "New contact" : "Kontakt i ri", - "Not grouped" : "I pagrupuar", - "Sort by" : "I renditur nga", - "There is no address book available to create a contact." : "Nuk ka libër adresash të disponueshëm për të krijuar një kontakt.", - "{addressbook} shared by {owner}" : "{addressbook} ndarë nga {owner}", - "Contact not found." : "Kontakti nuk u gjet.", - "You don't have permission to write to this addressbook." : "Nuk keni leje të shkruani në këtë libër adresash.", - "Contact could not be created." : "Kontakti nuk u krijua dot.", - "No contacts in file. Only vCard files are allowed." : "Asnjë kontakt në skedar. Vetëm skedarët vCard lejohen.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Vetëm versioni vCard 4.0 (RFC6350) ose versioni 3.0 (RFC2426) janë të suportuara.", - "Contact could not be moved." : "Kontakti nuk mund të lëvizet.", - "Contact could not be saved." : "Kontaktet nuk mund të ruheshin.", - "Waiting for the server to be ready…" : "Duke pritur që serveri të jetë gati...", - "Importing…" : "Duke importuar...", - "Display name" : "Shfaq emrin", - "Nickname" : "Nofkë", - "Detailed name" : "Emri i hollësishëm", - "Notes" : "Shënime", - "Website" : "Faqe interneti", - "Federated Cloud ID" : "ID Federated Cloud", - "Home" : "Kreu", - "Work" : "Punë", - "Other" : "Tjetër", - "Groups" : "Grupe", - "Birthday" : "Datëlindje", - "Anniversary" : "Përvjetor", - "Date of death" : "Datë vdekjeje", - "Email" : "Email", - "Instant messaging" : "Shkëmbim i atypëratyshëm mesazhesh", - "Phone" : "Telefon", - "Mobile" : "Celular", - "Fax" : "Faks", - "Fax home" : "Faks shtëpie", - "Fax work" : "Faks pune", - "Pager" : "Faques", - "Voice" : "Zë", - "Car" : "Makine", - "Social network" : "Rrjet social", - "Relationship" : "Marrëdhënia", - "Spouse" : "Bashkëshort/e", - "Child" : "Fëmijë", - "Mother" : "Nënë", - "Father" : "Atë", - "Parent" : "Prind", - "Brother" : "Vëlla", - "Sister" : "Motër", - "Relative" : "Kushëri", - "Friend" : "Shok/shoqe", - "Colleague" : "Koleg/e", - "Manager" : "Manaxher/e", - "Assistant" : "Asistent/e", - "Gender" : "Gjinia", - "Female" : "Femër", - "Male" : "Mashkull", - "Details" : "Detajet", - "Settings" : "Konfigurime" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/sq.json b/l10n/sq.json deleted file mode 100644 index 128757c9..00000000 --- a/l10n/sq.json +++ /dev/null @@ -1,107 +0,0 @@ -{ "translations": { - "Contacts" : "Kontaktet", - "Download" : "Shkarko", - "Copy link" : "Kopjo linkun", - "Click to copy the link to your clipboard" : "Kliko për të kopjuar linkun në klipbord", - "Toggle sharing" : "Toggle sharing", - "Delete" : "Fshije", - "Rename" : "Riemëro", - "Share with users or groups" : "Nda me përdoruesit ose grupet", - "can edit" : "mund të modifikoni", - "Close" : "Mbylle", - "Enabled" : "I aktivizuar", - "Disabled" : "I çaktivizuar", - "Copied!" : "U kopjua!", - "Not supported!" : "Nuk mbështetet!", - "Press ⌘-C to copy." : "Shtyp ⌘-C për të kopjuar.", - "Press Ctrl-C to copy." : "Shtyp Ctrl-C për të kopjuar.", - "Address book name" : "Emër libri adresash", - "Only these special characters are allowed: -_.!?#|()" : "Lejohen vetëm këto karaktere speciale: -_.!?#|()", - "Address book could not be created." : "Libri i adresave nuk mund të krijohet. ", - "The selected image is too big (max 1MB)" : "Figura e përzgjedhur është shumë e madhe (maksimumi 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Kjo kartë është e korruptuar dhe u rregullua. Ju lutemi kontrolloni të dhënat dhe shtypni në save që ti bëni ndryshimet permanente. ", - "No contacts in here" : "S’ka kontakte këtu", - "Name" : "Emër", - "Organization" : "Organizim", - "Title" : "Titull", - "Add field …" : "Shto fushen ...", - "Save changes" : "Ruaj ndryshimet", - "Address book" : "Libri i adresave", - "Loading contacts …" : "Duke ngarkuar kontaktet ...", - "Import into" : "Importo tek ", - "Importing..." : "Duke u importuar ...", - "Select your addressbook" : "Zgjedhni librin tuaj të adresave", - "Import is disabled because no writable address book had been found." : "Importi është i çaktivizuar sepse nuk është gjetur libër adresash i shkrueshëm ", - "No search result for {query}" : "Nuk pati rezultate kërkimi për {query}", - "All contacts" : "Të gjithë kontaktet", - "Post office box" : "Kuti postare në postë", - "Postal code" : "Kod postar", - "City" : "Qytet", - "State or province" : "Shtet ose provincë", - "Country" : "Vend", - "Address" : "Adresë", - "(new group)" : "(grup i ri)", - "Last name" : "Mbiemër", - "First name" : "Emër", - "Additional names" : "Emra shtesë", - "Prefix" : "Parashtesë", - "Suffix" : "Prapashtesë", - "Importing into" : "Duke u importuar në", - "New contact" : "Kontakt i ri", - "Not grouped" : "I pagrupuar", - "Sort by" : "I renditur nga", - "There is no address book available to create a contact." : "Nuk ka libër adresash të disponueshëm për të krijuar një kontakt.", - "{addressbook} shared by {owner}" : "{addressbook} ndarë nga {owner}", - "Contact not found." : "Kontakti nuk u gjet.", - "You don't have permission to write to this addressbook." : "Nuk keni leje të shkruani në këtë libër adresash.", - "Contact could not be created." : "Kontakti nuk u krijua dot.", - "No contacts in file. Only vCard files are allowed." : "Asnjë kontakt në skedar. Vetëm skedarët vCard lejohen.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Vetëm versioni vCard 4.0 (RFC6350) ose versioni 3.0 (RFC2426) janë të suportuara.", - "Contact could not be moved." : "Kontakti nuk mund të lëvizet.", - "Contact could not be saved." : "Kontaktet nuk mund të ruheshin.", - "Waiting for the server to be ready…" : "Duke pritur që serveri të jetë gati...", - "Importing…" : "Duke importuar...", - "Display name" : "Shfaq emrin", - "Nickname" : "Nofkë", - "Detailed name" : "Emri i hollësishëm", - "Notes" : "Shënime", - "Website" : "Faqe interneti", - "Federated Cloud ID" : "ID Federated Cloud", - "Home" : "Kreu", - "Work" : "Punë", - "Other" : "Tjetër", - "Groups" : "Grupe", - "Birthday" : "Datëlindje", - "Anniversary" : "Përvjetor", - "Date of death" : "Datë vdekjeje", - "Email" : "Email", - "Instant messaging" : "Shkëmbim i atypëratyshëm mesazhesh", - "Phone" : "Telefon", - "Mobile" : "Celular", - "Fax" : "Faks", - "Fax home" : "Faks shtëpie", - "Fax work" : "Faks pune", - "Pager" : "Faques", - "Voice" : "Zë", - "Car" : "Makine", - "Social network" : "Rrjet social", - "Relationship" : "Marrëdhënia", - "Spouse" : "Bashkëshort/e", - "Child" : "Fëmijë", - "Mother" : "Nënë", - "Father" : "Atë", - "Parent" : "Prind", - "Brother" : "Vëlla", - "Sister" : "Motër", - "Relative" : "Kushëri", - "Friend" : "Shok/shoqe", - "Colleague" : "Koleg/e", - "Manager" : "Manaxher/e", - "Assistant" : "Asistent/e", - "Gender" : "Gjinia", - "Female" : "Femër", - "Male" : "Mashkull", - "Details" : "Detajet", - "Settings" : "Konfigurime" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/sr.js b/l10n/sr.js deleted file mode 100644 index 133d9018..00000000 --- a/l10n/sr.js +++ /dev/null @@ -1,121 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Контакти", - "Download" : "Преузми", - "Copy link" : "Копирај везу", - "Click to copy the link to your clipboard" : "Кликните на везу испод да је копирате", - "Toggle sharing" : "Укључи/искључи дељење", - "Delete" : "Обриши", - "Rename" : "Преименуј", - "Share with users or groups" : "Дели са корисницима или групама", - "can edit" : "може да мења", - "Close" : "Затвори", - "Enabled" : "Укључено", - "Disabled" : "Искључено", - "Copied!" : "Копирано!", - "Not supported!" : "Није подржано!", - "Press ⌘-C to copy." : "Притисни ⌘-C за копирање.", - "Press Ctrl-C to copy." : "Притисни Ctrl-C за копирање.", - "Address book name" : "Име адресара", - "Only these special characters are allowed: -_.!?#|()" : "Само ови специјални карактери су дозвољени: -_.!?#|()", - "Address book could not be created." : "Адресар не може да се креира.", - "Upload new image" : "Отпремите нову слику", - "The selected image is too big (max 1MB)" : "Изабрана слика је превелика (макс 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Овај контакт је оштећен и сад је поправљен. Проверите податке и снимите га ако желите да запамтите ове измене.", - "No contacts in here" : "Овде нема контаката", - "Name" : "Назив", - "Organization" : "Организација", - "Title" : "Титула", - "Add field …" : "Додај поље …", - "Save changes" : "Сними измене", - "Address book" : "Адресар", - "Loading contacts …" : "Учитавам контакте …", - "Import into" : "Увези у", - "Importing..." : "Увозим...", - "Select your addressbook" : "Одаберите Ваш адресар", - "Import is disabled because no writable address book had been found." : "Увоз је искључен зато што није нађен ниједан адресар у који може да се пише.", - "No search result for {query}" : "Није нађен ниједан резултат за претрагу {query}", - "All contacts" : "Сви контакти", - "Post office box" : "Поштанско сандуче", - "Postal code" : "Поштански број", - "City" : "Место", - "State or province" : "Покрајина или провинција", - "Country" : "Држава", - "Address" : "Адреса", - "(new group)" : "(нова група)", - "Last name" : "Презиме", - "First name" : "Име", - "Additional names" : "Додатна имена", - "Prefix" : "Префикс", - "Suffix" : "Суфикс", - "Importing into" : "Увозим у", - "New contact" : "Нови контакт", - "Not grouped" : "Негруписани", - "Sort by" : "Сортирај по", - "There is no address book available to create a contact." : "Нема адресара у коме може да се креира нови контакт.", - "{addressbook} shared by {owner}" : "{addressbook} поделио {owner}", - "Contact not found." : "Контакт није нађен.", - "You don't have permission to write to this addressbook." : "Немате дозволе да уписујете у овај адресар.", - "Contact could not be created." : "Контакт не може да се направи.", - "No contacts in file. Only vCard files are allowed." : "Нема контаката у фајлу. Дозвољени су само vCard фајлови.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Подржани су само vCard верзија 4.0 (RFC6350) и верзија 3.0 (RFC2426).", - "Contact could not be moved." : "Контакт не може да се премести.", - "Contact could not be saved." : "Не могу да сачувам контакт.", - "Waiting for the server to be ready…" : "Чекам да сервер буде спреман…", - "Importing…" : "Увозим…", - "Display name" : "Име за приказ", - "Nickname" : "Надимак", - "Detailed name" : "Пуно име", - "Notes" : "Белешке", - "Website" : "Вебсајт", - "Federated Cloud ID" : "ИД Здруженог облака", - "Home" : "Кућа", - "Work" : "Посао", - "Other" : "Остало", - "Groups" : "Групе", - "Birthday" : "Рођендан", - "Anniversary" : "Годишњица", - "Date of death" : "Датум смрти", - "Email" : "Е-пошта", - "Instant messaging" : "Брзе поруке", - "Phone" : "Телефон", - "Mobile" : "Мобилни", - "Work mobile" : "Пословни мобилни", - "Fax" : "Факс", - "Fax home" : "Факс кућа", - "Fax work" : "Факс посао", - "Pager" : "Пејџер", - "Voice" : "Гласовна пошта", - "Car" : "Кола", - "Work pager" : "Пословни пејџер", - "Social network" : "Социјална мрежа", - "Relationship" : "Однос", - "Specify a relationship between you and the entity represented by this vCard." : "Одредите везу између Вас и ентитета представљеног овим vCard-ом.", - "Spouse" : "Супруга", - "Child" : "Дете", - "Mother" : "Мајка", - "Father" : "Отац", - "Parent" : "Родитељ", - "Brother" : "Брат", - "Sister" : "Сестра", - "Relative" : "Родбина", - "Friend" : "Пријатељ", - "Colleague" : "Колега", - "Manager" : "Менаџер", - "Assistant" : "Асистент", - "Related" : "У релацији", - "Specify a relationship between another entity and the entity represented by this vCard." : "Одредите везу између другог ентитета и ентитета представљеног овим vCard-ом.", - "Contact" : "Контакт", - "Agent" : "Агент", - "Emergency" : "Хитни број", - "Co-worker" : "Колега", - "Gender" : "Пол", - "Female" : "Женски", - "Male" : "Мушки", - "Details" : "Детаљи", - "A contacts app for Nextcloud" : "Некстклауд апликација за контакте", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "Некстклауд апликација за контакте је кориснички интерфејс за Некстклаудов CardDAV сервер. Лако синхронизујте контакте са различитих уређаја са Вашим Некстклаудом и мењајте их преко мреже.\n\n* 🚀 **Интеграција са осталим Некстклауд апликацијама!** Тренутно са Е-Поштом и Календаром – планирано је још.\n* 🎉 **Да никад не заборавите рођендан!** Можете синхронизовати рођендане и друге догађаје који се понављају са Некстклауд Календаром.\n* 👥 **Дељење именика!** Желите да поделите Ваше контакте са пријатељима или колегама? Нема проблема!\n* 🙈 **Не измишљамо топлу воду!** Базирано на сјајној и отвореној SabreDAV библиотеци.", - "Settings" : "Поставке" -}, -"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/l10n/sr.json b/l10n/sr.json deleted file mode 100644 index 06d7654a..00000000 --- a/l10n/sr.json +++ /dev/null @@ -1,119 +0,0 @@ -{ "translations": { - "Contacts" : "Контакти", - "Download" : "Преузми", - "Copy link" : "Копирај везу", - "Click to copy the link to your clipboard" : "Кликните на везу испод да је копирате", - "Toggle sharing" : "Укључи/искључи дељење", - "Delete" : "Обриши", - "Rename" : "Преименуј", - "Share with users or groups" : "Дели са корисницима или групама", - "can edit" : "може да мења", - "Close" : "Затвори", - "Enabled" : "Укључено", - "Disabled" : "Искључено", - "Copied!" : "Копирано!", - "Not supported!" : "Није подржано!", - "Press ⌘-C to copy." : "Притисни ⌘-C за копирање.", - "Press Ctrl-C to copy." : "Притисни Ctrl-C за копирање.", - "Address book name" : "Име адресара", - "Only these special characters are allowed: -_.!?#|()" : "Само ови специјални карактери су дозвољени: -_.!?#|()", - "Address book could not be created." : "Адресар не може да се креира.", - "Upload new image" : "Отпремите нову слику", - "The selected image is too big (max 1MB)" : "Изабрана слика је превелика (макс 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Овај контакт је оштећен и сад је поправљен. Проверите податке и снимите га ако желите да запамтите ове измене.", - "No contacts in here" : "Овде нема контаката", - "Name" : "Назив", - "Organization" : "Организација", - "Title" : "Титула", - "Add field …" : "Додај поље …", - "Save changes" : "Сними измене", - "Address book" : "Адресар", - "Loading contacts …" : "Учитавам контакте …", - "Import into" : "Увези у", - "Importing..." : "Увозим...", - "Select your addressbook" : "Одаберите Ваш адресар", - "Import is disabled because no writable address book had been found." : "Увоз је искључен зато што није нађен ниједан адресар у који може да се пише.", - "No search result for {query}" : "Није нађен ниједан резултат за претрагу {query}", - "All contacts" : "Сви контакти", - "Post office box" : "Поштанско сандуче", - "Postal code" : "Поштански број", - "City" : "Место", - "State or province" : "Покрајина или провинција", - "Country" : "Држава", - "Address" : "Адреса", - "(new group)" : "(нова група)", - "Last name" : "Презиме", - "First name" : "Име", - "Additional names" : "Додатна имена", - "Prefix" : "Префикс", - "Suffix" : "Суфикс", - "Importing into" : "Увозим у", - "New contact" : "Нови контакт", - "Not grouped" : "Негруписани", - "Sort by" : "Сортирај по", - "There is no address book available to create a contact." : "Нема адресара у коме може да се креира нови контакт.", - "{addressbook} shared by {owner}" : "{addressbook} поделио {owner}", - "Contact not found." : "Контакт није нађен.", - "You don't have permission to write to this addressbook." : "Немате дозволе да уписујете у овај адресар.", - "Contact could not be created." : "Контакт не може да се направи.", - "No contacts in file. Only vCard files are allowed." : "Нема контаката у фајлу. Дозвољени су само vCard фајлови.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Подржани су само vCard верзија 4.0 (RFC6350) и верзија 3.0 (RFC2426).", - "Contact could not be moved." : "Контакт не може да се премести.", - "Contact could not be saved." : "Не могу да сачувам контакт.", - "Waiting for the server to be ready…" : "Чекам да сервер буде спреман…", - "Importing…" : "Увозим…", - "Display name" : "Име за приказ", - "Nickname" : "Надимак", - "Detailed name" : "Пуно име", - "Notes" : "Белешке", - "Website" : "Вебсајт", - "Federated Cloud ID" : "ИД Здруженог облака", - "Home" : "Кућа", - "Work" : "Посао", - "Other" : "Остало", - "Groups" : "Групе", - "Birthday" : "Рођендан", - "Anniversary" : "Годишњица", - "Date of death" : "Датум смрти", - "Email" : "Е-пошта", - "Instant messaging" : "Брзе поруке", - "Phone" : "Телефон", - "Mobile" : "Мобилни", - "Work mobile" : "Пословни мобилни", - "Fax" : "Факс", - "Fax home" : "Факс кућа", - "Fax work" : "Факс посао", - "Pager" : "Пејџер", - "Voice" : "Гласовна пошта", - "Car" : "Кола", - "Work pager" : "Пословни пејџер", - "Social network" : "Социјална мрежа", - "Relationship" : "Однос", - "Specify a relationship between you and the entity represented by this vCard." : "Одредите везу између Вас и ентитета представљеног овим vCard-ом.", - "Spouse" : "Супруга", - "Child" : "Дете", - "Mother" : "Мајка", - "Father" : "Отац", - "Parent" : "Родитељ", - "Brother" : "Брат", - "Sister" : "Сестра", - "Relative" : "Родбина", - "Friend" : "Пријатељ", - "Colleague" : "Колега", - "Manager" : "Менаџер", - "Assistant" : "Асистент", - "Related" : "У релацији", - "Specify a relationship between another entity and the entity represented by this vCard." : "Одредите везу између другог ентитета и ентитета представљеног овим vCard-ом.", - "Contact" : "Контакт", - "Agent" : "Агент", - "Emergency" : "Хитни број", - "Co-worker" : "Колега", - "Gender" : "Пол", - "Female" : "Женски", - "Male" : "Мушки", - "Details" : "Детаљи", - "A contacts app for Nextcloud" : "Некстклауд апликација за контакте", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "Некстклауд апликација за контакте је кориснички интерфејс за Некстклаудов CardDAV сервер. Лако синхронизујте контакте са различитих уређаја са Вашим Некстклаудом и мењајте их преко мреже.\n\n* 🚀 **Интеграција са осталим Некстклауд апликацијама!** Тренутно са Е-Поштом и Календаром – планирано је још.\n* 🎉 **Да никад не заборавите рођендан!** Можете синхронизовати рођендане и друге догађаје који се понављају са Некстклауд Календаром.\n* 👥 **Дељење именика!** Желите да поделите Ваше контакте са пријатељима или колегама? Нема проблема!\n* 🙈 **Не измишљамо топлу воду!** Базирано на сјајној и отвореној SabreDAV библиотеци.", - "Settings" : "Поставке" -},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" -} \ No newline at end of file diff --git a/l10n/sv.js b/l10n/sv.js deleted file mode 100644 index 72658bff..00000000 --- a/l10n/sv.js +++ /dev/null @@ -1,111 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kontakter", - "Download" : "Ladda ned", - "Copy link" : "Kopiera länk", - "Click to copy the link to your clipboard" : "Klicka för att kopiera länken", - "Toggle sharing" : "Växla delning", - "Delete" : "Radera", - "Rename" : "Byt namn", - "Share with users or groups" : "Dela med användare eller grupper", - "can edit" : "kan redigera", - "Close" : "Stäng", - "Enabled" : "Aktiverad", - "Disabled" : "Inaktiverad", - "Copied!" : "Kopierat!", - "Not supported!" : "Stöds inte!", - "Press ⌘-C to copy." : "Tryck ⌘-C för att kopiera.", - "Press Ctrl-C to copy." : "Tryck Ctrl-C för att kopiera.", - "Address book name" : "Adressboknamn", - "Only these special characters are allowed: -_.!?#|()" : "Endast följande specialtecken tillåts: -_.!?#|()", - "Address book could not be created." : "Adressboken kunde inte skapas.", - "The selected image is too big (max 1MB)" : "Den valda bilden är för stor (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Kortet är korrupt och har fixats. Var god kontrollera datan och spara för att göra ändringarna permanenta.", - "No contacts in here" : "Det finns inga kontakter här", - "Name" : "Namn", - "Organization" : "Organisation", - "Title" : "Rubrik", - "Add field …" : "Lägg till fält ...", - "Save changes" : "Spara ändringar", - "Address book" : "Adressbok", - "Loading contacts …" : "Laddar kontakter ...", - "Import into" : "Importera till", - "Importing..." : "Importerar...", - "Select your addressbook" : "Välj din adressbok", - "Import is disabled because no writable address book had been found." : "Importering är inaktiverat eftersom ingen skrivbara adressbok hittades.", - "No search result for {query}" : "Inget sökresultat för {query}", - "All contacts" : "Alla kontakter", - "Post office box" : "Postbox", - "Postal code" : "Postnummer", - "City" : "Stad", - "State or province" : "Län eller Kommun", - "Country" : "Land", - "Address" : "Adress", - "(new group)" : "(ny grupp)", - "Last name" : "Efternamn", - "First name" : "Förnamn", - "Additional names" : "Mellannamn", - "Prefix" : "Prefix", - "Suffix" : "Suffix", - "Importing into" : "Importerar till", - "New contact" : "Ny kontakt", - "Not grouped" : "Inte grupperad", - "Sort by" : "Sortera efter", - "There is no address book available to create a contact." : "Det finns ingen adressbok tillgänglig för att skapa en kontakt.", - "{addressbook} shared by {owner}" : "{addressbook} delad av {owner}", - "Contact not found." : "Kontakt inte funnen.", - "You don't have permission to write to this addressbook." : "Du har inte tillgång att skriva till denna adressbok.", - "Contact could not be created." : "Kontakt kunde inte skapas", - "No contacts in file. Only vCard files are allowed." : "Inga kontakter i fil. Bara vCard-filer är tillåtna.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Bara vCard version 4.0 (RFC6350) eller version 3.0 (RFC2426) stöds.", - "Contact could not be moved." : "Kontakt kunde inte flyttas.", - "Contact could not be saved." : "Kontakt kunde inte sparas.", - "Waiting for the server to be ready…" : "Väntar på att servern ska bli klar...", - "Importing…" : "Importerar...", - "Display name" : "Visningsnamn", - "Nickname" : "Smeknamn", - "Detailed name" : "Detaljerat namn", - "Notes" : "Anteckningar", - "Website" : "Webbplats", - "Federated Cloud ID" : "Federerat Moln-ID", - "Home" : "Hem", - "Work" : "Arbete", - "Other" : "Övrigt", - "Groups" : "Grupper", - "Birthday" : "Födelsedag", - "Anniversary" : "Födelsedag", - "Date of death" : "Dödsdag", - "Email" : "E-post", - "Instant messaging" : "Snabbmeddelanden", - "Phone" : "Telefon", - "Mobile" : "Mobil", - "Work mobile" : "Mobil arbete", - "Fax" : "Fax", - "Fax home" : "Fax hem", - "Fax work" : "Fax arbete", - "Pager" : "Personsökare", - "Voice" : "Röst", - "Car" : "Bil", - "Work pager" : "Personsökare Arbete", - "Social network" : "Socialt nätverk", - "Relationship" : "Relation", - "Spouse" : "Make/Maka", - "Child" : "Barn", - "Mother" : "Mor", - "Father" : "Far", - "Parent" : "Förälder", - "Brother" : "Bror", - "Sister" : "Syster", - "Relative" : "Släkting", - "Friend" : "Vän", - "Colleague" : "Kollega", - "Manager" : "Chef", - "Assistant" : "Assistent", - "Gender" : "Kön", - "Female" : "Kvinna", - "Male" : "Man", - "Details" : "Detaljer", - "Settings" : "Inställningar" -}, -"nplurals=2; plural=(n != 1);"); diff --git a/l10n/sv.json b/l10n/sv.json deleted file mode 100644 index 53593138..00000000 --- a/l10n/sv.json +++ /dev/null @@ -1,109 +0,0 @@ -{ "translations": { - "Contacts" : "Kontakter", - "Download" : "Ladda ned", - "Copy link" : "Kopiera länk", - "Click to copy the link to your clipboard" : "Klicka för att kopiera länken", - "Toggle sharing" : "Växla delning", - "Delete" : "Radera", - "Rename" : "Byt namn", - "Share with users or groups" : "Dela med användare eller grupper", - "can edit" : "kan redigera", - "Close" : "Stäng", - "Enabled" : "Aktiverad", - "Disabled" : "Inaktiverad", - "Copied!" : "Kopierat!", - "Not supported!" : "Stöds inte!", - "Press ⌘-C to copy." : "Tryck ⌘-C för att kopiera.", - "Press Ctrl-C to copy." : "Tryck Ctrl-C för att kopiera.", - "Address book name" : "Adressboknamn", - "Only these special characters are allowed: -_.!?#|()" : "Endast följande specialtecken tillåts: -_.!?#|()", - "Address book could not be created." : "Adressboken kunde inte skapas.", - "The selected image is too big (max 1MB)" : "Den valda bilden är för stor (max 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Kortet är korrupt och har fixats. Var god kontrollera datan och spara för att göra ändringarna permanenta.", - "No contacts in here" : "Det finns inga kontakter här", - "Name" : "Namn", - "Organization" : "Organisation", - "Title" : "Rubrik", - "Add field …" : "Lägg till fält ...", - "Save changes" : "Spara ändringar", - "Address book" : "Adressbok", - "Loading contacts …" : "Laddar kontakter ...", - "Import into" : "Importera till", - "Importing..." : "Importerar...", - "Select your addressbook" : "Välj din adressbok", - "Import is disabled because no writable address book had been found." : "Importering är inaktiverat eftersom ingen skrivbara adressbok hittades.", - "No search result for {query}" : "Inget sökresultat för {query}", - "All contacts" : "Alla kontakter", - "Post office box" : "Postbox", - "Postal code" : "Postnummer", - "City" : "Stad", - "State or province" : "Län eller Kommun", - "Country" : "Land", - "Address" : "Adress", - "(new group)" : "(ny grupp)", - "Last name" : "Efternamn", - "First name" : "Förnamn", - "Additional names" : "Mellannamn", - "Prefix" : "Prefix", - "Suffix" : "Suffix", - "Importing into" : "Importerar till", - "New contact" : "Ny kontakt", - "Not grouped" : "Inte grupperad", - "Sort by" : "Sortera efter", - "There is no address book available to create a contact." : "Det finns ingen adressbok tillgänglig för att skapa en kontakt.", - "{addressbook} shared by {owner}" : "{addressbook} delad av {owner}", - "Contact not found." : "Kontakt inte funnen.", - "You don't have permission to write to this addressbook." : "Du har inte tillgång att skriva till denna adressbok.", - "Contact could not be created." : "Kontakt kunde inte skapas", - "No contacts in file. Only vCard files are allowed." : "Inga kontakter i fil. Bara vCard-filer är tillåtna.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Bara vCard version 4.0 (RFC6350) eller version 3.0 (RFC2426) stöds.", - "Contact could not be moved." : "Kontakt kunde inte flyttas.", - "Contact could not be saved." : "Kontakt kunde inte sparas.", - "Waiting for the server to be ready…" : "Väntar på att servern ska bli klar...", - "Importing…" : "Importerar...", - "Display name" : "Visningsnamn", - "Nickname" : "Smeknamn", - "Detailed name" : "Detaljerat namn", - "Notes" : "Anteckningar", - "Website" : "Webbplats", - "Federated Cloud ID" : "Federerat Moln-ID", - "Home" : "Hem", - "Work" : "Arbete", - "Other" : "Övrigt", - "Groups" : "Grupper", - "Birthday" : "Födelsedag", - "Anniversary" : "Födelsedag", - "Date of death" : "Dödsdag", - "Email" : "E-post", - "Instant messaging" : "Snabbmeddelanden", - "Phone" : "Telefon", - "Mobile" : "Mobil", - "Work mobile" : "Mobil arbete", - "Fax" : "Fax", - "Fax home" : "Fax hem", - "Fax work" : "Fax arbete", - "Pager" : "Personsökare", - "Voice" : "Röst", - "Car" : "Bil", - "Work pager" : "Personsökare Arbete", - "Social network" : "Socialt nätverk", - "Relationship" : "Relation", - "Spouse" : "Make/Maka", - "Child" : "Barn", - "Mother" : "Mor", - "Father" : "Far", - "Parent" : "Förälder", - "Brother" : "Bror", - "Sister" : "Syster", - "Relative" : "Släkting", - "Friend" : "Vän", - "Colleague" : "Kollega", - "Manager" : "Chef", - "Assistant" : "Assistent", - "Gender" : "Kön", - "Female" : "Kvinna", - "Male" : "Man", - "Details" : "Detaljer", - "Settings" : "Inställningar" -},"pluralForm" :"nplurals=2; plural=(n != 1);" -} \ No newline at end of file diff --git a/l10n/th.js b/l10n/th.js deleted file mode 100644 index cc32297e..00000000 --- a/l10n/th.js +++ /dev/null @@ -1,53 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "ข้อมูลผู้ติดต่อ", - "Address book name" : "สมุดชื่อที่อยู่", - "The selected image is too big (max 1MB)" : "รูปภาพที่เลือกมีขนาดใหญ่เกินไป (ขนาดไม่ควรเกิน 1 เมกะไบต์)", - "No contacts in here" : "ไม่มีรายชื่อในที่นี่", - "Name" : "ชื่อ", - "Organization" : "หน่วยงาน", - "Title" : "ชื่อเรื่อง", - "No search result for {query}" : "ไม่พบผลลัพธ์การค้นหาสำหรับ {query}", - "All contacts" : "รายชื่อทั้งหมด", - "Post office box" : "กล่องจดหมาย", - "Postal code" : "รหัสไปรษณีย์", - "City" : "เมือง", - "State or province" : "รัฐหรือจังหวัด", - "Country" : "ประเทศ", - "Address" : "ที่อยู่", - "(new group)" : "(กลุ่มใหม่)", - "Last name" : "นามสกุลจริง", - "First name" : "ชื่อจริง", - "Additional names" : "ชื่ออื่นๆ", - "Prefix" : "คำนำหน้า", - "Suffix" : "คำต่อท้าย", - "New contact" : "รายชื่อผุ้ติดต่อใหม่", - "Not grouped" : "ไม่ถูกจัดกลุ่ม", - "{addressbook} shared by {owner}" : "{addressbook} ถูกแชร์โดย {owner}", - "Contact could not be created." : "ไม่สามารถสร้างรายชื่อผู้ติดต่อ", - "Nickname" : "ชื่อเล่น", - "Detailed name" : "รายละเอียดชื่อ", - "Notes" : "บันทึกย่อ", - "Website" : "เว็บไซต์", - "Federated Cloud ID" : "ไอดีคลาวด์ในเครือ", - "Home" : "บ้าน", - "Work" : "ที่ทำงาน", - "Other" : "อื่นๆ", - "Groups" : "กลุ่ม", - "Birthday" : "วันเกิด", - "Anniversary" : "วันครบรอบ", - "Date of death" : "วันที่สิ้นสุด", - "Email" : "อีเมล", - "Instant messaging" : "ส่งข้อความโต้ตอบแบบทันที", - "Phone" : "โทรศัพท์", - "Mobile" : "มือถือ", - "Fax" : "โทรสาร", - "Fax home" : "แฟกซ์ที่บ้าน", - "Fax work" : "แฟกซ์ที่ทำงาน", - "Pager" : "เพจเจอร์", - "Voice" : "เสียงพูด", - "Social network" : "เครือข่ายทางสังคม", - "Settings" : "ตั้งค่า" -}, -"nplurals=1; plural=0;"); diff --git a/l10n/th.json b/l10n/th.json deleted file mode 100644 index 6d189690..00000000 --- a/l10n/th.json +++ /dev/null @@ -1,51 +0,0 @@ -{ "translations": { - "Contacts" : "ข้อมูลผู้ติดต่อ", - "Address book name" : "สมุดชื่อที่อยู่", - "The selected image is too big (max 1MB)" : "รูปภาพที่เลือกมีขนาดใหญ่เกินไป (ขนาดไม่ควรเกิน 1 เมกะไบต์)", - "No contacts in here" : "ไม่มีรายชื่อในที่นี่", - "Name" : "ชื่อ", - "Organization" : "หน่วยงาน", - "Title" : "ชื่อเรื่อง", - "No search result for {query}" : "ไม่พบผลลัพธ์การค้นหาสำหรับ {query}", - "All contacts" : "รายชื่อทั้งหมด", - "Post office box" : "กล่องจดหมาย", - "Postal code" : "รหัสไปรษณีย์", - "City" : "เมือง", - "State or province" : "รัฐหรือจังหวัด", - "Country" : "ประเทศ", - "Address" : "ที่อยู่", - "(new group)" : "(กลุ่มใหม่)", - "Last name" : "นามสกุลจริง", - "First name" : "ชื่อจริง", - "Additional names" : "ชื่ออื่นๆ", - "Prefix" : "คำนำหน้า", - "Suffix" : "คำต่อท้าย", - "New contact" : "รายชื่อผุ้ติดต่อใหม่", - "Not grouped" : "ไม่ถูกจัดกลุ่ม", - "{addressbook} shared by {owner}" : "{addressbook} ถูกแชร์โดย {owner}", - "Contact could not be created." : "ไม่สามารถสร้างรายชื่อผู้ติดต่อ", - "Nickname" : "ชื่อเล่น", - "Detailed name" : "รายละเอียดชื่อ", - "Notes" : "บันทึกย่อ", - "Website" : "เว็บไซต์", - "Federated Cloud ID" : "ไอดีคลาวด์ในเครือ", - "Home" : "บ้าน", - "Work" : "ที่ทำงาน", - "Other" : "อื่นๆ", - "Groups" : "กลุ่ม", - "Birthday" : "วันเกิด", - "Anniversary" : "วันครบรอบ", - "Date of death" : "วันที่สิ้นสุด", - "Email" : "อีเมล", - "Instant messaging" : "ส่งข้อความโต้ตอบแบบทันที", - "Phone" : "โทรศัพท์", - "Mobile" : "มือถือ", - "Fax" : "โทรสาร", - "Fax home" : "แฟกซ์ที่บ้าน", - "Fax work" : "แฟกซ์ที่ทำงาน", - "Pager" : "เพจเจอร์", - "Voice" : "เสียงพูด", - "Social network" : "เครือข่ายทางสังคม", - "Settings" : "ตั้งค่า" -},"pluralForm" :"nplurals=1; plural=0;" -} \ No newline at end of file diff --git a/l10n/tr.js b/l10n/tr.js deleted file mode 100644 index c758d8da..00000000 --- a/l10n/tr.js +++ /dev/null @@ -1,121 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Kişiler", - "Download" : "İndir", - "Copy link" : "Bağlantıyı kopyala", - "Click to copy the link to your clipboard" : "Bağlantıyı panoya almak için kopyala üzerine tıklayın", - "Toggle sharing" : "Paylaşımı Değiştir", - "Delete" : "Sil", - "Rename" : "Yeniden Adlandır", - "Share with users or groups" : "Kullanıcı ve gruplarla paylaş", - "can edit" : "düzenleyebilir", - "Close" : "Kapat", - "Enabled" : "Etkin", - "Disabled" : "Devre Dışı", - "Copied!" : "Kopyalandı!", - "Not supported!" : "Desteklenmiyor!", - "Press ⌘-C to copy." : "Kopyalamak için ⌘-C tuşlarına basın.", - "Press Ctrl-C to copy." : "Kopyalamak için Ctrl-C tuşlarına basın.", - "Address book name" : "Adres defteri adı", - "Only these special characters are allowed: -_.!?#|()" : "Yalnız şu özel karakterler kullanılabilir: -_.!?#|()", - "Address book could not be created." : "Adres defteri oluşturulamadı.", - "Upload new image" : "Yeni görsel yükle", - "The selected image is too big (max 1MB)" : "Seçilmiş görsel çok büyük (en fazla 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Bu kart bozulmuş ve onarılacak. Lütfen verileri denetleyin ve değişikliklerin geçerli olması için kaydedin.", - "No contacts in here" : "Burada herhangi bir kişi yok", - "Name" : "Ad", - "Organization" : "Kurum", - "Title" : "Başlık", - "Add field …" : "Alan ekle…", - "Save changes" : "Değişiklikleri kaydet", - "Address book" : "Adres defteri", - "Loading contacts …" : "Kişiler yükleniyor…", - "Import into" : "Şunun içine aktar", - "Importing..." : "İçe aktarılıyor...", - "Select your addressbook" : "Adres defterinizi seçin", - "Import is disabled because no writable address book had been found." : "Yazılabilecek bir adres defteri bulunamadığından içe aktarım devre dışı bırakıldı.", - "No search result for {query}" : "{query} aramasından bir sonuç alınamadı", - "All contacts" : "Tüm kişiler", - "Post office box" : "Posta kutusu", - "Postal code" : "Posta kodu", - "City" : "İlçe", - "State or province" : "Şehir", - "Country" : "Ülke", - "Address" : "Adres", - "(new group)" : "(yeni grup)", - "Last name" : "Soyad", - "First name" : "Ad", - "Additional names" : "Ek adlar", - "Prefix" : "Ön ek", - "Suffix" : "Son ek", - "Importing into" : "Şunun içine aktarılıyor", - "New contact" : "Yeni kişi", - "Not grouped" : "Gruplanmamış", - "Sort by" : "Sıralama", - "There is no address book available to create a contact." : "Kişi kaydının eklenebileceği bir adres defteri yok.", - "{addressbook} shared by {owner}" : "{owner} tarafından paylaşılmış {addressbook}", - "Contact not found." : "Kişi bulunamadı.", - "You don't have permission to write to this addressbook." : "Bu adres defterine yazma izniniz yok.", - "Contact could not be created." : "Kişi oluşturulamadı.", - "No contacts in file. Only vCard files are allowed." : "Dosyada herhangi bir kişi yok. Yalnız vCard dosyaları kullanılabilir.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Yalnız vCard sürüm 4.0 (RFC6350) ya da sürüm 3.0 (RFC2426) desteklenir.", - "Contact could not be moved." : "Kişi taşınamadı.", - "Contact could not be saved." : "Kişi kaydedilemedi.", - "Waiting for the server to be ready…" : "Sunucunun hazır olması bekleniyor…", - "Importing…" : "İçe aktarılıyor…", - "Display name" : "Görüntülenecek ad", - "Nickname" : "Kısaltma", - "Detailed name" : "Ayrıntılı ad", - "Notes" : "Notlar", - "Website" : "Web sitesi", - "Federated Cloud ID" : "Birleşmiş Bulut Kimliği", - "Home" : "Ev", - "Work" : "İş", - "Other" : "Diğer", - "Groups" : "Gruplar", - "Birthday" : "Doğum günü", - "Anniversary" : "Yıl dönümü", - "Date of death" : "Ölüm tarihi", - "Email" : "E-posta", - "Instant messaging" : "Anlık iletişim", - "Phone" : "Telefon", - "Mobile" : "Cep telefonu", - "Work mobile" : "İş cep telefonu", - "Fax" : "Faks", - "Fax home" : "Ev faksı", - "Fax work" : "İş faksı", - "Pager" : "Çağrı cihazı", - "Voice" : "Ses", - "Car" : "Araç telefonu", - "Work pager" : "İş çağrı cihazı", - "Social network" : "Sosyal ağ", - "Relationship" : "İlişki", - "Specify a relationship between you and the entity represented by this vCard." : "Bu vCard tarafından temsil edilen varlık ile aranızdaki ilişkiyi belirtin", - "Spouse" : "Eş", - "Child" : "Çocuk", - "Mother" : "Anne", - "Father" : "Baba", - "Parent" : "Ebeveyn", - "Brother" : "Erkek Kardeş", - "Sister" : "Kız Kardeş", - "Relative" : "Akraba", - "Friend" : "Arkadaş", - "Colleague" : "Çalışma Arkadaşı", - "Manager" : "Yönetici", - "Assistant" : "Yardımcı", - "Related" : "İlişkili", - "Specify a relationship between another entity and the entity represented by this vCard." : "Bu vCard tarafından temsil edilen varlık ile başka bir varlık arasındaki ilişkiyi belirtin", - "Contact" : "Kişi", - "Agent" : "Ajan", - "Emergency" : "Acil", - "Co-worker" : "Çalışma arkadaşı", - "Gender" : "Cinsiyet", - "Female" : "Kadın", - "Male" : "Erkek", - "Details" : "Ayrıntılar", - "A contacts app for Nextcloud" : "Nextcloud kişiler uygulaması", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "Kişiler uygulaması Nextcloud Card DAV sunucusunun ara yüzüdür. Çeşitli aygıtlar üzerindeki kişileri kolayca Nextcloud hesabınız ile eşitler ve çevrimiçi olarak düzenlemenizi sağlar.\n\n* 🚀 **Diğer Nextcloud uygulamaları ile bütünleşiktir!** Şu anda Takvim, diğerleri yolda.\n* 🎉 **Doğum günlerini unutmayın!** Doğum günü ve diğer yinelenen etkinlikleri Nextcloud takviminiz üzerinden izleyebilirsiniz.\n* 👥 **Adres defterlerini paylaşma!** Kişilerinizi arkadaşlarınız ve iş arkadaşlarınız ile paylaşmak isterseniz sorun değil!\n* 🙈 **Tekerleği yeniden icat etmiyoruz!** Harika açık SabreDAV kitaplığını kullanıyoruz.", - "Settings" : "Ayarlar" -}, -"nplurals=2; plural=(n > 1);"); diff --git a/l10n/tr.json b/l10n/tr.json deleted file mode 100644 index 7b6d7c95..00000000 --- a/l10n/tr.json +++ /dev/null @@ -1,119 +0,0 @@ -{ "translations": { - "Contacts" : "Kişiler", - "Download" : "İndir", - "Copy link" : "Bağlantıyı kopyala", - "Click to copy the link to your clipboard" : "Bağlantıyı panoya almak için kopyala üzerine tıklayın", - "Toggle sharing" : "Paylaşımı Değiştir", - "Delete" : "Sil", - "Rename" : "Yeniden Adlandır", - "Share with users or groups" : "Kullanıcı ve gruplarla paylaş", - "can edit" : "düzenleyebilir", - "Close" : "Kapat", - "Enabled" : "Etkin", - "Disabled" : "Devre Dışı", - "Copied!" : "Kopyalandı!", - "Not supported!" : "Desteklenmiyor!", - "Press ⌘-C to copy." : "Kopyalamak için ⌘-C tuşlarına basın.", - "Press Ctrl-C to copy." : "Kopyalamak için Ctrl-C tuşlarına basın.", - "Address book name" : "Adres defteri adı", - "Only these special characters are allowed: -_.!?#|()" : "Yalnız şu özel karakterler kullanılabilir: -_.!?#|()", - "Address book could not be created." : "Adres defteri oluşturulamadı.", - "Upload new image" : "Yeni görsel yükle", - "The selected image is too big (max 1MB)" : "Seçilmiş görsel çok büyük (en fazla 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Bu kart bozulmuş ve onarılacak. Lütfen verileri denetleyin ve değişikliklerin geçerli olması için kaydedin.", - "No contacts in here" : "Burada herhangi bir kişi yok", - "Name" : "Ad", - "Organization" : "Kurum", - "Title" : "Başlık", - "Add field …" : "Alan ekle…", - "Save changes" : "Değişiklikleri kaydet", - "Address book" : "Adres defteri", - "Loading contacts …" : "Kişiler yükleniyor…", - "Import into" : "Şunun içine aktar", - "Importing..." : "İçe aktarılıyor...", - "Select your addressbook" : "Adres defterinizi seçin", - "Import is disabled because no writable address book had been found." : "Yazılabilecek bir adres defteri bulunamadığından içe aktarım devre dışı bırakıldı.", - "No search result for {query}" : "{query} aramasından bir sonuç alınamadı", - "All contacts" : "Tüm kişiler", - "Post office box" : "Posta kutusu", - "Postal code" : "Posta kodu", - "City" : "İlçe", - "State or province" : "Şehir", - "Country" : "Ülke", - "Address" : "Adres", - "(new group)" : "(yeni grup)", - "Last name" : "Soyad", - "First name" : "Ad", - "Additional names" : "Ek adlar", - "Prefix" : "Ön ek", - "Suffix" : "Son ek", - "Importing into" : "Şunun içine aktarılıyor", - "New contact" : "Yeni kişi", - "Not grouped" : "Gruplanmamış", - "Sort by" : "Sıralama", - "There is no address book available to create a contact." : "Kişi kaydının eklenebileceği bir adres defteri yok.", - "{addressbook} shared by {owner}" : "{owner} tarafından paylaşılmış {addressbook}", - "Contact not found." : "Kişi bulunamadı.", - "You don't have permission to write to this addressbook." : "Bu adres defterine yazma izniniz yok.", - "Contact could not be created." : "Kişi oluşturulamadı.", - "No contacts in file. Only vCard files are allowed." : "Dosyada herhangi bir kişi yok. Yalnız vCard dosyaları kullanılabilir.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Yalnız vCard sürüm 4.0 (RFC6350) ya da sürüm 3.0 (RFC2426) desteklenir.", - "Contact could not be moved." : "Kişi taşınamadı.", - "Contact could not be saved." : "Kişi kaydedilemedi.", - "Waiting for the server to be ready…" : "Sunucunun hazır olması bekleniyor…", - "Importing…" : "İçe aktarılıyor…", - "Display name" : "Görüntülenecek ad", - "Nickname" : "Kısaltma", - "Detailed name" : "Ayrıntılı ad", - "Notes" : "Notlar", - "Website" : "Web sitesi", - "Federated Cloud ID" : "Birleşmiş Bulut Kimliği", - "Home" : "Ev", - "Work" : "İş", - "Other" : "Diğer", - "Groups" : "Gruplar", - "Birthday" : "Doğum günü", - "Anniversary" : "Yıl dönümü", - "Date of death" : "Ölüm tarihi", - "Email" : "E-posta", - "Instant messaging" : "Anlık iletişim", - "Phone" : "Telefon", - "Mobile" : "Cep telefonu", - "Work mobile" : "İş cep telefonu", - "Fax" : "Faks", - "Fax home" : "Ev faksı", - "Fax work" : "İş faksı", - "Pager" : "Çağrı cihazı", - "Voice" : "Ses", - "Car" : "Araç telefonu", - "Work pager" : "İş çağrı cihazı", - "Social network" : "Sosyal ağ", - "Relationship" : "İlişki", - "Specify a relationship between you and the entity represented by this vCard." : "Bu vCard tarafından temsil edilen varlık ile aranızdaki ilişkiyi belirtin", - "Spouse" : "Eş", - "Child" : "Çocuk", - "Mother" : "Anne", - "Father" : "Baba", - "Parent" : "Ebeveyn", - "Brother" : "Erkek Kardeş", - "Sister" : "Kız Kardeş", - "Relative" : "Akraba", - "Friend" : "Arkadaş", - "Colleague" : "Çalışma Arkadaşı", - "Manager" : "Yönetici", - "Assistant" : "Yardımcı", - "Related" : "İlişkili", - "Specify a relationship between another entity and the entity represented by this vCard." : "Bu vCard tarafından temsil edilen varlık ile başka bir varlık arasındaki ilişkiyi belirtin", - "Contact" : "Kişi", - "Agent" : "Ajan", - "Emergency" : "Acil", - "Co-worker" : "Çalışma arkadaşı", - "Gender" : "Cinsiyet", - "Female" : "Kadın", - "Male" : "Erkek", - "Details" : "Ayrıntılar", - "A contacts app for Nextcloud" : "Nextcloud kişiler uygulaması", - "The Nextcloud contacts app is a user interface for Nextcloud's CardDAV server. Easily sync contacts from various devices with your Nextcloud and edit them online.\n\n* 🚀 **Integration with other Nextcloud apps!** Currently Mail and Calendar – more to come.\n* 🎉 **Never forget a birthday!** You can sync birthdays and other recurring events with your Nextcloud Calendar.\n* 👥 **Sharing of Adressbooks!** You want to share your contacts with your friends or coworkers? No problem!\n* 🙈 **We’re not reinventing the wheel!** Based on the great and open SabreDAV library." : "Kişiler uygulaması Nextcloud Card DAV sunucusunun ara yüzüdür. Çeşitli aygıtlar üzerindeki kişileri kolayca Nextcloud hesabınız ile eşitler ve çevrimiçi olarak düzenlemenizi sağlar.\n\n* 🚀 **Diğer Nextcloud uygulamaları ile bütünleşiktir!** Şu anda Takvim, diğerleri yolda.\n* 🎉 **Doğum günlerini unutmayın!** Doğum günü ve diğer yinelenen etkinlikleri Nextcloud takviminiz üzerinden izleyebilirsiniz.\n* 👥 **Adres defterlerini paylaşma!** Kişilerinizi arkadaşlarınız ve iş arkadaşlarınız ile paylaşmak isterseniz sorun değil!\n* 🙈 **Tekerleği yeniden icat etmiyoruz!** Harika açık SabreDAV kitaplığını kullanıyoruz.", - "Settings" : "Ayarlar" -},"pluralForm" :"nplurals=2; plural=(n > 1);" -} \ No newline at end of file diff --git a/l10n/uk.js b/l10n/uk.js deleted file mode 100644 index 3ed2dc04..00000000 --- a/l10n/uk.js +++ /dev/null @@ -1,102 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Контакти", - "Download" : "Завантажити", - "Copy link" : "Копіювати посилання", - "Click to copy the link to your clipboard" : "Натисніть для копіювання посилання до буферу обміну", - "Delete" : "Видалити", - "Rename" : "Перейменувати", - "Share with users or groups" : "Поділитися з користувачем або групою", - "can edit" : "може редагувати", - "Close" : "Закрити", - "Enabled" : "Увімкнено", - "Disabled" : "Вимкнено", - "Copied!" : "Скопійовано!", - "Not supported!" : "Не підтримується!", - "Press ⌘-C to copy." : "Натисніть ⌘-C щоб скопіювати.", - "Press Ctrl-C to copy." : "Натисніть Ctrl-C щоб скопіювати.", - "Address book name" : "Назва адресної книги", - "Only these special characters are allowed: -_.!?#|()" : "Дозволено лише наступні спеціальні символи: -_.!?#|()", - "Address book could not be created." : "Не вдалося створити адресну книгу", - "The selected image is too big (max 1MB)" : "Обране зображення занадто велике (1МБ max)", - "No contacts in here" : "Тут немає контактів", - "Name" : "Ім’я", - "Organization" : "Організація", - "Title" : "Назва", - "Add field …" : "Додати поле …", - "Save changes" : "Зберегти зміни", - "Address book" : "Адресна книга", - "Loading contacts …" : "Завантаження контактів …", - "Import into" : "Імпортувати до", - "Importing..." : "Імпортування…", - "Select your addressbook" : "Оберіть адресну книгу", - "No search result for {query}" : "Немає результатів пошуку для {query}", - "All contacts" : "Всі контакти", - "Post office box" : "Абонентська скринька", - "Postal code" : "Поштовий індекс", - "City" : "Місто", - "State or province" : "Область або район", - "Country" : "Країна", - "Address" : "Адреса", - "(new group)" : "(нова група)", - "Last name" : "Прізвище", - "First name" : "Ім'я", - "Additional names" : "Додаткові імена", - "Prefix" : "Префікс", - "Suffix" : "Суфікс", - "Importing into" : "Імпортування до", - "New contact" : "Новий контакт", - "Not grouped" : "Не згруповані", - "Sort by" : "Сортувати за", - "There is no address book available to create a contact." : "Тут немає адресної книги для створення контакту.", - "{addressbook} shared by {owner}" : "{owner} поділився {addressbook}", - "Contact not found." : "Контакт не знайдено", - "You don't have permission to write to this addressbook." : "Вам бракує прав на запис до даної адресної книги.", - "Contact could not be created." : "Неможливо створити контакт.", - "No contacts in file. Only vCard files are allowed." : "Відсутні контакти в фалі. Дозволено лише vCard файли.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Підтримуються лише vCard версії 4.0 (RFC6350) або 3.0 (RFC2426).", - "Contact could not be moved." : "Неможливо перемістити контакт.", - "Contact could not be saved." : "Неможливо зберегти контакт.", - "Importing…" : "Імпортування…", - "Display name" : "Ім'я для відображення", - "Nickname" : "Прізвисько", - "Detailed name" : "Повне ім'я", - "Notes" : "Нотатки", - "Website" : "Web-сайт", - "Federated Cloud ID" : "Об'єднаний Хмарний Ідентіфікатор", - "Home" : "Домашня адреса", - "Work" : "Робота", - "Other" : "Інше", - "Groups" : "Групи", - "Birthday" : "День народження", - "Anniversary" : "Річниця", - "Date of death" : "Дата смерті", - "Email" : "E-mail", - "Instant messaging" : "Швидкі повідомлення", - "Phone" : "Телефон", - "Mobile" : "Мобільний", - "Work mobile" : "Робочий мобільний", - "Fax" : "Факс", - "Fax home" : "Домашній факс", - "Fax work" : "Робочий факс", - "Pager" : "Пейджер", - "Voice" : "Голос", - "Car" : "Машина", - "Work pager" : "Робочий пейджер", - "Social network" : "Соціальна мережа", - "Spouse" : "Чоловік\\Дружина", - "Child" : "Дитина", - "Mother" : "Мати", - "Father" : "Батько", - "Brother" : "Брат", - "Sister" : "Сестра", - "Friend" : "Друг", - "Colleague" : "Колега", - "Gender" : "Стать", - "Female" : "Жінка", - "Male" : "Чоловік", - "Details" : "Деталі", - "Settings" : "Налаштування" -}, -"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"); diff --git a/l10n/uk.json b/l10n/uk.json deleted file mode 100644 index 2270c01d..00000000 --- a/l10n/uk.json +++ /dev/null @@ -1,100 +0,0 @@ -{ "translations": { - "Contacts" : "Контакти", - "Download" : "Завантажити", - "Copy link" : "Копіювати посилання", - "Click to copy the link to your clipboard" : "Натисніть для копіювання посилання до буферу обміну", - "Delete" : "Видалити", - "Rename" : "Перейменувати", - "Share with users or groups" : "Поділитися з користувачем або групою", - "can edit" : "може редагувати", - "Close" : "Закрити", - "Enabled" : "Увімкнено", - "Disabled" : "Вимкнено", - "Copied!" : "Скопійовано!", - "Not supported!" : "Не підтримується!", - "Press ⌘-C to copy." : "Натисніть ⌘-C щоб скопіювати.", - "Press Ctrl-C to copy." : "Натисніть Ctrl-C щоб скопіювати.", - "Address book name" : "Назва адресної книги", - "Only these special characters are allowed: -_.!?#|()" : "Дозволено лише наступні спеціальні символи: -_.!?#|()", - "Address book could not be created." : "Не вдалося створити адресну книгу", - "The selected image is too big (max 1MB)" : "Обране зображення занадто велике (1МБ max)", - "No contacts in here" : "Тут немає контактів", - "Name" : "Ім’я", - "Organization" : "Організація", - "Title" : "Назва", - "Add field …" : "Додати поле …", - "Save changes" : "Зберегти зміни", - "Address book" : "Адресна книга", - "Loading contacts …" : "Завантаження контактів …", - "Import into" : "Імпортувати до", - "Importing..." : "Імпортування…", - "Select your addressbook" : "Оберіть адресну книгу", - "No search result for {query}" : "Немає результатів пошуку для {query}", - "All contacts" : "Всі контакти", - "Post office box" : "Абонентська скринька", - "Postal code" : "Поштовий індекс", - "City" : "Місто", - "State or province" : "Область або район", - "Country" : "Країна", - "Address" : "Адреса", - "(new group)" : "(нова група)", - "Last name" : "Прізвище", - "First name" : "Ім'я", - "Additional names" : "Додаткові імена", - "Prefix" : "Префікс", - "Suffix" : "Суфікс", - "Importing into" : "Імпортування до", - "New contact" : "Новий контакт", - "Not grouped" : "Не згруповані", - "Sort by" : "Сортувати за", - "There is no address book available to create a contact." : "Тут немає адресної книги для створення контакту.", - "{addressbook} shared by {owner}" : "{owner} поділився {addressbook}", - "Contact not found." : "Контакт не знайдено", - "You don't have permission to write to this addressbook." : "Вам бракує прав на запис до даної адресної книги.", - "Contact could not be created." : "Неможливо створити контакт.", - "No contacts in file. Only vCard files are allowed." : "Відсутні контакти в фалі. Дозволено лише vCard файли.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Підтримуються лише vCard версії 4.0 (RFC6350) або 3.0 (RFC2426).", - "Contact could not be moved." : "Неможливо перемістити контакт.", - "Contact could not be saved." : "Неможливо зберегти контакт.", - "Importing…" : "Імпортування…", - "Display name" : "Ім'я для відображення", - "Nickname" : "Прізвисько", - "Detailed name" : "Повне ім'я", - "Notes" : "Нотатки", - "Website" : "Web-сайт", - "Federated Cloud ID" : "Об'єднаний Хмарний Ідентіфікатор", - "Home" : "Домашня адреса", - "Work" : "Робота", - "Other" : "Інше", - "Groups" : "Групи", - "Birthday" : "День народження", - "Anniversary" : "Річниця", - "Date of death" : "Дата смерті", - "Email" : "E-mail", - "Instant messaging" : "Швидкі повідомлення", - "Phone" : "Телефон", - "Mobile" : "Мобільний", - "Work mobile" : "Робочий мобільний", - "Fax" : "Факс", - "Fax home" : "Домашній факс", - "Fax work" : "Робочий факс", - "Pager" : "Пейджер", - "Voice" : "Голос", - "Car" : "Машина", - "Work pager" : "Робочий пейджер", - "Social network" : "Соціальна мережа", - "Spouse" : "Чоловік\\Дружина", - "Child" : "Дитина", - "Mother" : "Мати", - "Father" : "Батько", - "Brother" : "Брат", - "Sister" : "Сестра", - "Friend" : "Друг", - "Colleague" : "Колега", - "Gender" : "Стать", - "Female" : "Жінка", - "Male" : "Чоловік", - "Details" : "Деталі", - "Settings" : "Налаштування" -},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);" -} \ No newline at end of file diff --git a/l10n/vi.js b/l10n/vi.js deleted file mode 100644 index 4b4cba13..00000000 --- a/l10n/vi.js +++ /dev/null @@ -1,100 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "Các danh bạ", - "Download" : "Tải về", - "Copy link" : "Sao chép liên kết", - "Click to copy the link to your clipboard" : "Kích chuột để sao chép liên kết vào bộ nhớ clipboard của bạn", - "Toggle sharing" : "Chuyển đổi chia sẻ", - "Delete" : "Xóa", - "Rename" : "Đổi tên", - "Share with users or groups" : "Chia sẻ với nhiều người sử dụng hoặc nhiều nhóm người sử dụng", - "can edit" : "Có thể chỉnh sửa", - "Close" : "Đóng", - "Copied!" : "Đã được sao chép!", - "Not supported!" : "Không được hỗ trợ!", - "Press ⌘-C to copy." : "Nhấn phí ⌘-C để sao chép.", - "Press Ctrl-C to copy." : "Nhấn tổ hợp phím Ctrl-C để sao chép.", - "Address book name" : "Tên sổ địa chỉ", - "Only these special characters are allowed: -_.!?#|()" : "Chỉ các ký tự đặc biệt này mới được phép sử dụng: -_.!?#|()", - "Address book could not be created." : "Sổ địa chỉ không thể được tạo lập.", - "The selected image is too big (max 1MB)" : "Ảnh vừa lựa chọn lớn quá (tối đa 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Thẻ tên này bị lỗi và đã được sửa chữa. Xin vui lòng kiểm tra dữ liệu và thực hiện lưu dữ liệu thay đổi hoàn toàn.", - "No contacts in here" : "Không có tên liên lạc nào ở đây", - "Name" : "Tên", - "Organization" : "Tổ chức", - "Title" : "Tiêu đề", - "Add field …" : "Thêm trường...", - "Save changes" : "Lưu lại các thay đổi", - "Address book" : "Sổ địa chỉ", - "Loading contacts …" : "Đang nạp tên liên lạc", - "Import into" : "Nhập vào", - "Importing..." : "Đang nhập vào", - "Select your addressbook" : "Lựa chọn sổ địa chỉ", - "No search result for {query}" : "Không tìm thấy kết quả tìm kiếm cho truy vấn {query}", - "All contacts" : "Tất cả các tên liên lạc", - "Post office box" : "Hòm thư bưu điện", - "Postal code" : "Mã bưu chính", - "City" : "Thành phố", - "State or province" : "Bang hay tỉnh/thành", - "Country" : "Quốc gia", - "Address" : "Địa chỉ", - "(new group)" : "(nhóm mới)", - "Last name" : "Họ", - "First name" : "Tên", - "Additional names" : "Tên bổ sung", - "Prefix" : "Tiền tố", - "Suffix" : "Hậu tố", - "Importing into" : "Đang nhập vào", - "New contact" : "Thêm liên lạc", - "Not grouped" : "Không nhóm", - "Sort by" : "Sắp xếp theo", - "{addressbook} shared by {owner}" : "{sổ địa chỉ} được chia sẻ bởi {owner}", - "Contact not found." : "Không tên liên hệ nào được tìm thấy.", - "Contact could not be created." : "Tên liên hệ không thể được tạo lập.", - "No contacts in file. Only vCard files are allowed." : "Không có tên liên hệ nào trong tệp tin. Chỉ có các file vCard mới được phép.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Chỉ có vCard phiên bản 4.0 (RFC6350) hoặc phiên bản 3.0 (RFC2426) mới được hỗ trợ.", - "Contact could not be saved." : "Tên liên hệ không lưu được.", - "Display name" : "Tên hiển thị", - "Nickname" : "Biệt danh", - "Detailed name" : "Tên chi tiết", - "Notes" : "Ghi chép", - "Website" : "Website", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Nhà", - "Work" : "Công việc", - "Other" : "Khác", - "Groups" : "Nhóm", - "Birthday" : "Ngày sinh nhật", - "Anniversary" : "Ngày kỷ niệm", - "Date of death" : "Ngày mất", - "Email" : "Email", - "Instant messaging" : "Địa chỉ IM", - "Phone" : "Điện thoại", - "Mobile" : "Di động", - "Fax" : "Fax", - "Fax home" : "Số Fax ở nhà", - "Fax work" : "Số Fax nơi làm việc", - "Pager" : "số trang", - "Voice" : "Giọng nói", - "Social network" : "Mạng xã hội", - "Relationship" : "Mối quan hệ", - "Spouse" : "Vợ / chồng", - "Child" : "Con", - "Mother" : "Mẹ", - "Father" : "Bố", - "Parent" : "Bố mẹ", - "Brother" : "Anh/em", - "Sister" : "Chị/em gái", - "Relative" : "Quan hệ nhân thân", - "Friend" : "Bạn bè", - "Colleague" : "Đồng nghiệp", - "Manager" : "Trưởng phòng", - "Assistant" : "Trợ lý", - "Gender" : "Giới tính", - "Female" : "Nữ", - "Male" : "Nam", - "Details" : "Chi tiết", - "Settings" : "Cài đặt" -}, -"nplurals=1; plural=0;"); diff --git a/l10n/vi.json b/l10n/vi.json deleted file mode 100644 index f3bd8621..00000000 --- a/l10n/vi.json +++ /dev/null @@ -1,98 +0,0 @@ -{ "translations": { - "Contacts" : "Các danh bạ", - "Download" : "Tải về", - "Copy link" : "Sao chép liên kết", - "Click to copy the link to your clipboard" : "Kích chuột để sao chép liên kết vào bộ nhớ clipboard của bạn", - "Toggle sharing" : "Chuyển đổi chia sẻ", - "Delete" : "Xóa", - "Rename" : "Đổi tên", - "Share with users or groups" : "Chia sẻ với nhiều người sử dụng hoặc nhiều nhóm người sử dụng", - "can edit" : "Có thể chỉnh sửa", - "Close" : "Đóng", - "Copied!" : "Đã được sao chép!", - "Not supported!" : "Không được hỗ trợ!", - "Press ⌘-C to copy." : "Nhấn phí ⌘-C để sao chép.", - "Press Ctrl-C to copy." : "Nhấn tổ hợp phím Ctrl-C để sao chép.", - "Address book name" : "Tên sổ địa chỉ", - "Only these special characters are allowed: -_.!?#|()" : "Chỉ các ký tự đặc biệt này mới được phép sử dụng: -_.!?#|()", - "Address book could not be created." : "Sổ địa chỉ không thể được tạo lập.", - "The selected image is too big (max 1MB)" : "Ảnh vừa lựa chọn lớn quá (tối đa 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "Thẻ tên này bị lỗi và đã được sửa chữa. Xin vui lòng kiểm tra dữ liệu và thực hiện lưu dữ liệu thay đổi hoàn toàn.", - "No contacts in here" : "Không có tên liên lạc nào ở đây", - "Name" : "Tên", - "Organization" : "Tổ chức", - "Title" : "Tiêu đề", - "Add field …" : "Thêm trường...", - "Save changes" : "Lưu lại các thay đổi", - "Address book" : "Sổ địa chỉ", - "Loading contacts …" : "Đang nạp tên liên lạc", - "Import into" : "Nhập vào", - "Importing..." : "Đang nhập vào", - "Select your addressbook" : "Lựa chọn sổ địa chỉ", - "No search result for {query}" : "Không tìm thấy kết quả tìm kiếm cho truy vấn {query}", - "All contacts" : "Tất cả các tên liên lạc", - "Post office box" : "Hòm thư bưu điện", - "Postal code" : "Mã bưu chính", - "City" : "Thành phố", - "State or province" : "Bang hay tỉnh/thành", - "Country" : "Quốc gia", - "Address" : "Địa chỉ", - "(new group)" : "(nhóm mới)", - "Last name" : "Họ", - "First name" : "Tên", - "Additional names" : "Tên bổ sung", - "Prefix" : "Tiền tố", - "Suffix" : "Hậu tố", - "Importing into" : "Đang nhập vào", - "New contact" : "Thêm liên lạc", - "Not grouped" : "Không nhóm", - "Sort by" : "Sắp xếp theo", - "{addressbook} shared by {owner}" : "{sổ địa chỉ} được chia sẻ bởi {owner}", - "Contact not found." : "Không tên liên hệ nào được tìm thấy.", - "Contact could not be created." : "Tên liên hệ không thể được tạo lập.", - "No contacts in file. Only vCard files are allowed." : "Không có tên liên hệ nào trong tệp tin. Chỉ có các file vCard mới được phép.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "Chỉ có vCard phiên bản 4.0 (RFC6350) hoặc phiên bản 3.0 (RFC2426) mới được hỗ trợ.", - "Contact could not be saved." : "Tên liên hệ không lưu được.", - "Display name" : "Tên hiển thị", - "Nickname" : "Biệt danh", - "Detailed name" : "Tên chi tiết", - "Notes" : "Ghi chép", - "Website" : "Website", - "Federated Cloud ID" : "Federated Cloud ID", - "Home" : "Nhà", - "Work" : "Công việc", - "Other" : "Khác", - "Groups" : "Nhóm", - "Birthday" : "Ngày sinh nhật", - "Anniversary" : "Ngày kỷ niệm", - "Date of death" : "Ngày mất", - "Email" : "Email", - "Instant messaging" : "Địa chỉ IM", - "Phone" : "Điện thoại", - "Mobile" : "Di động", - "Fax" : "Fax", - "Fax home" : "Số Fax ở nhà", - "Fax work" : "Số Fax nơi làm việc", - "Pager" : "số trang", - "Voice" : "Giọng nói", - "Social network" : "Mạng xã hội", - "Relationship" : "Mối quan hệ", - "Spouse" : "Vợ / chồng", - "Child" : "Con", - "Mother" : "Mẹ", - "Father" : "Bố", - "Parent" : "Bố mẹ", - "Brother" : "Anh/em", - "Sister" : "Chị/em gái", - "Relative" : "Quan hệ nhân thân", - "Friend" : "Bạn bè", - "Colleague" : "Đồng nghiệp", - "Manager" : "Trưởng phòng", - "Assistant" : "Trợ lý", - "Gender" : "Giới tính", - "Female" : "Nữ", - "Male" : "Nam", - "Details" : "Chi tiết", - "Settings" : "Cài đặt" -},"pluralForm" :"nplurals=1; plural=0;" -} \ No newline at end of file diff --git a/l10n/zh_CN.js b/l10n/zh_CN.js deleted file mode 100644 index d45b82e6..00000000 --- a/l10n/zh_CN.js +++ /dev/null @@ -1,111 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "联系人", - "Download" : "下载", - "Copy link" : "复制链接", - "Click to copy the link to your clipboard" : "点击复制链接到剪贴板", - "Toggle sharing" : "切换分享", - "Delete" : "删除", - "Rename" : "重命名", - "Share with users or groups" : "和用户或者组群分享", - "can edit" : "允许编辑", - "Close" : "关闭", - "Enabled" : "已开启", - "Disabled" : "已禁用", - "Copied!" : "已复制!", - "Not supported!" : "不支持!", - "Press ⌘-C to copy." : "按 ⌘-C 复制", - "Press Ctrl-C to copy." : "按 Ctrl-C 复制", - "Address book name" : "地址簿名称", - "Only these special characters are allowed: -_.!?#|()" : "只允许使用这些特殊字符:- _ . ! ? # | ( )", - "Address book could not be created." : "无法创建地址簿。", - "The selected image is too big (max 1MB)" : "所选图片过大(最大1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "此卡已损坏,已被修复。请检查数据并保存以使更改永久有效。", - "No contacts in here" : "没有联系人", - "Name" : "名称", - "Organization" : "组织", - "Title" : "头衔", - "Add field …" : "添加字段…", - "Save changes" : "保存更改", - "Address book" : "地址簿", - "Loading contacts …" : "加载联系人…", - "Import into" : "导入到", - "Importing..." : "正在导入...", - "Select your addressbook" : "选择您的地址簿", - "Import is disabled because no writable address book had been found." : "因为没有找到可写入的地址簿,导入被禁用。", - "No search result for {query}" : "未找到结果{query}", - "All contacts" : "全部联系人", - "Post office box" : "邮政信箱", - "Postal code" : "邮政编码", - "City" : "城市", - "State or province" : "州/省", - "Country" : "国家", - "Address" : "地址", - "(new group)" : "(新建群组)", - "Last name" : "姓", - "First name" : "名", - "Additional names" : "其他名称", - "Prefix" : "前缀", - "Suffix" : "后缀", - "Importing into" : "正在导入到", - "New contact" : "新建联系人", - "Not grouped" : "未分组", - "Sort by" : "排序方式", - "There is no address book available to create a contact." : "没有地址簿可用于创建联系人。", - "{addressbook} shared by {owner}" : "由 {owner} 共享给您的 {addressbook}", - "Contact not found." : "无法找到联系人.", - "You don't have permission to write to this addressbook." : "你没有此地址簿的编写权限。", - "Contact could not be created." : "无法创建联系人。", - "No contacts in file. Only vCard files are allowed." : "没有发现联系人信息. 只允许 VCard 格式文件.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "仅支持 VCard v4.0版本 (RFC6350) 或 v3.0版本 (RFC2426).", - "Contact could not be moved." : "无法移动联系人。", - "Contact could not be saved." : "联系人无法保存.", - "Waiting for the server to be ready…" : "等待服务器就绪......", - "Importing…" : "导入中......", - "Display name" : "显示名称", - "Nickname" : "昵称", - "Detailed name" : "全名", - "Notes" : "说明", - "Website" : "网站", - "Federated Cloud ID" : "联合云ID", - "Home" : "家庭", - "Work" : "工作", - "Other" : "其它", - "Groups" : "群组", - "Birthday" : "生日", - "Anniversary" : "周年", - "Date of death" : "去世日期", - "Email" : "电子邮件", - "Instant messaging" : "即时通讯", - "Phone" : "电话", - "Mobile" : "手机", - "Work mobile" : "工作电话", - "Fax" : "传真", - "Fax home" : "家庭传真", - "Fax work" : "工作传真", - "Pager" : "传呼机", - "Voice" : "语音", - "Car" : "车", - "Work pager" : "工作传呼机", - "Social network" : "社交网络", - "Relationship" : "关系", - "Spouse" : "配偶", - "Child" : "子女", - "Mother" : "母亲", - "Father" : "父亲", - "Parent" : "父母", - "Brother" : "兄弟", - "Sister" : "姐妹", - "Relative" : "关系", - "Friend" : "朋友", - "Colleague" : "同事", - "Manager" : "经理", - "Assistant" : "助理", - "Gender" : "性别", - "Female" : "女性", - "Male" : "女性", - "Details" : "详情", - "Settings" : "设置" -}, -"nplurals=1; plural=0;"); diff --git a/l10n/zh_CN.json b/l10n/zh_CN.json deleted file mode 100644 index a4b230fc..00000000 --- a/l10n/zh_CN.json +++ /dev/null @@ -1,109 +0,0 @@ -{ "translations": { - "Contacts" : "联系人", - "Download" : "下载", - "Copy link" : "复制链接", - "Click to copy the link to your clipboard" : "点击复制链接到剪贴板", - "Toggle sharing" : "切换分享", - "Delete" : "删除", - "Rename" : "重命名", - "Share with users or groups" : "和用户或者组群分享", - "can edit" : "允许编辑", - "Close" : "关闭", - "Enabled" : "已开启", - "Disabled" : "已禁用", - "Copied!" : "已复制!", - "Not supported!" : "不支持!", - "Press ⌘-C to copy." : "按 ⌘-C 复制", - "Press Ctrl-C to copy." : "按 Ctrl-C 复制", - "Address book name" : "地址簿名称", - "Only these special characters are allowed: -_.!?#|()" : "只允许使用这些特殊字符:- _ . ! ? # | ( )", - "Address book could not be created." : "无法创建地址簿。", - "The selected image is too big (max 1MB)" : "所选图片过大(最大1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "此卡已损坏,已被修复。请检查数据并保存以使更改永久有效。", - "No contacts in here" : "没有联系人", - "Name" : "名称", - "Organization" : "组织", - "Title" : "头衔", - "Add field …" : "添加字段…", - "Save changes" : "保存更改", - "Address book" : "地址簿", - "Loading contacts …" : "加载联系人…", - "Import into" : "导入到", - "Importing..." : "正在导入...", - "Select your addressbook" : "选择您的地址簿", - "Import is disabled because no writable address book had been found." : "因为没有找到可写入的地址簿,导入被禁用。", - "No search result for {query}" : "未找到结果{query}", - "All contacts" : "全部联系人", - "Post office box" : "邮政信箱", - "Postal code" : "邮政编码", - "City" : "城市", - "State or province" : "州/省", - "Country" : "国家", - "Address" : "地址", - "(new group)" : "(新建群组)", - "Last name" : "姓", - "First name" : "名", - "Additional names" : "其他名称", - "Prefix" : "前缀", - "Suffix" : "后缀", - "Importing into" : "正在导入到", - "New contact" : "新建联系人", - "Not grouped" : "未分组", - "Sort by" : "排序方式", - "There is no address book available to create a contact." : "没有地址簿可用于创建联系人。", - "{addressbook} shared by {owner}" : "由 {owner} 共享给您的 {addressbook}", - "Contact not found." : "无法找到联系人.", - "You don't have permission to write to this addressbook." : "你没有此地址簿的编写权限。", - "Contact could not be created." : "无法创建联系人。", - "No contacts in file. Only vCard files are allowed." : "没有发现联系人信息. 只允许 VCard 格式文件.", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "仅支持 VCard v4.0版本 (RFC6350) 或 v3.0版本 (RFC2426).", - "Contact could not be moved." : "无法移动联系人。", - "Contact could not be saved." : "联系人无法保存.", - "Waiting for the server to be ready…" : "等待服务器就绪......", - "Importing…" : "导入中......", - "Display name" : "显示名称", - "Nickname" : "昵称", - "Detailed name" : "全名", - "Notes" : "说明", - "Website" : "网站", - "Federated Cloud ID" : "联合云ID", - "Home" : "家庭", - "Work" : "工作", - "Other" : "其它", - "Groups" : "群组", - "Birthday" : "生日", - "Anniversary" : "周年", - "Date of death" : "去世日期", - "Email" : "电子邮件", - "Instant messaging" : "即时通讯", - "Phone" : "电话", - "Mobile" : "手机", - "Work mobile" : "工作电话", - "Fax" : "传真", - "Fax home" : "家庭传真", - "Fax work" : "工作传真", - "Pager" : "传呼机", - "Voice" : "语音", - "Car" : "车", - "Work pager" : "工作传呼机", - "Social network" : "社交网络", - "Relationship" : "关系", - "Spouse" : "配偶", - "Child" : "子女", - "Mother" : "母亲", - "Father" : "父亲", - "Parent" : "父母", - "Brother" : "兄弟", - "Sister" : "姐妹", - "Relative" : "关系", - "Friend" : "朋友", - "Colleague" : "同事", - "Manager" : "经理", - "Assistant" : "助理", - "Gender" : "性别", - "Female" : "女性", - "Male" : "女性", - "Details" : "详情", - "Settings" : "设置" -},"pluralForm" :"nplurals=1; plural=0;" -} \ No newline at end of file diff --git a/l10n/zh_TW.js b/l10n/zh_TW.js deleted file mode 100644 index 06838675..00000000 --- a/l10n/zh_TW.js +++ /dev/null @@ -1,111 +0,0 @@ -OC.L10N.register( - "contacts", - { - "Contacts" : "通訊錄", - "Download" : "下載", - "Copy link" : "複製連結", - "Click to copy the link to your clipboard" : "點擊複製到剪貼簿", - "Toggle sharing" : "切換分享", - "Delete" : "刪除", - "Rename" : "重新命名", - "Share with users or groups" : "與使用者或群組分享", - "can edit" : "可編輯", - "Close" : " 關閉", - "Enabled" : "已啟用", - "Disabled" : "已停用", - "Copied!" : "已複製!", - "Not supported!" : "不支援!", - "Press ⌘-C to copy." : "按下 ⌘-C 複製", - "Press Ctrl-C to copy." : "按下 Ctrl-C 複製", - "Address book name" : "通訊錄名稱", - "Only these special characters are allowed: -_.!?#|()" : "僅允許使用以下特殊字元:-_.!?#|()", - "Address book could not be created." : "無法新增通訊錄", - "The selected image is too big (max 1MB)" : "選擇的圖片太大(最大 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "這張名片的資料受損,但是已經被修復,請檢查資料是否正確後儲存來保存您的變更", - "No contacts in here" : "這裡沒有聯絡人", - "Name" : "名稱", - "Organization" : "組織", - "Title" : "職稱", - "Add field …" : "新增欄位…", - "Save changes" : "儲存變更", - "Address book" : "通訊錄", - "Loading contacts …" : "載入聯絡人…", - "Import into" : "匯入至", - "Importing..." : "匯入中", - "Select your addressbook" : "選擇通訊錄", - "Import is disabled because no writable address book had been found." : "匯入已經被停用,因為沒有找到任何可以寫入的通訊錄", - "No search result for {query}" : "沒有結果符合 {query}", - "All contacts" : "所有聯絡人", - "Post office box" : "郵政信箱", - "Postal code" : "郵遞區號", - "City" : "城市", - "State or province" : "州或省", - "Country" : "國家", - "Address" : "地址", - "(new group)" : "(新群組)", - "Last name" : "姓", - "First name" : "名", - "Additional names" : "別名/中間名", - "Prefix" : "前綴", - "Suffix" : "後綴", - "Importing into" : "正匯入至", - "New contact" : "新聯絡人", - "Not grouped" : "不在群組裡", - "Sort by" : "排序依照", - "There is no address book available to create a contact." : "沒有可以新增聯絡人的通訊錄", - "{addressbook} shared by {owner}" : "{addressbook} 由 {owner} 分享", - "Contact not found." : "查無聯絡人", - "You don't have permission to write to this addressbook." : "您沒有變更此頁通訊錄的權限", - "Contact could not be created." : "日曆無法被創建。", - "No contacts in file. Only vCard files are allowed." : "檔案中找不到聯絡人,系統僅支援 vCard 檔案", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "僅支援 vCard 版本 4.0 (RFC6350) 和 3.0 (RFC2426)", - "Contact could not be moved." : "無法移動聯絡人", - "Contact could not be saved." : "無法儲存聯絡人", - "Waiting for the server to be ready…" : "等待伺服器準備就緒…", - "Importing…" : "匯入中…", - "Display name" : "顯示名稱", - "Nickname" : "暱稱", - "Detailed name" : "詳細名稱", - "Notes" : "筆記", - "Website" : "網站", - "Federated Cloud ID" : "雲端聯邦 ID", - "Home" : "住家", - "Work" : "工作", - "Other" : "其他", - "Groups" : "群組", - "Birthday" : "生日", - "Anniversary" : "週年", - "Date of death" : "卒日", - "Email" : "Email", - "Instant messaging" : "即時通訊", - "Phone" : "電話", - "Mobile" : "行動電話", - "Work mobile" : "工作行動電話", - "Fax" : "傳真", - "Fax home" : "傳真(家)", - "Fax work" : "傳真(公司)", - "Pager" : "呼叫器", - "Voice" : "語音", - "Car" : "車子", - "Work pager" : "工作呼叫器", - "Social network" : "社群網路", - "Relationship" : "關係", - "Spouse" : "配偶", - "Child" : "小孩", - "Mother" : "母親", - "Father" : "父親", - "Parent" : "父母", - "Brother" : "兄弟", - "Sister" : "姊妹", - "Relative" : "親屬", - "Friend" : "朋友", - "Colleague" : "同事", - "Manager" : "經理", - "Assistant" : "助理", - "Gender" : "性別", - "Female" : "女性", - "Male" : "男性", - "Details" : "詳細資料", - "Settings" : "設定" -}, -"nplurals=1; plural=0;"); diff --git a/l10n/zh_TW.json b/l10n/zh_TW.json deleted file mode 100644 index f0569094..00000000 --- a/l10n/zh_TW.json +++ /dev/null @@ -1,109 +0,0 @@ -{ "translations": { - "Contacts" : "通訊錄", - "Download" : "下載", - "Copy link" : "複製連結", - "Click to copy the link to your clipboard" : "點擊複製到剪貼簿", - "Toggle sharing" : "切換分享", - "Delete" : "刪除", - "Rename" : "重新命名", - "Share with users or groups" : "與使用者或群組分享", - "can edit" : "可編輯", - "Close" : " 關閉", - "Enabled" : "已啟用", - "Disabled" : "已停用", - "Copied!" : "已複製!", - "Not supported!" : "不支援!", - "Press ⌘-C to copy." : "按下 ⌘-C 複製", - "Press Ctrl-C to copy." : "按下 Ctrl-C 複製", - "Address book name" : "通訊錄名稱", - "Only these special characters are allowed: -_.!?#|()" : "僅允許使用以下特殊字元:-_.!?#|()", - "Address book could not be created." : "無法新增通訊錄", - "The selected image is too big (max 1MB)" : "選擇的圖片太大(最大 1MB)", - "This card is corrupted and has been fixed. Please check the data and trigger a save to make the changes permanent." : "這張名片的資料受損,但是已經被修復,請檢查資料是否正確後儲存來保存您的變更", - "No contacts in here" : "這裡沒有聯絡人", - "Name" : "名稱", - "Organization" : "組織", - "Title" : "職稱", - "Add field …" : "新增欄位…", - "Save changes" : "儲存變更", - "Address book" : "通訊錄", - "Loading contacts …" : "載入聯絡人…", - "Import into" : "匯入至", - "Importing..." : "匯入中", - "Select your addressbook" : "選擇通訊錄", - "Import is disabled because no writable address book had been found." : "匯入已經被停用,因為沒有找到任何可以寫入的通訊錄", - "No search result for {query}" : "沒有結果符合 {query}", - "All contacts" : "所有聯絡人", - "Post office box" : "郵政信箱", - "Postal code" : "郵遞區號", - "City" : "城市", - "State or province" : "州或省", - "Country" : "國家", - "Address" : "地址", - "(new group)" : "(新群組)", - "Last name" : "姓", - "First name" : "名", - "Additional names" : "別名/中間名", - "Prefix" : "前綴", - "Suffix" : "後綴", - "Importing into" : "正匯入至", - "New contact" : "新聯絡人", - "Not grouped" : "不在群組裡", - "Sort by" : "排序依照", - "There is no address book available to create a contact." : "沒有可以新增聯絡人的通訊錄", - "{addressbook} shared by {owner}" : "{addressbook} 由 {owner} 分享", - "Contact not found." : "查無聯絡人", - "You don't have permission to write to this addressbook." : "您沒有變更此頁通訊錄的權限", - "Contact could not be created." : "日曆無法被創建。", - "No contacts in file. Only vCard files are allowed." : "檔案中找不到聯絡人,系統僅支援 vCard 檔案", - "Only vCard version 4.0 (RFC6350) or version 3.0 (RFC2426) are supported." : "僅支援 vCard 版本 4.0 (RFC6350) 和 3.0 (RFC2426)", - "Contact could not be moved." : "無法移動聯絡人", - "Contact could not be saved." : "無法儲存聯絡人", - "Waiting for the server to be ready…" : "等待伺服器準備就緒…", - "Importing…" : "匯入中…", - "Display name" : "顯示名稱", - "Nickname" : "暱稱", - "Detailed name" : "詳細名稱", - "Notes" : "筆記", - "Website" : "網站", - "Federated Cloud ID" : "雲端聯邦 ID", - "Home" : "住家", - "Work" : "工作", - "Other" : "其他", - "Groups" : "群組", - "Birthday" : "生日", - "Anniversary" : "週年", - "Date of death" : "卒日", - "Email" : "Email", - "Instant messaging" : "即時通訊", - "Phone" : "電話", - "Mobile" : "行動電話", - "Work mobile" : "工作行動電話", - "Fax" : "傳真", - "Fax home" : "傳真(家)", - "Fax work" : "傳真(公司)", - "Pager" : "呼叫器", - "Voice" : "語音", - "Car" : "車子", - "Work pager" : "工作呼叫器", - "Social network" : "社群網路", - "Relationship" : "關係", - "Spouse" : "配偶", - "Child" : "小孩", - "Mother" : "母親", - "Father" : "父親", - "Parent" : "父母", - "Brother" : "兄弟", - "Sister" : "姊妹", - "Relative" : "親屬", - "Friend" : "朋友", - "Colleague" : "同事", - "Manager" : "經理", - "Assistant" : "助理", - "Gender" : "性別", - "Female" : "女性", - "Male" : "男性", - "Details" : "詳細資料", - "Settings" : "設定" -},"pluralForm" :"nplurals=1; plural=0;" -} \ No newline at end of file diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php index 3ade020c..233a274c 100644 --- a/lib/Controller/PageController.php +++ b/lib/Controller/PageController.php @@ -1,53 +1,73 @@ * - * This file is licensed under the Affero General Public License version 3 or - * later. See the COPYING file. + * @author John Molakvoæ + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . * - * @author Hendrik Leppelsack - * @copyright Hendrik Leppelsack 2015 */ namespace OCA\Contacts\Controller; -use OCP\IRequest; -use OCP\AppFramework\Http\TemplateResponse; -use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Controller; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\IRequest; class PageController extends Controller { - private $userId; - public function __construct($AppName, IRequest $request, $UserId){ + public function __construct(string $AppName, + IRequest $request, + string $UserId) { parent::__construct($AppName, $request); $this->userId = $UserId; } /** - * CAUTION: the @Stuff turns off security checks; for this page no admin is - * required and no CSRF check. If you don't know what CSRF is, read - * it up in the docs or you might create a security hole. This is - * basically the only required method to add this exemption, don't - * add it to any other method if you don't exactly know what it does - * * @NoAdminRequired * @NoCSRFRequired + * + * Default routing */ - public function index() { + public function index(): TemplateResponse { $params = ['user' => $this->userId]; - return new TemplateResponse('contacts', 'main', $params); // templates/main.php + + return new TemplateResponse('contacts', 'main', $params); // templates/main.php } /** - * Simply method that posts back the payload of the request * @NoAdminRequired + * @NoCSRFRequired + * + * Default routing for groups */ - public function doEcho($echo) { - return new DataResponse(['echo' => $echo]); + public function indexGroup(): TemplateResponse { + return $this->index(); } + /** + * @NoAdminRequired + * @NoCSRFRequired + * + * Default routing for contacts + */ + public function indexContact(): TemplateResponse { + return $this->index(); + } } diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..24162221 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,13187 @@ +{ + "name": "contacts", + "version": "3.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", + "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", + "dev": true, + "requires": { + "@babel/highlight": "7.0.0-beta.44" + } + }, + "@babel/generator": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", + "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44", + "jsesc": "^2.5.1", + "lodash": "^4.2.0", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", + "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", + "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "7.0.0-beta.44", + "@babel/template": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", + "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", + "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/highlight": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", + "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/template": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", + "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "lodash": "^4.2.0" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true + } + } + }, + "@babel/traverse": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", + "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/generator": "7.0.0-beta.44", + "@babel/helper-function-name": "7.0.0-beta.44", + "@babel/helper-split-export-declaration": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "debug": "^3.1.0", + "globals": "^11.1.0", + "invariant": "^2.2.0", + "lodash": "^4.2.0" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "globals": { + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz", + "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", + "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.2.0", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + } + } + }, + "@types/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=", + "dev": true + }, + "@types/strip-json-comments": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", + "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", + "dev": true + }, + "@vue/component-compiler-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-1.3.1.tgz", + "integrity": "sha512-IyjJW6ToMitgAhp3xh22QiEW8JvHfLyzlyY/J+GjJ71miod9tNsy6xT2ckm/VirlhPMfeM43kgYZe34jhmmzpw==", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^6.0.20", + "postcss-selector-parser": "^3.1.1", + "prettier": "^1.13.0", + "source-map": "^0.5.6", + "vue-template-es2015-compiler": "^1.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@vue/test-utils": { + "version": "1.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-1.0.0-beta.20.tgz", + "integrity": "sha1-70UFNBuALz3hwGs8uGUTeMhzcfo=", + "dev": true, + "requires": { + "lodash": "^4.17.4" + } + }, + "@webassemblyjs/ast": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.5.13.tgz", + "integrity": "sha512-49nwvW/Hx9i+OYHg+mRhKZfAlqThr11Dqz8TsrvqGKMhdI2ijy3KBJOun2Z4770TPjrIJhR6KxChQIDaz8clDA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/wast-parser": "1.5.13", + "debug": "^3.1.0", + "mamacro": "^0.0.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.13.tgz", + "integrity": "sha512-vrvvB18Kh4uyghSKb0NTv+2WZx871WL2NzwMj61jcq2bXkyhRC+8Q0oD7JGVf0+5i/fKQYQSBCNMMsDMRVAMqA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.13.tgz", + "integrity": "sha512-dBh2CWYqjaDlvMmRP/kudxpdh30uXjIbpkLj9HQe+qtYlwvYjPRjdQXrq1cTAAOUSMTtzqbXIxEdEZmyKfcwsg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.13.tgz", + "integrity": "sha512-v7igWf1mHcpJNbn4m7e77XOAWXCDT76Xe7Is1VQFXc4K5jRcFrl9D0NrqM4XifQ0bXiuTSkTKMYqDxu5MhNljA==", + "dev": true, + "requires": { + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.13.tgz", + "integrity": "sha512-yN6ScQQDFCiAXnVctdVO/J5NQRbwyTbQzsGzEgXsAnrxhjp0xihh+nNHQTMrq5UhOqTb5LykpJAvEv9AT0jnAQ==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.5.13" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.13.tgz", + "integrity": "sha512-hSIKzbXjVMRvy3Jzhgu+vDd/aswJ+UMEnLRCkZDdknZO3Z9e6rp1DAs0tdLItjCFqkz9+0BeOPK/mk3eYvVzZg==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.13.tgz", + "integrity": "sha512-zxJXULGPLB7r+k+wIlvGlXpT4CYppRz8fLUM/xobGHc9Z3T6qlmJD9ySJ2jknuktuuiR9AjnNpKYDECyaiX+QQ==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "mamacro": "^0.0.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.13.tgz", + "integrity": "sha512-0n3SoNGLvbJIZPhtMFq0XmmnA/YmQBXaZKQZcW8maGKwLpVcgjNrxpFZHEOLKjXJYVN5Il8vSfG7nRX50Zn+aw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.13.tgz", + "integrity": "sha512-IJ/goicOZ5TT1axZFSnlAtz4m8KEjYr12BNOANAwGFPKXM4byEDaMNXYowHMG0yKV9a397eU/NlibFaLwr1fbw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/ieee754": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.5.13.tgz", + "integrity": "sha512-TseswvXEPpG5TCBKoLx9tT7+/GMACjC1ruo09j46ULRZWYm8XHpDWaosOjTnI7kr4SRJFzA6MWoUkAB+YCGKKg==", + "dev": true, + "requires": { + "ieee754": "^1.1.11" + } + }, + "@webassemblyjs/leb128": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.5.13.tgz", + "integrity": "sha512-0NRMxrL+GG3eISGZBmLBLAVjphbN8Si15s7jzThaw1UE9e5BY1oH49/+MA1xBzxpf1OW5sf9OrPDOclk9wj2yg==", + "dev": true, + "requires": { + "long": "4.0.0" + }, + "dependencies": { + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "dev": true + } + } + }, + "@webassemblyjs/utf8": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.5.13.tgz", + "integrity": "sha512-Ve1ilU2N48Ew0lVGB8FqY7V7hXjaC4+PeZM+vDYxEd+R2iQ0q+Wb3Rw8v0Ri0+rxhoz6gVGsnQNb4FjRiEH/Ng==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.13.tgz", + "integrity": "sha512-X7ZNW4+Hga4f2NmqENnHke2V/mGYK/xnybJSIXImt1ulxbCOEs/A+ZK/Km2jgihjyVxp/0z0hwIcxC6PrkWtgw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/helper-wasm-section": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "@webassemblyjs/wasm-opt": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "@webassemblyjs/wast-printer": "1.5.13", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.13.tgz", + "integrity": "sha512-yfv94Se8R73zmr8GAYzezFHc3lDwE/lBXQddSiIZEKZFuqy7yWtm3KMwA1uGbv5G1WphimJxboXHR80IgX1hQA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/ieee754": "1.5.13", + "@webassemblyjs/leb128": "1.5.13", + "@webassemblyjs/utf8": "1.5.13" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.13.tgz", + "integrity": "sha512-IkXSkgzVhQ0QYAdIayuCWMmXSYx0dHGU8Ah/AxJf1gBvstMWVnzJnBwLsXLyD87VSBIcsqkmZ28dVb0mOC3oBg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.13.tgz", + "integrity": "sha512-XnYoIcu2iqq8/LrtmdnN3T+bRjqYFjRHqWbqK3osD/0r/Fcv4d9ecRzjVtC29ENEuNTK4mQ9yyxCBCbK8S/cpg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-api-error": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/ieee754": "1.5.13", + "@webassemblyjs/leb128": "1.5.13", + "@webassemblyjs/utf8": "1.5.13" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.5.13.tgz", + "integrity": "sha512-Lbz65T0LQ1LgzKiUytl34CwuhMNhaCLgrh0JW4rJBN6INnBB8NMwUfQM+FxTnLY9qJ+lHJL/gCM5xYhB9oWi4A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/floating-point-hex-parser": "1.5.13", + "@webassemblyjs/helper-api-error": "1.5.13", + "@webassemblyjs/helper-code-frame": "1.5.13", + "@webassemblyjs/helper-fsm": "1.5.13", + "long": "^3.2.0", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.5.13.tgz", + "integrity": "sha512-QcwogrdqcBh8Z+eUF8SG+ag5iwQSXxQJELBEHmLkk790wgQgnIMmntT2sMAMw53GiFNckArf5X0bsCA44j3lWQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/wast-parser": "1.5.13", + "long": "^3.2.0" + } + }, + "abab": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "acorn": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", + "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", + "dev": true, + "requires": { + "acorn": "^5.0.0" + } + }, + "acorn-globals": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", + "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", + "dev": true, + "requires": { + "acorn": "^5.0.0" + } + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "^3.0.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "append-transform": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "dev": true, + "requires": { + "default-require-extensions": "^2.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-iterate": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-1.1.2.tgz", + "integrity": "sha512-1hWSHTIlG/8wtYD+PPX5AOBtKWngpDFjrsrHgZpe+JdgNGz0udYu6ZIkAa/xuenIUEqFv7DvE2Yr60jxweJSrQ==", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "dev": true + }, + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "requires": { + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + } + }, + "babel-eslint": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.5.tgz", + "integrity": "sha512-TcdEGCHHquOPQOlH6Fe6MLwPWWWJLdeKhcGoLfOTShETpoH8XYWhjWJw38KCKaTca7c/EdxLolnbakixKxnXDg==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/traverse": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "eslint-scope": "~3.7.1", + "eslint-visitor-keys": "^1.0.0" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-jest": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.4.0.tgz", + "integrity": "sha1-IsNMOS4hdvakw2eZKn/P9p0uhVc=", + "dev": true, + "requires": { + "babel-plugin-istanbul": "^4.1.6", + "babel-preset-jest": "^23.2.0" + } + }, + "babel-loader": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.5.tgz", + "integrity": "sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw==", + "dev": true, + "requires": { + "find-cache-dir": "^1.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-istanbul": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", + "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "^6.13.0", + "find-up": "^2.1.0", + "istanbul-lib-instrument": "^1.10.1", + "test-exclude": "^4.2.1" + } + }, + "babel-plugin-jest-hoist": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz", + "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=", + "dev": true + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "^0.10.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-preset-env": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + } + }, + "babel-preset-jest": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz", + "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^23.2.0", + "babel-plugin-syntax-object-rest-spread": "^6.13.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "bail": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", + "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.x.x" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-process-hrtime": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz", + "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + }, + "bser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", + "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", + "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + }, + "dependencies": { + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "^0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "requires": { + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + } + } + }, + "caniuse-db": { + "version": "1.0.30000865", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000865.tgz", + "integrity": "sha1-gv+2TUD3VnYgqsAtOmMgeWiavGs=", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30000865", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000865.tgz", + "integrity": "sha512-vs79o1mOSKRGv/1pSkp4EXgl4ZviWeYReXw60XfacPU64uQWZwJT6vZNmxRF9O+6zu71sJwMxLK5JXxbzuVrLw==", + "dev": true + }, + "capture-exit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz", + "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=", + "dev": true, + "requires": { + "rsvp": "^3.3.3" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "ccount": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz", + "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "character-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", + "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==", + "dev": true + }, + "character-entities-html4": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.2.tgz", + "integrity": "sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz", + "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==", + "dev": true + }, + "character-reference-invalid": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz", + "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==", + "dev": true + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + } + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", + "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "ci-info": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", + "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "dev": true, + "requires": { + "chalk": "^1.1.3" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-deep": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", + "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.0", + "shallow-clone": "^1.0.0" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + } + } + }, + "clone-regexp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.1.tgz", + "integrity": "sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw==", + "dev": true, + "requires": { + "is-regexp": "^1.0.0", + "is-supported-regexp-flag": "^1.0.0" + } + }, + "clorox": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clorox/-/clorox-1.0.3.tgz", + "integrity": "sha512-w3gKAUKMJYmmaJyc+p+iDrDtLvsFasrx/y6/zWo2U1TZfsz3y4Vl4T9PHCZrOwk1eMTOSRI6xHdpDR4PhTdy8Q==", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "dev": true, + "requires": { + "q": "^1.1.2" + } + }, + "coalescy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/coalescy/-/coalescy-1.0.0.tgz", + "integrity": "sha1-SwZYRrg2NhrabEtKSr9LwcrDG/E=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collapse-white-space": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz", + "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true, + "requires": { + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" + } + }, + "color-convert": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", + "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", + "dev": true, + "requires": { + "color-name": "1.1.1" + } + }, + "color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", + "dev": true + }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true, + "requires": { + "color-name": "^1.0.0" + } + }, + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true, + "requires": { + "color": "^0.11.0", + "css-color-names": "0.0.4", + "has": "^1.0.1" + } + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", + "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==", + "dev": true + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "compare-versions": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.3.0.tgz", + "integrity": "sha512-MAAAIOdi2s4Gl6rZ76PNcUa9IOYB+5ICdT41o5uMRf09aEu/F9RK+qhe8RjXNPwcTjGV7KU7h2P/fljThFVqyQ==", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "condense-newlines": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", + "integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-whitespace": "^0.3.0", + "kind-of": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "config-chain": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", + "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "^0.1.4" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-3.1.0.tgz", + "integrity": "sha512-zedsBhLSbPBms+kE7AH4vHg6JsKDz6epSv2/+5XHs8ILHlgDciSJfSWf8sX9aQ52Jb7KI7VswUTsLpR/G0cr2Q==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^3.0.0", + "require-from-string": "^2.0.1" + }, + "dependencies": { + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "parse-json": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-3.0.0.tgz", + "integrity": "sha1-+m9HsY4jgm6tMvJj50TQ4ehH+xM=", + "dev": true, + "requires": { + "error-ex": "^1.3.1" + } + } + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.x.x" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.3.tgz", + "integrity": "sha512-0W171WccAjQGGTKLhw4m2nnl0zPHUlTO/I8td4XzJgIB8Hg3ZZx71qT4G4eX8OVsSiaAKiUMy73E3nsbPlg2DQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "source-map": "^0.1.38", + "source-map-resolve": "^0.5.1", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-loader": { + "version": "0.28.11", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", + "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "cssnano": "^3.10.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash.camelcase": "^4.3.0", + "object-assign": "^4.1.1", + "postcss": "^5.0.6", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" + } + }, + "css-selector-tokenizer": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "dev": true, + "requires": { + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" + }, + "dependencies": { + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + } + } + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true, + "requires": { + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" + } + }, + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "requires": { + "clap": "^1.0.9", + "source-map": "^0.5.3" + } + }, + "cssom": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz", + "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==", + "dev": true + }, + "cssstyle": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.3.1.tgz", + "integrity": "sha512-tNvaxM5blOnxanyxI6panOsnfiyLRj3HV4qjqqS45WPNS1usdYWRUQjqTEEELK73lpeP/1KoIGYUwrBn/VcECA==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.0.tgz", + "integrity": "sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA==", + "dev": true, + "requires": { + "abab": "^1.0.4", + "whatwg-mimetype": "^2.0.0", + "whatwg-url": "^6.4.0" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "dev": true, + "requires": { + "strip-bom": "^3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "^2.0.5", + "object-keys": "^1.0.8" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "dlv": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.2.tgz", + "integrity": "sha512-xxD4VSH67GbRvSGUrckvha94RD7hjgOH7rqGxiytLpkaeMvixOHFZTGFK6EkIm3T761OVHT8ABHmGkq9gXgu6Q==", + "dev": true + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "duplexify": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", + "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } + }, + "editorconfig": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.13.3.tgz", + "integrity": "sha512-WkjsUNVCu+ITKDj73QDvi0trvpdDWdkDyHybDGSXPfekLCqwmpD7CP7iPbvBgosNuLcI96XTDwNa75JyFl7tEQ==", + "dev": true, + "requires": { + "bluebird": "^3.0.5", + "commander": "^2.9.0", + "lru-cache": "^3.2.0", + "semver": "^5.1.0", + "sigmund": "^1.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz", + "integrity": "sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=", + "dev": true, + "requires": { + "pseudomap": "^1.0.1" + } + } + } + }, + "electron-to-chromium": { + "version": "1.3.52", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.52.tgz", + "integrity": "sha1-0tnxJwuko7lnuDHEDvcftNmrXOA=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.10.0.tgz", + "integrity": "sha512-fjUOf8johsv23WuIKdNQU4P9t9jhQ4Qzx6pC2uW890OloK3Zs1ZAoCNpg/2larNF501jLl3UNy0kIRcF6VI22g==", + "dev": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "eslint": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "requires": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "4.0.2", + "text-table": "~0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "globals": { + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz", + "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==", + "dev": true + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "eslint-config-standard": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-11.0.0.tgz", + "integrity": "sha512-oDdENzpViEe5fwuRCWla7AXQd++/oyIp8zP+iP9jiUPG6NBj3SHgdgtl/kTn00AjeN+1HNvavTKmYbMo+xMOlw==", + "dev": true + }, + "eslint-friendly-formatter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-friendly-formatter/-/eslint-friendly-formatter-4.0.1.tgz", + "integrity": "sha1-J9UE3IN/fK3b8gGy6EpO5zC6Pvo=", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "coalescy": "1.0.0", + "extend": "^3.0.0", + "minimist": "^1.2.0", + "strip-ansi": "^4.0.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + } + }, + "eslint-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.0.0.tgz", + "integrity": "sha512-VxxGDI4bXzLk0+/jMt/0EkGMRKS9ox6Czx+yapMb9WJmcS/ZHhlhqcVUNgUjFBNp02j/2pZLdGOrG7EXyjoz/g==", + "dev": true, + "requires": { + "loader-fs-cache": "^1.0.0", + "loader-utils": "^1.0.2", + "object-assign": "^4.0.1", + "object-hash": "^1.1.4", + "rimraf": "^2.6.1" + } + }, + "eslint-module-utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", + "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", + "dev": true, + "requires": { + "debug": "^2.6.8", + "pkg-dir": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.13.0.tgz", + "integrity": "sha512-t6hGKQDMIt9N8R7vLepsYXgDfeuhp6ZJSgtrLEDxonpSubyxUZHjhm6LsAaZX8q6GYVxkbT3kTsV9G5mBCFR6A==", + "dev": true, + "requires": { + "contains-path": "^0.1.0", + "debug": "^2.6.8", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.1", + "eslint-module-utils": "^2.2.0", + "has": "^1.0.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0", + "resolve": "^1.6.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "eslint-plugin-node": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz", + "integrity": "sha512-Q/Cc2sW1OAISDS+Ji6lZS2KV4b7ueA/WydVWd1BECTQwVvfQy5JAi3glhINoKzoMnfnuRgNP+ZWKrGAbp3QDxw==", + "dev": true, + "requires": { + "ignore": "^3.3.6", + "minimatch": "^3.0.4", + "resolve": "^1.3.3", + "semver": "^5.4.1" + } + }, + "eslint-plugin-promise": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz", + "integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==", + "dev": true + }, + "eslint-plugin-standard": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.1.0.tgz", + "integrity": "sha512-fVcdyuKRr0EZ4fjWl3c+gp1BANFJD1+RaWa2UPYfMZ6jCtp5RG00kSaXnK/dE5sYzt4kaWJ9qdxqUfc0d9kX0w==", + "dev": true + }, + "eslint-plugin-vue": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-4.5.0.tgz", + "integrity": "sha512-2CDidjAZ875tbJgtjKihIQRkqxgk3gVUDOAW2e9dP+Kf39jhCwKy6aMXIsHRKCPjRqQhDWF0jtVRNcywBFWTZA==", + "dev": true, + "requires": { + "vue-eslint-parser": "^2.0.3" + } + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "dev": true, + "requires": { + "merge": "^1.2.0" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "execall": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-1.0.0.tgz", + "integrity": "sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=", + "dev": true, + "requires": { + "clone-regexp": "^1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "expect": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-23.4.0.tgz", + "integrity": "sha1-baTsyZwUcSU+cogziYOtHrrbYMM=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "jest-diff": "^23.2.0", + "jest-get-type": "^22.1.0", + "jest-matcher-utils": "^23.2.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extract-from-css": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/extract-from-css/-/extract-from-css-0.4.4.tgz", + "integrity": "sha1-HqffLnx8brmSL6COitrqSG9vj5I=", + "dev": true, + "requires": { + "css": "^2.1.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastparse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", + "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "dev": true + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "dev": true, + "requires": { + "bser": "^2.0.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "file-loader": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", + "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "schema-utils": "^0.4.5" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "^7.0.3", + "minimatch": "^3.0.3" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-babel-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.1.0.tgz", + "integrity": "sha1-rMAQQ6Z0n+w0Qpvmtk9ULrtdY1U=", + "dev": true, + "requires": { + "json5": "^0.5.1", + "path-exists": "^3.0.0" + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" + } + }, + "flatten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "dev": true + }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "^2.1.0" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true + } + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "global-modules-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-modules-path/-/global-modules-path-2.1.0.tgz", + "integrity": "sha512-3DrmGj2TP+96cABk9TfMp6f3knH/Y46dqvWznTU3Tf6/bDGLDAn15tFluQ7BcloykOcdY16U0WGq0BQblYOxJQ==", + "dev": true + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true + }, + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "gonzales-pe": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.2.3.tgz", + "integrity": "sha512-Kjhohco0esHQnOiqqdJeNz/5fyPkOMD/d6XVjwTAoPGUFh0mCollPUTUTa2OZy4dYNAqlPIQdTiNzJTWdd9Htw==", + "dev": true, + "requires": { + "minimist": "1.1.x" + }, + "dependencies": { + "minimist": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", + "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "handlebars": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "dev": true, + "requires": { + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "hash.js": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", + "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", + "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "ical.js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ical.js/-/ical.js-1.2.2.tgz", + "integrity": "sha1-WbUXNiqPYdzgNC/mfet8IN0Rn24=" + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "import-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "dev": true, + "requires": { + "pkg-dir": "^2.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-alphabetical": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz", + "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==", + "dev": true + }, + "is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", + "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-ci": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", + "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", + "dev": true, + "requires": { + "ci-info": "^1.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-decimal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz", + "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-generator-fn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz", + "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-hexadecimal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz", + "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-supported-regexp-flag": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz", + "integrity": "sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ==", + "dev": true + }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-whitespace": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", + "integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38=", + "dev": true + }, + "is-whitespace-character": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz", + "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-word-character": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz", + "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-api": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz", + "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==", + "dev": true, + "requires": { + "async": "^2.1.4", + "compare-versions": "^3.1.0", + "fileset": "^2.0.2", + "istanbul-lib-coverage": "^1.2.0", + "istanbul-lib-hook": "^1.2.0", + "istanbul-lib-instrument": "^1.10.1", + "istanbul-lib-report": "^1.1.4", + "istanbul-lib-source-maps": "^1.2.4", + "istanbul-reports": "^1.3.0", + "js-yaml": "^3.7.0", + "mkdirp": "^0.5.1", + "once": "^1.4.0" + } + }, + "istanbul-lib-coverage": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", + "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.1.tgz", + "integrity": "sha512-eLAMkPG9FU0v5L02lIkcj/2/Zlz9OuluaXikdr5iStk8FDbSwAixTK9TkYxbF0eNnzAJTwM2fkV2A1tpsIp4Jg==", + "dev": true, + "requires": { + "append-transform": "^1.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", + "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", + "dev": true, + "requires": { + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.0", + "semver": "^5.3.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz", + "integrity": "sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^1.2.0", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.5.tgz", + "integrity": "sha512-8O2T/3VhrQHn0XcJbP1/GN7kXMiRAlPi+fj3uEHrjBD8Oz7Py0prSC25C09NuAZS6bgW1NNKAvCSHZXB0irSGA==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.2.0", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "istanbul-reports": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz", + "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", + "dev": true, + "requires": { + "handlebars": "^4.0.3" + } + }, + "jest": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-23.4.0.tgz", + "integrity": "sha1-685j9lKcJ8ZG2AxhCGbwMG9m3L8=", + "dev": true, + "requires": { + "import-local": "^1.0.0", + "jest-cli": "^23.4.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "jest-cli": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.4.0.tgz", + "integrity": "sha1-0f3R28Qdaa6L1D0AcM4jmI6s2G8=", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "import-local": "^1.0.0", + "is-ci": "^1.0.10", + "istanbul-api": "^1.3.1", + "istanbul-lib-coverage": "^1.2.0", + "istanbul-lib-instrument": "^1.10.1", + "istanbul-lib-source-maps": "^1.2.4", + "jest-changed-files": "^23.4.0", + "jest-config": "^23.4.0", + "jest-environment-jsdom": "^23.4.0", + "jest-get-type": "^22.1.0", + "jest-haste-map": "^23.4.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0", + "jest-resolve-dependencies": "^23.4.0", + "jest-runner": "^23.4.0", + "jest-runtime": "^23.4.0", + "jest-snapshot": "^23.4.0", + "jest-util": "^23.4.0", + "jest-validate": "^23.4.0", + "jest-watcher": "^23.4.0", + "jest-worker": "^23.2.0", + "micromatch": "^2.3.11", + "node-notifier": "^5.2.1", + "prompts": "^0.1.9", + "realpath-native": "^1.0.0", + "rimraf": "^2.5.4", + "slash": "^1.0.0", + "string-length": "^2.0.0", + "strip-ansi": "^4.0.0", + "which": "^1.2.12", + "yargs": "^11.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-changed-files": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.4.0.tgz", + "integrity": "sha1-8bME+YwjWvXZox7FJCYsXk3jxv8=", + "dev": true, + "requires": { + "throat": "^4.0.0" + } + }, + "jest-config": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.4.0.tgz", + "integrity": "sha1-ecz41oqg5I+eO+uBuDqlh1xj+j8=", + "dev": true, + "requires": { + "babel-core": "^6.0.0", + "babel-jest": "^23.4.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^23.4.0", + "jest-environment-node": "^23.4.0", + "jest-get-type": "^22.1.0", + "jest-jasmine2": "^23.4.0", + "jest-regex-util": "^23.3.0", + "jest-resolve": "^23.4.0", + "jest-util": "^23.4.0", + "jest-validate": "^23.4.0", + "pretty-format": "^23.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-diff": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-23.2.0.tgz", + "integrity": "sha1-nyz0tR4Sx5FVAgCrwWtHEwrxBio=", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff": "^3.2.0", + "jest-get-type": "^22.1.0", + "pretty-format": "^23.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-docblock": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz", + "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-each": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.4.0.tgz", + "integrity": "sha1-L6nt2J2qGk7cn/m/YGKja3E0UUM=", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "pretty-format": "^23.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-environment-jsdom": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz", + "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=", + "dev": true, + "requires": { + "jest-mock": "^23.2.0", + "jest-util": "^23.4.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-node": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.4.0.tgz", + "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=", + "dev": true, + "requires": { + "jest-mock": "^23.2.0", + "jest-util": "^23.4.0" + } + }, + "jest-get-type": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", + "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", + "dev": true + }, + "jest-haste-map": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.4.0.tgz", + "integrity": "sha1-8qDqpBr3Zs1RAebCkf3GQ1yT7hw=", + "dev": true, + "requires": { + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.1.11", + "jest-docblock": "^23.2.0", + "jest-serializer": "^23.0.1", + "jest-worker": "^23.2.0", + "micromatch": "^2.3.11", + "sane": "^2.0.0" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + } + } + }, + "jest-jasmine2": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.4.0.tgz", + "integrity": "sha1-F85Tn+YI74mNaYZRgUSs8nC+yo8=", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^23.4.0", + "is-generator-fn": "^1.0.0", + "jest-diff": "^23.2.0", + "jest-each": "^23.4.0", + "jest-matcher-utils": "^23.2.0", + "jest-message-util": "^23.4.0", + "jest-snapshot": "^23.4.0", + "jest-util": "^23.4.0", + "pretty-format": "^23.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-leak-detector": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-23.2.0.tgz", + "integrity": "sha1-wonZYdxjjxQ1fU75bgQx7MGqN30=", + "dev": true, + "requires": { + "pretty-format": "^23.2.0" + } + }, + "jest-matcher-utils": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-23.2.0.tgz", + "integrity": "sha1-TUmB8jIT6Tnjzt8j3DTHR7WuGRM=", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "pretty-format": "^23.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-message-util": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz", + "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0-beta.35", + "chalk": "^2.0.1", + "micromatch": "^2.3.11", + "slash": "^1.0.0", + "stack-utils": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-mock": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-23.2.0.tgz", + "integrity": "sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=", + "dev": true + }, + "jest-regex-util": { + "version": "23.3.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-23.3.0.tgz", + "integrity": "sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=", + "dev": true + }, + "jest-resolve": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.4.0.tgz", + "integrity": "sha1-tAYdvNY5G15EXV/YTJ2tX/H/VmI=", + "dev": true, + "requires": { + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "realpath-native": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-23.4.0.tgz", + "integrity": "sha1-5z785wJipuK/UmPQsjAJoJhnhiA=", + "dev": true, + "requires": { + "jest-regex-util": "^23.3.0", + "jest-snapshot": "^23.4.0" + } + }, + "jest-runner": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-23.4.0.tgz", + "integrity": "sha1-GFmyEaJk6lpDt6MCLhGZBnxN/lc=", + "dev": true, + "requires": { + "exit": "^0.1.2", + "graceful-fs": "^4.1.11", + "jest-config": "^23.4.0", + "jest-docblock": "^23.2.0", + "jest-haste-map": "^23.4.0", + "jest-jasmine2": "^23.4.0", + "jest-leak-detector": "^23.2.0", + "jest-message-util": "^23.4.0", + "jest-runtime": "^23.4.0", + "jest-util": "^23.4.0", + "jest-worker": "^23.2.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz", + "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "jest-runtime": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.4.0.tgz", + "integrity": "sha1-ww72Gd71h7k7rUpJONqazLmTa00=", + "dev": true, + "requires": { + "babel-core": "^6.0.0", + "babel-plugin-istanbul": "^4.1.6", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "exit": "^0.1.2", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.11", + "jest-config": "^23.4.0", + "jest-haste-map": "^23.4.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0", + "jest-resolve": "^23.4.0", + "jest-snapshot": "^23.4.0", + "jest-util": "^23.4.0", + "jest-validate": "^23.4.0", + "micromatch": "^2.3.11", + "realpath-native": "^1.0.0", + "slash": "^1.0.0", + "strip-bom": "3.0.0", + "write-file-atomic": "^2.1.0", + "yargs": "^11.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-serializer": { + "version": "23.0.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-23.0.1.tgz", + "integrity": "sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=", + "dev": true + }, + "jest-serializer-vue": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jest-serializer-vue/-/jest-serializer-vue-2.0.2.tgz", + "integrity": "sha1-sjjvKGNX7GtIBCG9RxRQUJh9WbM=", + "dev": true, + "requires": { + "pretty": "2.0.0" + } + }, + "jest-snapshot": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.4.0.tgz", + "integrity": "sha1-dGPQNXyr3+HGOZTV4y9wfRAz1hY=", + "dev": true, + "requires": { + "babel-traverse": "^6.0.0", + "babel-types": "^6.0.0", + "chalk": "^2.0.1", + "jest-diff": "^23.2.0", + "jest-matcher-utils": "^23.2.0", + "jest-message-util": "^23.4.0", + "jest-resolve": "^23.4.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^23.2.0", + "semver": "^5.5.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-util": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.4.0.tgz", + "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=", + "dev": true, + "requires": { + "callsites": "^2.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.11", + "is-ci": "^1.0.10", + "jest-message-util": "^23.4.0", + "mkdirp": "^0.5.1", + "slash": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-validate": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.4.0.tgz", + "integrity": "sha1-2W7t4B7wOskJwAnpyORVGX1IwgE=", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "leven": "^2.1.0", + "pretty-format": "^23.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-watcher": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.4.0.tgz", + "integrity": "sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "string-length": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-worker": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz", + "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=", + "dev": true, + "requires": { + "merge-stream": "^1.0.1" + } + }, + "js-base64": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.5.tgz", + "integrity": "sha512-aUnNwqMOXw3yvErjMPSQu6qIIzUmT1e5KcU1OZxRDU1g/am6mzBvcrmLAYwzmB59BHPrh5/tKaiF4OPhqRWESQ==", + "dev": true + }, + "js-beautify": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.7.5.tgz", + "integrity": "sha512-9OhfAqGOrD7hoQBLJMTA+BKuKmoEtTJXzZ7WDF/9gvjtey1koVLuZqIY6c51aPDjbNdNtIXAkiWKVhziawE9Og==", + "dev": true, + "requires": { + "config-chain": "~1.1.5", + "editorconfig": "^0.13.2", + "mkdirp": "~0.5.0", + "nopt": "~3.0.1" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^2.6.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsdom": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.11.0.tgz", + "integrity": "sha512-ou1VyfjwsSuWkudGxb03FotDajxAto6USAlmMZjE2lc0jCznt7sBWkhfRBRaWwbnmDqdMSTKTLT5d9sBFkkM7A==", + "dev": true, + "requires": { + "abab": "^1.0.4", + "acorn": "^5.3.0", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": ">= 0.3.1 < 0.4.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.0", + "escodegen": "^1.9.0", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.2.0", + "nwsapi": "^2.0.0", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.83.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.3", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^4.0.0", + "xml-name-validator": "^3.0.0" + } + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "known-css-properties": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.5.0.tgz", + "integrity": "sha512-LOS0CoS8zcZnB1EjLw4LLqDXw8nvt3AGH5dXLQP3D9O1nLLA+9GC5GnPl5mmF+JiQAtSX4VyZC7KvEtcA4kUtA==", + "dev": true + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "loader-fs-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz", + "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", + "dev": true, + "requires": { + "find-cache-dir": "^0.1.1", + "mkdirp": "0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + } + } + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", + "dev": true + }, + "lodash.mergewith": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", + "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.tail": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", + "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", + "dev": true + }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "loglevel": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "dev": true + }, + "loglevel-colored-level-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz", + "integrity": "sha1-akAhj9x64V/HbD0PPmdsRlOIYD4=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "loglevel": "^1.4.1" + } + }, + "long": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", + "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "longest-streak": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz", + "integrity": "sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "markdown-escapes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz", + "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==", + "dev": true + }, + "markdown-table": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.2.tgz", + "integrity": "sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==", + "dev": true + }, + "math-expression-evaluator": { + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "dev": true + }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, + "mathml-tag-names": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.0.tgz", + "integrity": "sha512-3Zs9P/0zzwTob2pdgT0CHZuMbnSUSp8MB1bddfm+HDmnFWHGT4jvEZRf+2RuPoa+cjdn/z25SEt5gFTqdhvJAg==", + "dev": true + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "mdast-util-compact": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz", + "integrity": "sha1-zbX4TitqLTEU3zO9BdnLMuPECDo=", + "dev": true, + "requires": { + "unist-util-modify-children": "^1.0.0", + "unist-util-visit": "^1.1.0" + } + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "merge": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", + "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "~1.33.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "dev": true, + "requires": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "neo-async": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", + "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==", + "dev": true + }, + "nice-try": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", + "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", + "dev": true + }, + "node-cache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.2.0.tgz", + "integrity": "sha512-obRu6/f7S024ysheAjoYFEEBqqDWv4LOMNJEuO8vMeEw2AT4z+NCzO4hlc2lhI4vATzbCQv6kke9FVdx0RbCOw==", + "dev": true, + "requires": { + "clone": "2.x", + "lodash": "4.x" + }, + "dependencies": { + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true + } + } + }, + "node-gyp": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.7.0.tgz", + "integrity": "sha512-qDQE/Ft9xXP6zphwx4sD0t+VhwV7yFaloMpfbL2QnnDZcyaiakWlLdtFGGQfTAwpFHdpbRhRxVhIHN1OKAjgbg==", + "dev": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": ">=2.9.0 <2.82.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "requires": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "^1.4.1" + } + } + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-libs-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.0", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.10.3", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-notifier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.2.1.tgz", + "integrity": "sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "semver": "^5.4.1", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "node-sass": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.2.tgz", + "integrity": "sha512-LdxoJLZutx0aQXHtWIYwJKMj+9pTjneTcLWJgzf2XbGu0q5pRNqW5QvFCEdm3mc5rJOdru/mzln5d0EZLacf6g==", + "dev": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash.assign": "^4.2.0", + "lodash.clonedeep": "^4.3.2", + "lodash.mergewith": "^4.6.0", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.10.0", + "node-gyp": "^3.3.1", + "npmlog": "^4.0.0", + "request": "2.87.0", + "sass-graph": "^2.2.4", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-selector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", + "dev": true + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nwsapi": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.4.tgz", + "integrity": "sha512-Zt6HRR6RcJkuj5/N9zeE7FN6YitRW//hK2wTOwX274IBphbY3Zf5+yn5mZ9v/SzAOTMjQNxZf9KkmPLWn0cV4g==", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-hash": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.0.tgz", + "integrity": "sha512-05KzQ70lSeGSrZJQXE5wNDiTkBJDlUT/myi6RX9dVIvz7a7Qh4oH93BQdiPMn27nldYvVQCKMUaM83AfizZlsQ==", + "dev": true + }, + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parse-asn1": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" + } + }, + "parse-entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.2.tgz", + "integrity": "sha512-5N9lmQ7tmxfXf+hO3X6KRG6w7uYO/HL9fHalSySTdyn63C3WNvTM/1R8tn1u1larNcEbo3Slcy2bsVDQqvEpUg==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pbkdf2": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", + "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true, + "requires": { + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" + } + }, + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true, + "requires": { + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" + } + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true, + "requires": { + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" + } + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true, + "requires": { + "postcss": "^5.0.14" + } + }, + "postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + } + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true, + "requires": { + "postcss": "^5.0.14" + } + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true, + "requires": { + "postcss": "^5.0.16" + } + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true, + "requires": { + "postcss": "^5.0.14", + "uniqs": "^2.0.0" + } + }, + "postcss-filter-plugins": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", + "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", + "dev": true, + "requires": { + "postcss": "^5.0.4" + } + }, + "postcss-html": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.12.0.tgz", + "integrity": "sha512-KxKUpj7AY7nlCbLcTOYxdfJnGE7QFAfU2n95ADj1Q90RM/pOLdz8k3n4avOyRFs7MDQHcRzJQWM1dehCwJxisQ==", + "dev": true, + "requires": { + "htmlparser2": "^3.9.2", + "remark": "^8.0.0", + "unist-util-find-all-after": "^1.0.1" + } + }, + "postcss-less": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-1.1.5.tgz", + "integrity": "sha512-QQIiIqgEjNnquc0d4b6HDOSFZxbFQoy4MPpli2lSLpKhMyBkKwwca2HFqu4xzxlKID/F2fxSOowwtKpgczhF7A==", + "dev": true, + "requires": { + "postcss": "^5.2.16" + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" + } + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + } + }, + "postcss-merge-rules": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true, + "requires": { + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + } + } + }, + "postcss-message-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + } + }, + "postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true, + "requires": { + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" + } + }, + "postcss-minify-params": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" + } + }, + "postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz", + "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", + "dev": true, + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true, + "requires": { + "postcss": "^5.0.5" + } + }, + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" + } + }, + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true, + "requires": { + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" + } + }, + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true, + "requires": { + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + } + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + } + }, + "postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" + } + }, + "postcss-reporter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-5.0.0.tgz", + "integrity": "sha512-rBkDbaHAu5uywbCR2XE8a25tats3xSOsGNx6mppK6Q9kSFGKc/FyAzfci+fWM2l+K402p1D0pNcfDGxeje5IKg==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "lodash": "^4.17.4", + "log-symbols": "^2.0.0", + "postcss": "^6.0.8" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "dev": true + }, + "postcss-safe-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-3.0.1.tgz", + "integrity": "sha1-t1Pv9sfArqXoN1++TN6L+QY/8UI=", + "dev": true, + "requires": { + "postcss": "^6.0.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-sass": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.2.0.tgz", + "integrity": "sha512-cUmYzkP747fPCQE6d+CH2l1L4VSyIlAzZsok3HPjb5Gzsq3jE+VjpAdGlPsnQ310WKWI42sw+ar0UNN59/f3hg==", + "dev": true, + "requires": { + "gonzales-pe": "^4.0.3", + "postcss": "^6.0.6" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-scss": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-1.0.6.tgz", + "integrity": "sha512-4EFYGHcEw+H3E06PT/pQQri06u/1VIIPjeJQaM8skB80vZuXMhp4cSNV5azmdNkontnOID/XYWEvEEELLFB1ww==", + "dev": true, + "requires": { + "postcss": "^6.0.23" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "requires": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true, + "requires": { + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" + } + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "postcss-zindex": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "prettier": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.7.tgz", + "integrity": "sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w==", + "dev": true + }, + "prettier-eslint": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.2.tgz", + "integrity": "sha512-2UzApPuxi2yRoyMlXMazgR6UcH9DKJhNgCviIwY3ixZ9THWSSrUww5vkiZ3C48WvpFl1M1y/oU63deSy1puWEA==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "common-tags": "^1.4.0", + "dlv": "^1.1.0", + "eslint": "^4.0.0", + "indent-string": "^3.2.0", + "lodash.merge": "^4.6.0", + "loglevel-colored-level-prefix": "^1.0.0", + "prettier": "^1.7.0", + "pretty-format": "^23.0.1", + "require-relative": "^0.8.7", + "typescript": "^2.5.1", + "typescript-eslint-parser": "^16.0.0", + "vue-eslint-parser": "^2.0.2" + }, + "dependencies": { + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + } + } + }, + "pretty": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", + "integrity": "sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=", + "dev": true, + "requires": { + "condense-newlines": "^0.2.1", + "extend-shallow": "^2.0.1", + "js-beautify": "^1.6.12" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "pretty-format": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.2.0.tgz", + "integrity": "sha1-OwqqY8AYpTWDNzwcs6XZbMXoMBc=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "prompts": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.11.tgz", + "integrity": "sha512-6ZFzPasWMEgZ/cDpQQshV/l/fWISILGjq4VctCipG6RVfaO4FAafGR8iKXSFxoHIYgPcPYuDupyLtVNc/aDG8Q==", + "dev": true, + "requires": { + "clorox": "^1.0.3", + "sisteransi": "^0.1.1" + } + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.1.28", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.28.tgz", + "integrity": "sha512-+AqO1Ae+N/4r7Rvchrdm432afjT9hqJRyBN3DQv9At0tPz4hIFSGKbq64fN9dVoCow4oggIIax5/iONx0r9hZw==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", + "dev": true + }, + "ramda": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz", + "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==", + "dev": true + }, + "randomatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" + } + }, + "realpath-native": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.1.tgz", + "integrity": "sha512-W14EcXuqUvKP8dkWkD7B95iMy77lpMnlFXbbk409bQtNCbeu0kvRE5reo+yIZ3JXxg6frbGsz2DLQ39lrCB40g==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true, + "requires": { + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "reduce-function-call": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", + "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "dev": true, + "requires": { + "balanced-match": "^0.4.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remark": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-8.0.0.tgz", + "integrity": "sha512-K0PTsaZvJlXTl9DN6qYlvjTkqSZBFELhROZMrblm2rB+085flN84nz4g/BscKRMqDvhzlK1oQ/xnWQumdeNZYw==", + "dev": true, + "requires": { + "remark-parse": "^4.0.0", + "remark-stringify": "^4.0.0", + "unified": "^6.0.0" + } + }, + "remark-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-4.0.0.tgz", + "integrity": "sha512-XZgICP2gJ1MHU7+vQaRM+VA9HEL3X253uwUM/BGgx3iv6TH2B3bF3B8q00DKcyP9YrJV+/7WOWEWBFF/u8cIsw==", + "dev": true, + "requires": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.0.2", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "remark-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-4.0.0.tgz", + "integrity": "sha512-xLuyKTnuQer3ke9hkU38SUYLiTmS078QOnoFavztmbt/pAJtNSkNtFgR0U//uCcmG0qnyxao+PDuatQav46F1w==", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^1.1.0", + "mdast-util-compact": "^1.0.0", + "parse-entities": "^1.0.2", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^1.0.1", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "^1.4.1" + } + } + } + }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "dev": true, + "requires": { + "lodash": "^4.13.1" + } + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "dev": true, + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "require-relative": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", + "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + } + }, + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, + "requires": { + "align-text": "^0.1.1" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "*" + } + }, + "rxjs": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.1.tgz", + "integrity": "sha512-OwMxHxmnmHTUpgO+V7dZChf3Tixf4ih95cmXjzzadULziVl/FKhHScGLj4goEw9weePVOH2Q0+GcCBUhKCZc/g==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sane": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz", + "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "capture-exit": "^1.2.0", + "exec-sh": "^0.2.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.3", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5", + "watch": "~0.18.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + } + } + } + }, + "sass-loader": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.0.3.tgz", + "integrity": "sha512-iaSFtQcGo4SSgDw5Aes5p4VTrA5jCGSA7sGmhPIcOloBlgI1VktM2MUrk2IHHjbNagckXlPz+HWq1vAAPrcYxA==", + "dev": true, + "requires": { + "clone-deep": "^2.0.1", + "loader-utils": "^1.0.1", + "lodash.tail": "^4.1.1", + "neo-async": "^2.5.0", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "schema-utils": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + }, + "dependencies": { + "ajv": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", + "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.1" + } + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "serialize-javascript": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", + "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", + "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "dev": true, + "requires": { + "is-extendable": "^0.1.1", + "kind-of": "^5.0.0", + "mixin-object": "^2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "sisteransi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-0.1.1.tgz", + "integrity": "sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.x.x" + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "dev": true + }, + "specificity": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.3.2.tgz", + "integrity": "sha512-Nc/QN/A425Qog7j9aHmwOrlwX2e7pNI47ciwxwy4jOlvbbMHkNNJchit+FX+UjF3IAdiaaV5BKeWuDUnws6G1A==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=", + "dev": true + }, + "state-toggle": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz", + "integrity": "sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "stdout-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", + "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-entities": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", + "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", + "dev": true, + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "dev": true + }, + "stylelint": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-8.4.0.tgz", + "integrity": "sha512-56hPH5mTFnk8LzlEuTWq0epa34fHuS54UFYQidBOFt563RJBNi1nz1F2HK2MoT1X1waq47milvRsRahFCCJs/Q==", + "dev": true, + "requires": { + "autoprefixer": "^7.1.2", + "balanced-match": "^1.0.0", + "chalk": "^2.0.1", + "cosmiconfig": "^3.1.0", + "debug": "^3.0.0", + "execall": "^1.0.0", + "file-entry-cache": "^2.0.0", + "get-stdin": "^5.0.1", + "globby": "^7.0.0", + "globjoin": "^0.1.4", + "html-tags": "^2.0.0", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "known-css-properties": "^0.5.0", + "lodash": "^4.17.4", + "log-symbols": "^2.0.0", + "mathml-tag-names": "^2.0.1", + "meow": "^4.0.0", + "micromatch": "^2.3.11", + "normalize-selector": "^0.2.0", + "pify": "^3.0.0", + "postcss": "^6.0.6", + "postcss-html": "^0.12.0", + "postcss-less": "^1.1.0", + "postcss-media-query-parser": "^0.2.3", + "postcss-reporter": "^5.0.0", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^3.0.1", + "postcss-sass": "^0.2.0", + "postcss-scss": "^1.0.2", + "postcss-selector-parser": "^3.1.0", + "postcss-value-parser": "^3.3.0", + "resolve-from": "^4.0.0", + "specificity": "^0.3.1", + "string-width": "^2.1.0", + "style-search": "^0.1.0", + "sugarss": "^1.0.0", + "svg-tags": "^1.0.0", + "table": "^4.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "autoprefixer": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", + "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", + "dev": true, + "requires": { + "browserslist": "^2.11.3", + "caniuse-lite": "^1.0.30000805", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^6.0.17", + "postcss-value-parser": "^3.2.3" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "browserslist": { + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", + "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000792", + "electron-to-chromium": "^1.3.30" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "dev": true + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, + "meow": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", + "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "dev": true, + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "dev": true + } + } + }, + "stylelint-config-recommended": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-2.1.0.tgz", + "integrity": "sha512-ajMbivOD7JxdsnlS5945KYhvt7L/HwN6YeYF2BH6kE4UCLJR0YvXMf+2j7nQpJyYLZx9uZzU5G1ZOSBiWAc6yA==", + "dev": true + }, + "stylelint-config-recommended-scss": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-3.2.0.tgz", + "integrity": "sha512-M8BFHMRf8KNz5EQPKJd8nMCGmBd2o5coDEObfHVbEkyLDgjIf1V+U5dHjaGgvhm0zToUxshxN+Gc5wpbOOew4g==", + "dev": true, + "requires": { + "stylelint-config-recommended": "^2.0.0" + } + }, + "stylelint-scss": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.1.3.tgz", + "integrity": "sha512-a2MPkpQrbRVHu6+Wbk5w/CQKUtAgRikk0shSmiO8eMcHu8rPMqbJTkraBu0Tpo7C6bs2I8cnlB1p+AivnPuWbw==", + "dev": true, + "requires": { + "lodash": "^4.17.10", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^4.0.0", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "cssesc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-1.0.1.tgz", + "integrity": "sha512-S2hzrpWvE6G/rW7i7IxJfWBYn27QWfOIncUW++8Rbo1VB5zsJDSVPcnI+Q8z7rhxT6/yZeLOCja4cZnghJrNGA==", + "dev": true + }, + "postcss-selector-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-4.0.0.tgz", + "integrity": "sha512-5h+MvEjnzu1qy6MabjuoPatsGAjjDV9B24e7Cktjl+ClNtjVjmvAXjOFQr1u7RlWULKNGYaYVE4s+DIIQ4bOGA==", + "dev": true, + "requires": { + "cssesc": "^1.0.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "stylelint-webpack-plugin": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/stylelint-webpack-plugin/-/stylelint-webpack-plugin-0.10.5.tgz", + "integrity": "sha512-jtYx3aJ2qDMvBMswe5NRPTO7kJgAKafc6GilAkWDp/ewoAmnoxA6TsYMnIPtLECRLwXevaCPvlh2JEUMGZCoUQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "micromatch": "^3.1.8", + "object-assign": "^4.1.0", + "ramda": "^0.25.0" + } + }, + "sugarss": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-1.0.1.tgz", + "integrity": "sha512-3qgLZytikQQEVn1/FrhY7B68gPUUGY3R1Q1vTiD5xT+Ti1DP/8iZuwFet9ONs5+bmL8pZoDQ6JrQHVgrNlK6mA==", + "dev": true, + "requires": { + "postcss": "^6.0.14" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true, + "requires": { + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" + } + }, + "symbol-tree": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "dev": true + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "tapable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", + "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", + "dev": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + } + }, + "test-exclude": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.1.tgz", + "integrity": "sha512-qpqlP/8Zl+sosLxBcVKl9vYy26T9NPalxSzzCP/OY6K7j938ui2oKgo+kRZYfxAeIpLqpbVnsHq1tyV70E4lWQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "micromatch": "^3.1.8", + "object-assign": "^4.1.0", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + } + }, + "timers-browserify": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "trim-trailing-lines": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz", + "integrity": "sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==", + "dev": true + }, + "trough": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.2.tgz", + "integrity": "sha512-FHkoUZvG6Egrv9XZAyYGKEyb1JMsFphgPjoczkZC2y6W93U1jswcVURB8MUvtsahEPEVACyxD47JAL63vF4JsQ==", + "dev": true + }, + "true-case-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz", + "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", + "dev": true, + "requires": { + "glob": "^6.0.4" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "tsconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", + "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", + "dev": true, + "requires": { + "@types/strip-bom": "^3.0.0", + "@types/strip-json-comments": "0.0.30", + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "dev": true + }, + "typescript-eslint-parser": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-16.0.1.tgz", + "integrity": "sha512-IKawLTu4A2xN3aN/cPLxvZ0bhxZHILGDKTZWvWNJ3sLNhJ3PjfMEDQmR2VMpdRPrmWOadgWXRwjLBzSA8AGsaQ==", + "dev": true, + "requires": { + "lodash.unescape": "4.0.1", + "semver": "5.5.0" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.7.tgz", + "integrity": "sha512-1VicfKhCYHLS8m1DCApqBhoulnASsEoJ/BvpUpP4zoNAPpKzdH+ghk0olGJMmwX2/jprK2j3hAHdUbczBSy2FA==", + "dev": true, + "requires": { + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + } + } + } + }, + "unherit": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz", + "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "xtend": "^4.0.1" + } + }, + "unified": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", + "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^2.0.0", + "x-is-string": "^0.1.0" + } + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unist-util-find-all-after": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.2.tgz", + "integrity": "sha512-nDl79mKpffXojLpCimVXnxhlH/jjaTnDuScznU9J4jjsaUtBdDbxmlc109XtcqxY4SDO0SwzngsxxW8DIISt1w==", + "dev": true, + "requires": { + "unist-util-is": "^2.0.0" + } + }, + "unist-util-is": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz", + "integrity": "sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==", + "dev": true + }, + "unist-util-modify-children": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-1.1.2.tgz", + "integrity": "sha512-GRi04yhng1WqBf5RBzPkOtWAadcZS2gvuOgNn/cyJBYNxtTuyYqTKN0eg4rC1YJwGnzrqfRB3dSKm8cNCjNirg==", + "dev": true, + "requires": { + "array-iterate": "^1.0.0" + } + }, + "unist-util-remove-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz", + "integrity": "sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==", + "dev": true, + "requires": { + "unist-util-visit": "^1.1.0" + } + }, + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", + "dev": true + }, + "unist-util-visit": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.3.1.tgz", + "integrity": "sha512-0fdB9EQJU0tho5tK0VzOJzAQpPv2LyLZ030b10GxuzAWEfvd54mpY7BMjQ1L69k2YNvL+SvxRzH0yUIehOO8aA==", + "dev": true, + "requires": { + "unist-util-is": "^2.1.1" + } + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "use": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.0.tgz", + "integrity": "sha512-qNdTUMaCjPs4eEnM3W9H94R3sU70YCuT+/ST7nUf+id1bVOrdjrpUaeZLqPBPRph3hsgn4a4BvwpxhHZx+oSDg==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vendors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", + "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vfile": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", + "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", + "dev": true, + "requires": { + "is-buffer": "^1.1.4", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + } + }, + "vfile-location": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.3.tgz", + "integrity": "sha512-zM5/l4lfw1CBoPx3Jimxoc5RNDAHHpk6AM6LM0pTIkm5SUSsx8ZekZ0PVdf0WEZ7kjlhSt7ZlqbRL6Cd6dBs6A==", + "dev": true + }, + "vfile-message": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.0.1.tgz", + "integrity": "sha512-vSGCkhNvJzO6VcWC6AlJW4NtYOVtS+RgCaqFIYUjoGIlHnFL+i0LbtYvonDWOMcB97uTPT4PRsyYY7REWC9vug==", + "dev": true, + "requires": { + "unist-util-stringify-position": "^1.1.1" + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "vue": { + "version": "2.5.16", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.16.tgz", + "integrity": "sha512-/ffmsiVuPC8PsWcFkZngdpas19ABm5mh2wA7iDqcltyCTwlgZjHGeJYOXkBMo422iPwIcviOtrTCUpSfXmToLQ==" + }, + "vue-eslint-parser": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", + "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.2", + "esquery": "^1.0.0", + "lodash": "^4.17.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "vue-hot-reload-api": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.0.tgz", + "integrity": "sha512-2j/t+wIbyVMP5NvctQoSUvLkYKoWAAk2QlQiilrM2a6/ulzFgdcLUJfTvs4XQ/3eZhHiBmmEojbjmM4AzZj8JA==", + "dev": true + }, + "vue-jest": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/vue-jest/-/vue-jest-2.6.0.tgz", + "integrity": "sha512-kVgKGcycJ1ce3tUc48JKFSSXsbRNy5QOCAcK9k1aYDRD0m6tTbbFm8Q8yGkfsXLyFeUsvO1OEgsCYxZeD5GL2g==", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0", + "chalk": "^2.1.0", + "extract-from-css": "^0.4.4", + "find-babel-config": "^1.1.0", + "js-beautify": "^1.6.14", + "node-cache": "^4.1.1", + "object-assign": "^4.1.1", + "source-map": "^0.5.6", + "tsconfig": "^7.0.0", + "vue-template-es2015-compiler": "^1.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "vue-loader": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.2.4.tgz", + "integrity": "sha512-9Wqa7oL+NaNQHnBdJQjqd+NdRpcJmDUZ/y4HgeBX1Kky+j3HsG/tV4IqprmPsjO1wIhP1VZJg5AInuDebfHA6w==", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^1.2.1", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + } + }, + "vue-router": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.0.1.tgz", + "integrity": "sha512-vLLoY452L+JBpALMP5UHum9+7nzR9PeIBCghU9ZtJ1eWm6ieUI8Zb/DI3MYxH32bxkjzYV1LRjNv4qr8d+uX/w==" + }, + "vue-style-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.0.tgz", + "integrity": "sha512-IsSiXDrLW2QIjyBsCqa35e45l5AceMbJ2jO8DxoEQv75xu/UmtXkSC0ybESq/LpbmmIW47MAWDQvErUw+Hrz/A==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "vue-template-compiler": { + "version": "2.5.16", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.16.tgz", + "integrity": "sha512-ZbuhCcF/hTYmldoUOVcu2fcbeSAZnfzwDskGduOrnjBiIWHgELAd+R8nAtX80aZkceWDKGQ6N9/0/EUpt+l22A==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "vue-template-es2015-compiler": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz", + "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==", + "dev": true + }, + "vuex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.0.1.tgz", + "integrity": "sha512-wLoqz0B7DSZtgbWL1ShIBBCjv22GV5U+vcBFox658g6V0s4wZV9P4YjCNyoHSyIBpj1f29JBoNQIqD82cR4O3w==" + }, + "vuex-router-sync": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/vuex-router-sync/-/vuex-router-sync-5.0.0.tgz", + "integrity": "sha512-Mry2sO4kiAG64714X1CFpTA/shUH1DmkZ26DFDtwoM/yyx6OtMrc+MxrU+7vvbNLO9LSpgwkiJ8W+rlmRtsM+w==" + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "watch": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", + "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", + "dev": true, + "requires": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "webpack": { + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.16.0.tgz", + "integrity": "sha512-oNx9djAd6uAcccyfqN3hyXLNMjZHiRySZmBQ4c8FNmf1SNJGhx7n9TSvHNyXxgToRdH65g/Q97s94Ip9N6F7xg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-module-context": "1.5.13", + "@webassemblyjs/wasm-edit": "1.5.13", + "@webassemblyjs/wasm-opt": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^3.7.1", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.0.0", + "uglifyjs-webpack-plugin": "^1.2.4", + "watchpack": "^1.5.0", + "webpack-sources": "^1.0.1" + }, + "dependencies": { + "ajv": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", + "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.1" + } + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } + } + }, + "webpack-cli": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.0.8.tgz", + "integrity": "sha512-KnRLJ0BUaYRqrhAMb9dv3gzdmhmgIMKo0FmdsnmfqbPGtLnnZ6tORZAvmmKfr+A0VgiVpqC60Gv7Ofg0R2CHtQ==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.0.0", + "global-modules-path": "^2.1.0", + "import-local": "^1.0.0", + "inquirer": "^6.0.0", + "interpret": "^1.1.0", + "loader-utils": "^1.1.0", + "supports-color": "^5.4.0", + "v8-compile-cache": "^2.0.0", + "yargs": "^11.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.5.0.tgz", + "integrity": "sha512-9ZTaoBaePSCFvNlNGrsyI8ZVACP2svUtq0DkM7t4K2ClAa96sqOIRjAzDTc8zXzFt1cZR46rRzLTiHFSJ+Qw0g==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "external-editor": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.0.tgz", + "integrity": "sha512-mpkfj0FEdxrIhOC04zk85X7StNtr0yXnG7zCb+8ikO8OJi2jsHh5YGoknNTyXgsbHOf1WOOcVU3kPFWT2WgCkQ==", + "dev": true, + "requires": { + "chardet": "^0.5.0", + "iconv-lite": "^0.4.22", + "tmp": "^0.0.33" + } + }, + "inquirer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.0.0.tgz", + "integrity": "sha512-tISQWRwtcAgrz+SHPhTH7d3e73k31gsOy6i1csonLc0u1dVK/wYvuOnFeiWqC5OXFIYbmrIFInef31wbT8MEJg==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.0", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.1.0", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "webpack-merge": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.3.tgz", + "integrity": "sha512-zxwAIGK7nKdu5CIZL0BjTQoq3elV0t0MfB7rUC1zj668geid52abs6hN/ACwZdK6LeMS8dC9B6WmtF978zH5mg==", + "dev": true, + "requires": { + "lodash": "^4.17.5" + } + }, + "webpack-sources": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", + "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "whatwg-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", + "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.19" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + } + } + }, + "whatwg-mimetype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz", + "integrity": "sha512-FKxhYLytBQiUKjkYteN71fAUA3g6KpNXoho1isLiLSB3N1G4F35Q5vUxWfKFhBwi5IWF27VE6WxhrnnC+m0Mew==", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "worker-farm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "ws": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0" + } + }, + "x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", + "dev": true + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + } + } +} diff --git a/package.json b/package.json index 702ccc77..ca2c630d 100644 --- a/package.json +++ b/package.json @@ -1,66 +1,81 @@ { - "name": "contacts", - "version": "2.2.0", - "description": "Place this app in **nextcloud/apps/**", - "author": { - "name": "Hendrik Leppelsack", - "email": "hendrik@leppelsack.de" - }, - "private": true, - "repository": { - "type": "git", - "url": "git+https://github.com/nextcloud/contacts.git" - }, - "license": "AGPL-3.0", - "bugs": { - "url": "https://github.com/nextcloud/contacts/issues" - }, - "homepage": "https://github.com/nextcloud/contacts#readme", - "scripts": { - "test": "node node_modules/gulp-cli/bin/gulp.js karma", - "prebuild": "npm install && npm update", - "build": "node node_modules/gulp-cli/bin/gulp.js", - "scss-compile": "cat build/css/variables.scss css/style.scss | node-sass --include-path css > css/style.css", - "watch": "node node_modules/gulp-cli/bin/gulp.js watch" - }, - "devDependencies": { - "angular-mocks": "~1.5.8", - "chai": "^3.5.0", - "codecov": "^1.0.1", - "gulp": "^3.9.1", - "gulp-cli": "^2.0.1", - "gulp-concat": "^2.6.0", - "gulp-eslint": "^3.0.1", - "gulp-ng-annotate": "^2.0.0", - "gulp-sourcemaps": "^1.6.0", - "gulp-stylelint": "^5.0.0", - "karma": "^2.0.4", - "karma-chai": "^0.1.0", - "karma-coverage": "^1.1.1", - "karma-firefox-launcher": "^1.0.0", - "karma-mocha": "^1.1.1", - "karma-mocha-reporter": "^2.1.0", - "karma-sinon": "^1.0.5", - "merge-stream": "^1.0.1", - "mocha": "^5.2.0", - "node-sass": "^4.9.2", - "sinon": "^1.17.5", - "stylelint": "^9.3.0", - "stylelint-config-recommended-scss": "^3.1.0", - "stylelint-scss": "^2.4.0", - "underscore": "^1.8.3" - }, - "dependencies": { - "@iamadamjowett/angular-click-outside": "^2.10.1", - "angular": "~1.5.8", - "angular-cache": "^4.6.0", - "angular-route": "~1.5.8", - "angular-sanitize": "~1.5.8", - "angular-ui-bootstrap": "^2.5.6", - "angular-uuid4": "^0.3.1", - "jquery-timepicker": "^1.3.3", - "ngclipboard": "^1.1.2", - "ui-select": "^0.19.8", - "vcard-parser": "^0.3.0" - } + "name": "contacts", + "description": "A contacts app for Nextcloud. Easily sync contacts from various devices, share and edit them online.", + "version": "3.0.0", + "author": "John Molakvoæ ", + "license": "agpl", + "private": true, + "scripts": { + "dev": "webpack --config webpack.dev.js", + "watch": "webpack --progress --watch --config webpack.dev.js", + "build": "webpack --progress --hide-modules --config webpack.prod.js", + "lint": "eslint --ext .js,.vue src tests", + "lint:fix": "eslint --ext .js,.vue src tests --fix", + "test": "jest", + "test:coverage": "jest --coverage" + }, + "dependencies": { + "ical.js": "^1.2.2", + "vue": "^2.5.16", + "vue-router": "^3.0.1", + "vuex": "^3.0.1", + "vuex-router-sync": "^5.0.0" + }, + "browserslist": [ + "last 2 versions", + "not ie <= 11" + ], + "engines": { + "node": ">=10.0.0" + }, + "devDependencies": { + "@vue/test-utils": "^1.0.0-beta.20", + "babel-core": "^6.26.3", + "babel-eslint": "^8.2.5", + "babel-jest": "^23.4.0", + "babel-loader": "^7.1.4", + "babel-preset-env": "^1.7.0", + "css-loader": "^0.28.11", + "eslint": "^4.19.1", + "eslint-config-standard": "^11.0.0", + "eslint-friendly-formatter": "^4.0.1", + "eslint-loader": "^2.0.0", + "eslint-plugin-import": "^2.13.0", + "eslint-plugin-node": "^6.0.1", + "eslint-plugin-promise": "^3.8.0", + "eslint-plugin-standard": "^3.1.0", + "eslint-plugin-vue": "^4.5.0", + "file-loader": "^1.1.11", + "jest": "^23.4.0", + "jest-serializer-vue": "^2.0.2", + "node-sass": "^4.9.0", + "prettier-eslint": "^8.8.2", + "sass-loader": "^7.0.3", + "stylelint": "^8.4.0", + "stylelint-config-recommended-scss": "^3.2.0", + "stylelint-scss": "^3.1.3", + "stylelint-webpack-plugin": "^0.10.5", + "vue-jest": "^2.6.0", + "vue-loader": "^15.2.4", + "vue-template-compiler": "^2.5.16", + "webpack": "^4.16.0", + "webpack-cli": "^3.0.4", + "webpack-merge": "^4.1.2" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "vue" + ], + "moduleNameMapper": { + "^@/(.*)$": "/src/$1" + }, + "transform": { + "^.+\\.js$": "/node_modules/babel-jest", + ".*\\.(vue)$": "/node_modules/vue-jest" + }, + "snapshotSerializers": [ + "/node_modules/jest-serializer-vue" + ] + } } diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 00000000..c3caa7a2 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,32 @@ + + + + + + diff --git a/src/components/appNavigation.vue b/src/components/appNavigation.vue new file mode 100644 index 00000000..0e6786bb --- /dev/null +++ b/src/components/appNavigation.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/components/appNavigation/navigationItem.vue b/src/components/appNavigation/navigationItem.vue new file mode 100644 index 00000000..c72bc2da --- /dev/null +++ b/src/components/appNavigation/navigationItem.vue @@ -0,0 +1,157 @@ + + + + diff --git a/src/components/popoverMenu.vue b/src/components/popoverMenu.vue new file mode 100644 index 00000000..51e7cab8 --- /dev/null +++ b/src/components/popoverMenu.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/components/popoverMenu/popoverItem.vue b/src/components/popoverMenu/popoverItem.vue new file mode 100644 index 00000000..f97e5410 --- /dev/null +++ b/src/components/popoverMenu/popoverItem.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/src/main.js b/src/main.js new file mode 100644 index 00000000..10a22e8b --- /dev/null +++ b/src/main.js @@ -0,0 +1,42 @@ +/* + * @copyright Copyright (c) 2018 John Molakvoæ + * + * @author John Molakvoæ + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +import Vue from 'vue' +import App from './App' +import router from './router' +import store from './store' +import { sync } from 'vuex-router-sync' + +sync(store, router) + +Vue.prototype.t = t +Vue.prototype.n = n +Vue.prototype.OC = OC +Vue.prototype.OCA = OCA + +/* eslint-disable-next-line no-new */ +new Vue({ + el: '#content', + router, + store, + render: h => h(App) +}) diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 00000000..588b7a10 --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,55 @@ +/* + * @copyright Copyright (c) 2018 John Molakvoæ + * + * @author John Molakvoæ + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +import Vue from 'vue' +import Router from 'vue-router' +import Contacts from '../views/Contacts' + +Vue.use(Router) + +export default new Router({ + mode: 'history', + // if index.php is in the url AND we got this far, then it's working: + // let's keep using index.php in the url + base: OC.generateUrl('/apps/contacts/'), + linkActiveClass: 'active', + routes: [ + { + path: '/', + component: Contacts, + props: true, + name: 'root', + children: [ + { + path: ':selectedGroup', + name: 'group', + component: Contacts + }, + { + path: ':selectedGroup/:selectedContact', + name: 'contact', + component: Contacts + } + ] + } + ] +}) diff --git a/src/store/addressbooks.js b/src/store/addressbooks.js new file mode 100644 index 00000000..bfff64b0 --- /dev/null +++ b/src/store/addressbooks.js @@ -0,0 +1,28 @@ +/* + * @copyright Copyright (c) 2018 John Molakvoæ + * + * @author John Molakvoæ + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +const state = {} +const mutations = {} +const getters = {} +const actions = {} + +export default { state, mutations, getters, actions } diff --git a/src/store/contacts.js b/src/store/contacts.js new file mode 100644 index 00000000..bfff64b0 --- /dev/null +++ b/src/store/contacts.js @@ -0,0 +1,28 @@ +/* + * @copyright Copyright (c) 2018 John Molakvoæ + * + * @author John Molakvoæ + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +const state = {} +const mutations = {} +const getters = {} +const actions = {} + +export default { state, mutations, getters, actions } diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 00000000..fd8bc760 --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,42 @@ +/* + * @copyright Copyright (c) 2018 John Molakvoæ + * + * @author John Molakvoæ + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +import Vue from 'vue' +import Vuex from 'vuex' +import addressbooks from './addressbooks' +import contacts from './contacts' + +Vue.use(Vuex) + +const debug = process.env.NODE_ENV !== 'production' + +const mutations = {} + +export default new Vuex.Store({ + modules: { + addressbooks, + contacts + }, + strict: debug, + + mutations +}) diff --git a/src/views/Contacts.vue b/src/views/Contacts.vue new file mode 100644 index 00000000..84726b2e --- /dev/null +++ b/src/views/Contacts.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/templates/addressBook.html b/templates/addressBook.html deleted file mode 100644 index f885e0e7..00000000 --- a/templates/addressBook.html +++ /dev/null @@ -1,120 +0,0 @@ -
- - -
-{{ctrl.addressBook.displayName}} - - - - - - - - - - - - -
- - -
- -
- - -
    -
  • - - {{ userShare.displayname }} - - - - - - - - -
  • -
  • - - {{ groupShare.displayname }} - - - - - - - - -
  • -
-
diff --git a/templates/addressBookList.html b/templates/addressBookList.html deleted file mode 100644 index 2ddfd3d4..00000000 --- a/templates/addressBookList.html +++ /dev/null @@ -1,15 +0,0 @@ - -
    -
  • -
  • -
    - - -
    -
  • -
diff --git a/templates/avatar.html b/templates/avatar.html deleted file mode 100644 index fd226c61..00000000 --- a/templates/avatar.html +++ /dev/null @@ -1,12 +0,0 @@ -
- -
- - -
-
-
-
diff --git a/templates/contact.html b/templates/contact.html deleted file mode 100644 index a342de0d..00000000 --- a/templates/contact.html +++ /dev/null @@ -1,5 +0,0 @@ - -
{{ ctrl.contact.displayName() | firstCharacter }}
-
-
{{ ctrl.getName() | newContact }}
-
{{ctrl.contact.email()}}
diff --git a/templates/contactDetails.html b/templates/contactDetails.html deleted file mode 100644 index 84460f82..00000000 --- a/templates/contactDetails.html +++ /dev/null @@ -1,79 +0,0 @@ -
-
-
-
-
-

{{ctrl.t.noContacts}}

-
-
-
-
-
-

{{ctrl.t.loading}}

-
-
-
-
- -
-

- -

-
- - -
-
-
-
-
- -
-
-
- - -
- - -
- -
-
-
diff --git a/templates/contactFilter.html b/templates/contactFilter.html deleted file mode 100644 index 8dbbc6ba..00000000 --- a/templates/contactFilter.html +++ /dev/null @@ -1,9 +0,0 @@ -{{ ctrl.contactFilter.name }} -
-
    -
  • - {{ctrl.contactFilter.count | counterFormatter}} -
  • -
-
\ No newline at end of file diff --git a/templates/contactImport.html b/templates/contactImport.html deleted file mode 100644 index f1220f6a..00000000 --- a/templates/contactImport.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - {{$select.selected.displayName}} - - {{addressBook.displayName}} - - -
{{ctrl.t.importdisabled}}
diff --git a/templates/contactList.html b/templates/contactList.html deleted file mode 100644 index 9cc7c55f..00000000 --- a/templates/contactList.html +++ /dev/null @@ -1,12 +0,0 @@ - - -
- -
diff --git a/templates/detailItems/adr.html b/templates/detailItems/adr.html deleted file mode 100644 index 1e0789c4..00000000 --- a/templates/detailItems/adr.html +++ /dev/null @@ -1,36 +0,0 @@ - - -
- - - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
diff --git a/templates/detailItems/date.html b/templates/detailItems/date.html deleted file mode 100644 index b8761779..00000000 --- a/templates/detailItems/date.html +++ /dev/null @@ -1,8 +0,0 @@ - - - diff --git a/templates/detailItems/email.html b/templates/detailItems/email.html deleted file mode 100644 index 543ec32c..00000000 --- a/templates/detailItems/email.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - diff --git a/templates/detailItems/groups.html b/templates/detailItems/groups.html deleted file mode 100644 index 8da05fc5..00000000 --- a/templates/detailItems/groups.html +++ /dev/null @@ -1,10 +0,0 @@ - - - {{$item}} - - {{group}} - - diff --git a/templates/detailItems/hidden.html b/templates/detailItems/hidden.html deleted file mode 100644 index 258e1e1a..00000000 --- a/templates/detailItems/hidden.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/templates/detailItems/n.html b/templates/detailItems/n.html deleted file mode 100644 index 15efde60..00000000 --- a/templates/detailItems/n.html +++ /dev/null @@ -1,32 +0,0 @@ - - -
- - -
-
- - -
-
- - -
-
- - -
-
- - -
diff --git a/templates/detailItems/select.html b/templates/detailItems/select.html deleted file mode 100644 index 64d583de..00000000 --- a/templates/detailItems/select.html +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/templates/detailItems/tel.html b/templates/detailItems/tel.html deleted file mode 100644 index b3cf0253..00000000 --- a/templates/detailItems/tel.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - diff --git a/templates/detailItems/text.html b/templates/detailItems/text.html deleted file mode 100644 index 1c7873a6..00000000 --- a/templates/detailItems/text.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - diff --git a/templates/detailItems/textarea.html b/templates/detailItems/textarea.html deleted file mode 100644 index d3b1c3e8..00000000 --- a/templates/detailItems/textarea.html +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/templates/detailItems/url.html b/templates/detailItems/url.html deleted file mode 100644 index d39eba32..00000000 --- a/templates/detailItems/url.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/templates/detailItems/username.html b/templates/detailItems/username.html deleted file mode 100644 index 59873584..00000000 --- a/templates/detailItems/username.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - diff --git a/templates/group.html b/templates/group.html deleted file mode 100644 index 678a6723..00000000 --- a/templates/group.html +++ /dev/null @@ -1,8 +0,0 @@ -{{ ctrl.group.name }} -
-
    -
  • {{ctrl.group.count | counterFormatter}} -
  • -
-
diff --git a/templates/groupList.html b/templates/groupList.html deleted file mode 100644 index ff344a8b..00000000 --- a/templates/groupList.html +++ /dev/null @@ -1,3 +0,0 @@ -
  • - -
  • diff --git a/templates/importScreen.html b/templates/importScreen.html deleted file mode 100644 index a4e5f8fd..00000000 --- a/templates/importScreen.html +++ /dev/null @@ -1,7 +0,0 @@ -
    - -

    {{ctrl.t.importingTo}} {{ctrl.selectedAddressBook}}

    - - {{ctrl.importedUser}} - {{ctrl.importPercent}} % -
    diff --git a/templates/main.php b/templates/main.php index c00cdcf9..8fb38f52 100644 --- a/templates/main.php +++ b/templates/main.php @@ -1,57 +1,4 @@ - -
    -
    -
    - -
      -
      -
      - -
      -
      - - - -
      -
      -
      - -
      -
      -
      -
      -
      - -
      -
      -
      +script('contacts', 'contacts'); +style('contacts', 'contacts'); +?> \ No newline at end of file diff --git a/templates/newContactButton.html b/templates/newContactButton.html deleted file mode 100644 index 9ec3dbae..00000000 --- a/templates/newContactButton.html +++ /dev/null @@ -1,2 +0,0 @@ - diff --git a/templates/propertyGroup.html b/templates/propertyGroup.html deleted file mode 100644 index dd45df4e..00000000 --- a/templates/propertyGroup.html +++ /dev/null @@ -1,7 +0,0 @@ -

      - - {{ctrl.getReadableName()}} - -

      - diff --git a/templates/sortBy.html b/templates/sortBy.html deleted file mode 100644 index d29cc605..00000000 --- a/templates/sortBy.html +++ /dev/null @@ -1,4 +0,0 @@ - - diff --git a/tests/unit/specs/Contacts.spec.js b/tests/unit/specs/Contacts.spec.js new file mode 100644 index 00000000..9b2bd63e --- /dev/null +++ b/tests/unit/specs/Contacts.spec.js @@ -0,0 +1,31 @@ +/* + * @copyright Copyright (c) 2018 John Molakvoæ + * + * @author John Molakvoæ + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +import { mount } from '@vue/test-utils' +import Contacts from '@/views/Contacts.vue' + +describe('Contacts.vue', () => { + it('Test contacts view', () => { + const wrapper = mount(Contacts) + expect(wrapper.text()).toContain('Test') + }) +}) diff --git a/vendorScripts.json b/vendorScripts.json deleted file mode 100644 index 7ab198b5..00000000 --- a/vendorScripts.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "scripts": { - "angular": [ - "node_modules/angular/angular*.js", - "node_modules/angular/angular.min.js.map" - ], - "angular-cache": [ - "node_modules/angular-cache/dist/*.js", - "node_modules/angular-cache/dist/angular-cache.*.map" - ], - "angular-route": [ - "node_modules/angular-route/*.js", - "node_modules/angular-route/*.map" - ], - "angular-sanitize": [ - "node_modules/angular-sanitize/angular-sanitize.*" - ], - "ui-bootstrap": [ - "node_modules/angular-ui-bootstrap/dist/ui-bootstrap.js", - "node_modules/angular-ui-bootstrap/dist/ui-bootstrap-tpls.js" - ], - "angular-uuid4": [ - "node_modules/angular-uuid4/angular-uuid4.min.js" - ], - "jquery-timepicker": [ - "node_modules/jquery-timepicker/jquery.timepicker.js" - ], - "ngclipboard": [ - "node_modules/ngclipboard/dist/*" - ], - "ui-select": [ - "node_modules/ui-select/dist/select*.js", - "node_modules/ui-select/dist/select.min.js.map" - ], - "vcard": [ - "node_modules/vcard-parser/src/*" - ], - "angular-click-outside": [ - "node_modules/@iamadamjowett/angular-click-outside/clickoutside.directive.js" - ] - }, - "styles": { - "ui-select": [ - "node_modules/ui-select/dist/select.min.css" - ] - } -} diff --git a/webpack.common.js b/webpack.common.js new file mode 100644 index 00000000..4a07bea9 --- /dev/null +++ b/webpack.common.js @@ -0,0 +1,52 @@ +const path = require('path') +const { VueLoaderPlugin } = require('vue-loader') +const StyleLintPlugin = require('stylelint-webpack-plugin') + +module.exports = { + entry: path.join(__dirname, 'src', 'main.js'), + output: { + path: path.resolve(__dirname, './js'), + publicPath: '/js/', + filename: 'contacts.js' + }, + module: { + rules: [ + { + test: /\.css$/, + use: ['vue-style-loader', 'css-loader'] + }, + { + test: /\.scss$/, + use: ['vue-style-loader', 'css-loader', 'sass-loader'] + }, + { + test: /\.(js|vue)$/, + use: 'eslint-loader', + enforce: 'pre' + }, + { + test: /\.vue$/, + loader: 'vue-loader' + }, + { + test: /\.js$/, + loader: 'babel-loader', + exclude: /node_modules/ + }, + { + test: /\.(png|jpg|gif|svg)$/, + loader: 'file-loader', + options: { + name: '[name].[ext]?[hash]' + } + } + ] + }, + plugins: [new VueLoaderPlugin(), new StyleLintPlugin()], + resolve: { + alias: { + vue$: 'vue/dist/vue.esm.js' + }, + extensions: ['*', '.js', '.vue', '.json'] + } +} diff --git a/webpack.dev.js b/webpack.dev.js new file mode 100644 index 00000000..88409bbb --- /dev/null +++ b/webpack.dev.js @@ -0,0 +1,12 @@ +const merge = require('webpack-merge'); +const common = require('./webpack.common.js'); + +module.exports = merge(common, { + mode: 'development', + devServer: { + historyApiFallback: true, + noInfo: true, + overlay: true + }, + devtool: '#eval-source-map', +}) diff --git a/webpack.prod.js b/webpack.prod.js new file mode 100644 index 00000000..f081567b --- /dev/null +++ b/webpack.prod.js @@ -0,0 +1,7 @@ +const merge = require('webpack-merge') +const common = require('./webpack.common.js') + +module.exports = merge(common, { + mode: 'production', + devtool: '#source-map' +})