summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.drone.yml166
-rw-r--r--.htaccess8
-rw-r--r--.mention-bot9
-rw-r--r--.travis.yml57
-rw-r--r--.user.ini4
-rw-r--r--COPYING (renamed from COPYING-AGPL)0
-rw-r--r--COPYING-README6
-rw-r--r--README.md4
-rw-r--r--apps/admin_audit/lib/actions/trashbin.php3
-rw-r--r--apps/comments/l10n/ar.js3
-rw-r--r--apps/comments/l10n/ar.json3
-rw-r--r--apps/comments/l10n/el.js1
-rw-r--r--apps/comments/l10n/el.json1
-rw-r--r--apps/dav/lib/CalDAV/CalDavBackend.php33
-rw-r--r--apps/dav/lib/CardDAV/CardDavBackend.php29
-rw-r--r--apps/dav/lib/CardDAV/ImageExportPlugin.php12
-rw-r--r--apps/dav/lib/Files/BrowserErrorPagePlugin.php7
-rw-r--r--apps/dav/lib/Upload/AssemblyStream.php39
-rw-r--r--apps/dav/templates/exception.php5
-rw-r--r--apps/dav/tests/travis/litmus-v1/install.sh12
-rw-r--r--apps/dav/tests/travis/litmus-v2/install.sh12
-rw-r--r--apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php60
-rw-r--r--apps/dav/tests/unit/Upload/AssemblyStreamTest.php66
-rw-r--r--apps/encryption/l10n/hu_HU.js53
-rw-r--r--apps/encryption/l10n/hu_HU.json53
-rw-r--r--apps/encryption/lib/KeyManager.php1
-rw-r--r--apps/encryption/tests/MigrationTest.php2
-rw-r--r--apps/federatedfilesharing/l10n/hu_HU.js4
-rw-r--r--apps/federatedfilesharing/l10n/hu_HU.json4
-rw-r--r--apps/federatedfilesharing/lib/AppInfo/Application.php1
-rw-r--r--apps/federatedfilesharing/settings-personal.php1
-rw-r--r--apps/federatedfilesharing/tests/TestCase.php1
-rw-r--r--apps/files/l10n/ar.js21
-rw-r--r--apps/files/l10n/ar.json21
-rw-r--r--apps/files/l10n/hu_HU.js5
-rw-r--r--apps/files/l10n/hu_HU.json5
-rw-r--r--apps/files_external/l10n/hu_HU.js71
-rw-r--r--apps/files_external/l10n/hu_HU.json71
-rw-r--r--apps/files_sharing/appinfo/routes.php63
-rw-r--r--apps/files_sharing/l10n/hu_HU.js128
-rw-r--r--apps/files_sharing/l10n/hu_HU.json128
-rw-r--r--apps/files_sharing/lib/API/Remote.php230
-rw-r--r--apps/files_sharing/lib/API/Share20OCS.php2
-rw-r--r--apps/files_sharing/lib/AppInfo/Application.php1
-rw-r--r--apps/files_sharing/lib/Controller/RemoteController.php183
-rw-r--r--apps/files_sharing/tests/API/Share20OCSTest.php104
-rw-r--r--apps/files_trashbin/ajax/preview.php2
-rw-r--r--apps/files_trashbin/l10n/ar.js3
-rw-r--r--apps/files_trashbin/l10n/ar.json3
-rw-r--r--apps/files_trashbin/lib/Helper.php5
-rw-r--r--apps/twofactor_backupcodes/l10n/cs_CZ.js17
-rw-r--r--apps/twofactor_backupcodes/l10n/cs_CZ.json15
-rw-r--r--apps/twofactor_backupcodes/l10n/de.js17
-rw-r--r--apps/twofactor_backupcodes/l10n/de.json15
-rw-r--r--apps/twofactor_backupcodes/l10n/de_DE.js17
-rw-r--r--apps/twofactor_backupcodes/l10n/de_DE.json15
-rw-r--r--apps/twofactor_backupcodes/l10n/it.js17
-rw-r--r--apps/twofactor_backupcodes/l10n/it.json15
-rw-r--r--apps/twofactor_backupcodes/l10n/nl.js17
-rw-r--r--apps/twofactor_backupcodes/l10n/nl.json15
-rw-r--r--apps/twofactor_backupcodes/lib/Db/BackupCode.php2
-rw-r--r--apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php6
-rw-r--r--apps/twofactor_backupcodes/tests/Integration/Db/BackupCodeMapperTest.php5
-rw-r--r--apps/twofactor_backupcodes/tests/Integration/Service/BackupCodeStorageTest.php3
-rw-r--r--apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php6
-rw-r--r--apps/updatenotification/l10n/cs_CZ.js1
-rw-r--r--apps/updatenotification/l10n/cs_CZ.json1
-rw-r--r--apps/updatenotification/l10n/de.js1
-rw-r--r--apps/updatenotification/l10n/de.json1
-rw-r--r--apps/updatenotification/l10n/de_DE.js1
-rw-r--r--apps/updatenotification/l10n/de_DE.json1
-rw-r--r--apps/updatenotification/l10n/fr.js2
-rw-r--r--apps/updatenotification/l10n/fr.json2
-rw-r--r--apps/updatenotification/l10n/hu_HU.js12
-rw-r--r--apps/updatenotification/l10n/hu_HU.json12
-rw-r--r--apps/updatenotification/l10n/is.js1
-rw-r--r--apps/updatenotification/l10n/is.json1
-rw-r--r--apps/updatenotification/l10n/it.js2
-rw-r--r--apps/updatenotification/l10n/it.json2
-rw-r--r--apps/updatenotification/l10n/nl.js2
-rw-r--r--apps/updatenotification/l10n/nl.json2
-rw-r--r--apps/updatenotification/l10n/ru.js2
-rw-r--r--apps/updatenotification/l10n/ru.json2
-rw-r--r--apps/updatenotification/lib/AppInfo/Application.php1
-rw-r--r--apps/user_ldap/lib/Command/CreateEmptyConfig.php4
-rw-r--r--apps/user_ldap/lib/Command/DeleteConfig.php3
-rw-r--r--apps/user_ldap/lib/Jobs/CleanUp.php14
-rw-r--r--apps/user_ldap/lib/LDAPProvider.php3
-rw-r--r--apps/user_ldap/tests/AccessTest.php1
-rw-r--r--apps/user_ldap/tests/Group_LDAPTest.php2
-rw-r--r--apps/user_ldap/tests/User_LDAPTest.php2
-rwxr-xr-xautotest-external.sh6
-rwxr-xr-xautotest.sh19
-rw-r--r--bower.json10
-rw-r--r--core/Command/Maintenance/UpdateHtaccess.php10
-rw-r--r--core/js/oc-dialogs.js12
-rw-r--r--core/js/setup.js11
-rw-r--r--core/l10n/de.js38
-rw-r--r--core/l10n/de.json38
-rw-r--r--core/l10n/el.js6
-rw-r--r--core/l10n/el.json6
-rw-r--r--core/l10n/hu_HU.js14
-rw-r--r--core/l10n/hu_HU.json14
-rw-r--r--core/vendor/.gitignore9
-rw-r--r--core/vendor/handlebars/.bower.json13
-rw-r--r--core/vendor/handlebars/handlebars.js7306
-rw-r--r--core/vendor/moment/.bower.json12
-rw-r--r--core/vendor/moment/LICENSE2
-rw-r--r--core/vendor/moment/min/moment-with-locales.js7272
-rw-r--r--lib/composer/composer/ClassLoader.php12
-rw-r--r--lib/composer/composer/autoload_classmap.php1
-rw-r--r--lib/composer/composer/autoload_static.php1
-rw-r--r--lib/l10n/fr.js1
-rw-r--r--lib/l10n/fr.json1
-rw-r--r--lib/l10n/hu_HU.js4
-rw-r--r--lib/l10n/hu_HU.json4
-rw-r--r--lib/private/AppFramework/Routing/RouteConfig.php16
-rw-r--r--lib/private/Files/Config/CachedMountInfo.php2
-rw-r--r--lib/private/IntegrityCheck/Checker.php2
-rw-r--r--lib/private/Preview.php8
-rw-r--r--lib/private/PreviewNotAvailableException.php27
-rw-r--r--lib/private/Setup.php6
-rw-r--r--settings/l10n/de.js3
-rw-r--r--settings/l10n/de.json3
-rw-r--r--settings/l10n/de_DE.js3
-rw-r--r--settings/l10n/de_DE.json3
-rw-r--r--settings/l10n/el.js12
-rw-r--r--settings/l10n/el.json12
-rw-r--r--settings/l10n/fr.js11
-rw-r--r--settings/l10n/fr.json11
-rw-r--r--settings/l10n/hu_HU.js18
-rw-r--r--settings/l10n/hu_HU.json18
-rw-r--r--settings/l10n/is.js1
-rw-r--r--settings/l10n/is.json1
-rw-r--r--settings/l10n/it.js3
-rw-r--r--settings/l10n/it.json3
-rw-r--r--settings/l10n/nl.js3
-rw-r--r--settings/l10n/nl.json3
-rw-r--r--settings/l10n/ru.js1
-rw-r--r--settings/l10n/ru.json1
-rw-r--r--tests/Settings/Controller/UsersControllerTest.php29
-rw-r--r--tests/lib/AppTest.php13
-rw-r--r--tests/lib/BackgroundJob/JobListTest.php6
-rw-r--r--tests/lib/Cache/FileCacheTest.php10
-rw-r--r--tests/lib/Comments/ManagerTest.php9
-rw-r--r--tests/lib/Encryption/DecryptAllTest.php3
-rw-r--r--tests/lib/Files/Cache/CacheTest.php6
-rw-r--r--tests/lib/Files/Config/UserMountCacheTest.php2
-rw-r--r--tests/lib/Files/Node/FolderTest.php200
-rw-r--r--tests/lib/Files/Storage/Wrapper/QuotaTest.php18
-rw-r--r--tests/lib/Files/Utils/ScannerTest.php3
-rw-r--r--tests/lib/Files/ViewTest.php13
-rw-r--r--tests/lib/FilesTest.php2
-rw-r--r--tests/lib/HelperStorageTest.php11
-rw-r--r--tests/lib/IntegrityCheck/CheckerTest.php12
-rw-r--r--tests/lib/Lock/DBLockingProviderTest.php3
-rw-r--r--tests/lib/PreviewTest.php42
-rw-r--r--tests/lib/Repair/RepairUnmergedSharesTest.php9
-rw-r--r--tests/lib/Security/CertificateManagerTest.php5
-rw-r--r--tests/lib/Share20/ManagerTest.php2
-rw-r--r--tests/lib/TagsTest.php7
-rw-r--r--tests/lib/TestCase.php18
-rw-r--r--tests/lib/UrlGeneratorTest.php22
-rw-r--r--tests/lib/User/DatabaseTest.php2
-rw-r--r--tests/lib/User/ManagerTest.php47
-rw-r--r--tests/lib/User/SessionTest.php190
-rw-r--r--tests/lib/User/UserTest.php43
-rw-r--r--tests/lib/UtilTest.php9
-rw-r--r--tests/phpunit.xml.dist36
169 files changed, 11543 insertions, 6188 deletions
diff --git a/.drone.yml b/.drone.yml
index a03ebcd21eb..4b6dd4e9142 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -1,68 +1,186 @@
-build:
+pipeline:
+ clone:
+ image: plugins/git
+ depth: 1
jsunit:
image: nextcloudci/jsunit:1.0.6
commands:
- ./autotest-js.sh
+ when:
+ matrix:
+ TESTS: jsunit
+ check-autoloader:
+ image: nextcloudci/php7.0:php7.0-2
+ commands:
+ - bash ./build/autoloaderchecker.sh
+ when:
+ matrix:
+ TESTS: check-autoloader
+ app-check-code:
+ image: nextcloudci/php7.0:php7.0-2
+ commands:
+ - ./occ app:check-code admin_audit
+ - ./occ app:check-code comments
+ - ./occ app:check-code federation
+ - ./occ app:check-code workflowengine
+ when:
+ matrix:
+ TESTS: app-check-code
+ syntax-php5.6:
+ image: nextcloudci/php5.6:php5.6-2
+ commands:
+ - composer install
+ - ./lib/composer/bin/parallel-lint --exclude lib/composer/jakub-onderka/ --exclude 3rdparty/symfony/polyfill-php70/Resources/stubs/ --exclude 3rdparty/patchwork/utf8/src/Patchwork/Utf8/Bootup/ --exclude 3rdparty/paragonie/random_compat/lib/ --exclude lib/composer/composer/autoload_static.php --exclude 3rdparty/composer/autoload_static.php .
+ when:
+ matrix:
+ TESTS: syntax-php5.6
+ syntax-php7.0:
+ image: nextcloudci/php7.0:php7.0-2
+ commands:
+ - composer install
+ - ./lib/composer/bin/parallel-lint --exclude lib/composer/jakub-onderka/ --exclude 3rdparty/symfony/polyfill-php70/Resources/stubs/ --exclude 3rdparty/patchwork/utf8/src/Patchwork/Utf8/Bootup/ --exclude 3rdparty/paragonie/random_compat/lib/ --exclude lib/composer/composer/autoload_static.php --exclude 3rdparty/composer/autoload_static.php .
+ when:
+ matrix:
+ TESTS: syntax-php7.0
+ litmus-v1:
+ image: nextcloudci/litmus-php7.0:litmus-php7.0-2
+ commands:
+ - bash tests/travis/install.sh sqlite
+ - bash apps/dav/tests/travis/litmus-v1/script.sh
+ when:
+ matrix:
+ TESTS: litmus-v1
+ litmus-v2:
+ image: nextcloudci/litmus-php7.0:litmus-php7.0-2
+ commands:
+ - bash tests/travis/install.sh sqlite
+ - bash apps/dav/tests/travis/litmus-v2/script.sh
+ when:
+ matrix:
+ TESTS: litmus-v2
+ caldavtester:
+ image: nextcloudci/litmus-php7.0:litmus-php7.0-2
+ commands:
+ - bash tests/travis/install.sh sqlite
+ - bash apps/dav/tests/travis/caldav/install.sh
+ - bash apps/dav/tests/travis/caldav/script.sh
+ when:
+ matrix:
+ TESTS: caldavtester
+ carddavtester:
+ image: nextcloudci/litmus-php7.0:litmus-php7.0-2
+ commands:
+ - bash tests/travis/install.sh sqlite
+ - bash apps/dav/tests/travis/carddav/install.sh
+ - bash apps/dav/tests/travis/carddav/script.sh
+ when:
+ matrix:
+ TESTS: carddavtester
nodb-php5.6:
image: nextcloudci/php5.6:php5.6-2
commands:
- - rm -rf data/* config/config.php # TODO: remove this - temporary fix for CI issues
- - git submodule update --init
- NOCOVERAGE=true TEST_SELECTION=NODB ./autotest.sh sqlite
+ when:
+ matrix:
+ DB: NODB
+ PHP: 5.6
nodb-php7.0:
image: nextcloudci/php7.0:php7.0-2
commands:
- - rm -rf data/* config/config.php # TODO: remove this - temporary fix for CI issues
- - git submodule update --init
- NOCOVERAGE=true TEST_SELECTION=NODB ./autotest.sh sqlite
+ when:
+ matrix:
+ DB: NODB
+ PHP: "7.0"
nodb-php7.1:
image: nextcloudci/php7.1:php7.1-3
commands:
- - rm -rf data/* config/config.php # TODO: remove this - temporary fix for CI issues
- - git submodule update --init
- NOCOVERAGE=true TEST_SELECTION=NODB ./autotest.sh sqlite
+ when:
+ matrix:
+ DB: NODB
+ PHP: 7.1
sqlite-php5.6:
image: nextcloudci/php5.6:php5.6-2
commands:
- - rm -rf data/* config/config.php # TODO: remove this - temporary fix for CI issues
- - git submodule update --init
- NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh sqlite
+ when:
+ matrix:
+ DB: sqlite
+ PHP: 5.6
sqlite-php7.0:
image: nextcloudci/php7.0:php7.0-2
commands:
- - rm -rf data/* config/config.php # TODO: remove this - temporary fix for CI issues
- - git submodule update --init
- NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh sqlite
+ when:
+ matrix:
+ DB: sqlite
+ PHP: "7.0"
sqlite-php7.1:
image: nextcloudci/php7.1:php7.1-3
commands:
- - rm -rf data/* config/config.php # TODO: remove this - temporary fix for CI issues
- - git submodule update --init
- NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh sqlite
+ when:
+ matrix:
+ DB: sqlite
+ PHP: 7.1
mysql-php5.6:
image: nextcloudci/php5.6:php5.6-2
commands:
- - sleep 15 # gives the database enough time to initialize
- - rm -rf data/* config/config.php # TODO: remove this - temporary fix for CI issues
- - git submodule update --init
- NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh mysql
+ when:
+ matrix:
+ DB: mysql
+ PHP: 5.6
postgres-php5.6:
image: nextcloudci/php5.6:php5.6-2
commands:
- sleep 10 # gives the database enough time to initialize
- - rm -rf data/* config/config.php # TODO: remove this - temporary fix for CI issues
- - git submodule update --init
- NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh pgsql
+ when:
+ matrix:
+ DB: postgres
+ PHP: 5.6
integration:
image: nextcloudci/php7.0:php7.0-2
commands:
- - rm -rf data/* config/config.php # TODO: remove this - temporary fix for CI issues
- - git submodule update --init
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh
+ when:
+ matrix:
+ TESTS: integration
+
+matrix:
+ include:
+ - TESTS: integration
+ - TESTS: jsunit
+ - TESTS: check-autoloader
+ - TESTS: app-check-code
+ - TESTS: syntax-php5.6
+ - TESTS: syntax-php7.0
+ - TESTS: litmus-v1
+ - TESTS: litmus-v2
+ - TESTS: caldavtester
+ - TESTS: carddavtester
+ - DB: NODB
+ PHP: 5.6
+ - DB: NODB
+ PHP: 7.0
+ - DB: NODB
+ PHP: 7.1
+ - DB: sqlite
+ PHP: 5.6
+ - DB: sqlite
+ PHP: 7.0
+ - DB: sqlite
+ PHP: 7.1
+ - DB: mysql
+ PHP: 5.6
+ - DB: postgres
+ PHP: 5.6
-compose:
+services:
cache:
image: redis
postgres:
@@ -70,6 +188,9 @@ compose:
environment:
- POSTGRES_USER=oc_autotest
- POSTGRES_PASSWORD=oc_autotest
+ when:
+ matrix:
+ DB: postgres
mysql:
image: mysql
environment:
@@ -77,3 +198,6 @@ compose:
- MYSQL_USER=oc_autotest
- MYSQL_PASSWORD=owncloud
- MYSQL_DATABASE=oc_autotest
+ when:
+ matrix:
+ DB: mysql
diff --git a/.htaccess b/.htaccess
index 5b864643565..206d2be33bc 100644
--- a/.htaccess
+++ b/.htaccess
@@ -26,8 +26,8 @@
</FilesMatch>
</IfModule>
<IfModule mod_php5.c>
- php_value upload_max_filesize 513M
- php_value post_max_size 513M
+ php_value upload_max_filesize 511M
+ php_value post_max_size 511M
php_value memory_limit 512M
php_value mbstring.func_overload 0
php_value always_populate_raw_post_data -1
@@ -38,8 +38,8 @@
</IfModule>
</IfModule>
<IfModule mod_php7.c>
- php_value upload_max_filesize 513M
- php_value post_max_size 513M
+ php_value upload_max_filesize 511M
+ php_value post_max_size 511M
php_value memory_limit 512M
php_value mbstring.func_overload 0
php_value default_charset 'UTF-8'
diff --git a/.mention-bot b/.mention-bot
index ca3a86dd18b..69dbe9b8899 100644
--- a/.mention-bot
+++ b/.mention-bot
@@ -3,12 +3,6 @@
"numFilesToCheck": 5,
"alwaysNotifyForPaths": [
{
- "name": "DeepDiver1975",
- "files": [
- "apps/dav/**"
- ]
- },
- {
"name": "nickvergessen",
"files": [
"lib/private/Activity/**",
@@ -25,7 +19,10 @@
}
],
"userBlacklist": [
+ "DeepDiver1975",
+ "nextcloud-bot",
"owncloud-bot",
+ "PVince81",
"scrutinizer-auto-fixer",
"th3fallen",
"zander"
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index ddcba167af1..00000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-sudo: false
-language: php
-php:
- - 5.6
-
-env:
- global:
- - TEST_DAV=$(tests/travis/changed_app.sh dav)
- - TC=litmus-v2
- matrix:
- - DB=sqlite
-
-branches:
- only:
- - master
- - /^stable\d+(\.\d+)?$/
-
-addons:
- apt:
- packages:
- - realpath
-
-before_install:
- - sh -c "if [ '$TEST_DAV' = '1' ]; then bash tests/travis/before_install.sh $DB; fi"
-
-install:
- - sh -c "if [ '$TEST_DAV' = '1' ]; then bash tests/travis/install.sh $DB; fi"
- - sh -c "if [ '$TEST_DAV' = '1' ]; then bash apps/dav/tests/travis/$TC/install.sh; fi"
-
-
-script:
- - sh -c "if [ '$TC' = 'syntax' ]; then composer install && lib/composer/bin/parallel-lint --exclude lib/composer/jakub-onderka/ --exclude 3rdparty/symfony/polyfill-php70/Resources/stubs/ --exclude 3rdparty/patchwork/utf8/src/Patchwork/Utf8/Bootup/ --exclude 3rdparty/paragonie/random_compat/lib/ --exclude lib/composer/composer/autoload_static.php --exclude 3rdparty/composer/autoload_static.php .; fi"
- - sh -c "if [ '$TC' = 'app:check-code' ]; then ./occ app:check-code admin_audit; ./occ app:check-code comments; ./occ app:check-code federation; ./occ app:check-code workflowengine; fi"
- - sh -c "if [ '$TC' = 'autoloader' ]; then bash build/autoloaderchecker.sh; fi"
- - sh -c "if [ '$TEST_DAV' != '1' ]; then echo \"Not testing DAV\"; fi"
- - sh -c "if [ '$TEST_DAV' = '1' ]; then echo \"Testing DAV\"; fi"
-
- - sh -c "if [ '$TEST_DAV' = '1' ]; then bash apps/dav/tests/travis/$TC/script.sh; fi"
-
-matrix:
- include:
- - php: 7.0
- env: TC=autoloader;TEST_DAV=0
- - php: 5.6
- env: DB=pgsql;TC=litmus-v1
- - php: 5.6
- env: DB=sqlite;TC=carddav
- - php: 5.6
- env: DB=sqlite;TC=caldav
- - php: 5.6
- env: DB=sqlite;TC=syntax;TEST_DAV=0
- - php: 7.0
- env: DB=sqlite;TC=syntax;TEST_DAV=0
- - php: 5.6
- env: DB=sqlite;TC=app:check-code;TEST_DAV=0
-
- fast_finish: true
diff --git a/.user.ini b/.user.ini
index 68ef3e8672c..fe14834b2e3 100644
--- a/.user.ini
+++ b/.user.ini
@@ -1,5 +1,5 @@
-upload_max_filesize=513M
-post_max_size=513M
+upload_max_filesize=511M
+post_max_size=511M
memory_limit=512M
mbstring.func_overload=0
always_populate_raw_post_data=-1
diff --git a/COPYING-AGPL b/COPYING
index dba13ed2ddf..dba13ed2ddf 100644
--- a/COPYING-AGPL
+++ b/COPYING
diff --git a/COPYING-README b/COPYING-README
index 2bd44d9400e..599d4eb469c 100644
--- a/COPYING-README
+++ b/COPYING-README
@@ -1,5 +1,5 @@
-Files in ownCloud are licensed under the Affero General Public License version 3,
-the text of which can be found in COPYING-AGPL, or any later version of the AGPL,
+Files in Nextcloud are licensed under the Affero General Public License version 3,
+the text of which can be found in COPYING, or any later version of the AGPL,
unless otherwise noted.
Licensing of components:
@@ -12,4 +12,4 @@ Licensing of components:
All unmodified files from these and other sources retain their original copyright
and license notices: see the relevant individual files.
-Attribution information for ownCloud is contained in the AUTHORS file.
+Attribution information for Nextcloud is contained in the AUTHORS file.
diff --git a/README.md b/README.md
index 40b18f88457..fd128b24d99 100644
--- a/README.md
+++ b/README.md
@@ -36,7 +36,7 @@ licensed under the AGPLv3 or any later version.
Nextcloud doesn't require a CLA (Contributor License Agreement).
The copyright belongs to all the individual contributors. Therefore we recommend
-that every contributor adds following line to the header of a file, if he
+that every contributor adds following line to the header of a file, if they
changed it substantially:
```
@@ -46,7 +46,7 @@ changed it substantially:
More information how to contribute: https://nextcloud.com/contribute/
## Nextcloud VM
-If you're not familiar with Linux, or simply just want to get up and running on a pre-configured system in no time - we have developed a VM that you can download. Just extract it and mount it in VMware or VirtualBox and your're all set.
+If you're not familiar with Linux, or simply just want to get up and running on a pre-configured system in no time - we have developed a VM that you can download. Just extract it and mount it in VMware or VirtualBox and you're all set.
Download the latest version of the [Nextcloud VM](https://github.com/nextcloud/vm/releases/)
diff --git a/apps/admin_audit/lib/actions/trashbin.php b/apps/admin_audit/lib/actions/trashbin.php
index fd7869b1b22..b04bd6b8f61 100644
--- a/apps/admin_audit/lib/actions/trashbin.php
+++ b/apps/admin_audit/lib/actions/trashbin.php
@@ -25,9 +25,6 @@
namespace OCA\Admin_Audit\Actions;
-use OCP\ILogger;
-use OCP\IUserSession;
-
class Trashbin extends Action {
public function delete($params) {
diff --git a/apps/comments/l10n/ar.js b/apps/comments/l10n/ar.js
index 159110ae13e..23b394048e6 100644
--- a/apps/comments/l10n/ar.js
+++ b/apps/comments/l10n/ar.js
@@ -1,12 +1,15 @@
OC.L10N.register(
"comments",
{
+ "New comment …" : "تعليق جديد",
"Delete comment" : "حذف التعليق",
"Post" : "ارسال",
"Cancel" : "إلغاء",
"Edit comment" : "تعديل التعليق",
"[Deleted user]" : "[مستخدم محذوف]",
"Comments" : "تعليقات",
+ "No comments yet, start the conversation!" : "لا يوجد تعليقات, ابدأ النقاش الآن!",
+ "More comments …" : "مزيد من التعليقات...",
"Save" : "حفظ",
"Allowed characters {count} of {max}" : "عدد الأحرف المسموح بها {count} من {max}",
"Error occurred while retrieving comment with id {id}" : "حصل خطأ أثناء عرض التعليق رقم {id}",
diff --git a/apps/comments/l10n/ar.json b/apps/comments/l10n/ar.json
index 8dc00af0572..b39343bec1e 100644
--- a/apps/comments/l10n/ar.json
+++ b/apps/comments/l10n/ar.json
@@ -1,10 +1,13 @@
{ "translations": {
+ "New comment …" : "تعليق جديد",
"Delete comment" : "حذف التعليق",
"Post" : "ارسال",
"Cancel" : "إلغاء",
"Edit comment" : "تعديل التعليق",
"[Deleted user]" : "[مستخدم محذوف]",
"Comments" : "تعليقات",
+ "No comments yet, start the conversation!" : "لا يوجد تعليقات, ابدأ النقاش الآن!",
+ "More comments …" : "مزيد من التعليقات...",
"Save" : "حفظ",
"Allowed characters {count} of {max}" : "عدد الأحرف المسموح بها {count} من {max}",
"Error occurred while retrieving comment with id {id}" : "حصل خطأ أثناء عرض التعليق رقم {id}",
diff --git a/apps/comments/l10n/el.js b/apps/comments/l10n/el.js
index 36e1a643177..29afdaba0ef 100644
--- a/apps/comments/l10n/el.js
+++ b/apps/comments/l10n/el.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"comments",
{
+ "New comment …" : "Νέο σχόλιο ...",
"Delete comment" : "Διαγραφή σχολίου",
"Post" : "Δημοσίευση",
"Cancel" : "Άκυρο",
diff --git a/apps/comments/l10n/el.json b/apps/comments/l10n/el.json
index 79af0f26238..a4a73befcc9 100644
--- a/apps/comments/l10n/el.json
+++ b/apps/comments/l10n/el.json
@@ -1,4 +1,5 @@
{ "translations": {
+ "New comment …" : "Νέο σχόλιο ...",
"Delete comment" : "Διαγραφή σχολίου",
"Post" : "Δημοσίευση",
"Cancel" : "Άκυρο",
diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php
index c99689619d8..17479c490a9 100644
--- a/apps/dav/lib/CalDAV/CalDavBackend.php
+++ b/apps/dav/lib/CalDAV/CalDavBackend.php
@@ -152,7 +152,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$query->andWhere($query->expr()->neq('uri', $query->createNamedParameter(BirthdayService::BIRTHDAY_CALENDAR_URI)));
}
- return $query->execute()->fetchColumn();
+ return (int)$query->execute()->fetchColumn();
}
/**
@@ -616,19 +616,25 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
* @return array
*/
function getMultipleCalendarObjects($calendarId, array $uris) {
+ if (empty($uris)) {
+ return [];
+ }
+
+ $chunks = array_chunk($uris, 100);
+ $objects = [];
+
$query = $this->db->getQueryBuilder();
$query->select(['id', 'uri', 'lastmodified', 'etag', 'calendarid', 'size', 'calendardata', 'componenttype', 'classification'])
- ->from('calendarobjects')
- ->where($query->expr()->eq('calendarid', $query->createNamedParameter($calendarId)))
- ->andWhere($query->expr()->in('uri', $query->createParameter('uri')))
- ->setParameter('uri', $uris, IQueryBuilder::PARAM_STR_ARRAY);
-
- $stmt = $query->execute();
+ ->from('calendarobjects')
+ ->where($query->expr()->eq('calendarid', $query->createNamedParameter($calendarId)))
+ ->andWhere($query->expr()->in('uri', $query->createParameter('uri')));
- $result = [];
- while($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
+ foreach ($chunks as $uris) {
+ $query->setParameter('uri', $uris, IQueryBuilder::PARAM_STR_ARRAY);
+ $result = $query->execute();
- $result[] = [
+ while ($row = $result->fetch()) {
+ $objects[] = [
'id' => $row['id'],
'uri' => $row['uri'],
'lastmodified' => $row['lastmodified'],
@@ -638,10 +644,11 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
'calendardata' => $this->readBlob($row['calendardata']),
'component' => strtolower($row['componenttype']),
'classification' => (int)$row['classification']
- ];
-
+ ];
+ }
+ $result->closeCursor();
}
- return $result;
+ return $objects;
}
/**
diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php
index 48e3b04b38b..3aab2712125 100644
--- a/apps/dav/lib/CardDAV/CardDavBackend.php
+++ b/apps/dav/lib/CardDAV/CardDavBackend.php
@@ -111,7 +111,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
->from('addressbooks')
->where($query->expr()->eq('principaluri', $query->createNamedParameter($principalUri)));
- return $query->execute()->fetchColumn();
+ return (int)$query->execute()->fetchColumn();
}
/**
@@ -482,23 +482,30 @@ class CardDavBackend implements BackendInterface, SyncSupport {
* @return array
*/
function getMultipleCards($addressBookId, array $uris) {
+ if (empty($uris)) {
+ return [];
+ }
+
+ $chunks = array_chunk($uris, 100);
+ $cards = [];
+
$query = $this->db->getQueryBuilder();
$query->select(['id', 'uri', 'lastmodified', 'etag', 'size', 'carddata'])
->from('cards')
->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId)))
- ->andWhere($query->expr()->in('uri', $query->createParameter('uri')))
- ->setParameter('uri', $uris, IQueryBuilder::PARAM_STR_ARRAY);
+ ->andWhere($query->expr()->in('uri', $query->createParameter('uri')));
- $cards = [];
+ foreach ($chunks as $uris) {
+ $query->setParameter('uri', $uris, IQueryBuilder::PARAM_STR_ARRAY);
+ $result = $query->execute();
- $result = $query->execute();
- while($row = $result->fetch()) {
- $row['etag'] = '"' . $row['etag'] . '"';
- $row['carddata'] = $this->readBlob($row['carddata']);
- $cards[] = $row;
+ while ($row = $result->fetch()) {
+ $row['etag'] = '"' . $row['etag'] . '"';
+ $row['carddata'] = $this->readBlob($row['carddata']);
+ $cards[] = $row;
+ }
+ $result->closeCursor();
}
- $result->closeCursor();
-
return $cards;
}
diff --git a/apps/dav/lib/CardDAV/ImageExportPlugin.php b/apps/dav/lib/CardDAV/ImageExportPlugin.php
index 31e8ed6a5e5..e48410d26d6 100644
--- a/apps/dav/lib/CardDAV/ImageExportPlugin.php
+++ b/apps/dav/lib/CardDAV/ImageExportPlugin.php
@@ -87,6 +87,7 @@ class ImageExportPlugin extends ServerPlugin {
if ($result = $this->getPhoto($node)) {
$response->setHeader('Content-Type', $result['Content-Type']);
+ $response->setHeader('Content-Disposition', 'attachment');
$response->setStatus(200);
$response->setBody($result['body']);
@@ -121,6 +122,17 @@ class ImageExportPlugin extends ServerPlugin {
}
$val = file_get_contents($val);
}
+
+ $allowedContentTypes = [
+ 'image/png',
+ 'image/jpeg',
+ 'image/gif',
+ ];
+
+ if(!in_array($type, $allowedContentTypes, true)) {
+ $type = 'application/octet-stream';
+ }
+
return [
'Content-Type' => $type,
'body' => $val
diff --git a/apps/dav/lib/Files/BrowserErrorPagePlugin.php b/apps/dav/lib/Files/BrowserErrorPagePlugin.php
index 8c257b324b9..b58ce4df874 100644
--- a/apps/dav/lib/Files/BrowserErrorPagePlugin.php
+++ b/apps/dav/lib/Files/BrowserErrorPagePlugin.php
@@ -31,7 +31,6 @@ use Sabre\DAV\Server;
use Sabre\DAV\ServerPlugin;
class BrowserErrorPagePlugin extends ServerPlugin {
-
/** @var Server */
private $server;
@@ -88,8 +87,7 @@ class BrowserErrorPagePlugin extends ServerPlugin {
/**
* @codeCoverageIgnore
- * @param \Exception $ex
- * @param int $httpCode
+ * @param \Exception $exception
* @return bool|string
*/
public function generateBody(\Exception $exception) {
@@ -109,10 +107,11 @@ class BrowserErrorPagePlugin extends ServerPlugin {
return $content->fetchPage();
}
- /*
+ /**
* @codeCoverageIgnore
*/
public function sendResponse() {
$this->server->sapi->sendResponse($this->server->httpResponse);
+ exit();
}
}
diff --git a/apps/dav/lib/Upload/AssemblyStream.php b/apps/dav/lib/Upload/AssemblyStream.php
index 5853adfa77b..3a18f91677d 100644
--- a/apps/dav/lib/Upload/AssemblyStream.php
+++ b/apps/dav/lib/Upload/AssemblyStream.php
@@ -50,6 +50,9 @@ class AssemblyStream implements \Icewind\Streams\File {
/** @var int */
private $size;
+ /** @var resource */
+ private $currentStream = null;
+
/**
* @param string $path
* @param string $mode
@@ -102,16 +105,36 @@ class AssemblyStream implements \Icewind\Streams\File {
* @return string
*/
public function stream_read($count) {
+ do {
+ if ($this->currentStream === null) {
+ list($node, $posInNode) = $this->getNodeForPosition($this->pos);
+ if (is_null($node)) {
+ // reached last node, no more data
+ return '';
+ }
+ $this->currentStream = $this->getStream($node);
+ fseek($this->currentStream, $posInNode);
+ }
- list($node, $posInNode) = $this->getNodeForPosition($this->pos);
- if (is_null($node)) {
- return null;
- }
- $stream = $this->getStream($node);
+ $data = fread($this->currentStream, $count);
+ // isset is faster than strlen
+ if (isset($data[$count - 1])) {
+ // we read the full count
+ $read = $count;
+ } else {
+ // reaching end of stream, which happens less often so strlen is ok
+ $read = strlen($data);
+ }
- fseek($stream, $posInNode);
- $data = fread($stream, $count);
- $read = strlen($data);
+ if (feof($this->currentStream)) {
+ fclose($this->currentStream);
+ $this->currentNode = null;
+ $this->currentStream = null;
+ }
+ // if no data read, try again with the next node because
+ // returning empty data can make the caller think there is no more
+ // data left to read
+ } while ($read === 0);
// update position
$this->pos += $read;
diff --git a/apps/dav/templates/exception.php b/apps/dav/templates/exception.php
index ff3d1f3d20d..c4abd205bfc 100644
--- a/apps/dav/templates/exception.php
+++ b/apps/dav/templates/exception.php
@@ -1,7 +1,5 @@
<?php
/**
-
- *
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @license GNU AGPL version 3 or any later version
@@ -21,10 +19,11 @@
*
*/
style('core', ['styles', 'header']);
+
+/** @param $_ array */
?>
<span class="error error-wide">
<h2><strong><?php p($_['title']) ?></strong></h2>
- <p><?php p($_['message']) ?></p>
<br>
<h2><strong><?php p($l->t('Technical details')) ?></strong></h2>
diff --git a/apps/dav/tests/travis/litmus-v1/install.sh b/apps/dav/tests/travis/litmus-v1/install.sh
deleted file mode 100644
index 0ee2cb08d82..00000000000
--- a/apps/dav/tests/travis/litmus-v1/install.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env bash
-
-# compile litmus
-if [ ! -f /tmp/litmus/litmus-0.13.tar.gz ]; then
- mkdir -p /tmp/litmus
- wget -O /tmp/litmus/litmus-0.13.tar.gz http://www.webdav.org/neon/litmus/litmus-0.13.tar.gz
- cd /tmp/litmus
- tar -xzf litmus-0.13.tar.gz
- cd /tmp/litmus/litmus-0.13
- ./configure
- make
-fi
diff --git a/apps/dav/tests/travis/litmus-v2/install.sh b/apps/dav/tests/travis/litmus-v2/install.sh
deleted file mode 100644
index 0ee2cb08d82..00000000000
--- a/apps/dav/tests/travis/litmus-v2/install.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env bash
-
-# compile litmus
-if [ ! -f /tmp/litmus/litmus-0.13.tar.gz ]; then
- mkdir -p /tmp/litmus
- wget -O /tmp/litmus/litmus-0.13.tar.gz http://www.webdav.org/neon/litmus/litmus-0.13.tar.gz
- cd /tmp/litmus
- tar -xzf litmus-0.13.tar.gz
- cd /tmp/litmus/litmus-0.13
- ./configure
- make
-fi
diff --git a/apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php b/apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php
index 229fa7ec6f2..e878cbd4f59 100644
--- a/apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php
+++ b/apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php
@@ -107,9 +107,20 @@ class ImageExportPluginTest extends TestCase {
$this->plugin->expects($this->once())->method('getPhoto')->willReturn($getPhotoResult);
if (!$expected) {
- $this->response->expects($this->once())->method('setHeader');
- $this->response->expects($this->once())->method('setStatus');
- $this->response->expects($this->once())->method('setBody');
+ $this->response
+ ->expects($this->at(0))
+ ->method('setHeader')
+ ->with('Content-Type', $getPhotoResult['Content-Type']);
+ $this->response
+ ->expects($this->at(1))
+ ->method('setHeader')
+ ->with('Content-Disposition', 'attachment');
+ $this->response
+ ->expects($this->once())
+ ->method('setStatus');
+ $this->response
+ ->expects($this->once())
+ ->method('setBody');
}
$result = $this->plugin->httpGet($this->request, $this->response);
@@ -142,12 +153,43 @@ class ImageExportPluginTest extends TestCase {
public function providesPhotoData() {
return [
- 'empty vcard' => [false, ''],
- 'vcard without PHOTO' => [false, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nEND:VCARD\r\n"],
- 'vcard 3 with PHOTO' => [['Content-Type' => 'image/jpeg', 'body' => '12345'], "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO;ENCODING=b;TYPE=JPEG:MTIzNDU=\r\nEND:VCARD\r\n"],
- 'vcard 3 with PHOTO URL' => [false, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO;TYPE=JPEG;VALUE=URI:http://example.com/photo.jpg\r\nEND:VCARD\r\n"],
- 'vcard 4 with PHOTO' => [['Content-Type' => 'image/jpeg', 'body' => '12345'], "BEGIN:VCARD\r\nVERSION:4.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO:data:image/jpeg;base64,MTIzNDU=\r\nEND:VCARD\r\n"],
- 'vcard 4 with PHOTO URL' => [false, "BEGIN:VCARD\r\nVERSION:4.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO;MEDIATYPE=image/jpeg:http://example.org/photo.jpg\r\nEND:VCARD\r\n"],
+ 'empty vcard' => [
+ false,
+ ''
+ ],
+ 'vcard without PHOTO' => [
+ false,
+ "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nEND:VCARD\r\n"
+ ],
+ 'vcard 3 with PHOTO' => [
+ [
+ 'Content-Type' => 'image/jpeg',
+ 'body' => '12345'
+ ],
+ "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO;ENCODING=b;TYPE=JPEG:MTIzNDU=\r\nEND:VCARD\r\n"
+ ],
+ 'vcard 3 with PHOTO URL' => [
+ false,
+ "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO;TYPE=JPEG;VALUE=URI:http://example.com/photo.jpg\r\nEND:VCARD\r\n"
+ ],
+ 'vcard 4 with PHOTO' => [
+ [
+ 'Content-Type' => 'image/jpeg',
+ 'body' => '12345'
+ ],
+ "BEGIN:VCARD\r\nVERSION:4.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO:data:image/jpeg;base64,MTIzNDU=\r\nEND:VCARD\r\n"
+ ],
+ 'vcard 4 with PHOTO URL' => [
+ false,
+ "BEGIN:VCARD\r\nVERSION:4.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO;MEDIATYPE=image/jpeg:http://example.org/photo.jpg\r\nEND:VCARD\r\n"
+ ],
+ 'vcard 4 with PHOTO AND INVALID MIMEtYPE' => [
+ [
+ 'Content-Type' => 'application/octet-stream',
+ 'body' => '12345'
+ ],
+ "BEGIN:VCARD\r\nVERSION:4.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO:data:image/svg;base64,MTIzNDU=\r\nEND:VCARD\r\n"
+ ],
];
}
}
diff --git a/apps/dav/tests/unit/Upload/AssemblyStreamTest.php b/apps/dav/tests/unit/Upload/AssemblyStreamTest.php
index ea875886af7..66aea40ef22 100644
--- a/apps/dav/tests/unit/Upload/AssemblyStreamTest.php
+++ b/apps/dav/tests/unit/Upload/AssemblyStreamTest.php
@@ -35,18 +35,78 @@ class AssemblyStreamTest extends \Test\TestCase {
$this->assertEquals($expected, $content);
}
+ /**
+ * @dataProvider providesNodes()
+ */
+ public function testGetContentsFread($expected, $nodes) {
+ $stream = \OCA\DAV\Upload\AssemblyStream::wrap($nodes);
+
+ $content = '';
+ while (!feof($stream)) {
+ $content .= fread($stream, 3);
+ }
+
+ $this->assertEquals($expected, $content);
+ }
+
function providesNodes() {
+ $data8k = $this->makeData(8192);
+ $dataLess8k = $this->makeData(8191);
return[
- 'one node only' => ['1234567890', [
+ 'one node zero bytes' => [
+ '', [
+ $this->buildNode('0', '')
+ ]],
+ 'one node only' => [
+ '1234567890', [
$this->buildNode('0', '1234567890')
]],
- 'two nodes' => ['1234567890', [
+ 'one node buffer boundary' => [
+ $data8k, [
+ $this->buildNode('0', $data8k)
+ ]],
+ 'two nodes' => [
+ '1234567890', [
$this->buildNode('1', '67890'),
$this->buildNode('0', '12345')
- ]]
+ ]],
+ 'two nodes end on buffer boundary' => [
+ $data8k . $data8k, [
+ $this->buildNode('1', $data8k),
+ $this->buildNode('0', $data8k)
+ ]],
+ 'two nodes with one on buffer boundary' => [
+ $data8k . $dataLess8k, [
+ $this->buildNode('1', $dataLess8k),
+ $this->buildNode('0', $data8k)
+ ]],
+ 'two nodes on buffer boundary plus one byte' => [
+ $data8k . 'X' . $data8k, [
+ $this->buildNode('1', $data8k),
+ $this->buildNode('0', $data8k . 'X')
+ ]],
+ 'two nodes on buffer boundary plus one byte at the end' => [
+ $data8k . $data8k . 'X', [
+ $this->buildNode('1', $data8k . 'X'),
+ $this->buildNode('0', $data8k)
+ ]],
];
}
+ private function makeData($count) {
+ $data = '';
+ $base = '1234567890';
+ $j = 0;
+ for ($i = 0; $i < $count; $i++) {
+ $data .= $base[$j];
+ $j++;
+ if (!isset($base[$j])) {
+ $j = 0;
+ }
+ }
+ return $data;
+ }
+
private function buildNode($name, $data) {
$node = $this->getMockBuilder('\Sabre\DAV\File')
->setMethods(['getName', 'get', 'getSize'])
diff --git a/apps/encryption/l10n/hu_HU.js b/apps/encryption/l10n/hu_HU.js
index d13459e4902..8ff4554a200 100644
--- a/apps/encryption/l10n/hu_HU.js
+++ b/apps/encryption/l10n/hu_HU.js
@@ -1,28 +1,69 @@
OC.L10N.register(
"encryption",
{
+ "Missing recovery key password" : "Hiányzó helyreállítási kulcs jelszó",
+ "Please repeat the recovery key password" : "Ismételd meg a helyreállítási kulcs jelszavát",
+ "Repeated recovery key password does not match the provided recovery key password" : "A megismételt helyreállítási kulcs jelszó nem egyezik meg a megadott helyreállítási kulcs jelszóval ",
"Recovery key successfully enabled" : "A helyreállítási kulcs sikeresen bekapcsolva",
"Could not enable recovery key. Please check your recovery key password!" : "A helyreállítási kulcsot nem lehetett engedélyezni. Ellenőrizze a helyreállítási kulcsa jelszavát!",
"Recovery key successfully disabled" : "A helyreállítási kulcs sikeresen kikapcsolva",
"Could not disable recovery key. Please check your recovery key password!" : "A helyreállítási kulcsot nem lehetett kikapcsolni. Ellenőrizze a helyreállítási kulcsa jelszavát!",
+ "Missing parameters" : "Hiányzó paraméterek",
+ "Please provide the old recovery password" : "Kérlek add meg a régi visszaállítási jelszót",
+ "Please provide a new recovery password" : "Kérlek add meg az új visszaállítási jelszót",
+ "Please repeat the new recovery password" : "Kérlek ismételd meg az új visszaállítási jelszót",
"Password successfully changed." : "A jelszót sikeresen megváltoztattuk.",
"Could not change the password. Maybe the old password was not correct." : "A jelszót nem lehet megváltoztatni! Lehet, hogy hibás volt a régi jelszó.",
+ "Recovery Key disabled" : "Visszaállítási kulcs letilva",
+ "Recovery Key enabled" : "Visszaállítási kulcs engedélyezve",
+ "Could not enable the recovery key, please try again or contact your administrator" : "Nem sikerült engedélyezni a visszaállítási kulcsot, kérlek próbáld újra vagy lép kapcsolatba az adminisztrátorral",
+ "Could not update the private key password." : "Nem sikerült frissíteni a privát kulcs jelszavát.",
+ "The old password was not correct, please try again." : "A régi jelszó nem volt helyes, kérlek próbáld újra.",
+ "The current log-in password was not correct, please try again." : "Az aktuális bejelentkezési jelszó nem volt helyes, kérlek próbáld újra.",
"Private key password successfully updated." : "A személyes kulcsának jelszava frissítésre került.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Az állományok titkosításához használt titkos kulcsa érvénytelen. Kérjük frissítse a titkos kulcs jelszót a személyes beállításokban, hogy ismét hozzáférjen a titkosított állományaihoz!",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Az állományok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérjük, hogy jelentkezzen ki, és lépjen be újra!",
- "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Az állományt nem sikerült dekódolni, valószínűleg ez egy megosztott fájl. Kérje meg az állomány tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Migrálni kell a titkosítási kulcsaidat a rég titkosításról (ownCloud <= 8.0) az újra. Kérlek futtasd az 'occ encryption:migrate' parancsot, vagy lépj kapcsolatba az adminisztrátorral",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "A titkosító alkalmazás privát kulcsa érvénytelen. A titkosított fájljaidhoz való hozzáféréshez frissítsd a privát kulcsod jelszavát a személyes beállításoknál.",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "A titkosító alkalmazás engedélyezve van, de a kulcsaid még nincsenek inicializálva. Kérlek lépj ki, majd lépj be újra",
+ "Encryption app is enabled and ready" : "A titkosító alkalmazás engedélyezve és készen áll",
+ "Bad Signature" : "Rossz aláírás",
+ "Missing Signature" : "Hiányzó aláírás",
+ "one-time password for server-side-encryption" : "szerver-oldali titkosítás egyszer használható jelszava",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "A fájlt nem sikerült visszafejteni, valószínűleg ez egy megosztott fájl. Kérje meg a fájl tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ez a fájl nem olvasható, valószínűleg ez egy megosztott fájl. Kérd meg a tulajdonosát, hogy ossza meg veled újra ezt a fájlt.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Szia!\n\nAz adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: '%s'.\n\nKérlek jelentkezz be a webes felületre és a személyes beállítások 'alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.\n\n",
"The share will expire on %s." : "A megosztás lejár ekkor %s",
"Cheers!" : "Üdv.",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Szia!<br><br>Az adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: <strong>%s</strong>.<br><br>Kérlek jelentkezz be a webes felületre és a személyes beállítások 'alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.<br><br>",
+ "Default encryption module" : "Alapértelmezett titkosítási modul",
+ "Encrypt the home storage" : "Helyi tároló titkosítása",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "A lehetőség engedélyezésekor minden fájlt titkosít a fő tárolóban, egyébként csak a külső tárolókon lévő fájlok lesznek titkosítva",
+ "Enable recovery key" : "Visszaállítási kulcs engedélyezése",
+ "Disable recovery key" : "Visszaállítási kulcs letiltása",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A visszaállítási kulcs egy a fájlok titkosítására szolgáló extra titkosítási kulcs. A segítségével vissza lehet állítani a fájlokat ha felhasználó elfelejtette a jelszavát.",
"Recovery key password" : "A helyreállítási kulcs jelszava",
+ "Repeat recovery key password" : "Ismételd meg a visszaállítási kulcs jelszavát",
"Change recovery key password:" : "A helyreállítási kulcs jelszavának módosítása:",
+ "Old recovery key password" : "A régi helyreállítási kulcs jelszava",
+ "New recovery key password" : "Az új helyreállítási kulcs jelszava",
+ "Repeat new recovery key password" : "Ismételd meg az új helyreállítási kulcs jelszavát",
"Change Password" : "Jelszó megváltoztatása",
- " If you don't remember your old password you can ask your administrator to recover your files." : "Ha nem emlékszik a régi jelszavára akkor megkérheti a rendszergazdát, hogy állítsa vissza az állományait.",
+ "Basic encryption module" : "Alap titkosítási modul",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A fájlok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérjük, hogy jelentkezzen ki, és lépjen be újra!",
+ "Your private key password no longer matches your log-in password." : "A privát kulcs jelszavad már nem egyezik meg a bejelentkezési jelszavaddal. ",
+ "Set your old private key password to your current log-in password:" : "Állítsd át a régi privát kulcs jelszavadat az aktuális bejelentkezési jelszavadra:",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "Ha nem emlékszik a régi jelszavára akkor megkérheti a rendszergazdát, hogy állítsa vissza a fájljait.",
"Old log-in password" : "Régi bejelentkezési jelszó",
"Current log-in password" : "Jelenlegi bejelentkezési jelszó",
"Update Private Key Password" : "A személyest kulcs jelszó frissítése",
"Enable password recovery:" : "Jelszó-visszaállítás bekapcsolása",
- "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ez az opció lehetővé teszi, hogy a titkosított állományok tartalmát visszanyerjük abban az esetben, ha elfelejti a jelszavát",
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ez az opció lehetővé teszi, hogy a titkosított fájlok tartalmát visszanyerjük abban az esetben, ha elfelejti a jelszavát",
"Enabled" : "Bekapcsolva",
- "Disabled" : "Kikapcsolva"
+ "Disabled" : "Kikapcsolva",
+ "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Migrálni kell a titkosítási kulcsaidat a rég titkosításról (Nextcloud <= 8.0) az újra. Kérlek futtasd az 'occ encryption:migrate' parancsot, vagy lépj kapcsolatba az adminisztrátorral",
+ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "A titkosító alkalmazás privát kulcsa érvénytelen. A titkosított fájljaidhoz való hozzáféréshez frissítsd a privát kulcsod jelszavát a személyes beállításoknál.",
+ "Encryption App is enabled and ready" : "A titkosító alkalmazás engedélyezve és készen áll",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'Nextcloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Szia!\n\nAz adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: '%s'.\n\nKérlek jelentkezz be a webes felületre és a személyes beállítások 'Nextcloud alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.\n\n",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"Nextcloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Szia!<br><br>Az adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: <strong>%s</strong>.<br><br>Kérlek jelentkezz be a webes felületre és a személyes beállítások 'Nextcloud alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.<br><br>",
+ "Nextcloud basic encryption module" : "Nextcloud alap titkosítási modul"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/hu_HU.json b/apps/encryption/l10n/hu_HU.json
index 2e77ff30182..01dd2d9da40 100644
--- a/apps/encryption/l10n/hu_HU.json
+++ b/apps/encryption/l10n/hu_HU.json
@@ -1,26 +1,67 @@
{ "translations": {
+ "Missing recovery key password" : "Hiányzó helyreállítási kulcs jelszó",
+ "Please repeat the recovery key password" : "Ismételd meg a helyreállítási kulcs jelszavát",
+ "Repeated recovery key password does not match the provided recovery key password" : "A megismételt helyreállítási kulcs jelszó nem egyezik meg a megadott helyreállítási kulcs jelszóval ",
"Recovery key successfully enabled" : "A helyreállítási kulcs sikeresen bekapcsolva",
"Could not enable recovery key. Please check your recovery key password!" : "A helyreállítási kulcsot nem lehetett engedélyezni. Ellenőrizze a helyreállítási kulcsa jelszavát!",
"Recovery key successfully disabled" : "A helyreállítási kulcs sikeresen kikapcsolva",
"Could not disable recovery key. Please check your recovery key password!" : "A helyreállítási kulcsot nem lehetett kikapcsolni. Ellenőrizze a helyreállítási kulcsa jelszavát!",
+ "Missing parameters" : "Hiányzó paraméterek",
+ "Please provide the old recovery password" : "Kérlek add meg a régi visszaállítási jelszót",
+ "Please provide a new recovery password" : "Kérlek add meg az új visszaállítási jelszót",
+ "Please repeat the new recovery password" : "Kérlek ismételd meg az új visszaállítási jelszót",
"Password successfully changed." : "A jelszót sikeresen megváltoztattuk.",
"Could not change the password. Maybe the old password was not correct." : "A jelszót nem lehet megváltoztatni! Lehet, hogy hibás volt a régi jelszó.",
+ "Recovery Key disabled" : "Visszaállítási kulcs letilva",
+ "Recovery Key enabled" : "Visszaállítási kulcs engedélyezve",
+ "Could not enable the recovery key, please try again or contact your administrator" : "Nem sikerült engedélyezni a visszaállítási kulcsot, kérlek próbáld újra vagy lép kapcsolatba az adminisztrátorral",
+ "Could not update the private key password." : "Nem sikerült frissíteni a privát kulcs jelszavát.",
+ "The old password was not correct, please try again." : "A régi jelszó nem volt helyes, kérlek próbáld újra.",
+ "The current log-in password was not correct, please try again." : "Az aktuális bejelentkezési jelszó nem volt helyes, kérlek próbáld újra.",
"Private key password successfully updated." : "A személyes kulcsának jelszava frissítésre került.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Az állományok titkosításához használt titkos kulcsa érvénytelen. Kérjük frissítse a titkos kulcs jelszót a személyes beállításokban, hogy ismét hozzáférjen a titkosított állományaihoz!",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Az állományok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérjük, hogy jelentkezzen ki, és lépjen be újra!",
- "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Az állományt nem sikerült dekódolni, valószínűleg ez egy megosztott fájl. Kérje meg az állomány tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Migrálni kell a titkosítási kulcsaidat a rég titkosításról (ownCloud <= 8.0) az újra. Kérlek futtasd az 'occ encryption:migrate' parancsot, vagy lépj kapcsolatba az adminisztrátorral",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "A titkosító alkalmazás privát kulcsa érvénytelen. A titkosított fájljaidhoz való hozzáféréshez frissítsd a privát kulcsod jelszavát a személyes beállításoknál.",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "A titkosító alkalmazás engedélyezve van, de a kulcsaid még nincsenek inicializálva. Kérlek lépj ki, majd lépj be újra",
+ "Encryption app is enabled and ready" : "A titkosító alkalmazás engedélyezve és készen áll",
+ "Bad Signature" : "Rossz aláírás",
+ "Missing Signature" : "Hiányzó aláírás",
+ "one-time password for server-side-encryption" : "szerver-oldali titkosítás egyszer használható jelszava",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "A fájlt nem sikerült visszafejteni, valószínűleg ez egy megosztott fájl. Kérje meg a fájl tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ez a fájl nem olvasható, valószínűleg ez egy megosztott fájl. Kérd meg a tulajdonosát, hogy ossza meg veled újra ezt a fájlt.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Szia!\n\nAz adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: '%s'.\n\nKérlek jelentkezz be a webes felületre és a személyes beállítások 'alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.\n\n",
"The share will expire on %s." : "A megosztás lejár ekkor %s",
"Cheers!" : "Üdv.",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Szia!<br><br>Az adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: <strong>%s</strong>.<br><br>Kérlek jelentkezz be a webes felületre és a személyes beállítások 'alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.<br><br>",
+ "Default encryption module" : "Alapértelmezett titkosítási modul",
+ "Encrypt the home storage" : "Helyi tároló titkosítása",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "A lehetőség engedélyezésekor minden fájlt titkosít a fő tárolóban, egyébként csak a külső tárolókon lévő fájlok lesznek titkosítva",
+ "Enable recovery key" : "Visszaállítási kulcs engedélyezése",
+ "Disable recovery key" : "Visszaállítási kulcs letiltása",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A visszaállítási kulcs egy a fájlok titkosítására szolgáló extra titkosítási kulcs. A segítségével vissza lehet állítani a fájlokat ha felhasználó elfelejtette a jelszavát.",
"Recovery key password" : "A helyreállítási kulcs jelszava",
+ "Repeat recovery key password" : "Ismételd meg a visszaállítási kulcs jelszavát",
"Change recovery key password:" : "A helyreállítási kulcs jelszavának módosítása:",
+ "Old recovery key password" : "A régi helyreállítási kulcs jelszava",
+ "New recovery key password" : "Az új helyreállítási kulcs jelszava",
+ "Repeat new recovery key password" : "Ismételd meg az új helyreállítási kulcs jelszavát",
"Change Password" : "Jelszó megváltoztatása",
- " If you don't remember your old password you can ask your administrator to recover your files." : "Ha nem emlékszik a régi jelszavára akkor megkérheti a rendszergazdát, hogy állítsa vissza az állományait.",
+ "Basic encryption module" : "Alap titkosítási modul",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A fájlok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérjük, hogy jelentkezzen ki, és lépjen be újra!",
+ "Your private key password no longer matches your log-in password." : "A privát kulcs jelszavad már nem egyezik meg a bejelentkezési jelszavaddal. ",
+ "Set your old private key password to your current log-in password:" : "Állítsd át a régi privát kulcs jelszavadat az aktuális bejelentkezési jelszavadra:",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "Ha nem emlékszik a régi jelszavára akkor megkérheti a rendszergazdát, hogy állítsa vissza a fájljait.",
"Old log-in password" : "Régi bejelentkezési jelszó",
"Current log-in password" : "Jelenlegi bejelentkezési jelszó",
"Update Private Key Password" : "A személyest kulcs jelszó frissítése",
"Enable password recovery:" : "Jelszó-visszaállítás bekapcsolása",
- "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ez az opció lehetővé teszi, hogy a titkosított állományok tartalmát visszanyerjük abban az esetben, ha elfelejti a jelszavát",
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ez az opció lehetővé teszi, hogy a titkosított fájlok tartalmát visszanyerjük abban az esetben, ha elfelejti a jelszavát",
"Enabled" : "Bekapcsolva",
- "Disabled" : "Kikapcsolva"
+ "Disabled" : "Kikapcsolva",
+ "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Migrálni kell a titkosítási kulcsaidat a rég titkosításról (Nextcloud <= 8.0) az újra. Kérlek futtasd az 'occ encryption:migrate' parancsot, vagy lépj kapcsolatba az adminisztrátorral",
+ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "A titkosító alkalmazás privát kulcsa érvénytelen. A titkosított fájljaidhoz való hozzáféréshez frissítsd a privát kulcsod jelszavát a személyes beállításoknál.",
+ "Encryption App is enabled and ready" : "A titkosító alkalmazás engedélyezve és készen áll",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'Nextcloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Szia!\n\nAz adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: '%s'.\n\nKérlek jelentkezz be a webes felületre és a személyes beállítások 'Nextcloud alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.\n\n",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"Nextcloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Szia!<br><br>Az adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: <strong>%s</strong>.<br><br>Kérlek jelentkezz be a webes felületre és a személyes beállítások 'Nextcloud alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.<br><br>",
+ "Nextcloud basic encryption module" : "Nextcloud alap titkosítási modul"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/encryption/lib/KeyManager.php b/apps/encryption/lib/KeyManager.php
index 4099da4b5ab..26f023ed8f9 100644
--- a/apps/encryption/lib/KeyManager.php
+++ b/apps/encryption/lib/KeyManager.php
@@ -33,7 +33,6 @@ use OCA\Encryption\Exceptions\PublicKeyMissingException;
use OCA\Encryption\Crypto\Crypt;
use OCP\Encryption\Keys\IStorage;
use OCP\IConfig;
-use OCP\IDBConnection;
use OCP\ILogger;
use OCP\IUserSession;
diff --git a/apps/encryption/tests/MigrationTest.php b/apps/encryption/tests/MigrationTest.php
index 0aea7543c2c..868a1ad3922 100644
--- a/apps/encryption/tests/MigrationTest.php
+++ b/apps/encryption/tests/MigrationTest.php
@@ -46,7 +46,7 @@ class MigrationTest extends \Test\TestCase {
private $recovery_key_id = 'recovery_key_id';
private $moduleId;
- /** @var \PHPUnit_Framework_MockObject_MockObject | ILogger */
+ /** @var \PHPUnit_Framework_MockObject_MockObject|ILogger */
private $logger;
public static function setUpBeforeClass() {
diff --git a/apps/federatedfilesharing/l10n/hu_HU.js b/apps/federatedfilesharing/l10n/hu_HU.js
index 24791d2f5e6..a14a4a6b40d 100644
--- a/apps/federatedfilesharing/l10n/hu_HU.js
+++ b/apps/federatedfilesharing/l10n/hu_HU.js
@@ -16,7 +16,7 @@ OC.L10N.register(
"Couldn't establish a federated share." : "Egy egyesített megosztás nem hozható létre.",
"Couldn't establish a federated share, maybe the password was wrong." : "Egy egyesített megosztás nem hozható létre, lehet hogy nem megfelelő a jelszó.",
"Federated Share request was successful, you will receive a invitation. Check your notifications." : "Az egyesített megosztási kérés sikeres volt, kapni fogsz egy értesítést. Ellenőrizd az értesítéseidet.",
- "The mountpoint name contains invalid characters." : "A csatlakozási pont neve érvénytelen karaktereket tartalmaz ",
+ "The mountpoint name contains invalid characters." : "A csatolási pont neve érvénytelen karaktereket tartalmaz ",
"Not allowed to create a federated share with the owner." : "A tulajdonossal nem lehet egyesített megosztást létrehozni.",
"Invalid or untrusted SSL certificate" : "Érvénytelen vagy nem megbízható az SSL tanúsítvány",
"Could not authenticate to remote share, password might be wrong" : "Nem sikerült az azonosítás a távoli megosztáshoz. Lehet, hogy rossz a jelszó.",
@@ -40,7 +40,7 @@ OC.L10N.register(
"Allow users on this server to receive shares from other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől",
"Federated Cloud" : "Egyesített felhő",
"Your Federated Cloud ID:" : "Egyesített felhő azonosító:",
- "Share it:" : "Ossza meg:",
+ "Share it:" : "Oszd meg:",
"Add to your website" : "Adja hozzá saját weboldalához",
"Share with me via Nextcloud" : "Ossza meg velem Nextcloud-on keresztül",
"HTML Code:" : "HTML kód:"
diff --git a/apps/federatedfilesharing/l10n/hu_HU.json b/apps/federatedfilesharing/l10n/hu_HU.json
index 7d22c618ecb..45b0aac25a8 100644
--- a/apps/federatedfilesharing/l10n/hu_HU.json
+++ b/apps/federatedfilesharing/l10n/hu_HU.json
@@ -14,7 +14,7 @@
"Couldn't establish a federated share." : "Egy egyesített megosztás nem hozható létre.",
"Couldn't establish a federated share, maybe the password was wrong." : "Egy egyesített megosztás nem hozható létre, lehet hogy nem megfelelő a jelszó.",
"Federated Share request was successful, you will receive a invitation. Check your notifications." : "Az egyesített megosztási kérés sikeres volt, kapni fogsz egy értesítést. Ellenőrizd az értesítéseidet.",
- "The mountpoint name contains invalid characters." : "A csatlakozási pont neve érvénytelen karaktereket tartalmaz ",
+ "The mountpoint name contains invalid characters." : "A csatolási pont neve érvénytelen karaktereket tartalmaz ",
"Not allowed to create a federated share with the owner." : "A tulajdonossal nem lehet egyesített megosztást létrehozni.",
"Invalid or untrusted SSL certificate" : "Érvénytelen vagy nem megbízható az SSL tanúsítvány",
"Could not authenticate to remote share, password might be wrong" : "Nem sikerült az azonosítás a távoli megosztáshoz. Lehet, hogy rossz a jelszó.",
@@ -38,7 +38,7 @@
"Allow users on this server to receive shares from other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől",
"Federated Cloud" : "Egyesített felhő",
"Your Federated Cloud ID:" : "Egyesített felhő azonosító:",
- "Share it:" : "Ossza meg:",
+ "Share it:" : "Oszd meg:",
"Add to your website" : "Adja hozzá saját weboldalához",
"Share with me via Nextcloud" : "Ossza meg velem Nextcloud-on keresztül",
"HTML Code:" : "HTML kód:"
diff --git a/apps/federatedfilesharing/lib/AppInfo/Application.php b/apps/federatedfilesharing/lib/AppInfo/Application.php
index b470bb3e584..c37cb9b87bb 100644
--- a/apps/federatedfilesharing/lib/AppInfo/Application.php
+++ b/apps/federatedfilesharing/lib/AppInfo/Application.php
@@ -29,7 +29,6 @@ use OCA\FederatedFileSharing\AddressHandler;
use OCA\FederatedFileSharing\Controller\RequestHandlerController;
use OCA\FederatedFileSharing\FederatedShareProvider;
use OCA\FederatedFileSharing\Notifications;
-use OCA\FederatedFileSharing\RequestHandler;
use OCP\AppFramework\App;
class Application extends App {
diff --git a/apps/federatedfilesharing/settings-personal.php b/apps/federatedfilesharing/settings-personal.php
index 92f96d1ba40..522cb297898 100644
--- a/apps/federatedfilesharing/settings-personal.php
+++ b/apps/federatedfilesharing/settings-personal.php
@@ -24,7 +24,6 @@
*/
use OCA\FederatedFileSharing\AppInfo\Application;
-use OCA\Theming\Template;
\OC_Util::checkLoggedIn();
diff --git a/apps/federatedfilesharing/tests/TestCase.php b/apps/federatedfilesharing/tests/TestCase.php
index 22d41038e6c..f8a47f27336 100644
--- a/apps/federatedfilesharing/tests/TestCase.php
+++ b/apps/federatedfilesharing/tests/TestCase.php
@@ -23,7 +23,6 @@
namespace OCA\FederatedFileSharing\Tests;
use OC\Files\Filesystem;
-use OCA\Files\Share;
/**
* Class Test_Files_Sharing_Base
diff --git a/apps/files/l10n/ar.js b/apps/files/l10n/ar.js
index 9f4d87fcfd6..e51b7051a26 100644
--- a/apps/files/l10n/ar.js
+++ b/apps/files/l10n/ar.js
@@ -34,6 +34,12 @@ OC.L10N.register(
"Could not get result from server." : "تعذر الحصول على نتيجة من الخادم",
"Uploading..." : "جاري الرفع...",
"..." : "...",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} ساعة متبقية",
+ "{hours}:{minutes}h" : "{hours}:{minutes}س",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} دقيقة متبقية",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}د",
+ "{seconds} second{plural_s} left" : "{seconds} ثواني متبقية",
+ "{seconds}s" : "{seconds}ث",
"Any moment now..." : "في أي لحظة الان...",
"Soon..." : "قريبا...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} من {totalSize} ({bitrate})",
@@ -49,6 +55,12 @@ OC.L10N.register(
"Pending" : "قيد الانتظار",
"Unable to determine date" : "تعذر تحديد التاريخ",
"This operation is forbidden" : "هذة العملية ممنوعة ",
+ "This directory is unavailable, please check the logs or contact the administrator" : "هذا المجلد غير متوفر, الرجاء مراجعة سجل الأخطاء أو الاتصال بمدير النظام",
+ "Could not move \"{file}\", target exists" : "لا يمكن نقل \"{file}\", الملف موجود بالفعل هناك",
+ "Could not move \"{file}\"" : "لا يمكن نقل \"{file}\"",
+ "{newName} already exists" : "{newname} موجود مسبقاً",
+ "Could not rename \"{fileName}\", it does not exist any more" : "لا يمكن اعادة تسمية \"{fileName}\", لانه لم يعد موجود",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "الاسم \"{targetName}\" مستخدم من قبل في المجلد \"{dir}\". الرجاء اختيار اسم اخر.",
"Could not rename \"{fileName}\"" : "إعادة تسمية الملف \"{fileName}\" لم تنجح",
"Could not create file \"{file}\"" : "لا يمكن إنشاء الملف\"{file}\"",
"Could not create file \"{file}\" because it already exists" : "لا يمكن إنشاء الملف \"{file}\" فهو موجود بالفعل",
@@ -62,6 +74,7 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["لا يوجد مجلدات %n","1 مجلد %n","2 مجلد %n","عدد قليل من مجلدات %n","عدد كبير من مجلدات %n","مجلدات %n"],
"_%n file_::_%n files_" : ["لا يوجد ملفات %n","ملف %n","2 ملف %n","قليل من ملفات %n","الكثير من ملفات %n"," ملفات %n"],
"{dirs} and {files}" : "{dirs} و {files}",
+ "_including %n hidden_::_including %n hidden_" : ["يشمل %n مخفي","يشمل %n مخفي","يشمل %n مخفي","يشمل %n مخفي","يشمل %n مخفي","يشمل %n مخفي"],
"You don’t have permission to upload or create files here" : "لا تملك الصلاحية لرفع او انشاء ملف هنا ",
"_Uploading %n file_::_Uploading %n files_" : ["لا يوجد ملفات %n لتحميلها","تحميل 1 ملف %n","تحميل 2 ملف %n","يتم تحميل عدد قليل من ملفات %n","يتم تحميل عدد كبير من ملفات %n","يتم تحميل ملفات %n"],
"New" : "جديد",
@@ -72,6 +85,7 @@ OC.L10N.register(
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "المساحة التخزينية لـ {owner} ممتلئة تقريبا ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "مساحتك التخزينية امتلأت تقريبا ",
"Path" : "المسار",
+ "Favorited" : "المفضلة",
"Favorite" : "المفضلة",
"Folder" : "مجلد",
"New folder" : "مجلد جديد",
@@ -96,8 +110,11 @@ OC.L10N.register(
"Maximum upload size" : "الحد الأقصى لحجم الملفات التي يمكن رفعها",
"max. possible: " : "الحد الأقصى المسموح به",
"Save" : "حفظ",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "باستخدام PHP-FPM قد يستغرق 5 دقائق لتطبيق التغيرات.",
"Settings" : "إعدادات",
+ "Show hidden files" : "عرض الملفات المخفية",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "استخدم هذا الرابط <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">للوصول الى ملفاتك عبر WebDAV</a>",
"No files in here" : "لا يوجد ملفات هنا ",
"Upload some content or sync with your devices!" : "ارفع بعض المحتوي او زامن مع اجهزتك !",
"No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
@@ -107,6 +124,8 @@ OC.L10N.register(
"No favorites" : "لا يوجد مفضلات ",
"Files and folders you mark as favorite will show up here" : "الملفات والمجلدات التي حددتها كامفضلة سوف تظهر هنا ",
"Text file" : "ملف نصي",
- "New text file.txt" : "ملف نصي جديد fille.txt"
+ "New text file.txt" : "ملف نصي جديد fille.txt",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "استخدم هذا الرابط <a href=\"%s\" target=\"_blank\">للوصول الى ملفاتك عبر WebDAV</a>",
+ "Cancel upload" : "إلغاء الرفع"
},
"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/apps/files/l10n/ar.json b/apps/files/l10n/ar.json
index 65999aafd46..4940be29188 100644
--- a/apps/files/l10n/ar.json
+++ b/apps/files/l10n/ar.json
@@ -32,6 +32,12 @@
"Could not get result from server." : "تعذر الحصول على نتيجة من الخادم",
"Uploading..." : "جاري الرفع...",
"..." : "...",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} ساعة متبقية",
+ "{hours}:{minutes}h" : "{hours}:{minutes}س",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} دقيقة متبقية",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}د",
+ "{seconds} second{plural_s} left" : "{seconds} ثواني متبقية",
+ "{seconds}s" : "{seconds}ث",
"Any moment now..." : "في أي لحظة الان...",
"Soon..." : "قريبا...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} من {totalSize} ({bitrate})",
@@ -47,6 +53,12 @@
"Pending" : "قيد الانتظار",
"Unable to determine date" : "تعذر تحديد التاريخ",
"This operation is forbidden" : "هذة العملية ممنوعة ",
+ "This directory is unavailable, please check the logs or contact the administrator" : "هذا المجلد غير متوفر, الرجاء مراجعة سجل الأخطاء أو الاتصال بمدير النظام",
+ "Could not move \"{file}\", target exists" : "لا يمكن نقل \"{file}\", الملف موجود بالفعل هناك",
+ "Could not move \"{file}\"" : "لا يمكن نقل \"{file}\"",
+ "{newName} already exists" : "{newname} موجود مسبقاً",
+ "Could not rename \"{fileName}\", it does not exist any more" : "لا يمكن اعادة تسمية \"{fileName}\", لانه لم يعد موجود",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "الاسم \"{targetName}\" مستخدم من قبل في المجلد \"{dir}\". الرجاء اختيار اسم اخر.",
"Could not rename \"{fileName}\"" : "إعادة تسمية الملف \"{fileName}\" لم تنجح",
"Could not create file \"{file}\"" : "لا يمكن إنشاء الملف\"{file}\"",
"Could not create file \"{file}\" because it already exists" : "لا يمكن إنشاء الملف \"{file}\" فهو موجود بالفعل",
@@ -60,6 +72,7 @@
"_%n folder_::_%n folders_" : ["لا يوجد مجلدات %n","1 مجلد %n","2 مجلد %n","عدد قليل من مجلدات %n","عدد كبير من مجلدات %n","مجلدات %n"],
"_%n file_::_%n files_" : ["لا يوجد ملفات %n","ملف %n","2 ملف %n","قليل من ملفات %n","الكثير من ملفات %n"," ملفات %n"],
"{dirs} and {files}" : "{dirs} و {files}",
+ "_including %n hidden_::_including %n hidden_" : ["يشمل %n مخفي","يشمل %n مخفي","يشمل %n مخفي","يشمل %n مخفي","يشمل %n مخفي","يشمل %n مخفي"],
"You don’t have permission to upload or create files here" : "لا تملك الصلاحية لرفع او انشاء ملف هنا ",
"_Uploading %n file_::_Uploading %n files_" : ["لا يوجد ملفات %n لتحميلها","تحميل 1 ملف %n","تحميل 2 ملف %n","يتم تحميل عدد قليل من ملفات %n","يتم تحميل عدد كبير من ملفات %n","يتم تحميل ملفات %n"],
"New" : "جديد",
@@ -70,6 +83,7 @@
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "المساحة التخزينية لـ {owner} ممتلئة تقريبا ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "مساحتك التخزينية امتلأت تقريبا ",
"Path" : "المسار",
+ "Favorited" : "المفضلة",
"Favorite" : "المفضلة",
"Folder" : "مجلد",
"New folder" : "مجلد جديد",
@@ -94,8 +108,11 @@
"Maximum upload size" : "الحد الأقصى لحجم الملفات التي يمكن رفعها",
"max. possible: " : "الحد الأقصى المسموح به",
"Save" : "حفظ",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "باستخدام PHP-FPM قد يستغرق 5 دقائق لتطبيق التغيرات.",
"Settings" : "إعدادات",
+ "Show hidden files" : "عرض الملفات المخفية",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "استخدم هذا الرابط <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">للوصول الى ملفاتك عبر WebDAV</a>",
"No files in here" : "لا يوجد ملفات هنا ",
"Upload some content or sync with your devices!" : "ارفع بعض المحتوي او زامن مع اجهزتك !",
"No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
@@ -105,6 +122,8 @@
"No favorites" : "لا يوجد مفضلات ",
"Files and folders you mark as favorite will show up here" : "الملفات والمجلدات التي حددتها كامفضلة سوف تظهر هنا ",
"Text file" : "ملف نصي",
- "New text file.txt" : "ملف نصي جديد fille.txt"
+ "New text file.txt" : "ملف نصي جديد fille.txt",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "استخدم هذا الرابط <a href=\"%s\" target=\"_blank\">للوصول الى ملفاتك عبر WebDAV</a>",
+ "Cancel upload" : "إلغاء الرفع"
},"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/apps/files/l10n/hu_HU.js b/apps/files/l10n/hu_HU.js
index c22252607a9..e5d1c1a13b6 100644
--- a/apps/files/l10n/hu_HU.js
+++ b/apps/files/l10n/hu_HU.js
@@ -19,11 +19,10 @@ OC.L10N.register(
"Upload failed. Could not find uploaded file" : "A feltöltés nem sikerült. Nem található a feltöltött fájl.",
"Upload failed. Could not get file info." : "A feltöltés nem sikerült. A fájl leíró információk nem érhetők el.",
"Invalid directory." : "Érvénytelen mappa.",
- "Files" : "Fájlkezelő",
+ "Files" : "Fájlok",
"All files" : "Az összes fájl",
"Recent" : "Legutóbbi",
"File could not be found" : "Fájl nem található",
- "Home" : "Otthoni",
"Close" : "Bezárás",
"Favorites" : "Kedvencek",
"Upload cancelled." : "A feltöltést megszakítottuk.",
@@ -38,7 +37,7 @@ OC.L10N.register(
"{hours}:{minutes}h" : "{hours}:{minutes}ó",
"{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} perc{plural_s} maradt hátra",
"{minutes}:{seconds}m" : "{minutes}:{seconds}p",
- "{seconds} second{plural_s} left" : "{seconds} másodperc{plural_s} maradt hátra",
+ "{seconds} second{plural_s} left" : "{seconds} másodperc maradt hátra",
"{seconds}s" : "{seconds}mp",
"Any moment now..." : "Mostmár bármelyik pillanatban...",
"Soon..." : "Hamarosan...",
diff --git a/apps/files/l10n/hu_HU.json b/apps/files/l10n/hu_HU.json
index 95b67095354..e22c1c4185c 100644
--- a/apps/files/l10n/hu_HU.json
+++ b/apps/files/l10n/hu_HU.json
@@ -17,11 +17,10 @@
"Upload failed. Could not find uploaded file" : "A feltöltés nem sikerült. Nem található a feltöltött fájl.",
"Upload failed. Could not get file info." : "A feltöltés nem sikerült. A fájl leíró információk nem érhetők el.",
"Invalid directory." : "Érvénytelen mappa.",
- "Files" : "Fájlkezelő",
+ "Files" : "Fájlok",
"All files" : "Az összes fájl",
"Recent" : "Legutóbbi",
"File could not be found" : "Fájl nem található",
- "Home" : "Otthoni",
"Close" : "Bezárás",
"Favorites" : "Kedvencek",
"Upload cancelled." : "A feltöltést megszakítottuk.",
@@ -36,7 +35,7 @@
"{hours}:{minutes}h" : "{hours}:{minutes}ó",
"{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} perc{plural_s} maradt hátra",
"{minutes}:{seconds}m" : "{minutes}:{seconds}p",
- "{seconds} second{plural_s} left" : "{seconds} másodperc{plural_s} maradt hátra",
+ "{seconds} second{plural_s} left" : "{seconds} másodperc maradt hátra",
"{seconds}s" : "{seconds}mp",
"Any moment now..." : "Mostmár bármelyik pillanatban...",
"Soon..." : "Hamarosan...",
diff --git a/apps/files_external/l10n/hu_HU.js b/apps/files_external/l10n/hu_HU.js
index 4bfe55fd4bf..dd71fde1e5b 100644
--- a/apps/files_external/l10n/hu_HU.js
+++ b/apps/files_external/l10n/hu_HU.js
@@ -1,41 +1,70 @@
OC.L10N.register(
"files_external",
{
+ "Please provide a valid app key and secret." : "Kérlek adj meg egy érvényes alkalmazás kulcsot és jelszót.",
+ "Step 1 failed. Exception: %s" : "1. lépés sikertelen. Kivétel: %s",
+ "Step 2 failed. Exception: %s" : "2. lépés sikertelen. Kivétel: %s",
"External storage" : "Külső tárolók",
+ "Dropbox App Configuration" : "Dropbox alkalmazás beállítás",
+ "Google Drive App Configuration" : "Google Drive alkalmazás beállítás",
"Personal" : "Személyes",
"System" : "Rendszer",
"Grant access" : "Megadom a hozzáférést",
+ "Error configuring OAuth1" : "OAuth1 konfigurálási hiba",
+ "Error configuring OAuth2" : "OAuth2 konfigurálási hiba",
"Generate keys" : "Kulcsok generálása",
"Error generating key pair" : "Hiba történt a kulcspár generálása közben",
"All users. Type to select user or group." : "Összes felhasználó. Írj be egy felhasználót vagy csoportot.",
"(group)" : "(csoport)",
"Admin defined" : "Adminisztrátor definiálva",
"Saved" : "Elmentve",
+ "Saving..." : "Mentés...",
+ "Save" : "Mentés",
"Empty response from the server" : "Üres válasz a szervertől",
"Couldn't access. Please logout and login to activate this mount point" : "Nem férhető hozzá. Kérjük próbálj meg ki- és bejelentkezni a csatolási pont aktiválásához.",
"Couldn't get the information from the ownCloud server: {code} {type}" : "Nem sikerült lekérdezni az információkat az ownCloud szerverről: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Nem lehet letölteni a külső csatolási pontok listáját: {type}",
"There was an error with message: " : "Hiba történt ezzel az üzenettel:",
"External mount error" : "Külső csatolási hiba",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Néhány beállított külső csatolási pont nincs kapcsolatban. További információkért kattints a piros sor(ok)ra.",
+ "Please enter the credentials for the {mount} mount" : "Kérlek add meg a következő csatolás azonosítóit: {mount}",
"Username" : "Felhasználónév",
"Password" : "Jelszó",
- "Save" : "Mentés",
+ "Credentials saved" : "Azonosítók mentve",
+ "Credentials saving failed" : "Azonosítók mentése sikertelen",
+ "Credentials required" : "Azonosító szükséges",
+ "Storage with id \"%i\" not found" : "A következő azonosítójú tároló nem található: \"%i\"",
+ "Invalid mount point" : "Érvénytelen csatolási pont",
+ "Insufficient data: %s" : "Nem elegendő adat: %s",
"%s" : "%s",
+ "Storage with id \"%i\" is not user editable" : "A következő azonosítójú tároló a felhasználó számára nem szerkeszthető: \"%i\"",
"Access key" : "Hozzáférési kulcs",
"Secret key" : "Titkos kulcs",
+ "Builtin" : "Beépített",
"None" : "Egyik sem",
- "App key" : "App kulcs",
- "App secret" : "App titkos kulcs",
- "Client secret" : "Kliens titkos",
+ "OAuth1" : "OAuth1",
+ "App key" : "Alkalmazás kulcs",
+ "App secret" : "Alkalmazás titkos kulcs",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "Ügyfél ID",
+ "Client secret" : "Kliens titok",
+ "OpenStack" : "OpenStack",
+ "Tenant name" : "Bérlő neve",
+ "Rackspace" : "Rackspace",
"API key" : "API kulcs",
+ "Global credentials" : "Globális azonosítók",
+ "Log-in credentials, save in database" : "Bejelentkezési azonosítók, mentés az adatbázisban",
"Username and password" : "Felhasználónév és jelszó",
- "RSA public key" : "RSA publikus kulcs",
- "Public key" : "Publikus kulcs",
+ "Log-in credentials, save in session" : "Bejelentkezési azonosítók, mentés az munkamenetben",
+ "User entered, store in database" : "Felhasználó megadva, tárolás az adatbázisban",
+ "RSA public key" : "RSA nyilvános kulcs",
+ "Public key" : "Nyilvános kulcs",
"Amazon S3" : "Amazon S3",
- "Bucket" : "Bucket",
"Hostname" : "Hosztnév",
"Port" : "Port",
"Region" : "Megye",
"Enable SSL" : "SSL engedélyezése",
+ "Enable Path Style" : "Útvonal stílus engedélyezés",
"WebDAV" : "WebDAV",
"URL" : "URL",
"Remote subfolder" : "Távoli alkönyvtár",
@@ -47,7 +76,7 @@ OC.L10N.register(
"Google Drive" : "Google Drive",
"Local" : "Helyi",
"Location" : "Hely",
- "ownCloud" : "ownCloud",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Gyökér",
"SFTP with secret key login" : "SFTP titkos kulcs belépéssel",
@@ -56,30 +85,40 @@ OC.L10N.register(
"Domain" : "Domain",
"SMB / CIFS using OC login" : "SMB / CIFS OC belépéssel",
"Username as share" : "Felhasználónév és megosztás",
+ "OpenStack Object Storage" : "OpenStack Object Storage",
"Service name" : "Szolgáltatás neve",
"Request timeout (seconds)" : "Időtúllépés (másodperc)",
- "<b>Note:</b> " : "<b>Megjegyzés:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> A cURL támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> Az FTP támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> %s nincs telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "External storages" : "Külső tárolók",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "A cURL támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Az FTP támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "%s nincs telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
"No external storage configured" : "Nincs külső tároló beállítva.",
"You can add external storages in the personal settings" : "Hozzáadhatsz külső tárolókat a személyes beállítások közt.",
"Name" : "Név",
"Storage type" : "Tároló típusa",
+ "Scope" : "Hatáskör",
"Enable encryption" : "Titkosítás engedélyezése",
"Enable previews" : "Előnézet engedélyezése",
+ "Enable sharing" : "Megosztás engedélyezése",
"Check for changes" : "Változások keresése",
"Never" : "Soha",
"Once every direct access" : "Minden közvetlen elérésnél",
- "External Storage" : "Külső tárolási szolgáltatások becsatolása",
- "Folder name" : "Mappanév",
+ "Folder name" : "Mappa neve",
"Authentication" : "Azonisítás",
"Configuration" : "Beállítások",
"Available for" : "Elérhető számukra",
"Add storage" : "Tároló becsatolása",
"Advanced settings" : "Haladó beállítások",
"Delete" : "Törlés",
- "Allow users to mount external storage" : "Külső tárolók engedélyezése a felhasználók részére",
- "Allow users to mount the following external storage" : "A felhasználók számára engedélyezett külső tárolók:"
+ "Allow users to mount external storage" : "Külső tárolók csatolásának engedélyezése a felhasználók részére",
+ "Allow users to mount the following external storage" : "A felhasználók számára engedélyezett külső tárolók csatolása:",
+ "Access granted" : "Hozzáférés biztosítva",
+ "Global Credentials" : "Globális azonosítók",
+ "ownCloud" : "ownCloud",
+ "<b>Note:</b> " : "<b>Megjegyzés:</b>",
+ "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> A cURL támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> Az FTP támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> %s nincs telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "External Storage" : "Külső tárolási szolgáltatások becsatolása"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/hu_HU.json b/apps/files_external/l10n/hu_HU.json
index 9efbacb48ce..70d5835582a 100644
--- a/apps/files_external/l10n/hu_HU.json
+++ b/apps/files_external/l10n/hu_HU.json
@@ -1,39 +1,68 @@
{ "translations": {
+ "Please provide a valid app key and secret." : "Kérlek adj meg egy érvényes alkalmazás kulcsot és jelszót.",
+ "Step 1 failed. Exception: %s" : "1. lépés sikertelen. Kivétel: %s",
+ "Step 2 failed. Exception: %s" : "2. lépés sikertelen. Kivétel: %s",
"External storage" : "Külső tárolók",
+ "Dropbox App Configuration" : "Dropbox alkalmazás beállítás",
+ "Google Drive App Configuration" : "Google Drive alkalmazás beállítás",
"Personal" : "Személyes",
"System" : "Rendszer",
"Grant access" : "Megadom a hozzáférést",
+ "Error configuring OAuth1" : "OAuth1 konfigurálási hiba",
+ "Error configuring OAuth2" : "OAuth2 konfigurálási hiba",
"Generate keys" : "Kulcsok generálása",
"Error generating key pair" : "Hiba történt a kulcspár generálása közben",
"All users. Type to select user or group." : "Összes felhasználó. Írj be egy felhasználót vagy csoportot.",
"(group)" : "(csoport)",
"Admin defined" : "Adminisztrátor definiálva",
"Saved" : "Elmentve",
+ "Saving..." : "Mentés...",
+ "Save" : "Mentés",
"Empty response from the server" : "Üres válasz a szervertől",
"Couldn't access. Please logout and login to activate this mount point" : "Nem férhető hozzá. Kérjük próbálj meg ki- és bejelentkezni a csatolási pont aktiválásához.",
"Couldn't get the information from the ownCloud server: {code} {type}" : "Nem sikerült lekérdezni az információkat az ownCloud szerverről: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Nem lehet letölteni a külső csatolási pontok listáját: {type}",
"There was an error with message: " : "Hiba történt ezzel az üzenettel:",
"External mount error" : "Külső csatolási hiba",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Néhány beállított külső csatolási pont nincs kapcsolatban. További információkért kattints a piros sor(ok)ra.",
+ "Please enter the credentials for the {mount} mount" : "Kérlek add meg a következő csatolás azonosítóit: {mount}",
"Username" : "Felhasználónév",
"Password" : "Jelszó",
- "Save" : "Mentés",
+ "Credentials saved" : "Azonosítók mentve",
+ "Credentials saving failed" : "Azonosítók mentése sikertelen",
+ "Credentials required" : "Azonosító szükséges",
+ "Storage with id \"%i\" not found" : "A következő azonosítójú tároló nem található: \"%i\"",
+ "Invalid mount point" : "Érvénytelen csatolási pont",
+ "Insufficient data: %s" : "Nem elegendő adat: %s",
"%s" : "%s",
+ "Storage with id \"%i\" is not user editable" : "A következő azonosítójú tároló a felhasználó számára nem szerkeszthető: \"%i\"",
"Access key" : "Hozzáférési kulcs",
"Secret key" : "Titkos kulcs",
+ "Builtin" : "Beépített",
"None" : "Egyik sem",
- "App key" : "App kulcs",
- "App secret" : "App titkos kulcs",
- "Client secret" : "Kliens titkos",
+ "OAuth1" : "OAuth1",
+ "App key" : "Alkalmazás kulcs",
+ "App secret" : "Alkalmazás titkos kulcs",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "Ügyfél ID",
+ "Client secret" : "Kliens titok",
+ "OpenStack" : "OpenStack",
+ "Tenant name" : "Bérlő neve",
+ "Rackspace" : "Rackspace",
"API key" : "API kulcs",
+ "Global credentials" : "Globális azonosítók",
+ "Log-in credentials, save in database" : "Bejelentkezési azonosítók, mentés az adatbázisban",
"Username and password" : "Felhasználónév és jelszó",
- "RSA public key" : "RSA publikus kulcs",
- "Public key" : "Publikus kulcs",
+ "Log-in credentials, save in session" : "Bejelentkezési azonosítók, mentés az munkamenetben",
+ "User entered, store in database" : "Felhasználó megadva, tárolás az adatbázisban",
+ "RSA public key" : "RSA nyilvános kulcs",
+ "Public key" : "Nyilvános kulcs",
"Amazon S3" : "Amazon S3",
- "Bucket" : "Bucket",
"Hostname" : "Hosztnév",
"Port" : "Port",
"Region" : "Megye",
"Enable SSL" : "SSL engedélyezése",
+ "Enable Path Style" : "Útvonal stílus engedélyezés",
"WebDAV" : "WebDAV",
"URL" : "URL",
"Remote subfolder" : "Távoli alkönyvtár",
@@ -45,7 +74,7 @@
"Google Drive" : "Google Drive",
"Local" : "Helyi",
"Location" : "Hely",
- "ownCloud" : "ownCloud",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Gyökér",
"SFTP with secret key login" : "SFTP titkos kulcs belépéssel",
@@ -54,30 +83,40 @@
"Domain" : "Domain",
"SMB / CIFS using OC login" : "SMB / CIFS OC belépéssel",
"Username as share" : "Felhasználónév és megosztás",
+ "OpenStack Object Storage" : "OpenStack Object Storage",
"Service name" : "Szolgáltatás neve",
"Request timeout (seconds)" : "Időtúllépés (másodperc)",
- "<b>Note:</b> " : "<b>Megjegyzés:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> A cURL támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> Az FTP támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> %s nincs telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "External storages" : "Külső tárolók",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "A cURL támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Az FTP támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "%s nincs telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
"No external storage configured" : "Nincs külső tároló beállítva.",
"You can add external storages in the personal settings" : "Hozzáadhatsz külső tárolókat a személyes beállítások közt.",
"Name" : "Név",
"Storage type" : "Tároló típusa",
+ "Scope" : "Hatáskör",
"Enable encryption" : "Titkosítás engedélyezése",
"Enable previews" : "Előnézet engedélyezése",
+ "Enable sharing" : "Megosztás engedélyezése",
"Check for changes" : "Változások keresése",
"Never" : "Soha",
"Once every direct access" : "Minden közvetlen elérésnél",
- "External Storage" : "Külső tárolási szolgáltatások becsatolása",
- "Folder name" : "Mappanév",
+ "Folder name" : "Mappa neve",
"Authentication" : "Azonisítás",
"Configuration" : "Beállítások",
"Available for" : "Elérhető számukra",
"Add storage" : "Tároló becsatolása",
"Advanced settings" : "Haladó beállítások",
"Delete" : "Törlés",
- "Allow users to mount external storage" : "Külső tárolók engedélyezése a felhasználók részére",
- "Allow users to mount the following external storage" : "A felhasználók számára engedélyezett külső tárolók:"
+ "Allow users to mount external storage" : "Külső tárolók csatolásának engedélyezése a felhasználók részére",
+ "Allow users to mount the following external storage" : "A felhasználók számára engedélyezett külső tárolók csatolása:",
+ "Access granted" : "Hozzáférés biztosítva",
+ "Global Credentials" : "Globális azonosítók",
+ "ownCloud" : "ownCloud",
+ "<b>Note:</b> " : "<b>Megjegyzés:</b>",
+ "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> A cURL támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> Az FTP támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> %s nincs telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "External Storage" : "Külső tárolási szolgáltatások becsatolása"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/appinfo/routes.php b/apps/files_sharing/appinfo/routes.php
index de6967c7d63..267e53829da 100644
--- a/apps/files_sharing/appinfo/routes.php
+++ b/apps/files_sharing/appinfo/routes.php
@@ -77,6 +77,39 @@ $application->registerRoutes($this, [
'url' => '/api/v1/sharees',
'verb' => 'GET',
],
+ /*
+ * Remote Shares
+ */
+ [
+ 'name' => 'Remote#getShares',
+ 'url' => '/api/v1/remote_shares',
+ 'verb' => 'GET',
+ ],
+ [
+ 'name' => 'Remote#getOpenShares',
+ 'url' => '/api/v1/remote_shares/pending',
+ 'verb' => 'GET',
+ ],
+ [
+ 'name' => 'Remote#acceptShare',
+ 'url' => '/api/v1/remote_shares/pending/{id}',
+ 'verb' => 'POST',
+ ],
+ [
+ 'name' => 'Remote#declineShare',
+ 'url' => '/api/v1/remote_shares/pending/{id}',
+ 'verb' => 'DELETE',
+ ],
+ [
+ 'name' => 'Remote#getShare',
+ 'url' => '/api/v1/remote_shares/{id}',
+ 'verb' => 'GET',
+ ],
+ [
+ 'name' => 'Remote#unshare',
+ 'url' => '/api/v1/remote_shares/{id}',
+ 'verb' => 'DELETE',
+ ],
],
]);
@@ -96,33 +129,3 @@ $this->create('sharing_external_shareinfo', '/shareinfo')
// OCS API
//TODO: SET: mail notification, waiting for PR #4689 to be accepted
-
-API::register('get',
- '/apps/files_sharing/api/v1/remote_shares',
- array('\OCA\Files_Sharing\API\Remote', 'getShares'),
- 'files_sharing');
-
-API::register('get',
- '/apps/files_sharing/api/v1/remote_shares/pending',
- array('\OCA\Files_Sharing\API\Remote', 'getOpenShares'),
- 'files_sharing');
-
-API::register('post',
- '/apps/files_sharing/api/v1/remote_shares/pending/{id}',
- array('\OCA\Files_Sharing\API\Remote', 'acceptShare'),
- 'files_sharing');
-
-API::register('delete',
- '/apps/files_sharing/api/v1/remote_shares/pending/{id}',
- array('\OCA\Files_Sharing\API\Remote', 'declineShare'),
- 'files_sharing');
-
-API::register('get',
- '/apps/files_sharing/api/v1/remote_shares/{id}',
- array('\OCA\Files_Sharing\API\Remote', 'getShare'),
- 'files_sharing');
-
-API::register('delete',
- '/apps/files_sharing/api/v1/remote_shares/{id}',
- array('\OCA\Files_Sharing\API\Remote', 'unshare'),
- 'files_sharing');
diff --git a/apps/files_sharing/l10n/hu_HU.js b/apps/files_sharing/l10n/hu_HU.js
index 873b53ce5ec..67ff550a88d 100644
--- a/apps/files_sharing/l10n/hu_HU.js
+++ b/apps/files_sharing/l10n/hu_HU.js
@@ -1,73 +1,133 @@
OC.L10N.register(
"files_sharing",
{
- "Server to server sharing is not enabled on this server" : "A kiszolgálók közötti megosztás nincs engedélyezve ezen a kiszolgálón",
- "The mountpoint name contains invalid characters." : "A csatlakozási pont neve érvénytelen karaktereket tartalmaz ",
- "Not allowed to create a federated share with the same user server" : "Nem lehet létrehozni egy egyesített megosztást azonos felhasználóval és szerverrel",
- "Invalid or untrusted SSL certificate" : "Érvénytelen vagy nem megbízható az SSL tanúsítvány",
- "Could not authenticate to remote share, password might be wrong" : "Nem sikerült az azonosítás a távoli megosztáshoz. Lehet, hogy rossz a jelszó.",
- "Storage not valid" : "Tároló nem érvényes",
- "Couldn't add remote share" : "A távoli megosztás nem hozható létre",
"Shared with you" : "Velem osztották meg",
"Shared with others" : "Én osztottam meg másokkal",
- "Shared by link" : "Linkkel osztottam meg",
+ "Shared by link" : "Hivatkozással osztottam meg",
"Nothing shared with you yet" : "Nincs még semmi megosztva Önnel",
- "Files and folders others share with you will show up here" : "Mások által megosztott fájlok itt jelennek meg",
+ "Files and folders others share with you will show up here" : "Mások által megosztott fájlok és mappák itt jelennek meg",
"Nothing shared yet" : "Nincs semmi megosztva",
- "Files and folders you share will show up here" : "Az Ön által megosztott fáljok itt jelennek meg",
- "No shared links" : "Nincs megosztott link",
- "Files and folders you share by link will show up here" : "Link-el megosztott fájljai itt jelennek meg",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Használatba kívánja venni a {name} távoli megosztást, amit a {owner}@{remote} címről kapott?",
- "Remote share" : "Távoli megosztás",
- "Remote share password" : "Jelszó a távoli megosztáshoz",
- "Cancel" : "Mégsem",
- "Add remote share" : "Távoli megosztás létrehozása",
- "You can upload into this folder" : "Ebbe a könyvtárba fel tud tölteni",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nem található ownCloud telepítés (7 vagy nagyobb verzió) itt {remote}",
- "Invalid ownCloud url" : "Érvénytelen ownCloud webcím",
- "Shared by" : "Megosztotta Önnel",
+ "Files and folders you share will show up here" : "Az Ön által megosztott fájlok és mappák itt jelennek meg",
+ "No shared links" : "Nincs megosztott hivatkozás",
+ "Files and folders you share by link will show up here" : "A hivatkozással megosztott fájlok és mappák itt jelennek meg",
+ "You can upload into this folder" : "Ebbe a mappába fel tud tölteni",
+ "No compatible server found at {remote}" : "Itt nem található kompatibilis szerver: {remote}",
+ "Invalid server URL" : "Érvénytelen szerver URL",
+ "Failed to add the public link to your Nextcloud" : "Nem sikerült hozzáadni a nyilvános hivatkozást a Nexcloudodhoz",
+ "No expiration date set" : "Nem lett beállítva lejárati dátum",
+ "Shared by" : "Megosztotta:",
"Sharing" : "Megosztás",
- "A file or folder has been <strong>shared</strong>" : "Fájl vagy könyvtár <strong>megosztása</strong>",
- "A file or folder was shared from <strong>another server</strong>" : "Egy fájl vagy könyvtár meg lett osztva egy <strong>másik szerverről</strong>",
- "A public shared file or folder was <strong>downloaded</strong>" : "Egy nyilvánosan megosztott fáljt vagy könyvtárat <strong>letöltöttek</strong>",
+ "Wrong share ID, share doesn't exist" : "Hibás megosztás ID, a megosztás nem létezik",
+ "could not delete share" : "a megosztás nem törölhető",
+ "Could not delete share" : "A megosztás nem törölhető",
+ "Please specify a file or folder path" : "Adj meg egy fájl vagy mappa útvonalat",
+ "Wrong path, file/folder doesn't exist" : "Hibás útvonal, a fájl/mappa nem létezik",
+ "Could not create share" : "A megosztás nem hozható létre",
+ "invalid permissions" : "érvénytelen jogosultságok",
+ "Please specify a valid user" : "Kérlek adj meg egy érvényes felhasználót",
+ "Group sharing is disabled by the administrator" : "A csoportos megosztást letiltotta az adminisztrátor",
+ "Please specify a valid group" : "Kérlek adj meg egy érvényes csoportot",
+ "Public link sharing is disabled by the administrator" : "A nyilvános hivatkozást megosztást letiltotta az adminisztrátor",
+ "Public upload disabled by the administrator" : "A nyilvános feltöltést letiltotta az adminisztrátor",
+ "Public upload is only possible for publicly shared folders" : "A nyilvános feltöltés csak a nyilvánosan megosztott mappákban lehetséges",
+ "Invalid date, date format must be YYYY-MM-DD" : "Érvénytelen dátum, a dátum csak YYYY-MM-DD formátumú lehet",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "%s megosztása sikertelen, mert a háttér rendszer nem engedélyezi a következő típusú megosztásokat: %s",
+ "Unknown share type" : "Ismeretlen megosztás típus",
+ "Not a directory" : "Nem könyvtár",
+ "Could not lock path" : "Az útvonal nem zárolható",
+ "Wrong or no update parameter given" : "Hibás vagy üres frissítési paraméter",
+ "Can't change permissions for public share links" : "Nem lehet módosítani a nyilvános megosztási hivatkozások jogosultságait",
+ "Cannot increase permissions" : "Nem lehet növelni az engedélyeket",
+ "A file or folder has been <strong>shared</strong>" : "Egy fájl vagy mappa <strong>megosztva</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Egy fájl vagy mappa meg lett osztva egy <strong>másik szerverről</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Egy nyilvánosan megosztott fáljt vagy mappát <strong>letöltöttek</strong>",
"You received a new remote share %2$s from %1$s" : "A %2$s távoli megosztás érkezett a %1$s -től",
"You received a new remote share from %s" : "Új távoli megosztás érkezett a %s -től",
"%1$s accepted remote share %2$s" : "%1$s elfogadta a távoli megosztást %2$s",
"%1$s declined remote share %2$s" : "%1$s visszavonta a távoli megosztást %2$s",
"%1$s unshared %2$s from you" : "%1$s megosztás visszavonva %2$s által",
- "Public shared folder %1$s was downloaded" : "Nyilvánosan megosztott könyvtár %1$s le lett töltve",
+ "Public shared folder %1$s was downloaded" : "%1$s nyilvánosan megosztott mappa le lett töltve",
"Public shared file %1$s was downloaded" : "Nyilvánosan megosztott fálj %1$s le lett töltve",
"You shared %1$s with %2$s" : "%1$s-t megosztottam ővele: %2$s",
"%2$s shared %1$s with %3$s" : "%2$s megosztotta ezt: %1$s, ővele: %3$s",
+ "You removed the share of %2$s for %1$s" : "Eltávolítottad %2$s következő megosztását: %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s eltávolította %3$s következő megosztását: %1$s",
"You shared %1$s with group %2$s" : "%1$s-t megosztottam ezzel a csoporttal: %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s megosztotta ezt: %1$s, ezzel a csoporttal: %3$s",
+ "You removed the share of group %2$s for %1$s" : "Eltávolítottad %2$s csoport %1$s megosztását",
+ "%2$s removed the share of group %3$s for %1$s" : "%2$s eltávolította %3$s csoport %1$s megosztását",
"%2$s shared %1$s via link" : "%2$s megosztotta ezt: %1$s, hivatkozással",
- "You shared %1$s via link" : "Megosztottam link segítségével: %1$s",
+ "You shared %1$s via link" : "Megosztottam hivatkozás segítségével: %1$s",
+ "You removed the public link for %1$s" : "Eltávolítottad %1$s nyilvános hivatkozását",
+ "%2$s removed the public link for %1$s" : "%2$s eltávolította %1$s nyilvános hivatkozását",
+ "Your public link for %1$s expired" : "%1$s nyilvános hivatkozásod lejárt",
+ "The public link of %2$s for %1$s expired" : "%2$s %1$s nyilvános hivatkozása lejárt",
"%2$s shared %1$s with you" : "%2$s megosztotta velem ezt: %1$s",
- "Downloaded via public link" : "Letöltve publikus hivatkozással",
+ "%2$s removed the share for %1$s" : "%2$s eltávolította %1$s megosztását",
+ "Downloaded via public link" : "Letöltve nyilvános hivatkozással",
"Shared with %2$s" : "Megosztva vele: %2$s",
"Shared with %3$s by %2$s" : "Megosztva vele: %3$s, megosztó: %2$s",
+ "Removed share for %2$s" : "%2$s megosztása eltávolítva",
+ "%2$s removed share for %3$s" : "%2$s eltávolította %3$s megosztását",
"Shared with group %2$s" : "Megosztva ezzel a csoporttal: %2$s",
"Shared with group %3$s by %2$s" : "Megosztva ezzel a csoporttal: %3$s, megosztó: %2$s",
+ "Removed share of group %2$s" : "%2$s csoport megosztása eltávolítva",
+ "%2$s removed share of group %3$s" : "%2$s eltávolította %3$s csoport megosztását",
"Shared via link by %2$s" : "Megosztva hivatkozással: %2$s",
- "Shared via public link" : "Megosztva publikus hivatkozással",
+ "Shared via public link" : "Megosztva nyilvános hivatkozással",
+ "Removed public link" : "Eltávolított nyilvános hivatkozás",
+ "%2$s removed public link" : "%2$s eltávolított egy nyilvános hivatkozást",
+ "Public link expired" : "Nyilvános hivatkozás lejárt",
+ "Public link of %2$s expired" : "%2$s nyilvános hivatkozása lejárt",
"Shared by %2$s" : "Megosztó: %2$s",
"Shares" : "Megosztások",
+ "Share API is disabled" : "Megosztás API letiltva",
"This share is password-protected" : "Ez egy jelszóval védett megosztás",
"The password is wrong. Try again." : "A megadott jelszó nem megfelelő. Próbálja újra!",
"Password" : "Jelszó",
- "No entries found in this folder" : "Nincsenek bejegyzések ebben a könyvtárban",
+ "No entries found in this folder" : "Nincsenek bejegyzések ebben a mappában",
"Name" : "Név",
"Share time" : "A megosztás időpontja",
- "Sorry, this link doesn’t seem to work anymore." : "Sajnos úgy tűnik, ez a link már nem működik.",
+ "Expiration date" : "Lejárati dátum",
+ "Sorry, this link doesn’t seem to work anymore." : "Sajnos úgy tűnik, ez a hivatkozás már nem működik.",
"Reasons might be:" : "Ennek az oka a következő lehet:",
- "the item was removed" : "az állományt időközben eltávolították",
- "the link expired" : "lejárt a link érvényességi ideje",
+ "the item was removed" : "az elem el lett távolítva",
+ "the link expired" : "lejárt a hivatkozás érvényességi ideje",
"sharing is disabled" : "letiltásra került a megosztás",
"For more info, please ask the person who sent this link." : "További információért forduljon ahhoz, aki ezt a linket küldte Önnek!",
- "Add to your ownCloud" : "Adjuk hozzá a saját ownCloudunkhoz",
+ "Add to your Nextcloud" : "Add hozzá a Nextcloudodhoz",
"Download" : "Letöltés",
"Download %s" : "%s letöltése",
- "Direct link" : "Közvetlen link"
+ "Direct link" : "Közvetlen hivatkozás",
+ "Upload files to %s" : "Fájlok felöltése ide: %s",
+ "Select or drop files" : "Válassz ki vagy dobj ide fájlokat",
+ "Uploading files…" : "Fájlok feltöltése...",
+ "Uploaded files:" : "Felöltött fájlok:",
+ "Server to server sharing is not enabled on this server" : "A szervertől-szerverig megosztás nem engedélyezett ezen a szerveren",
+ "The mountpoint name contains invalid characters." : "A csatolási pont neve érvénytelen karaktereket tartalmaz.",
+ "Not allowed to create a federated share with the same user server" : "Nem lehet létrehozni egy egyesített megosztást azonos felhasználóval és szerverrel",
+ "Invalid or untrusted SSL certificate" : "Érvénytelen vagy nem megbízható SSL certifikáció",
+ "Could not authenticate to remote share, password might be wrong" : "Nem sikerült az azonosítás a távoli megosztáshoz. Lehet, hogy rossz a jelszó.",
+ "Storage not valid" : "Tároló nem érvényes",
+ "Couldn't add remote share" : "Nem sikerült hozzáadni a távoli megosztást",
+ "Federated sharing" : "Egyesített megosztás",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Hozzá akarod adni {owner}@{remote} távoli megosztását: {name}?",
+ "Remote share" : "Távoli megosztás",
+ "Remote share password" : "Távoli megosztás jelszava",
+ "Cancel" : "Mégsem",
+ "Add remote share" : "Távoli megosztás hozzáadás",
+ "You received \"/%2$s\" as a remote share from %1$s" : "Kaptál egy távoli megosztást: \"/%2$s\", innen: %1$s",
+ "Accept" : "Elfogadás",
+ "Decline" : "Elutasítás",
+ "Federated Cloud Sharing" : "Egyesített felhő megosztás",
+ "Open documentation" : "Dokumentáció megnyitása",
+ "Allow users on this server to send shares to other servers" : "Engedélyezi ezen szerver felhasználóinak, hogy fájlokat osszanak meg más szerverekkel.",
+ "Allow users on this server to receive shares from other servers" : "Engedélyezi ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől",
+ "Federated Cloud" : "Egyesített felhő",
+ "Your Federated Cloud ID:" : "Egyesített felhő azonosító:",
+ "Share it:" : "Oszd meg:",
+ "Add to your website" : "Add hozzá a weboldaladhoz",
+ "Share with me via Nextcloud" : "Oszd meg velem a Nextcloudon",
+ "HTML Code:" : "HTML kód:"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/hu_HU.json b/apps/files_sharing/l10n/hu_HU.json
index 2e60829a09e..c755b3a7a78 100644
--- a/apps/files_sharing/l10n/hu_HU.json
+++ b/apps/files_sharing/l10n/hu_HU.json
@@ -1,71 +1,131 @@
{ "translations": {
- "Server to server sharing is not enabled on this server" : "A kiszolgálók közötti megosztás nincs engedélyezve ezen a kiszolgálón",
- "The mountpoint name contains invalid characters." : "A csatlakozási pont neve érvénytelen karaktereket tartalmaz ",
- "Not allowed to create a federated share with the same user server" : "Nem lehet létrehozni egy egyesített megosztást azonos felhasználóval és szerverrel",
- "Invalid or untrusted SSL certificate" : "Érvénytelen vagy nem megbízható az SSL tanúsítvány",
- "Could not authenticate to remote share, password might be wrong" : "Nem sikerült az azonosítás a távoli megosztáshoz. Lehet, hogy rossz a jelszó.",
- "Storage not valid" : "Tároló nem érvényes",
- "Couldn't add remote share" : "A távoli megosztás nem hozható létre",
"Shared with you" : "Velem osztották meg",
"Shared with others" : "Én osztottam meg másokkal",
- "Shared by link" : "Linkkel osztottam meg",
+ "Shared by link" : "Hivatkozással osztottam meg",
"Nothing shared with you yet" : "Nincs még semmi megosztva Önnel",
- "Files and folders others share with you will show up here" : "Mások által megosztott fájlok itt jelennek meg",
+ "Files and folders others share with you will show up here" : "Mások által megosztott fájlok és mappák itt jelennek meg",
"Nothing shared yet" : "Nincs semmi megosztva",
- "Files and folders you share will show up here" : "Az Ön által megosztott fáljok itt jelennek meg",
- "No shared links" : "Nincs megosztott link",
- "Files and folders you share by link will show up here" : "Link-el megosztott fájljai itt jelennek meg",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Használatba kívánja venni a {name} távoli megosztást, amit a {owner}@{remote} címről kapott?",
- "Remote share" : "Távoli megosztás",
- "Remote share password" : "Jelszó a távoli megosztáshoz",
- "Cancel" : "Mégsem",
- "Add remote share" : "Távoli megosztás létrehozása",
- "You can upload into this folder" : "Ebbe a könyvtárba fel tud tölteni",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nem található ownCloud telepítés (7 vagy nagyobb verzió) itt {remote}",
- "Invalid ownCloud url" : "Érvénytelen ownCloud webcím",
- "Shared by" : "Megosztotta Önnel",
+ "Files and folders you share will show up here" : "Az Ön által megosztott fájlok és mappák itt jelennek meg",
+ "No shared links" : "Nincs megosztott hivatkozás",
+ "Files and folders you share by link will show up here" : "A hivatkozással megosztott fájlok és mappák itt jelennek meg",
+ "You can upload into this folder" : "Ebbe a mappába fel tud tölteni",
+ "No compatible server found at {remote}" : "Itt nem található kompatibilis szerver: {remote}",
+ "Invalid server URL" : "Érvénytelen szerver URL",
+ "Failed to add the public link to your Nextcloud" : "Nem sikerült hozzáadni a nyilvános hivatkozást a Nexcloudodhoz",
+ "No expiration date set" : "Nem lett beállítva lejárati dátum",
+ "Shared by" : "Megosztotta:",
"Sharing" : "Megosztás",
- "A file or folder has been <strong>shared</strong>" : "Fájl vagy könyvtár <strong>megosztása</strong>",
- "A file or folder was shared from <strong>another server</strong>" : "Egy fájl vagy könyvtár meg lett osztva egy <strong>másik szerverről</strong>",
- "A public shared file or folder was <strong>downloaded</strong>" : "Egy nyilvánosan megosztott fáljt vagy könyvtárat <strong>letöltöttek</strong>",
+ "Wrong share ID, share doesn't exist" : "Hibás megosztás ID, a megosztás nem létezik",
+ "could not delete share" : "a megosztás nem törölhető",
+ "Could not delete share" : "A megosztás nem törölhető",
+ "Please specify a file or folder path" : "Adj meg egy fájl vagy mappa útvonalat",
+ "Wrong path, file/folder doesn't exist" : "Hibás útvonal, a fájl/mappa nem létezik",
+ "Could not create share" : "A megosztás nem hozható létre",
+ "invalid permissions" : "érvénytelen jogosultságok",
+ "Please specify a valid user" : "Kérlek adj meg egy érvényes felhasználót",
+ "Group sharing is disabled by the administrator" : "A csoportos megosztást letiltotta az adminisztrátor",
+ "Please specify a valid group" : "Kérlek adj meg egy érvényes csoportot",
+ "Public link sharing is disabled by the administrator" : "A nyilvános hivatkozást megosztást letiltotta az adminisztrátor",
+ "Public upload disabled by the administrator" : "A nyilvános feltöltést letiltotta az adminisztrátor",
+ "Public upload is only possible for publicly shared folders" : "A nyilvános feltöltés csak a nyilvánosan megosztott mappákban lehetséges",
+ "Invalid date, date format must be YYYY-MM-DD" : "Érvénytelen dátum, a dátum csak YYYY-MM-DD formátumú lehet",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "%s megosztása sikertelen, mert a háttér rendszer nem engedélyezi a következő típusú megosztásokat: %s",
+ "Unknown share type" : "Ismeretlen megosztás típus",
+ "Not a directory" : "Nem könyvtár",
+ "Could not lock path" : "Az útvonal nem zárolható",
+ "Wrong or no update parameter given" : "Hibás vagy üres frissítési paraméter",
+ "Can't change permissions for public share links" : "Nem lehet módosítani a nyilvános megosztási hivatkozások jogosultságait",
+ "Cannot increase permissions" : "Nem lehet növelni az engedélyeket",
+ "A file or folder has been <strong>shared</strong>" : "Egy fájl vagy mappa <strong>megosztva</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Egy fájl vagy mappa meg lett osztva egy <strong>másik szerverről</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Egy nyilvánosan megosztott fáljt vagy mappát <strong>letöltöttek</strong>",
"You received a new remote share %2$s from %1$s" : "A %2$s távoli megosztás érkezett a %1$s -től",
"You received a new remote share from %s" : "Új távoli megosztás érkezett a %s -től",
"%1$s accepted remote share %2$s" : "%1$s elfogadta a távoli megosztást %2$s",
"%1$s declined remote share %2$s" : "%1$s visszavonta a távoli megosztást %2$s",
"%1$s unshared %2$s from you" : "%1$s megosztás visszavonva %2$s által",
- "Public shared folder %1$s was downloaded" : "Nyilvánosan megosztott könyvtár %1$s le lett töltve",
+ "Public shared folder %1$s was downloaded" : "%1$s nyilvánosan megosztott mappa le lett töltve",
"Public shared file %1$s was downloaded" : "Nyilvánosan megosztott fálj %1$s le lett töltve",
"You shared %1$s with %2$s" : "%1$s-t megosztottam ővele: %2$s",
"%2$s shared %1$s with %3$s" : "%2$s megosztotta ezt: %1$s, ővele: %3$s",
+ "You removed the share of %2$s for %1$s" : "Eltávolítottad %2$s következő megosztását: %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s eltávolította %3$s következő megosztását: %1$s",
"You shared %1$s with group %2$s" : "%1$s-t megosztottam ezzel a csoporttal: %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s megosztotta ezt: %1$s, ezzel a csoporttal: %3$s",
+ "You removed the share of group %2$s for %1$s" : "Eltávolítottad %2$s csoport %1$s megosztását",
+ "%2$s removed the share of group %3$s for %1$s" : "%2$s eltávolította %3$s csoport %1$s megosztását",
"%2$s shared %1$s via link" : "%2$s megosztotta ezt: %1$s, hivatkozással",
- "You shared %1$s via link" : "Megosztottam link segítségével: %1$s",
+ "You shared %1$s via link" : "Megosztottam hivatkozás segítségével: %1$s",
+ "You removed the public link for %1$s" : "Eltávolítottad %1$s nyilvános hivatkozását",
+ "%2$s removed the public link for %1$s" : "%2$s eltávolította %1$s nyilvános hivatkozását",
+ "Your public link for %1$s expired" : "%1$s nyilvános hivatkozásod lejárt",
+ "The public link of %2$s for %1$s expired" : "%2$s %1$s nyilvános hivatkozása lejárt",
"%2$s shared %1$s with you" : "%2$s megosztotta velem ezt: %1$s",
- "Downloaded via public link" : "Letöltve publikus hivatkozással",
+ "%2$s removed the share for %1$s" : "%2$s eltávolította %1$s megosztását",
+ "Downloaded via public link" : "Letöltve nyilvános hivatkozással",
"Shared with %2$s" : "Megosztva vele: %2$s",
"Shared with %3$s by %2$s" : "Megosztva vele: %3$s, megosztó: %2$s",
+ "Removed share for %2$s" : "%2$s megosztása eltávolítva",
+ "%2$s removed share for %3$s" : "%2$s eltávolította %3$s megosztását",
"Shared with group %2$s" : "Megosztva ezzel a csoporttal: %2$s",
"Shared with group %3$s by %2$s" : "Megosztva ezzel a csoporttal: %3$s, megosztó: %2$s",
+ "Removed share of group %2$s" : "%2$s csoport megosztása eltávolítva",
+ "%2$s removed share of group %3$s" : "%2$s eltávolította %3$s csoport megosztását",
"Shared via link by %2$s" : "Megosztva hivatkozással: %2$s",
- "Shared via public link" : "Megosztva publikus hivatkozással",
+ "Shared via public link" : "Megosztva nyilvános hivatkozással",
+ "Removed public link" : "Eltávolított nyilvános hivatkozás",
+ "%2$s removed public link" : "%2$s eltávolított egy nyilvános hivatkozást",
+ "Public link expired" : "Nyilvános hivatkozás lejárt",
+ "Public link of %2$s expired" : "%2$s nyilvános hivatkozása lejárt",
"Shared by %2$s" : "Megosztó: %2$s",
"Shares" : "Megosztások",
+ "Share API is disabled" : "Megosztás API letiltva",
"This share is password-protected" : "Ez egy jelszóval védett megosztás",
"The password is wrong. Try again." : "A megadott jelszó nem megfelelő. Próbálja újra!",
"Password" : "Jelszó",
- "No entries found in this folder" : "Nincsenek bejegyzések ebben a könyvtárban",
+ "No entries found in this folder" : "Nincsenek bejegyzések ebben a mappában",
"Name" : "Név",
"Share time" : "A megosztás időpontja",
- "Sorry, this link doesn’t seem to work anymore." : "Sajnos úgy tűnik, ez a link már nem működik.",
+ "Expiration date" : "Lejárati dátum",
+ "Sorry, this link doesn’t seem to work anymore." : "Sajnos úgy tűnik, ez a hivatkozás már nem működik.",
"Reasons might be:" : "Ennek az oka a következő lehet:",
- "the item was removed" : "az állományt időközben eltávolították",
- "the link expired" : "lejárt a link érvényességi ideje",
+ "the item was removed" : "az elem el lett távolítva",
+ "the link expired" : "lejárt a hivatkozás érvényességi ideje",
"sharing is disabled" : "letiltásra került a megosztás",
"For more info, please ask the person who sent this link." : "További információért forduljon ahhoz, aki ezt a linket küldte Önnek!",
- "Add to your ownCloud" : "Adjuk hozzá a saját ownCloudunkhoz",
+ "Add to your Nextcloud" : "Add hozzá a Nextcloudodhoz",
"Download" : "Letöltés",
"Download %s" : "%s letöltése",
- "Direct link" : "Közvetlen link"
+ "Direct link" : "Közvetlen hivatkozás",
+ "Upload files to %s" : "Fájlok felöltése ide: %s",
+ "Select or drop files" : "Válassz ki vagy dobj ide fájlokat",
+ "Uploading files…" : "Fájlok feltöltése...",
+ "Uploaded files:" : "Felöltött fájlok:",
+ "Server to server sharing is not enabled on this server" : "A szervertől-szerverig megosztás nem engedélyezett ezen a szerveren",
+ "The mountpoint name contains invalid characters." : "A csatolási pont neve érvénytelen karaktereket tartalmaz.",
+ "Not allowed to create a federated share with the same user server" : "Nem lehet létrehozni egy egyesített megosztást azonos felhasználóval és szerverrel",
+ "Invalid or untrusted SSL certificate" : "Érvénytelen vagy nem megbízható SSL certifikáció",
+ "Could not authenticate to remote share, password might be wrong" : "Nem sikerült az azonosítás a távoli megosztáshoz. Lehet, hogy rossz a jelszó.",
+ "Storage not valid" : "Tároló nem érvényes",
+ "Couldn't add remote share" : "Nem sikerült hozzáadni a távoli megosztást",
+ "Federated sharing" : "Egyesített megosztás",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Hozzá akarod adni {owner}@{remote} távoli megosztását: {name}?",
+ "Remote share" : "Távoli megosztás",
+ "Remote share password" : "Távoli megosztás jelszava",
+ "Cancel" : "Mégsem",
+ "Add remote share" : "Távoli megosztás hozzáadás",
+ "You received \"/%2$s\" as a remote share from %1$s" : "Kaptál egy távoli megosztást: \"/%2$s\", innen: %1$s",
+ "Accept" : "Elfogadás",
+ "Decline" : "Elutasítás",
+ "Federated Cloud Sharing" : "Egyesített felhő megosztás",
+ "Open documentation" : "Dokumentáció megnyitása",
+ "Allow users on this server to send shares to other servers" : "Engedélyezi ezen szerver felhasználóinak, hogy fájlokat osszanak meg más szerverekkel.",
+ "Allow users on this server to receive shares from other servers" : "Engedélyezi ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől",
+ "Federated Cloud" : "Egyesített felhő",
+ "Your Federated Cloud ID:" : "Egyesített felhő azonosító:",
+ "Share it:" : "Oszd meg:",
+ "Add to your website" : "Add hozzá a weboldaladhoz",
+ "Share with me via Nextcloud" : "Oszd meg velem a Nextcloudon",
+ "HTML Code:" : "HTML kód:"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/lib/API/Remote.php b/apps/files_sharing/lib/API/Remote.php
deleted file mode 100644
index a522f923a39..00000000000
--- a/apps/files_sharing/lib/API/Remote.php
+++ /dev/null
@@ -1,230 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Joas Schilling <coding@schilljs.com>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-namespace OCA\Files_Sharing\API;
-
-use OC\Files\Filesystem;
-use OCA\FederatedFileSharing\DiscoveryManager;
-use OCA\Files_Sharing\External\Manager;
-
-class Remote {
-
- /**
- * Get list of pending remote shares
- *
- * @param array $params empty
- * @return \OC_OCS_Result
- */
- public static function getOpenShares($params) {
- $discoveryManager = new DiscoveryManager(
- \OC::$server->getMemCacheFactory(),
- \OC::$server->getHTTPClientService()
- );
- $externalManager = new Manager(
- \OC::$server->getDatabaseConnection(),
- Filesystem::getMountManager(),
- Filesystem::getLoader(),
- \OC::$server->getHTTPClientService(),
- \OC::$server->getNotificationManager(),
- $discoveryManager,
- \OC_User::getUser()
- );
-
- return new \OC_OCS_Result($externalManager->getOpenShares());
- }
-
- /**
- * Accept a remote share
- *
- * @param array $params contains the shareID 'id' which should be accepted
- * @return \OC_OCS_Result
- */
- public static function acceptShare($params) {
- $discoveryManager = new DiscoveryManager(
- \OC::$server->getMemCacheFactory(),
- \OC::$server->getHTTPClientService()
- );
- $externalManager = new Manager(
- \OC::$server->getDatabaseConnection(),
- Filesystem::getMountManager(),
- Filesystem::getLoader(),
- \OC::$server->getHTTPClientService(),
- \OC::$server->getNotificationManager(),
- $discoveryManager,
- \OC_User::getUser()
- );
-
- if ($externalManager->acceptShare((int) $params['id'])) {
- return new \OC_OCS_Result();
- }
-
- // Make sure the user has no notification for something that does not exist anymore.
- $externalManager->processNotification((int) $params['id']);
-
- return new \OC_OCS_Result(null, 404, "wrong share ID, share doesn't exist.");
- }
-
- /**
- * Decline a remote share
- *
- * @param array $params contains the shareID 'id' which should be declined
- * @return \OC_OCS_Result
- */
- public static function declineShare($params) {
- $discoveryManager = new DiscoveryManager(
- \OC::$server->getMemCacheFactory(),
- \OC::$server->getHTTPClientService()
- );
- $externalManager = new Manager(
- \OC::$server->getDatabaseConnection(),
- Filesystem::getMountManager(),
- Filesystem::getLoader(),
- \OC::$server->getHTTPClientService(),
- \OC::$server->getNotificationManager(),
- $discoveryManager,
- \OC_User::getUser()
- );
-
- if ($externalManager->declineShare((int) $params['id'])) {
- return new \OC_OCS_Result();
- }
-
- // Make sure the user has no notification for something that does not exist anymore.
- $externalManager->processNotification((int) $params['id']);
-
- return new \OC_OCS_Result(null, 404, "wrong share ID, share doesn't exist.");
- }
-
- /**
- * @param array $share Share with info from the share_external table
- * @return array enriched share info with data from the filecache
- */
- private static function extendShareInfo($share) {
- $view = new \OC\Files\View('/' . \OC_User::getUser() . '/files/');
- $info = $view->getFileInfo($share['mountpoint']);
-
- $share['mimetype'] = $info->getMimetype();
- $share['mtime'] = $info->getMtime();
- $share['permissions'] = $info->getPermissions();
- $share['type'] = $info->getType();
- $share['file_id'] = $info->getId();
-
- return $share;
- }
-
- /**
- * List accepted remote shares
- *
- * @param array $params
- * @return \OC_OCS_Result
- */
- public static function getShares($params) {
- $discoveryManager = new DiscoveryManager(
- \OC::$server->getMemCacheFactory(),
- \OC::$server->getHTTPClientService()
- );
- $externalManager = new Manager(
- \OC::$server->getDatabaseConnection(),
- Filesystem::getMountManager(),
- Filesystem::getLoader(),
- \OC::$server->getHTTPClientService(),
- \OC::$server->getNotificationManager(),
- $discoveryManager,
- \OC_User::getUser()
- );
-
- $shares = $externalManager->getAcceptedShares();
-
- $shares = array_map('self::extendShareInfo', $shares);
-
- return new \OC_OCS_Result($shares);
- }
-
- /**
- * Get info of a remote share
- *
- * @param array $params contains the shareID 'id'
- * @return \OC_OCS_Result
- */
- public static function getShare($params) {
- $discoveryManager = new DiscoveryManager(
- \OC::$server->getMemCacheFactory(),
- \OC::$server->getHTTPClientService()
- );
- $externalManager = new Manager(
- \OC::$server->getDatabaseConnection(),
- Filesystem::getMountManager(),
- Filesystem::getLoader(),
- \OC::$server->getHTTPClientService(),
- \OC::$server->getNotificationManager(),
- $discoveryManager,
- \OC_User::getUser()
- );
-
- $shareInfo = $externalManager->getShare($params['id']);
-
- if ($shareInfo === false) {
- return new \OC_OCS_Result(null, 404, 'share does not exist');
- } else {
- $shareInfo = self::extendShareInfo($shareInfo);
- return new \OC_OCS_Result($shareInfo);
- }
- }
-
- /**
- * Unshare a remote share
- *
- * @param array $params contains the shareID 'id' which should be unshared
- * @return \OC_OCS_Result
- */
- public static function unshare($params) {
- $discoveryManager = new DiscoveryManager(
- \OC::$server->getMemCacheFactory(),
- \OC::$server->getHTTPClientService()
- );
- $externalManager = new Manager(
- \OC::$server->getDatabaseConnection(),
- Filesystem::getMountManager(),
- Filesystem::getLoader(),
- \OC::$server->getHTTPClientService(),
- \OC::$server->getNotificationManager(),
- $discoveryManager,
- \OC_User::getUser()
- );
-
- $shareInfo = $externalManager->getShare($params['id']);
-
- if ($shareInfo === false) {
- return new \OC_OCS_Result(null, 404, 'Share does not exist');
- }
-
- $mountPoint = '/' . \OC_User::getUser() . '/files' . $shareInfo['mountpoint'];
-
- if ($externalManager->removeShare($mountPoint) === true) {
- return new \OC_OCS_Result(null);
- } else {
- return new \OC_OCS_Result(null, 403, 'Could not unshare');
- }
- }
-}
diff --git a/apps/files_sharing/lib/API/Share20OCS.php b/apps/files_sharing/lib/API/Share20OCS.php
index 62a947ee2c9..34f73c7ac07 100644
--- a/apps/files_sharing/lib/API/Share20OCS.php
+++ b/apps/files_sharing/lib/API/Share20OCS.php
@@ -661,7 +661,7 @@ class Share20OCS extends OCSController {
}
}
- if ($permissions !== null) {
+ if ($permissions !== null && $share->getShareOwner() !== $this->currentUser->getUID()) {
/* Check if this is an incomming share */
$incomingShares = $this->shareManager->getSharedWith($this->currentUser->getUID(), \OCP\Share::SHARE_TYPE_USER, $share->getNode(), -1, 0);
$incomingShares = array_merge($incomingShares, $this->shareManager->getSharedWith($this->currentUser->getUID(), \OCP\Share::SHARE_TYPE_GROUP, $share->getNode(), -1, 0));
diff --git a/apps/files_sharing/lib/AppInfo/Application.php b/apps/files_sharing/lib/AppInfo/Application.php
index 0e70924da40..5558ffbdfc4 100644
--- a/apps/files_sharing/lib/AppInfo/Application.php
+++ b/apps/files_sharing/lib/AppInfo/Application.php
@@ -111,6 +111,7 @@ class Application extends App {
$uid
);
});
+ $container->registerAlias('OCA\Files_Sharing\External\Manager', 'ExternalManager');
/**
* Middleware
diff --git a/apps/files_sharing/lib/Controller/RemoteController.php b/apps/files_sharing/lib/Controller/RemoteController.php
new file mode 100644
index 00000000000..7c7a608ff2d
--- /dev/null
+++ b/apps/files_sharing/lib/Controller/RemoteController.php
@@ -0,0 +1,183 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ *
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * 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, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\Files_Sharing\Controller;
+
+use OCA\Files_Sharing\External\Manager;
+use OCP\AppFramework\Http\DataResponse;
+use OCP\AppFramework\OCS\OCSForbiddenException;
+use OCP\AppFramework\OCS\OCSNotFoundException;
+use OCP\AppFramework\OCSController;
+use OCP\IRequest;
+
+class RemoteController extends OCSController {
+
+ /** @var Manager */
+ private $externalManager;
+
+ /**
+ * @NoAdminRequired
+ *
+ * Remote constructor.
+ *
+ * @param string $appName
+ * @param IRequest $request
+ * @param Manager $externalManager
+ */
+ public function __construct($appName,
+ IRequest $request,
+ Manager $externalManager) {
+ parent::__construct($appName, $request);
+
+ $this->externalManager = $externalManager;
+ }
+
+ /**
+ * @NoAdminRequired
+ *
+ * Get list of pending remote shares
+ *
+ * @return DataResponse
+ */
+ public function getOpenShares() {
+ return new DataResponse($this->externalManager->getOpenShares());
+ }
+
+ /**
+ * @NoAdminRequired
+ *
+ * Accept a remote share
+ *
+ * @param int $id
+ * @return DataResponse
+ * @throws OCSNotFoundException
+ */
+ public function acceptShare($id) {
+ if ($this->externalManager->acceptShare($id)) {
+ return new DataResponse();
+ }
+
+ // Make sure the user has no notification for something that does not exist anymore.
+ $this->externalManager->processNotification($id);
+
+ throw new OCSNotFoundException('wrong share ID, share doesn\'t exist.');
+ }
+
+ /**
+ * @NoAdminRequired
+ *
+ * Decline a remote share
+ *
+ * @param int $id
+ * @return DataResponse
+ * @throws OCSNotFoundException
+ */
+ public function declineShare($id) {
+ if ($this->externalManager->declineShare($id)) {
+ return new DataResponse();
+ }
+
+ // Make sure the user has no notification for something that does not exist anymore.
+ $this->externalManager->processNotification($id);
+
+ throw new OCSNotFoundException('wrong share ID, share doesn\'t exist.');
+ }
+
+ /**
+ * @param array $share Share with info from the share_external table
+ * @return array enriched share info with data from the filecache
+ */
+ private static function extendShareInfo($share) {
+ $view = new \OC\Files\View('/' . \OC_User::getUser() . '/files/');
+ $info = $view->getFileInfo($share['mountpoint']);
+
+ $share['mimetype'] = $info->getMimetype();
+ $share['mtime'] = $info->getMTime();
+ $share['permissions'] = $info->getPermissions();
+ $share['type'] = $info->getType();
+ $share['file_id'] = $info->getId();
+
+ return $share;
+ }
+
+ /**
+ * @NoAdminRequired
+ *
+ * List accepted remote shares
+ *
+ * @return DataResponse
+ */
+ public function getShares() {
+ $shares = $this->externalManager->getAcceptedShares();
+ $shares = array_map('self::extendShareInfo', $shares);
+
+ return new DataResponse($shares);
+ }
+
+ /**
+ * @NoAdminRequired
+ *
+ * Get info of a remote share
+ *
+ * @param int $id
+ * @return DataResponse
+ * @throws OCSNotFoundException
+ */
+ public function getShare($id) {
+ $shareInfo = $this->externalManager->getShare($id);
+
+ if ($shareInfo === false) {
+ throw new OCSNotFoundException('share does not exist');
+ } else {
+ $shareInfo = self::extendShareInfo($shareInfo);
+ return new DataResponse($shareInfo);
+ }
+ }
+
+ /**
+ * @NoAdminRequired
+ *
+ * Unshare a remote share
+ *
+ * @param int $id
+ * @return DataResponse
+ * @throws OCSNotFoundException
+ * @throws OCSForbiddenException
+ */
+ public function unshare($id) {
+ $shareInfo = $this->externalManager->getShare($id);
+
+ if ($shareInfo === false) {
+ throw new OCSNotFoundException('Share does not exist');
+ }
+
+ $mountPoint = '/' . \OC_User::getUser() . '/files' . $shareInfo['mountpoint'];
+
+ if ($this->externalManager->removeShare($mountPoint) === true) {
+ return new DataResponse();
+ } else {
+ throw new OCSForbiddenException('Could not unshare');
+ }
+ }
+}
diff --git a/apps/files_sharing/tests/API/Share20OCSTest.php b/apps/files_sharing/tests/API/Share20OCSTest.php
index 1f0b4855a0d..f9579b89935 100644
--- a/apps/files_sharing/tests/API/Share20OCSTest.php
+++ b/apps/files_sharing/tests/API/Share20OCSTest.php
@@ -24,6 +24,8 @@
namespace OCA\Files_Sharing\Tests\API;
use OCP\AppFramework\Http\DataResponse;
+use OCP\AppFramework\OCS\OCSNotFoundException;
+use OCP\Files\Folder;
use OCP\IL10N;
use OCA\Files_Sharing\API\Share20OCS;
use OCP\Files\NotFoundException;
@@ -108,8 +110,11 @@ class Share20OCSTest extends \Test\TestCase {
);
}
+ /**
+ * @return Share20OCS|\PHPUnit_Framework_MockObject_MockObject
+ */
private function mockFormatShare() {
- return $this->getMockBuilder('OCA\Files_Sharing\API\Share20OCS')
+ return $this->getMockBuilder(Share20OCS::class)
->setConstructorArgs([
$this->appName,
$this->request,
@@ -1569,6 +1574,103 @@ class Share20OCSTest extends \Test\TestCase {
$this->assertEquals($expected->getData(), $result->getData());
}
+ public function testUpdateShareCannotIncreasePermissions() {
+ $ocs = $this->mockFormatShare();
+
+ $folder = $this->createMock(Folder::class);
+
+ $share = \OC::$server->getShareManager()->newShare();
+ $share
+ ->setId(42)
+ ->setSharedBy($this->currentUser->getUID())
+ ->setShareOwner('anotheruser')
+ ->setShareType(\OCP\Share::SHARE_TYPE_GROUP)
+ ->setSharedWith('group1')
+ ->setPermissions(\OCP\Constants::PERMISSION_READ)
+ ->setNode($folder);
+
+ // note: updateShare will modify the received instance but getSharedWith will reread from the database,
+ // so their values will be different
+ $incomingShare = \OC::$server->getShareManager()->newShare();
+ $incomingShare
+ ->setId(42)
+ ->setSharedBy($this->currentUser->getUID())
+ ->setShareOwner('anotheruser')
+ ->setShareType(\OCP\Share::SHARE_TYPE_GROUP)
+ ->setSharedWith('group1')
+ ->setPermissions(\OCP\Constants::PERMISSION_READ)
+ ->setNode($folder);
+
+ $this->request
+ ->method('getParam')
+ ->will($this->returnValueMap([
+ ['permissions', null, '31'],
+ ]));
+
+ $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share);
+
+ $this->shareManager->expects($this->any(0))
+ ->method('getSharedWith')
+ ->will($this->returnValueMap([
+ ['currentUser', \OCP\Share::SHARE_TYPE_USER, $share->getNode(), -1, 0, []],
+ ['currentUser', \OCP\Share::SHARE_TYPE_GROUP, $share->getNode(), -1, 0, [$incomingShare]]
+ ]));
+
+ $this->shareManager->expects($this->never())->method('updateShare');
+
+ try {
+ $ocs->updateShare(42, 31);
+ $this->fail();
+ } catch (OCSNotFoundException $e) {
+ $this->assertEquals('Cannot increase permissions', $e->getMessage());
+ }
+ }
+
+ public function testUpdateShareCanIncreasePermissionsIfOwner() {
+ $ocs = $this->mockFormatShare();
+
+ $folder = $this->createMock(Folder::class);
+
+ $share = \OC::$server->getShareManager()->newShare();
+ $share
+ ->setId(42)
+ ->setSharedBy($this->currentUser->getUID())
+ ->setShareOwner($this->currentUser->getUID())
+ ->setShareType(\OCP\Share::SHARE_TYPE_GROUP)
+ ->setSharedWith('group1')
+ ->setPermissions(\OCP\Constants::PERMISSION_READ)
+ ->setNode($folder);
+
+ // note: updateShare will modify the received instance but getSharedWith will reread from the database,
+ // so their values will be different
+ $incomingShare = \OC::$server->getShareManager()->newShare();
+ $incomingShare
+ ->setId(42)
+ ->setSharedBy($this->currentUser->getUID())
+ ->setShareOwner($this->currentUser->getUID())
+ ->setShareType(\OCP\Share::SHARE_TYPE_GROUP)
+ ->setSharedWith('group1')
+ ->setPermissions(\OCP\Constants::PERMISSION_READ)
+ ->setNode($folder);
+
+ $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share);
+
+ $this->shareManager->expects($this->any(0))
+ ->method('getSharedWith')
+ ->will($this->returnValueMap([
+ ['currentUser', \OCP\Share::SHARE_TYPE_USER, $share->getNode(), -1, 0, []],
+ ['currentUser', \OCP\Share::SHARE_TYPE_GROUP, $share->getNode(), -1, 0, [$incomingShare]]
+ ]));
+
+ $this->shareManager->expects($this->once())
+ ->method('updateShare')
+ ->with($share)
+ ->willReturn($share);
+
+ $result = $ocs->updateShare(42, 31);
+ $this->assertInstanceOf(DataResponse::class, $result);
+ }
+
public function dataFormatShare() {
$file = $this->getMockBuilder('\OCP\Files\File')->getMock();
$folder = $this->getMockBuilder('\OCP\Files\Folder')->getMock();
diff --git a/apps/files_trashbin/ajax/preview.php b/apps/files_trashbin/ajax/preview.php
index 1a0131da28c..3f895161f00 100644
--- a/apps/files_trashbin/ajax/preview.php
+++ b/apps/files_trashbin/ajax/preview.php
@@ -72,6 +72,8 @@ try{
$preview->setScalingUp($scalingUp);
$preview->showPreview();
+} catch (\OC\PreviewNotAvailableException $e) {
+ \OC_Response::setStatus(404);
}catch(\Exception $e) {
\OC_Response::setStatus(500);
\OCP\Util::writeLog('core', $e->getmessage(), \OCP\Util::DEBUG);
diff --git a/apps/files_trashbin/l10n/ar.js b/apps/files_trashbin/l10n/ar.js
index 8b78e9e017a..563ac419435 100644
--- a/apps/files_trashbin/l10n/ar.js
+++ b/apps/files_trashbin/l10n/ar.js
@@ -9,7 +9,10 @@ OC.L10N.register(
"Delete permanently" : "حذف بشكل دائم",
"Error" : "خطأ",
"This operation is forbidden" : "هذة العملية ممنوعة ",
+ "This directory is unavailable, please check the logs or contact the administrator" : "هذا المجلد غير متوفر, الرجاء مراجعة سجل الأخطاء أو الاتصال بمدير النظام",
"restored" : "تمت الاستعادة",
+ "No deleted files" : "لا يوجد ملفات محذوفة",
+ "You will be able to recover deleted files from here" : "سوف تكون قادر على استعادة الملفات المحذوفة من هنا",
"No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
"Select all" : "تحديد الكل ",
"Name" : "اسم",
diff --git a/apps/files_trashbin/l10n/ar.json b/apps/files_trashbin/l10n/ar.json
index ac3552d79af..893a27b393b 100644
--- a/apps/files_trashbin/l10n/ar.json
+++ b/apps/files_trashbin/l10n/ar.json
@@ -7,7 +7,10 @@
"Delete permanently" : "حذف بشكل دائم",
"Error" : "خطأ",
"This operation is forbidden" : "هذة العملية ممنوعة ",
+ "This directory is unavailable, please check the logs or contact the administrator" : "هذا المجلد غير متوفر, الرجاء مراجعة سجل الأخطاء أو الاتصال بمدير النظام",
"restored" : "تمت الاستعادة",
+ "No deleted files" : "لا يوجد ملفات محذوفة",
+ "You will be able to recover deleted files from here" : "سوف تكون قادر على استعادة الملفات المحذوفة من هنا",
"No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
"Select all" : "تحديد الكل ",
"Name" : "اسم",
diff --git a/apps/files_trashbin/lib/Helper.php b/apps/files_trashbin/lib/Helper.php
index 836f799381a..9c312443164 100644
--- a/apps/files_trashbin/lib/Helper.php
+++ b/apps/files_trashbin/lib/Helper.php
@@ -78,11 +78,12 @@ class Helper {
$originalPath = substr($originalPath, 0, -1);
}
}
+ $type = $entry->getMimeType() === ICacheEntry::DIRECTORY_MIMETYPE ? 'dir' : 'file';
$i = array(
'name' => $name,
'mtime' => $timestamp,
- 'mimetype' => $entry->getMimeType(),
- 'type' => $entry->getMimeType() === ICacheEntry::DIRECTORY_MIMETYPE ? 'dir' : 'file',
+ 'mimetype' => $type === 'dir' ? 'httpd/unix-directory' : \OC::$server->getMimeTypeDetector()->detectPath($name),
+ 'type' => $type,
'directory' => ($dir === '/') ? '' : $dir,
'size' => $entry->getSize(),
'etag' => '',
diff --git a/apps/twofactor_backupcodes/l10n/cs_CZ.js b/apps/twofactor_backupcodes/l10n/cs_CZ.js
new file mode 100644
index 00000000000..346fc3ab1ca
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/cs_CZ.js
@@ -0,0 +1,17 @@
+OC.L10N.register(
+ "twofactor_backupcodes",
+ {
+ "Generate backup codes" : "Vytvořit záložní kódy",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Záložní kódy byly vytvořeny. {{used}} z {{total}} kódů bylo využito.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Zde jsou vaše záložní kódy. Kódy si prosím uložte a/nebo vytiskněte, protože je nebude možné později zobrazit.",
+ "Save backup codes" : "Uložit záložní kódy",
+ "Print backup codes" : "Vytisknout záložní kódy",
+ "Regenerate backup codes" : "Vytvořit nové záložní kódy",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Pokud vytvoříte nové záložní kódy, staré budou automaticky zrušeny.",
+ "An error occurred while generating your backup codes" : "Při pokusu o vytvoření záložních kódů nastala chyba.",
+ "Nextcloud backup codes" : "Nextcloud záložní kódy",
+ "Backup code" : "Záložní kód",
+ "Use backup code" : "Použít záložní kód",
+ "Second-factor backup codes" : "Dvoufázové záložní kódy"
+},
+"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/twofactor_backupcodes/l10n/cs_CZ.json b/apps/twofactor_backupcodes/l10n/cs_CZ.json
new file mode 100644
index 00000000000..a397a5ba8db
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/cs_CZ.json
@@ -0,0 +1,15 @@
+{ "translations": {
+ "Generate backup codes" : "Vytvořit záložní kódy",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Záložní kódy byly vytvořeny. {{used}} z {{total}} kódů bylo využito.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Zde jsou vaše záložní kódy. Kódy si prosím uložte a/nebo vytiskněte, protože je nebude možné později zobrazit.",
+ "Save backup codes" : "Uložit záložní kódy",
+ "Print backup codes" : "Vytisknout záložní kódy",
+ "Regenerate backup codes" : "Vytvořit nové záložní kódy",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Pokud vytvoříte nové záložní kódy, staré budou automaticky zrušeny.",
+ "An error occurred while generating your backup codes" : "Při pokusu o vytvoření záložních kódů nastala chyba.",
+ "Nextcloud backup codes" : "Nextcloud záložní kódy",
+ "Backup code" : "Záložní kód",
+ "Use backup code" : "Použít záložní kód",
+ "Second-factor backup codes" : "Dvoufázové záložní kódy"
+},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
+} \ No newline at end of file
diff --git a/apps/twofactor_backupcodes/l10n/de.js b/apps/twofactor_backupcodes/l10n/de.js
new file mode 100644
index 00000000000..e5ca6422df6
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/de.js
@@ -0,0 +1,17 @@
+OC.L10N.register(
+ "twofactor_backupcodes",
+ {
+ "Generate backup codes" : "Backup-Codes erstellen",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Backup-Codes wurden erstellt. {{used}} von {{total}} Codes wurden benutzt.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dies sind Deine Backup-Codes. Bitte speichere und/oder drucke diese aus, da diese Codes später nicht mehr gelesen werden können",
+ "Save backup codes" : "Backup-Codes speichern",
+ "Print backup codes" : "Backup-Codes drucken",
+ "Regenerate backup codes" : "Backup-Codes neu generieren",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Du Backup-Codes neu generierst, werden alte automatisch ungültig.",
+ "An error occurred while generating your backup codes" : "Ein Fehler ist bei der Erstellung Deiner Backup-Codes aufgetreten",
+ "Nextcloud backup codes" : "Nextcloud-Backup-Codes",
+ "Backup code" : "Backup-Code",
+ "Use backup code" : "Backup-Code verwenden",
+ "Second-factor backup codes" : "Zweitfaktor-Backup-Codes"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/twofactor_backupcodes/l10n/de.json b/apps/twofactor_backupcodes/l10n/de.json
new file mode 100644
index 00000000000..e3cdfce9d7b
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/de.json
@@ -0,0 +1,15 @@
+{ "translations": {
+ "Generate backup codes" : "Backup-Codes erstellen",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Backup-Codes wurden erstellt. {{used}} von {{total}} Codes wurden benutzt.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dies sind Deine Backup-Codes. Bitte speichere und/oder drucke diese aus, da diese Codes später nicht mehr gelesen werden können",
+ "Save backup codes" : "Backup-Codes speichern",
+ "Print backup codes" : "Backup-Codes drucken",
+ "Regenerate backup codes" : "Backup-Codes neu generieren",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Du Backup-Codes neu generierst, werden alte automatisch ungültig.",
+ "An error occurred while generating your backup codes" : "Ein Fehler ist bei der Erstellung Deiner Backup-Codes aufgetreten",
+ "Nextcloud backup codes" : "Nextcloud-Backup-Codes",
+ "Backup code" : "Backup-Code",
+ "Use backup code" : "Backup-Code verwenden",
+ "Second-factor backup codes" : "Zweitfaktor-Backup-Codes"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/twofactor_backupcodes/l10n/de_DE.js b/apps/twofactor_backupcodes/l10n/de_DE.js
new file mode 100644
index 00000000000..2405813cca0
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/de_DE.js
@@ -0,0 +1,17 @@
+OC.L10N.register(
+ "twofactor_backupcodes",
+ {
+ "Generate backup codes" : "Backup-Codes erstellen",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Backup-Codes wurden erstellt. {{used}} von {{total}} Codes wurden verwandt.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dies sind Ihre Backup-Codes. Bitte speichern und/oder drucken Sie diese, da diese Codes später nicht mehr gelesen werden können",
+ "Save backup codes" : "Backup-Codes speichern",
+ "Print backup codes" : "Backup-Codes drucken",
+ "Regenerate backup codes" : "Backup-Codes erneuern",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Sie die Backup-Codes erneuern werde die alten Codes automatisch ungültig.",
+ "An error occurred while generating your backup codes" : "Beim Erstellen Ihrer Backup-Codes ist ein Fehler aufgetreten",
+ "Nextcloud backup codes" : "Nextcloud Backup-Codes",
+ "Backup code" : "Backup-Code",
+ "Use backup code" : "Verwende Backup-Code",
+ "Second-factor backup codes" : "Zweitfaktor Backup-Codes"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/twofactor_backupcodes/l10n/de_DE.json b/apps/twofactor_backupcodes/l10n/de_DE.json
new file mode 100644
index 00000000000..5bd7b6b7667
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/de_DE.json
@@ -0,0 +1,15 @@
+{ "translations": {
+ "Generate backup codes" : "Backup-Codes erstellen",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Backup-Codes wurden erstellt. {{used}} von {{total}} Codes wurden verwandt.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dies sind Ihre Backup-Codes. Bitte speichern und/oder drucken Sie diese, da diese Codes später nicht mehr gelesen werden können",
+ "Save backup codes" : "Backup-Codes speichern",
+ "Print backup codes" : "Backup-Codes drucken",
+ "Regenerate backup codes" : "Backup-Codes erneuern",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Sie die Backup-Codes erneuern werde die alten Codes automatisch ungültig.",
+ "An error occurred while generating your backup codes" : "Beim Erstellen Ihrer Backup-Codes ist ein Fehler aufgetreten",
+ "Nextcloud backup codes" : "Nextcloud Backup-Codes",
+ "Backup code" : "Backup-Code",
+ "Use backup code" : "Verwende Backup-Code",
+ "Second-factor backup codes" : "Zweitfaktor Backup-Codes"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/twofactor_backupcodes/l10n/it.js b/apps/twofactor_backupcodes/l10n/it.js
new file mode 100644
index 00000000000..400647479bd
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/it.js
@@ -0,0 +1,17 @@
+OC.L10N.register(
+ "twofactor_backupcodes",
+ {
+ "Generate backup codes" : "Genera i codici di backup",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "I codici di backup sono stati generali. {{used}} di {{total}} codici sono stati utilizzati.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Questi sono i tuoi codici di backup. Salvali e/o stampali poiché non potrai più leggerli successivamente",
+ "Save backup codes" : "Salva i codici di backup",
+ "Print backup codes" : "Stampa i codici di backup",
+ "Regenerate backup codes" : "Rigenera i codici di backup",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Se rigeneri i codici di backup, invaliderai automaticamente i vecchi codici.",
+ "An error occurred while generating your backup codes" : "Si è verificato un errore durante la generazione dei tuoi codici di backup",
+ "Nextcloud backup codes" : "Codici di backup di Nextcloud",
+ "Backup code" : "Codice di backup",
+ "Use backup code" : "Usa il codice di backup",
+ "Second-factor backup codes" : "Codici di backup con secondo fattore"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/twofactor_backupcodes/l10n/it.json b/apps/twofactor_backupcodes/l10n/it.json
new file mode 100644
index 00000000000..5bfc8a109b1
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/it.json
@@ -0,0 +1,15 @@
+{ "translations": {
+ "Generate backup codes" : "Genera i codici di backup",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "I codici di backup sono stati generali. {{used}} di {{total}} codici sono stati utilizzati.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Questi sono i tuoi codici di backup. Salvali e/o stampali poiché non potrai più leggerli successivamente",
+ "Save backup codes" : "Salva i codici di backup",
+ "Print backup codes" : "Stampa i codici di backup",
+ "Regenerate backup codes" : "Rigenera i codici di backup",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Se rigeneri i codici di backup, invaliderai automaticamente i vecchi codici.",
+ "An error occurred while generating your backup codes" : "Si è verificato un errore durante la generazione dei tuoi codici di backup",
+ "Nextcloud backup codes" : "Codici di backup di Nextcloud",
+ "Backup code" : "Codice di backup",
+ "Use backup code" : "Usa il codice di backup",
+ "Second-factor backup codes" : "Codici di backup con secondo fattore"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/twofactor_backupcodes/l10n/nl.js b/apps/twofactor_backupcodes/l10n/nl.js
new file mode 100644
index 00000000000..e0dde0e9a0e
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/nl.js
@@ -0,0 +1,17 @@
+OC.L10N.register(
+ "twofactor_backupcodes",
+ {
+ "Generate backup codes" : "Genereer backup code",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Backup codes zijn gegenereerd. {{used}} van {{total}} codes zijn gebruikt.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dit zijn jouw backup codes. Bewaar ze en/of druk ze af, aangezien je ze later niet weer kunt zien.",
+ "Save backup codes" : "Bewaren backup code",
+ "Print backup codes" : "Afdrukken backup code",
+ "Regenerate backup codes" : "Regenereer backup code",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Als je backup codes opnieuw genereert, worden oude codes automatisch ongeldig gemaakt.",
+ "An error occurred while generating your backup codes" : "Er trad een fout op bij het genereren van je backup codes",
+ "Nextcloud backup codes" : "Nextcloud backup codes",
+ "Backup code" : "Backup code",
+ "Use backup code" : "Gebruik backup code",
+ "Second-factor backup codes" : "Twee-factor backup code"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/twofactor_backupcodes/l10n/nl.json b/apps/twofactor_backupcodes/l10n/nl.json
new file mode 100644
index 00000000000..77185e6f36e
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/nl.json
@@ -0,0 +1,15 @@
+{ "translations": {
+ "Generate backup codes" : "Genereer backup code",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Backup codes zijn gegenereerd. {{used}} van {{total}} codes zijn gebruikt.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dit zijn jouw backup codes. Bewaar ze en/of druk ze af, aangezien je ze later niet weer kunt zien.",
+ "Save backup codes" : "Bewaren backup code",
+ "Print backup codes" : "Afdrukken backup code",
+ "Regenerate backup codes" : "Regenereer backup code",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Als je backup codes opnieuw genereert, worden oude codes automatisch ongeldig gemaakt.",
+ "An error occurred while generating your backup codes" : "Er trad een fout op bij het genereren van je backup codes",
+ "Nextcloud backup codes" : "Nextcloud backup codes",
+ "Backup code" : "Backup code",
+ "Use backup code" : "Gebruik backup code",
+ "Second-factor backup codes" : "Twee-factor backup code"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/twofactor_backupcodes/lib/Db/BackupCode.php b/apps/twofactor_backupcodes/lib/Db/BackupCode.php
index 5bfb681063c..a59a414e189 100644
--- a/apps/twofactor_backupcodes/lib/Db/BackupCode.php
+++ b/apps/twofactor_backupcodes/lib/Db/BackupCode.php
@@ -1,5 +1,4 @@
<?php
-
/**
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
*
@@ -22,6 +21,7 @@
namespace OCA\TwoFactor_BackupCodes\Db;
+
use OCP\AppFramework\Db\Entity;
/**
diff --git a/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php b/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php
index d6256929675..8acdfa45aae 100644
--- a/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php
+++ b/apps/twofactor_backupcodes/lib/Db/BackupCodeMapper.php
@@ -1,5 +1,4 @@
<?php
-
/**
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
*
@@ -22,6 +21,7 @@
namespace OCA\TwoFactor_BackupCodes\Db;
+
use OCP\AppFramework\Db\Mapper;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDb;
@@ -38,7 +38,7 @@ class BackupCodeMapper extends Mapper {
* @return BackupCode[]
*/
public function getBackupCodes(IUser $user) {
- /* @var $qb IQueryBuilder */
+ /* @var IQueryBuilder $qb */
$qb = $this->db->getQueryBuilder();
$qb->select('id', 'user_id', 'code', 'used')
@@ -55,7 +55,7 @@ class BackupCodeMapper extends Mapper {
}
public function deleteCodes(IUser $user) {
- /* @var $qb IQueryBuilder */
+ /* @var IQueryBuilder $qb */
$qb = $this->db->getQueryBuilder();
$qb->delete('twofactor_backup_codes')
diff --git a/apps/twofactor_backupcodes/tests/Integration/Db/BackupCodeMapperTest.php b/apps/twofactor_backupcodes/tests/Integration/Db/BackupCodeMapperTest.php
index 5d7d71dd17a..bb97f929d7a 100644
--- a/apps/twofactor_backupcodes/tests/Integration/Db/BackupCodeMapperTest.php
+++ b/apps/twofactor_backupcodes/tests/Integration/Db/BackupCodeMapperTest.php
@@ -22,7 +22,6 @@
namespace OCA\TwoFactor_BackupCodes\Tests\Integration\Db;
-use OC;
use OCA\TwoFactor_BackupCodes\Db\BackupCode;
use OCA\TwoFactor_BackupCodes\Db\BackupCodeMapper;
use OCP\IDBConnection;
@@ -53,8 +52,8 @@ class BackupCodeMapperTest extends TestCase {
protected function setUp() {
parent::setUp();
- $this->db = OC::$server->getDatabaseConnection();
- $this->mapper = OC::$server->query(BackupCodeMapper::class);
+ $this->db = \OC::$server->getDatabaseConnection();
+ $this->mapper = \OC::$server->query(BackupCodeMapper::class);
$this->resetDB();
}
diff --git a/apps/twofactor_backupcodes/tests/Integration/Service/BackupCodeStorageTest.php b/apps/twofactor_backupcodes/tests/Integration/Service/BackupCodeStorageTest.php
index 5517af5ce0d..934c44fb0db 100644
--- a/apps/twofactor_backupcodes/tests/Integration/Service/BackupCodeStorageTest.php
+++ b/apps/twofactor_backupcodes/tests/Integration/Service/BackupCodeStorageTest.php
@@ -22,7 +22,6 @@
namespace OCA\TwoFactor_BackupCodes\Tests\Integration\Service;
-use OC;
use OCA\TwoFactor_BackupCodes\Service\BackupCodeStorage;
use Test\TestCase;
@@ -40,7 +39,7 @@ class BackupCodeStorageTest extends TestCase {
protected function setUp() {
parent::setUp();
- $this->storage = OC::$server->query(BackupCodeStorage::class);
+ $this->storage = \OC::$server->query(BackupCodeStorage::class);
}
public function testSimpleWorkFlow() {
diff --git a/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php b/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php
index 57c262e1940..1ebf445bb0f 100644
--- a/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php
+++ b/apps/twofactor_backupcodes/tests/Unit/Service/BackupCodeStorageTest.php
@@ -32,13 +32,13 @@ use Test\TestCase;
class BackupCodeStorageTest extends TestCase {
- /** @var BackupCodeMapper|PHPUnit_Framework_MockObject_MockObject */
+ /** @var BackupCodeMapper|\PHPUnit_Framework_MockObject_MockObject */
private $mapper;
- /** @var ISecureRandom|PHPUnit_Framework_MockObject_MockObject */
+ /** @var ISecureRandom|\PHPUnit_Framework_MockObject_MockObject */
private $random;
- /** @var IHasher|PHPUnit_Framework_MockObject_MockObject */
+ /** @var IHasher|\PHPUnit_Framework_MockObject_MockObject */
private $hasher;
/** @var BackupCodeStorage */
diff --git a/apps/updatenotification/l10n/cs_CZ.js b/apps/updatenotification/l10n/cs_CZ.js
index 1380d8eba95..23af7c686d1 100644
--- a/apps/updatenotification/l10n/cs_CZ.js
+++ b/apps/updatenotification/l10n/cs_CZ.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"Nextcloud core" : "Nextcloud Core",
"Update for %1$s to version %2$s is available." : "Je dostupná aktualizace pro %1$s na verzi %2$s.",
"A new version is available: %s" : "Je dostupná nová verze: %s",
+ "Download now" : "Stáhnout nyní",
"Your version is up to date." : "Používáte nejnovější verzi.",
"Checked on %s" : "Zkontrolováno %s",
"Update channel:" : "Aktualizovat kanál:",
diff --git a/apps/updatenotification/l10n/cs_CZ.json b/apps/updatenotification/l10n/cs_CZ.json
index f5137fe6695..95b10919df0 100644
--- a/apps/updatenotification/l10n/cs_CZ.json
+++ b/apps/updatenotification/l10n/cs_CZ.json
@@ -5,6 +5,7 @@
"Nextcloud core" : "Nextcloud Core",
"Update for %1$s to version %2$s is available." : "Je dostupná aktualizace pro %1$s na verzi %2$s.",
"A new version is available: %s" : "Je dostupná nová verze: %s",
+ "Download now" : "Stáhnout nyní",
"Your version is up to date." : "Používáte nejnovější verzi.",
"Checked on %s" : "Zkontrolováno %s",
"Update channel:" : "Aktualizovat kanál:",
diff --git a/apps/updatenotification/l10n/de.js b/apps/updatenotification/l10n/de.js
index f0eea25d287..90a69f27780 100644
--- a/apps/updatenotification/l10n/de.js
+++ b/apps/updatenotification/l10n/de.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"Nextcloud core" : "Nextcloud Kern",
"Update for %1$s to version %2$s is available." : "Ein Update von %1$s auf Version %2$s ist verfügbar.",
"A new version is available: %s" : "Eine neue Version ist verfügbar: %s",
+ "Download now" : "Jetzt herunterladen",
"Your version is up to date." : "Deine Version ist aktuell.",
"Checked on %s" : "Geprüft am %s",
"Update channel:" : "Update-Kanal:",
diff --git a/apps/updatenotification/l10n/de.json b/apps/updatenotification/l10n/de.json
index 462db15bd32..7215f2daa19 100644
--- a/apps/updatenotification/l10n/de.json
+++ b/apps/updatenotification/l10n/de.json
@@ -5,6 +5,7 @@
"Nextcloud core" : "Nextcloud Kern",
"Update for %1$s to version %2$s is available." : "Ein Update von %1$s auf Version %2$s ist verfügbar.",
"A new version is available: %s" : "Eine neue Version ist verfügbar: %s",
+ "Download now" : "Jetzt herunterladen",
"Your version is up to date." : "Deine Version ist aktuell.",
"Checked on %s" : "Geprüft am %s",
"Update channel:" : "Update-Kanal:",
diff --git a/apps/updatenotification/l10n/de_DE.js b/apps/updatenotification/l10n/de_DE.js
index 04ad9e9041c..ca7d72f4efe 100644
--- a/apps/updatenotification/l10n/de_DE.js
+++ b/apps/updatenotification/l10n/de_DE.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"Nextcloud core" : "Nextcloud Kern",
"Update for %1$s to version %2$s is available." : "Ein Update von %1$s auf Version %2$s ist verfügbar.",
"A new version is available: %s" : "Eine neue Version ist verfügbar: %s",
+ "Download now" : "Jetzt herunterladen",
"Your version is up to date." : "Ihre Version ist aktuell.",
"Checked on %s" : "Überprüft am %s",
"Update channel:" : "Update-Kanal:",
diff --git a/apps/updatenotification/l10n/de_DE.json b/apps/updatenotification/l10n/de_DE.json
index fbcceda4c2c..32a40d1e3c2 100644
--- a/apps/updatenotification/l10n/de_DE.json
+++ b/apps/updatenotification/l10n/de_DE.json
@@ -5,6 +5,7 @@
"Nextcloud core" : "Nextcloud Kern",
"Update for %1$s to version %2$s is available." : "Ein Update von %1$s auf Version %2$s ist verfügbar.",
"A new version is available: %s" : "Eine neue Version ist verfügbar: %s",
+ "Download now" : "Jetzt herunterladen",
"Your version is up to date." : "Ihre Version ist aktuell.",
"Checked on %s" : "Überprüft am %s",
"Update channel:" : "Update-Kanal:",
diff --git a/apps/updatenotification/l10n/fr.js b/apps/updatenotification/l10n/fr.js
index 61833cc2089..0fa1d3d9620 100644
--- a/apps/updatenotification/l10n/fr.js
+++ b/apps/updatenotification/l10n/fr.js
@@ -3,9 +3,11 @@ OC.L10N.register(
{
"Update notifications" : "Notifications de mises à jour",
"{version} is available. Get more information on how to update." : "La version {version} est disponible. Cliquez ici pour plus d'informations sur comment mettre à jour.",
+ "Channel updated" : "Canal de mise à jour modifié",
"Nextcloud core" : "Noyau Nextcloud",
"Update for %1$s to version %2$s is available." : "Une mise à jour de %1$s vers la version %2$s est disponible.",
"A new version is available: %s" : "Une nouvelle version est disponible : %s",
+ "Download now" : "Télécharger maintenant",
"Your version is up to date." : "Votre version est à jour.",
"Checked on %s" : "Vérifié le %s",
"Update channel:" : "Canal de mise à jour :",
diff --git a/apps/updatenotification/l10n/fr.json b/apps/updatenotification/l10n/fr.json
index ef53a3c6589..7d69b26af4d 100644
--- a/apps/updatenotification/l10n/fr.json
+++ b/apps/updatenotification/l10n/fr.json
@@ -1,9 +1,11 @@
{ "translations": {
"Update notifications" : "Notifications de mises à jour",
"{version} is available. Get more information on how to update." : "La version {version} est disponible. Cliquez ici pour plus d'informations sur comment mettre à jour.",
+ "Channel updated" : "Canal de mise à jour modifié",
"Nextcloud core" : "Noyau Nextcloud",
"Update for %1$s to version %2$s is available." : "Une mise à jour de %1$s vers la version %2$s est disponible.",
"A new version is available: %s" : "Une nouvelle version est disponible : %s",
+ "Download now" : "Télécharger maintenant",
"Your version is up to date." : "Votre version est à jour.",
"Checked on %s" : "Vérifié le %s",
"Update channel:" : "Canal de mise à jour :",
diff --git a/apps/updatenotification/l10n/hu_HU.js b/apps/updatenotification/l10n/hu_HU.js
index cce4549f01e..917ea793106 100644
--- a/apps/updatenotification/l10n/hu_HU.js
+++ b/apps/updatenotification/l10n/hu_HU.js
@@ -3,15 +3,17 @@ OC.L10N.register(
{
"Update notifications" : "Frissítési értesítés",
"{version} is available. Get more information on how to update." : "{version} rendelkezésre áll. További információ a frissítéshez.",
- "Updated channel" : "Frissített csatorna",
- "ownCloud core" : "ownCloud mag",
+ "Channel updated" : "Csatorna frissítve",
+ "Nextcloud core" : "Nextcloud mag",
"Update for %1$s to version %2$s is available." : "%1$s frissíthető %2$s verzióra.",
- "Updater" : "Frissítéskezelő",
"A new version is available: %s" : "Új verzió érhető el: %s",
- "Open updater" : "Frissítő megnyitása",
+ "Download now" : "Letöltés most",
"Your version is up to date." : "Verzió frissítve.",
"Checked on %s" : "Ellenőrizve: %s",
"Update channel:" : "Frissítési csatorna:",
- "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Mindig frissíthetsz az újabb verzióra vagy kísérleti csatornára, de visszafelé sosem frissíthetsz egy jóval stabilabb verzióra."
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Mindig frissíthetsz az újabb verzióra vagy kísérleti csatornára, de visszafelé sosem frissíthetsz egy jóval stabilabb verzióra.",
+ "Notify members of the following groups about available updates:" : "A következő csoport tagjainak értesítése az elérhető frissítésekről:",
+ "Only notification for app updates are available." : "Csak az értesítő alkalmazás frissítései érhetők el.",
+ "Updater" : "Frissítéskezelő"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/hu_HU.json b/apps/updatenotification/l10n/hu_HU.json
index 952b499d52a..c763a83a7e3 100644
--- a/apps/updatenotification/l10n/hu_HU.json
+++ b/apps/updatenotification/l10n/hu_HU.json
@@ -1,15 +1,17 @@
{ "translations": {
"Update notifications" : "Frissítési értesítés",
"{version} is available. Get more information on how to update." : "{version} rendelkezésre áll. További információ a frissítéshez.",
- "Updated channel" : "Frissített csatorna",
- "ownCloud core" : "ownCloud mag",
+ "Channel updated" : "Csatorna frissítve",
+ "Nextcloud core" : "Nextcloud mag",
"Update for %1$s to version %2$s is available." : "%1$s frissíthető %2$s verzióra.",
- "Updater" : "Frissítéskezelő",
"A new version is available: %s" : "Új verzió érhető el: %s",
- "Open updater" : "Frissítő megnyitása",
+ "Download now" : "Letöltés most",
"Your version is up to date." : "Verzió frissítve.",
"Checked on %s" : "Ellenőrizve: %s",
"Update channel:" : "Frissítési csatorna:",
- "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Mindig frissíthetsz az újabb verzióra vagy kísérleti csatornára, de visszafelé sosem frissíthetsz egy jóval stabilabb verzióra."
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Mindig frissíthetsz az újabb verzióra vagy kísérleti csatornára, de visszafelé sosem frissíthetsz egy jóval stabilabb verzióra.",
+ "Notify members of the following groups about available updates:" : "A következő csoport tagjainak értesítése az elérhető frissítésekről:",
+ "Only notification for app updates are available." : "Csak az értesítő alkalmazás frissítései érhetők el.",
+ "Updater" : "Frissítéskezelő"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/is.js b/apps/updatenotification/l10n/is.js
index 088002b3d0f..321ac5d187d 100644
--- a/apps/updatenotification/l10n/is.js
+++ b/apps/updatenotification/l10n/is.js
@@ -7,6 +7,7 @@ OC.L10N.register(
"Nextcloud core" : "Nextcloud kjarni",
"Update for %1$s to version %2$s is available." : "Upfærsla %1$s í útgáfu %2$s er tiltæk.",
"A new version is available: %s" : "Ný útgáfa er tiltæk: %s",
+ "Download now" : "Sækja núna",
"Your version is up to date." : "Útgáfan þín er af nýjustu gerð.",
"Checked on %s" : "Athugað þann %s",
"Update channel:" : "Uppfærslurás:",
diff --git a/apps/updatenotification/l10n/is.json b/apps/updatenotification/l10n/is.json
index dffe445f297..f556061e97c 100644
--- a/apps/updatenotification/l10n/is.json
+++ b/apps/updatenotification/l10n/is.json
@@ -5,6 +5,7 @@
"Nextcloud core" : "Nextcloud kjarni",
"Update for %1$s to version %2$s is available." : "Upfærsla %1$s í útgáfu %2$s er tiltæk.",
"A new version is available: %s" : "Ný útgáfa er tiltæk: %s",
+ "Download now" : "Sækja núna",
"Your version is up to date." : "Útgáfan þín er af nýjustu gerð.",
"Checked on %s" : "Athugað þann %s",
"Update channel:" : "Uppfærslurás:",
diff --git a/apps/updatenotification/l10n/it.js b/apps/updatenotification/l10n/it.js
index a8edc1cdb5d..c8bc5cc8993 100644
--- a/apps/updatenotification/l10n/it.js
+++ b/apps/updatenotification/l10n/it.js
@@ -3,9 +3,11 @@ OC.L10N.register(
{
"Update notifications" : "Notifiche di aggiornamento",
"{version} is available. Get more information on how to update." : "{version} è disponibile. Ottieni ulteriori informazioni su come eseguire l'aggiornamento.",
+ "Channel updated" : "Canale aggiornato",
"Nextcloud core" : "Componente principale di Nextcloud",
"Update for %1$s to version %2$s is available." : "È disponibile l'aggiornamento di %1$s alla versione %2$s.",
"A new version is available: %s" : "Una nuova versione è disponibile: %s",
+ "Download now" : "Scarica ora",
"Your version is up to date." : "La tua versione è aggiornata.",
"Checked on %s" : "Controllato il %s",
"Update channel:" : "Canale di aggiornamento:",
diff --git a/apps/updatenotification/l10n/it.json b/apps/updatenotification/l10n/it.json
index 5a212cb85a3..55f901f4951 100644
--- a/apps/updatenotification/l10n/it.json
+++ b/apps/updatenotification/l10n/it.json
@@ -1,9 +1,11 @@
{ "translations": {
"Update notifications" : "Notifiche di aggiornamento",
"{version} is available. Get more information on how to update." : "{version} è disponibile. Ottieni ulteriori informazioni su come eseguire l'aggiornamento.",
+ "Channel updated" : "Canale aggiornato",
"Nextcloud core" : "Componente principale di Nextcloud",
"Update for %1$s to version %2$s is available." : "È disponibile l'aggiornamento di %1$s alla versione %2$s.",
"A new version is available: %s" : "Una nuova versione è disponibile: %s",
+ "Download now" : "Scarica ora",
"Your version is up to date." : "La tua versione è aggiornata.",
"Checked on %s" : "Controllato il %s",
"Update channel:" : "Canale di aggiornamento:",
diff --git a/apps/updatenotification/l10n/nl.js b/apps/updatenotification/l10n/nl.js
index 89ee44bafb4..cc5c1ee3fcd 100644
--- a/apps/updatenotification/l10n/nl.js
+++ b/apps/updatenotification/l10n/nl.js
@@ -3,9 +3,11 @@ OC.L10N.register(
{
"Update notifications" : "Bijwerken meldingen",
"{version} is available. Get more information on how to update." : "{version} is beschikbaar. Meer informatie over het bijwerken.",
+ "Channel updated" : "Kanaal bijgewerkt",
"Nextcloud core" : "Nextcloud core",
"Update for %1$s to version %2$s is available." : "Update voor %1$s naar versie %2$s is beschikbaar.",
"A new version is available: %s" : "Er is een nieuwe versie beschikbaar: %s",
+ "Download now" : "Download nu",
"Your version is up to date." : "Je versie is up to date.",
"Checked on %s" : "Gecontroleerd op %s",
"Update channel:" : "Bijwerkkanaal:",
diff --git a/apps/updatenotification/l10n/nl.json b/apps/updatenotification/l10n/nl.json
index 3437220cd31..b907300c2e1 100644
--- a/apps/updatenotification/l10n/nl.json
+++ b/apps/updatenotification/l10n/nl.json
@@ -1,9 +1,11 @@
{ "translations": {
"Update notifications" : "Bijwerken meldingen",
"{version} is available. Get more information on how to update." : "{version} is beschikbaar. Meer informatie over het bijwerken.",
+ "Channel updated" : "Kanaal bijgewerkt",
"Nextcloud core" : "Nextcloud core",
"Update for %1$s to version %2$s is available." : "Update voor %1$s naar versie %2$s is beschikbaar.",
"A new version is available: %s" : "Er is een nieuwe versie beschikbaar: %s",
+ "Download now" : "Download nu",
"Your version is up to date." : "Je versie is up to date.",
"Checked on %s" : "Gecontroleerd op %s",
"Update channel:" : "Bijwerkkanaal:",
diff --git a/apps/updatenotification/l10n/ru.js b/apps/updatenotification/l10n/ru.js
index 7546a3a0cbc..940cf041f6d 100644
--- a/apps/updatenotification/l10n/ru.js
+++ b/apps/updatenotification/l10n/ru.js
@@ -3,9 +3,11 @@ OC.L10N.register(
{
"Update notifications" : "Уведомления об обновлениях",
"{version} is available. Get more information on how to update." : "Доступна версия {version}. Получить дополнительную информацию о порядке обновления.",
+ "Channel updated" : "Канал обновлен.",
"Nextcloud core" : "Nextcloud core",
"Update for %1$s to version %2$s is available." : "Доступно обновление для %1$s до версии %2$s.",
"A new version is available: %s" : "Доступна новая версия: %s",
+ "Download now" : "Скачать сейчас",
"Your version is up to date." : "Версия не требует обновления.",
"Checked on %s" : "Проверено %s",
"Update channel:" : "Канал обновлений:",
diff --git a/apps/updatenotification/l10n/ru.json b/apps/updatenotification/l10n/ru.json
index 0fb8d3ded66..623e1303a00 100644
--- a/apps/updatenotification/l10n/ru.json
+++ b/apps/updatenotification/l10n/ru.json
@@ -1,9 +1,11 @@
{ "translations": {
"Update notifications" : "Уведомления об обновлениях",
"{version} is available. Get more information on how to update." : "Доступна версия {version}. Получить дополнительную информацию о порядке обновления.",
+ "Channel updated" : "Канал обновлен.",
"Nextcloud core" : "Nextcloud core",
"Update for %1$s to version %2$s is available." : "Доступно обновление для %1$s до версии %2$s.",
"A new version is available: %s" : "Доступна новая версия: %s",
+ "Download now" : "Скачать сейчас",
"Your version is up to date." : "Версия не требует обновления.",
"Checked on %s" : "Проверено %s",
"Update channel:" : "Канал обновлений:",
diff --git a/apps/updatenotification/lib/AppInfo/Application.php b/apps/updatenotification/lib/AppInfo/Application.php
index aefed9cca5c..5eba176f312 100644
--- a/apps/updatenotification/lib/AppInfo/Application.php
+++ b/apps/updatenotification/lib/AppInfo/Application.php
@@ -24,7 +24,6 @@
namespace OCA\UpdateNotification\AppInfo;
use OC\AppFramework\Utility\TimeFactory;
-use OC\Updater;
use OCA\UpdateNotification\Controller\AdminController;
use OCA\UpdateNotification\UpdateChecker;
use OCP\AppFramework\App;
diff --git a/apps/user_ldap/lib/Command/CreateEmptyConfig.php b/apps/user_ldap/lib/Command/CreateEmptyConfig.php
index 53cc4cbf466..28d3a1d8bff 100644
--- a/apps/user_ldap/lib/Command/CreateEmptyConfig.php
+++ b/apps/user_ldap/lib/Command/CreateEmptyConfig.php
@@ -25,11 +25,11 @@
namespace OCA\User_LDAP\Command;
+use OCA\User_LDAP\Configuration;
+use OCA\User_LDAP\Helper;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
-use \OCA\User_LDAP\Helper;
-use \OCA\User_LDAP\Configuration;
class CreateEmptyConfig extends Command {
/** @var \OCA\User_LDAP\Helper */
diff --git a/apps/user_ldap/lib/Command/DeleteConfig.php b/apps/user_ldap/lib/Command/DeleteConfig.php
index a986dd6be77..e39425f3faa 100644
--- a/apps/user_ldap/lib/Command/DeleteConfig.php
+++ b/apps/user_ldap/lib/Command/DeleteConfig.php
@@ -25,11 +25,12 @@
namespace OCA\User_LDAP\Command;
+
+use OCA\User_LDAP\Helper;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
-use \OCA\User_LDAP\Helper;
class DeleteConfig extends Command {
/** @var \OCA\User_LDAP\Helper */
diff --git a/apps/user_ldap/lib/Jobs/CleanUp.php b/apps/user_ldap/lib/Jobs/CleanUp.php
index 21c3ece8662..b91fed14dd6 100644
--- a/apps/user_ldap/lib/Jobs/CleanUp.php
+++ b/apps/user_ldap/lib/Jobs/CleanUp.php
@@ -24,13 +24,13 @@
namespace OCA\User_LDAP\Jobs;
-use \OC\BackgroundJob\TimedJob;
-use \OCA\User_LDAP\User_LDAP;
-use \OCA\User_LDAP\User_Proxy;
-use \OCA\User_LDAP\Helper;
-use \OCA\User_LDAP\LDAP;
-use \OCA\User_LDAP\User\DeletedUsersIndex;
-use \OCA\User_LDAP\Mapping\UserMapping;
+use OC\BackgroundJob\TimedJob;
+use OCA\User_LDAP\Helper;
+use OCA\User_LDAP\LDAP;
+use OCA\User_LDAP\Mapping\UserMapping;
+use OCA\User_LDAP\User_LDAP;
+use OCA\User_LDAP\User_Proxy;
+use OCA\User_LDAP\User\DeletedUsersIndex;
/**
* Class CleanUp
diff --git a/apps/user_ldap/lib/LDAPProvider.php b/apps/user_ldap/lib/LDAPProvider.php
index 5bd6a0fd08c..bf8691006c6 100644
--- a/apps/user_ldap/lib/LDAPProvider.php
+++ b/apps/user_ldap/lib/LDAPProvider.php
@@ -22,12 +22,11 @@
namespace OCA\User_LDAP;
-use OCP\IUserBackend;
+
use OCP\LDAP\ILDAPProvider;
use OCP\LDAP\IDeletionFlagSupport;
use OCP\IServerContainer;
use OCA\User_LDAP\User\DeletedUsersIndex;
-use OCA\User_LDAP\Mapping\UserMapping;
/**
* LDAP provider for pulic access to the LDAP backend.
diff --git a/apps/user_ldap/tests/AccessTest.php b/apps/user_ldap/tests/AccessTest.php
index 08e7c9f79f5..f89af2423a9 100644
--- a/apps/user_ldap/tests/AccessTest.php
+++ b/apps/user_ldap/tests/AccessTest.php
@@ -27,7 +27,6 @@
namespace OCA\User_LDAP\Tests;
use OCA\User_LDAP\Access;
-use OCA\User_LDAP\Connection;
use OCA\User_LDAP\FilesystemHelper;
use OCA\User_LDAP\ILDAPWrapper;
use OCA\User_LDAP\LogWrapper;
diff --git a/apps/user_ldap/tests/Group_LDAPTest.php b/apps/user_ldap/tests/Group_LDAPTest.php
index 12f7eaa2256..17ed5909bfb 100644
--- a/apps/user_ldap/tests/Group_LDAPTest.php
+++ b/apps/user_ldap/tests/Group_LDAPTest.php
@@ -29,8 +29,6 @@
namespace OCA\User_LDAP\Tests;
use OCA\User_LDAP\Group_LDAP as GroupLDAP;
-use OCA\User_LDAP\Access;
-use OCA\User_LDAP\Connection;
use OCA\User_LDAP\ILDAPWrapper;
/**
diff --git a/apps/user_ldap/tests/User_LDAPTest.php b/apps/user_ldap/tests/User_LDAPTest.php
index 0e08998d13b..f5ffb7f9907 100644
--- a/apps/user_ldap/tests/User_LDAPTest.php
+++ b/apps/user_ldap/tests/User_LDAPTest.php
@@ -32,8 +32,6 @@ use OCA\User_LDAP\FilesystemHelper;
use OCA\User_LDAP\ILDAPWrapper;
use OCA\User_LDAP\LogWrapper;
use OCA\User_LDAP\User_LDAP as UserLDAP;
-use \OCA\User_LDAP\Access;
-use \OCA\User_LDAP\Connection;
use OCP\IAvatarManager;
use OCP\IConfig;
use OCP\IDBConnection;
diff --git a/autotest-external.sh b/autotest-external.sh
index 9d9d42cee35..7d2e506ae98 100755
--- a/autotest-external.sh
+++ b/autotest-external.sh
@@ -31,7 +31,7 @@ function print_syntax {
}
if ! [ -x "$PHPUNIT" ]; then
- echo "phpunit executable not found, please install phpunit version >= 3.7" >&2
+ echo "phpunit executable not found, please install phpunit version >= 4.8" >&2
exit 3
fi
@@ -39,8 +39,8 @@ PHPUNIT_VERSION=$("$PHPUNIT" --version | cut -d" " -f2)
PHPUNIT_MAJOR_VERSION=$(echo $PHPUNIT_VERSION | cut -d"." -f1)
PHPUNIT_MINOR_VERSION=$(echo $PHPUNIT_VERSION | cut -d"." -f2)
-if ! [ $PHPUNIT_MAJOR_VERSION -gt 4 -o \( $PHPUNIT_MAJOR_VERSION -eq 4 -a $PHPUNIT_MINOR_VERSION -ge 4 \) ]; then
- echo "phpunit version >= 4.4 required. Version found: $PHPUNIT_VERSION" >&2
+if ! [ $PHPUNIT_MAJOR_VERSION -gt 4 -o \( $PHPUNIT_MAJOR_VERSION -eq 4 -a $PHPUNIT_MINOR_VERSION -ge 8 \) ]; then
+ echo "phpunit version >= 4.8 required. Version found: $PHPUNIT_VERSION" >&2
exit 4
fi
diff --git a/autotest.sh b/autotest.sh
index 5f5633fcf0f..2dfa961a1a2 100755
--- a/autotest.sh
+++ b/autotest.sh
@@ -54,7 +54,7 @@ else
fi
if ! [ -x "$PHPUNIT" ]; then
- echo "phpunit executable not found, please install phpunit version >= 4.4" >&2
+ echo "phpunit executable not found, please install phpunit version >= 4.8" >&2
exit 3
fi
@@ -69,8 +69,8 @@ PHPUNIT_VERSION=$($PHPUNIT --version | cut -d" " -f2)
PHPUNIT_MAJOR_VERSION=$(echo "$PHPUNIT_VERSION" | cut -d"." -f1)
PHPUNIT_MINOR_VERSION=$(echo "$PHPUNIT_VERSION" | cut -d"." -f2)
-if ! [ "$PHPUNIT_MAJOR_VERSION" -gt 4 -o \( "$PHPUNIT_MAJOR_VERSION" -eq 4 -a "$PHPUNIT_MINOR_VERSION" -ge 4 \) ]; then
- echo "phpunit version >= 4.4 required. Version found: $PHPUNIT_VERSION" >&2
+if ! [ "$PHPUNIT_MAJOR_VERSION" -gt 4 -o \( "$PHPUNIT_MAJOR_VERSION" -eq 4 -a "$PHPUNIT_MINOR_VERSION" -ge 8 \) ]; then
+ echo "phpunit version >= 4.8 required. Version found: $PHPUNIT_VERSION" >&2
exit 4
fi
@@ -191,14 +191,6 @@ function execute_tests {
-d mysql)
DATABASEHOST=$(docker inspect --format="{{.NetworkSettings.IPAddress}}" "$DOCKER_CONTAINER_ID")
- echo "Waiting for MySQL initialisation ..."
- if ! apps/files_external/tests/env/wait-for-connection $DATABASEHOST 3306 600; then
- echo "[ERROR] Waited 600 seconds, no response" >&2
- exit 1
- fi
-
- echo "MySQL is up."
-
else
if [ -z "$DRONE" ] ; then # no need to drop the DB when we are on CI
if [ "mysql" != "$(mysql --version | grep -o mysql)" ] ; then
@@ -211,6 +203,11 @@ function execute_tests {
DATABASEHOST=127.0.0.1
fi
fi
+ echo "Waiting for MySQL initialisation ..."
+ if ! apps/files_external/tests/env/wait-for-connection $DATABASEHOST 3306 600; then
+ echo "[ERROR] Waited 600 seconds, no response" >&2
+ exit 1
+ fi
fi
if [ "$DB" == "mariadb" ] ; then
if [ ! -z "$USEDOCKER" ] ; then
diff --git a/bower.json b/bower.json
index 3aa2cd4b3b2..7dca491e1f9 100644
--- a/bower.json
+++ b/bower.json
@@ -1,7 +1,7 @@
{
- "name": "ownCloud",
- "version": "8.2 pre alpha",
- "homepage": "https://www.owncloud.org",
+ "name": "Nextcloud",
+ "version": "11 alpha",
+ "homepage": "https://www.nextcloud.com",
"license": "AGPL",
"private": true,
"ignore": [
@@ -14,13 +14,13 @@
],
"dependencies": {
"blueimp-md5": "~1.1.0",
- "handlebars": "~1.3.0",
+ "handlebars": "^4.0.5",
"jcrop": "~0.9.12",
"jquery": "~2.2.0",
"jquery-migrate": "~1.4.0",
"jquery-ui": "1.10.0",
"jsTimezoneDetect": "~1.0.5",
- "moment": "~2.10.0",
+ "moment": "^2.15.0",
"select2": "~3.4.8",
"zxcvbn": "*",
"snapjs": "~2.0.0-rc1",
diff --git a/core/Command/Maintenance/UpdateHtaccess.php b/core/Command/Maintenance/UpdateHtaccess.php
index 21850786200..89eeb7ccf5b 100644
--- a/core/Command/Maintenance/UpdateHtaccess.php
+++ b/core/Command/Maintenance/UpdateHtaccess.php
@@ -38,8 +38,12 @@ class UpdateHtaccess extends Command {
}
protected function execute(InputInterface $input, OutputInterface $output) {
- \OC\Setup::updateHtaccess();
- $output->writeln('.htaccess has been updated');
- return 0;
+ if (\OC\Setup::updateHtaccess()) {
+ $output->writeln('.htaccess has been updated');
+ return 0;
+ } else {
+ $output->writeln('<error>Error updating .htaccess file, not enough permissions?</error>');
+ return 1;
+ }
}
}
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index 75c8ef9020e..bdee8a1bb09 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -821,7 +821,11 @@ var OCdialogs = {
self._fillFilePicker(dir);
var getOcDialog = this.closest('.oc-dialog');
var buttonEnableDisable = $('.primary', getOcDialog);
- buttonEnableDisable.prop("disabled", true);
+ if (this.$filePicker.data('mimetype') === "http/unix-directory") {
+ buttonEnableDisable.prop("disabled", false);
+ } else {
+ buttonEnableDisable.prop("disabled", true);
+ }
},
/**
* handle clicks made in the filepicker
@@ -837,7 +841,11 @@ var OCdialogs = {
buttonEnableDisable.prop("disabled", false);
} else if ( $element.data('type') === 'dir' ) {
this._fillFilePicker(this.$filePicker.data('path') + '/' + $element.data('entryname'));
- buttonEnableDisable.prop("disabled", true);
+ if (this.$filePicker.data('mimetype') === "httpd/unix-directory") {
+ buttonEnableDisable.prop("disabled", false);
+ } else {
+ buttonEnableDisable.prop("disabled", true);
+ }
}
}
};
diff --git a/core/js/setup.js b/core/js/setup.js
index 1aad7663223..9190310d5ae 100644
--- a/core/js/setup.js
+++ b/core/js/setup.js
@@ -79,6 +79,17 @@ $(document).ready(function() {
form.append(input);
}
+ // Add redirect_url
+ var redirectURL = getURLParameter('redirect_url');
+ if (redirectURL) {
+ var redirectURLInput = $('<input type="hidden">');
+ redirectURLInput.attr({
+ name: 'redirect_url',
+ value: redirectURL
+ });
+ form.append(redirectURLInput);
+ }
+
// Submit the form
form.appendTo(document.body);
form.submit();
diff --git a/core/l10n/de.js b/core/l10n/de.js
index c5c0b6953d8..64481a9946e 100644
--- a/core/l10n/de.js
+++ b/core/l10n/de.js
@@ -176,14 +176,14 @@ OC.L10N.register(
"access control" : "Zugriffskontrolle",
"Could not unshare" : "Freigabe konnte nicht entfernt werden",
"Share details could not be loaded for this item." : "Details der geteilten Freigabe konnten nicht geladen werden zu diesem Eintrag.",
- "No users or groups found for {search}" : "Kein Benutzer oder Gruppen gefunden für {search}",
+ "No users or groups found for {search}" : "Keine Benutzer oder Gruppen gefunden für {search}",
"No users found for {search}" : "Kein Benutzer gefunden für {search}",
"An error occurred. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuche es noch einmal",
"{sharee} (group)" : "{sharee} (group)",
"{sharee} (at {server})" : "{sharee} (auf {server})",
"{sharee} (remote)" : "{sharee} (remote)",
"Share" : "Teilen",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Teile es mit Nutzern in anderen Nextclouds. Die Syntax hierfür lautet: username@beispiel.de/nextcloud",
+ "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Teile es mit Nutzern auf anderen Nextclouds. Die Syntax hierfür lautet: username@example.com/nextcloud",
"Share with users…" : "Mit Benutzern teilen…",
"Share with users, groups or remote users…" : "Mit Benutzern, Gruppen oder externen Benutzern teilen…",
"Share with users or groups…" : "Mit Benutzern oder Gruppen teilen…",
@@ -211,11 +211,11 @@ OC.L10N.register(
"Hello {name}" : "Hallo {name}",
"new" : "neu",
"_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"],
- "The update is in progress, leaving this page might interrupt the process in some environments." : "Die Aktualisierung wird durchgeführt, wenn Du dieses Fenster verlässt, kann dies den Aktualisierungsprozess in manchen Umgebungen unterbrechen.",
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "Die Aktualisierung wird durchgeführt. Wenn Du dieses Fenster verlässt, kann dies den Aktualisierungsprozess in manchen Umgebungen unterbrechen.",
"Update to {version}" : "Aktualisierung auf {version}",
"An error occurred." : "Es ist ein Fehler aufgetreten.",
"Please reload the page." : "Bitte lade die Seite neu.",
- "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Das Update war nicht erfolgreich. Für weitere Informationen <a href=\"{url}\"> schaue bitte in unser Forum </a> um das Problem zu lösen.",
+ "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Das Update war nicht erfolgreich. Für weitere Informationen <a href=\"{url}\">schaue bitte in unser Forum</a>, um das Problem zu lösen.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Das Update ist fehlgeschlagen. Bitte melde dieses Problem an die <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud Community</a>.",
"Continue to Nextcloud" : "Weiter zur Nextcloud",
"The update was successful. Redirecting you to Nextcloud now." : "Das Update war erfolgreich. Weiterleitung zu Nextcloud.",
@@ -236,7 +236,7 @@ OC.L10N.register(
"Cheers!" : "Noch einen schönen Tag!",
"Internal Server Error" : "Interner Serverfehler",
"The server encountered an internal error and was unable to complete your request." : "Der Server hat einen internen Fehler und konnte Ihre Anfrage nicht vervollständigen.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Bitte wende dich an den Serveradministrator, sollte dieser Fehler mehrfach auftreten, und füge deiner Anfrage die untenstehenden technischen Details bei.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Bitte wende dich an den Serveradministrator, falls dieser Fehler mehrfach auftritt, und füge deiner Anfrage die untenstehenden technischen Details bei.",
"More details can be found in the server log." : "Weitere Details können im Serverprotokoll gefunden werden.",
"Technical details" : "Technische Details",
"Remote Address: %s" : "Entfernte Adresse: %s",
@@ -266,13 +266,13 @@ OC.L10N.register(
"Performance warning" : "Leistungswarnung",
"SQLite will be used as database." : "SQLite wird als Datenbank benutzt.",
"For larger installations we recommend to choose a different database backend." : "Bei größeren Installationen wird die Wahl eines anderen Datenbank-Backends empfohlen.",
- "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei Nutzung des Desktop-Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.",
"Finish setup" : "Installation abschließen",
"Finishing …" : "Abschließen…",
"Need help?" : "Hilfe nötig?",
"See the documentation" : "Schau in die Dokumentation",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass %s <strong>%s</strong> mit dir geteilt hat.<br><a href=\"%s\">Sieh es Dir an!</a><br><br>",
- "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt JavaScript zum ordnungsgemäßen Betrieb. Bitte {linkstart}JavaScript{linkend} aktivieren und die Seite neu laden.",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt JavaScript zum ordnungsgemäßen Betrieb. Bitte aktiviere {linkstart}JavaScript{linkend} und lade die Seite neu.",
"Log out" : "Abmelden",
"Search" : "Suche",
"Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!",
@@ -285,34 +285,34 @@ OC.L10N.register(
"Wrong password." : "Falsches Passwort.",
"Stay logged in" : "Angemeldet bleiben",
"Alternative Logins" : "Alternative Logins",
- "Use the following link to reset your password: {link}" : "Den folgenden Link verwenden, um Ihr Passwort zurückzusetzen: {link}",
+ "Use the following link to reset your password: {link}" : "Verwende den folgenden Link, um dein Passwort zurückzusetzen: {link}",
"New password" : "Neues Passwort",
"New Password" : "Neues Passwort",
"Reset password" : "Passwort zurücksetzen",
"This Nextcloud instance is currently in single user mode." : "Diese Nextcloud-Instanz befindet sich derzeit im Einzelbenutzermodus.",
"This means only administrators can use the instance." : "Dies bedeutet, dass diese Instanz nur von Administratoren genutzt werden kann.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktiere deinen Systemadministrator, wenn diese Meldung dauerhaft oder unerwartet erscheint.",
- "Thank you for your patience." : "Vielen Dank für Ihre Geduld.",
+ "Thank you for your patience." : "Vielen Dank für deine Geduld.",
"Two-factor authentication" : "Zwei-Faktor Authentifizierung",
"Enhanced security is enabled for your account. Please authenticate using a second factor." : "Die erweiterte Sicherheit wurde für dein Konto aktiviert. Bitte authentifiziere dich mit einem zweiten Faktor. ",
"Cancel log in" : "Anmelden abbrechen",
"Use backup code" : "Backup-Code benutzen",
"Error while validating your second factor" : "Fehler beim Bestätigen des zweiten Sicherheitsfaktors",
"You are accessing the server from an untrusted domain." : "Du greifst von einer nicht vertrauenswürdigen Domäne auf den Server zu.",
- "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Bitte kontaktiere deinenAdministrator. Wenn du Administrator dieser Instanz bist, konfiguriere die \"TRUSTED_DOMAINS\" Einstellung in config/config.php .Eine Beispielkonfiguration ist in config/config.sample.php ersichtlich.",
+ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Bitte kontaktiere deinen Administrator. Wenn du Administrator dieser Instanz bist, konfiguriere die „trusted_domains“-Einstellung in config/config.php. Eine Beispielkonfiguration ist in config/config.sample.php verfügbar.",
"Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Wenn es deine Konfiguration zulässt, kannst du als Administrator die folgende Schaltfläche benutzen, um diese Domain als vertrauenswürdig einzustufen.",
"Add \"%s\" as trusted domain" : "„%s“ als vertrauenswürdige Domain hinzufügen",
- "App update required" : "Appupdate notwendig",
- "%s will be updated to version %s" : "%s wird auf Version %s aktuallisiert",
- "These apps will be updated:" : "Diese Apps werden aktuallisiert:",
+ "App update required" : "App-Update notwendig",
+ "%s will be updated to version %s" : "%s wird auf Version %s aktualisiert",
+ "These apps will be updated:" : "Diese Apps werden aktualisiert:",
"These incompatible apps will be disabled:" : "Diese inkompatiblen Apps werden deaktiviert:",
- "The theme %s has been disabled." : "Das Theme %s wurde deaktiviert.",
+ "The theme %s has been disabled." : "Das Thema %s wurde deaktiviert.",
"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Bitte stelle vor dem Fortsetzen sicher, dass die Datenbank, der Konfigurationsordner und der Datenordner gesichert wurden.",
"Start update" : "Aktualisierung starten",
- "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Zur Vermeidung von Zeitüberschreitungen bei größeren Installationen können Sie stattdessen den folgenden Befehl in Ihrem Installationsverzeichnis ausführen:",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Zur Vermeidung von Zeitüberschreitungen bei größeren Installationen kannst Du stattdessen den folgenden Befehl in deinem Installationsverzeichnis ausführen:",
"Detailed logs" : "Detaillierte Fehlermeldungen",
"Update needed" : "Update wird benötigt",
- "Please use the command line updater because you have a big instance." : "Da Du eine grosse Instanz nutzt, wird die Benutzung des Aktualisierungsprogrammes über die Kommandozeile empfohlen.",
+ "Please use the command line updater because you have a big instance." : "Da Du eine große Instanz nutzt, verwende bitte das Aktualisierungsprogramm über die Kommandozeile.",
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Für weitere Hilfen, schaue bitte in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation</a>.",
"This %s instance is currently in maintenance mode, which may take a while." : "Diese %s-Instanz befindet sich gerade im Wartungsmodus, was eine Weile dauern kann.",
"This page will refresh itself when the %s instance is available again." : "Diese Seite aktualisiert sich automatisch, wenn die %s-Instanz wieder verfügbar ist.",
@@ -326,7 +326,7 @@ OC.L10N.register(
"Couldn't send mail to following users: %s " : "An folgende Benutzer konnte keine E-Mail versandt werden: %s",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn du alle Funktionen nutzen möchtest.",
"Allow editing" : "Bearbeitung erlauben",
- "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Das Update läuft gerade. Das Verlassen dieser Seite könnte den Update Prozess in einigen Umgebungen unterbrechen.",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Das Update läuft gerade. Das Verlassen dieser Seite könnte den Aktualisierungsprozess in einigen Umgebungen unterbrechen.",
"Updating to {version}" : "Aktualisierung auf {version}",
"The update was successful. There were warnings." : "Das Update war erfolgreich. Warnungen wurden ausgegeben.",
"Two-step verification" : "Bestätigung in zwei Schritten",
@@ -334,10 +334,10 @@ OC.L10N.register(
"Cancel login" : "Anmelden abbrechen",
"Please authenticate using the selected factor." : "Bitte authentifiziere dich mit dem ausgewählten zweiten Faktor. ",
"An error occured while verifying the token" : "Es ist ein Fehler bei der Verifizierung des Tokens aufgetreten",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Dein Web-Server ist nicht richtig eingerichtet um die folgende URL richtig aufzulösen \"{url}\". Weitere Informationen findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Dein Web-Server ist nicht richtig eingerichtet um die folgende URL richtig aufzulösen: \"{url}\". Weitere Informationen findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.",
"No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Du verwendest im Moment PHP {version}. Wir empfehlen ein Upgrade deiner PHP Version, um die <a target=\"_blank\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP Gruppe bereitgestellt werden</a>, sobald ihre Distribution diese unterstützt.",
+ "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Du verwendest derzeit PHP {version}. Wir empfehlen ein Upgrade deiner PHP-Version, um die <a target=\"_blank\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP-Gruppe bereitgestellt werden</a>, sobald deine Distribution diese unterstützt.",
"The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Die Reverse-Proxy-Header Konfiguration ist falsch, oder du greifst auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn du auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifst, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fälschen. Weitere Informationen hierzu findest du in der <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached ist als distributed cache konfiguriert aber das falsche PHP-Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nur \"memcached\" jedoch nicht \"memcache\". Im <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki nach beiden Modulen suchen</a>.",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Einige Dateien haben die Integritätsprüfung nicht bestanden. Weiterführende Information zum Lösen des Problems findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste der ungültigen Dateien ...</a> / <a href=\"{rescanEndpoint}\">Erneut analysieren…</a>)",
diff --git a/core/l10n/de.json b/core/l10n/de.json
index 07a7085d0b6..84201e54b8f 100644
--- a/core/l10n/de.json
+++ b/core/l10n/de.json
@@ -174,14 +174,14 @@
"access control" : "Zugriffskontrolle",
"Could not unshare" : "Freigabe konnte nicht entfernt werden",
"Share details could not be loaded for this item." : "Details der geteilten Freigabe konnten nicht geladen werden zu diesem Eintrag.",
- "No users or groups found for {search}" : "Kein Benutzer oder Gruppen gefunden für {search}",
+ "No users or groups found for {search}" : "Keine Benutzer oder Gruppen gefunden für {search}",
"No users found for {search}" : "Kein Benutzer gefunden für {search}",
"An error occurred. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuche es noch einmal",
"{sharee} (group)" : "{sharee} (group)",
"{sharee} (at {server})" : "{sharee} (auf {server})",
"{sharee} (remote)" : "{sharee} (remote)",
"Share" : "Teilen",
- "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Teile es mit Nutzern in anderen Nextclouds. Die Syntax hierfür lautet: username@beispiel.de/nextcloud",
+ "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Teile es mit Nutzern auf anderen Nextclouds. Die Syntax hierfür lautet: username@example.com/nextcloud",
"Share with users…" : "Mit Benutzern teilen…",
"Share with users, groups or remote users…" : "Mit Benutzern, Gruppen oder externen Benutzern teilen…",
"Share with users or groups…" : "Mit Benutzern oder Gruppen teilen…",
@@ -209,11 +209,11 @@
"Hello {name}" : "Hallo {name}",
"new" : "neu",
"_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"],
- "The update is in progress, leaving this page might interrupt the process in some environments." : "Die Aktualisierung wird durchgeführt, wenn Du dieses Fenster verlässt, kann dies den Aktualisierungsprozess in manchen Umgebungen unterbrechen.",
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "Die Aktualisierung wird durchgeführt. Wenn Du dieses Fenster verlässt, kann dies den Aktualisierungsprozess in manchen Umgebungen unterbrechen.",
"Update to {version}" : "Aktualisierung auf {version}",
"An error occurred." : "Es ist ein Fehler aufgetreten.",
"Please reload the page." : "Bitte lade die Seite neu.",
- "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Das Update war nicht erfolgreich. Für weitere Informationen <a href=\"{url}\"> schaue bitte in unser Forum </a> um das Problem zu lösen.",
+ "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Das Update war nicht erfolgreich. Für weitere Informationen <a href=\"{url}\">schaue bitte in unser Forum</a>, um das Problem zu lösen.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Das Update ist fehlgeschlagen. Bitte melde dieses Problem an die <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud Community</a>.",
"Continue to Nextcloud" : "Weiter zur Nextcloud",
"The update was successful. Redirecting you to Nextcloud now." : "Das Update war erfolgreich. Weiterleitung zu Nextcloud.",
@@ -234,7 +234,7 @@
"Cheers!" : "Noch einen schönen Tag!",
"Internal Server Error" : "Interner Serverfehler",
"The server encountered an internal error and was unable to complete your request." : "Der Server hat einen internen Fehler und konnte Ihre Anfrage nicht vervollständigen.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Bitte wende dich an den Serveradministrator, sollte dieser Fehler mehrfach auftreten, und füge deiner Anfrage die untenstehenden technischen Details bei.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Bitte wende dich an den Serveradministrator, falls dieser Fehler mehrfach auftritt, und füge deiner Anfrage die untenstehenden technischen Details bei.",
"More details can be found in the server log." : "Weitere Details können im Serverprotokoll gefunden werden.",
"Technical details" : "Technische Details",
"Remote Address: %s" : "Entfernte Adresse: %s",
@@ -264,13 +264,13 @@
"Performance warning" : "Leistungswarnung",
"SQLite will be used as database." : "SQLite wird als Datenbank benutzt.",
"For larger installations we recommend to choose a different database backend." : "Bei größeren Installationen wird die Wahl eines anderen Datenbank-Backends empfohlen.",
- "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei Nutzung des Desktop-Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.",
"Finish setup" : "Installation abschließen",
"Finishing …" : "Abschließen…",
"Need help?" : "Hilfe nötig?",
"See the documentation" : "Schau in die Dokumentation",
"Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hallo,<br><br>hier nur kurz die Mitteilung, dass %s <strong>%s</strong> mit dir geteilt hat.<br><a href=\"%s\">Sieh es Dir an!</a><br><br>",
- "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt JavaScript zum ordnungsgemäßen Betrieb. Bitte {linkstart}JavaScript{linkend} aktivieren und die Seite neu laden.",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt JavaScript zum ordnungsgemäßen Betrieb. Bitte aktiviere {linkstart}JavaScript{linkend} und lade die Seite neu.",
"Log out" : "Abmelden",
"Search" : "Suche",
"Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!",
@@ -283,34 +283,34 @@
"Wrong password." : "Falsches Passwort.",
"Stay logged in" : "Angemeldet bleiben",
"Alternative Logins" : "Alternative Logins",
- "Use the following link to reset your password: {link}" : "Den folgenden Link verwenden, um Ihr Passwort zurückzusetzen: {link}",
+ "Use the following link to reset your password: {link}" : "Verwende den folgenden Link, um dein Passwort zurückzusetzen: {link}",
"New password" : "Neues Passwort",
"New Password" : "Neues Passwort",
"Reset password" : "Passwort zurücksetzen",
"This Nextcloud instance is currently in single user mode." : "Diese Nextcloud-Instanz befindet sich derzeit im Einzelbenutzermodus.",
"This means only administrators can use the instance." : "Dies bedeutet, dass diese Instanz nur von Administratoren genutzt werden kann.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktiere deinen Systemadministrator, wenn diese Meldung dauerhaft oder unerwartet erscheint.",
- "Thank you for your patience." : "Vielen Dank für Ihre Geduld.",
+ "Thank you for your patience." : "Vielen Dank für deine Geduld.",
"Two-factor authentication" : "Zwei-Faktor Authentifizierung",
"Enhanced security is enabled for your account. Please authenticate using a second factor." : "Die erweiterte Sicherheit wurde für dein Konto aktiviert. Bitte authentifiziere dich mit einem zweiten Faktor. ",
"Cancel log in" : "Anmelden abbrechen",
"Use backup code" : "Backup-Code benutzen",
"Error while validating your second factor" : "Fehler beim Bestätigen des zweiten Sicherheitsfaktors",
"You are accessing the server from an untrusted domain." : "Du greifst von einer nicht vertrauenswürdigen Domäne auf den Server zu.",
- "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Bitte kontaktiere deinenAdministrator. Wenn du Administrator dieser Instanz bist, konfiguriere die \"TRUSTED_DOMAINS\" Einstellung in config/config.php .Eine Beispielkonfiguration ist in config/config.sample.php ersichtlich.",
+ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Bitte kontaktiere deinen Administrator. Wenn du Administrator dieser Instanz bist, konfiguriere die „trusted_domains“-Einstellung in config/config.php. Eine Beispielkonfiguration ist in config/config.sample.php verfügbar.",
"Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Wenn es deine Konfiguration zulässt, kannst du als Administrator die folgende Schaltfläche benutzen, um diese Domain als vertrauenswürdig einzustufen.",
"Add \"%s\" as trusted domain" : "„%s“ als vertrauenswürdige Domain hinzufügen",
- "App update required" : "Appupdate notwendig",
- "%s will be updated to version %s" : "%s wird auf Version %s aktuallisiert",
- "These apps will be updated:" : "Diese Apps werden aktuallisiert:",
+ "App update required" : "App-Update notwendig",
+ "%s will be updated to version %s" : "%s wird auf Version %s aktualisiert",
+ "These apps will be updated:" : "Diese Apps werden aktualisiert:",
"These incompatible apps will be disabled:" : "Diese inkompatiblen Apps werden deaktiviert:",
- "The theme %s has been disabled." : "Das Theme %s wurde deaktiviert.",
+ "The theme %s has been disabled." : "Das Thema %s wurde deaktiviert.",
"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Bitte stelle vor dem Fortsetzen sicher, dass die Datenbank, der Konfigurationsordner und der Datenordner gesichert wurden.",
"Start update" : "Aktualisierung starten",
- "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Zur Vermeidung von Zeitüberschreitungen bei größeren Installationen können Sie stattdessen den folgenden Befehl in Ihrem Installationsverzeichnis ausführen:",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Zur Vermeidung von Zeitüberschreitungen bei größeren Installationen kannst Du stattdessen den folgenden Befehl in deinem Installationsverzeichnis ausführen:",
"Detailed logs" : "Detaillierte Fehlermeldungen",
"Update needed" : "Update wird benötigt",
- "Please use the command line updater because you have a big instance." : "Da Du eine grosse Instanz nutzt, wird die Benutzung des Aktualisierungsprogrammes über die Kommandozeile empfohlen.",
+ "Please use the command line updater because you have a big instance." : "Da Du eine große Instanz nutzt, verwende bitte das Aktualisierungsprogramm über die Kommandozeile.",
"For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Für weitere Hilfen, schaue bitte in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation</a>.",
"This %s instance is currently in maintenance mode, which may take a while." : "Diese %s-Instanz befindet sich gerade im Wartungsmodus, was eine Weile dauern kann.",
"This page will refresh itself when the %s instance is available again." : "Diese Seite aktualisiert sich automatisch, wenn die %s-Instanz wieder verfügbar ist.",
@@ -324,7 +324,7 @@
"Couldn't send mail to following users: %s " : "An folgende Benutzer konnte keine E-Mail versandt werden: %s",
"This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn du alle Funktionen nutzen möchtest.",
"Allow editing" : "Bearbeitung erlauben",
- "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Das Update läuft gerade. Das Verlassen dieser Seite könnte den Update Prozess in einigen Umgebungen unterbrechen.",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Das Update läuft gerade. Das Verlassen dieser Seite könnte den Aktualisierungsprozess in einigen Umgebungen unterbrechen.",
"Updating to {version}" : "Aktualisierung auf {version}",
"The update was successful. There were warnings." : "Das Update war erfolgreich. Warnungen wurden ausgegeben.",
"Two-step verification" : "Bestätigung in zwei Schritten",
@@ -332,10 +332,10 @@
"Cancel login" : "Anmelden abbrechen",
"Please authenticate using the selected factor." : "Bitte authentifiziere dich mit dem ausgewählten zweiten Faktor. ",
"An error occured while verifying the token" : "Es ist ein Fehler bei der Verifizierung des Tokens aufgetreten",
- "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Dein Web-Server ist nicht richtig eingerichtet um die folgende URL richtig aufzulösen \"{url}\". Weitere Informationen findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Dein Web-Server ist nicht richtig eingerichtet um die folgende URL richtig aufzulösen: \"{url}\". Weitere Informationen findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.",
"No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.",
- "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Du verwendest im Moment PHP {version}. Wir empfehlen ein Upgrade deiner PHP Version, um die <a target=\"_blank\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP Gruppe bereitgestellt werden</a>, sobald ihre Distribution diese unterstützt.",
+ "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Du verwendest derzeit PHP {version}. Wir empfehlen ein Upgrade deiner PHP-Version, um die <a target=\"_blank\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP-Gruppe bereitgestellt werden</a>, sobald deine Distribution diese unterstützt.",
"The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Die Reverse-Proxy-Header Konfiguration ist falsch, oder du greifst auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn du auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifst, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fälschen. Weitere Informationen hierzu findest du in der <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>.",
"Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached ist als distributed cache konfiguriert aber das falsche PHP-Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nur \"memcached\" jedoch nicht \"memcache\". Im <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki nach beiden Modulen suchen</a>.",
"Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Einige Dateien haben die Integritätsprüfung nicht bestanden. Weiterführende Information zum Lösen des Problems findest du in unserer <a target=\"_blank\" href=\"{docLink}\">Dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste der ungültigen Dateien ...</a> / <a href=\"{rescanEndpoint}\">Erneut analysieren…</a>)",
diff --git a/core/l10n/el.js b/core/l10n/el.js
index 66a40d00465..5bc4c9aab55 100644
--- a/core/l10n/el.js
+++ b/core/l10n/el.js
@@ -152,10 +152,13 @@ OC.L10N.register(
"change" : "αλλαγή",
"delete" : "διαγραφή",
"access control" : "έλεγχος πρόσβασης",
+ "Could not unshare" : "Δεν μπορεί να γίνει αναίρεση διαμοιρασμού",
"Share details could not be loaded for this item." : "Αδυναμία φόρτωσης λεπτομερειών διαμοιρασμού για αυτό το αντικείμενο.",
+ "An error occurred. Please try again" : "Παρουσιάστηκε σφάλμα. Παρακαλώ δοκιμάστε αργότερα",
"{sharee} (group)" : "{sharee} (ομάδα)",
"Share" : "Διαμοιρασμός",
"Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Διαμοιρασμός με άτομα σε άλλα ownClouds χρησιμοποιώντας την σύνταξη username@example.com/owncloud",
+ "Share with users…" : "Διαμοιρασμός με χρήστες...",
"Warning" : "Προειδοποίηση",
"Error while sending notification" : "Σφάλμα κατά την αποστολή ειδοποίησης",
"({scope})" : "({scope})",
@@ -172,9 +175,11 @@ OC.L10N.register(
"sunny" : "ηλιόλουστη",
"Hello {name}, the weather is {weather}" : "Γειά σου {name}, ο καιρός είναι {weather}",
"Hello {name}" : "Γεια σου {name}",
+ "new" : "νέο",
"_download %n file_::_download %n files_" : ["λήψη %n αρχείου","λήψη %n αρχείων"],
"An error occurred." : "Παρουσιάστηκε σφάλμα",
"Please reload the page." : "Παρακαλώ επαναφορτώστε τη σελίδα.",
+ "Continue to Nextcloud" : "Συνέχεια στον Nextcloud",
"Searching other places" : "Έρευνα σε άλλα σημεία.",
"No search results in other folders" : "Δεν υπάρχουν αποτελέσματα αναζήτησης σε άλλους φακέλους",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} αποτέλεσμα αναζήτησης σε άλλο φάκελο","{count} αποτελέσματα αναζήτησης σε άλλους φακέλους"],
@@ -232,6 +237,7 @@ OC.L10N.register(
"Search" : "Αναζήτηση",
"Server side authentication failed!" : "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!",
"Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.",
+ "An internal error occurred." : "Παρουσιάστηκε ένα εσωτερικό σφάλμα.",
"Please try again or contact your administrator." : "Παρακαλώ δοκιμάστε ξανά ή επικοινωνήστε με τον διαχειριστή σας.",
"Username or email" : "Όνομα χρήστη ή email",
"Log in" : "Είσοδος",
diff --git a/core/l10n/el.json b/core/l10n/el.json
index ace5d9f2109..122432e24d9 100644
--- a/core/l10n/el.json
+++ b/core/l10n/el.json
@@ -150,10 +150,13 @@
"change" : "αλλαγή",
"delete" : "διαγραφή",
"access control" : "έλεγχος πρόσβασης",
+ "Could not unshare" : "Δεν μπορεί να γίνει αναίρεση διαμοιρασμού",
"Share details could not be loaded for this item." : "Αδυναμία φόρτωσης λεπτομερειών διαμοιρασμού για αυτό το αντικείμενο.",
+ "An error occurred. Please try again" : "Παρουσιάστηκε σφάλμα. Παρακαλώ δοκιμάστε αργότερα",
"{sharee} (group)" : "{sharee} (ομάδα)",
"Share" : "Διαμοιρασμός",
"Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Διαμοιρασμός με άτομα σε άλλα ownClouds χρησιμοποιώντας την σύνταξη username@example.com/owncloud",
+ "Share with users…" : "Διαμοιρασμός με χρήστες...",
"Warning" : "Προειδοποίηση",
"Error while sending notification" : "Σφάλμα κατά την αποστολή ειδοποίησης",
"({scope})" : "({scope})",
@@ -170,9 +173,11 @@
"sunny" : "ηλιόλουστη",
"Hello {name}, the weather is {weather}" : "Γειά σου {name}, ο καιρός είναι {weather}",
"Hello {name}" : "Γεια σου {name}",
+ "new" : "νέο",
"_download %n file_::_download %n files_" : ["λήψη %n αρχείου","λήψη %n αρχείων"],
"An error occurred." : "Παρουσιάστηκε σφάλμα",
"Please reload the page." : "Παρακαλώ επαναφορτώστε τη σελίδα.",
+ "Continue to Nextcloud" : "Συνέχεια στον Nextcloud",
"Searching other places" : "Έρευνα σε άλλα σημεία.",
"No search results in other folders" : "Δεν υπάρχουν αποτελέσματα αναζήτησης σε άλλους φακέλους",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} αποτέλεσμα αναζήτησης σε άλλο φάκελο","{count} αποτελέσματα αναζήτησης σε άλλους φακέλους"],
@@ -230,6 +235,7 @@
"Search" : "Αναζήτηση",
"Server side authentication failed!" : "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!",
"Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.",
+ "An internal error occurred." : "Παρουσιάστηκε ένα εσωτερικό σφάλμα.",
"Please try again or contact your administrator." : "Παρακαλώ δοκιμάστε ξανά ή επικοινωνήστε με τον διαχειριστή σας.",
"Username or email" : "Όνομα χρήστη ή email",
"Log in" : "Είσοδος",
diff --git a/core/l10n/hu_HU.js b/core/l10n/hu_HU.js
index 92ce348e5a6..14bc5fbeaab 100644
--- a/core/l10n/hu_HU.js
+++ b/core/l10n/hu_HU.js
@@ -123,6 +123,7 @@ OC.L10N.register(
"Strong password" : "Erős jelszó",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "A webszerver nincs megfelelően beállítva a fájl szinkronizációhoz, mert a WebDAV interfész nem működik.",
"Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A webszerver nincs jól beállítva, hogy kiszolgálja a(z) „{url}” hivatkozást. Bővebb információt a <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentációban</a> találhat.",
+ "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ennek a szervernek nincs működő internet kapcsolata: több végpont nem érhető el. Ez azt jelenti, hogy néhány funkció, mint pl. külső tárolók csatolása, frissítési értesítések, vagy a harmadik féltől származó alkalmazások telepítése nem fog működni. A fájlok távoli elérése és az e-mail értesítések is lehet, hogy nem működnek. Ajánlott az internet kapcsolat engedélyezése a szerveren, ha minden funkciót használni szeretnél.",
"No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Nincs memória gyorsítótár beállítva. A teljesítmény növelése érdekében kérjük állítsa be a memcache-t, ha elérhető. Bővebb információt a <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentációban</a> találhat.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "/dev/urandom nem olvasható a PHP számára, mely nagy biztonsági probléma. Bővebb információt a <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentációban</a> találhat.",
"You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Jelenleg {version} PHP verziót használ. Javasoljuk, hogy frissítse a PHP verziót, hogy kihasználhassa a <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">teljesítménybeli és a biztonságbeli előnyöket, amiket a PHP csoport kínál</a>, amilyen hamar a disztribúciója támogatja.",
@@ -204,7 +205,6 @@ OC.L10N.register(
"Error loading dialog template: {error}" : "Hiba a párbeszédpanel-sablon betöltésekor: {error}",
"No tags selected for deletion." : "Nincs törlésre kijelölt címke.",
"unknown text" : "ismeretlen szöveg",
- "Hello world!" : "Üdv, Világ!",
"sunny" : "napos",
"Hello {name}, the weather is {weather}" : "Üdv {name}, {weather} időnk van",
"Hello {name}" : "Üdv {name}!",
@@ -216,6 +216,7 @@ OC.L10N.register(
"Please reload the page." : "Kérjük frissítse az oldalt!",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Frissítés sikertelen. Bővebb információért <a href=\"{url}\">keresse fel a fórumunkat</a> a probléma lefedéséért.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "A frissítés sikertelen volt. Kérlek jelezd a problémát a <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud közösségnek</a>.",
+ "Continue to Nextcloud" : "Irány a Nextcloud",
"The update was successful. Redirecting you to Nextcloud now." : "A frissítés sikeres volt. Most átirányítunk a Nextcloudhoz.",
"Searching other places" : "Keresés más helyeken",
"No search results in other folders" : "Nincs keresési eredmény a másik mappákban",
@@ -321,14 +322,25 @@ OC.L10N.register(
"Error favoriting" : "Hiba a kedvencekhez adáskor",
"Error unfavoriting" : "Hiba a kedvencekből törléskor",
"Couldn't send mail to following users: %s " : "Nem sikerült e-mailt küldeni a következő felhasználóknak: %s",
+ "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ennek a szervernek nincs működő internet kapcsolata. Ez azt jelenti, hogy néhány funkció, mint pl. külső tárolók csatolása, frissítési értesítések, vagy a harmadik féltől származó alkalmazások telepítése nem fog működni. A fájlok távoli elérése és az e-mail értesítések is lehet, hogy nem működnek. Ajánlott az internet kapcsolat engedélyezése a szerveren, ha minden funkciót használni szeretnél.",
"Allow editing" : "Szerkesztés engedélyezése",
"The upgrade is in progress, leaving this page might interrupt the process in some environments." : "A frissítés folyamatban van, az oldal elhagyása néhány környezetben lehet, hogy megszakítja a folyamatot.",
"Updating to {version}" : "Frissítés erre a verzióra: {version}",
"The update was successful. There were warnings." : "A frissítés sikerült. Figyelmeztetések találhatók.",
"Two-step verification" : "Kétlépcsős ellenőrzés",
"Cancel login" : "Bejelentkezés megszakítása",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "A webszer nincs megfelelően beállítva a következő feloldására: \"{url}\". További információkat a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Nincs memória gyorsítótár beállítva. A teljesítmény növelése érdekében kérlek állítd be a memcache-t, ha elérhető. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom nem olvasható a PHP számára, ami biztonsági okokból nem javasolt.. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
+ "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Jelenleg {version} PHP verziót futtatsz. Javasoljuk, hogy amilyen hamar a disztribúciód támogatja, frissítsd a PHP verziót, hogy kihasználhasd a <a target=\"_blank\" href=\"{phpLink}\">teljesítménybeli és a biztonságbeli előnyöket, amiket a PHP Group kínál</a>.",
+ "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "A fordított proxy fejlécek konfigurációs beállításai helytelenek, vagy egy megbízható proxy-ból próbálod a Nextcloudot elérni. Ha nem megbízható proxy-ból próbálod elérni az Nextcloudot, akkor ez egy biztonsági probléma, a támadó az Nextcloud számára látható IP cím csalást tud végrehajtani. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találhatsz.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "A memcached be van konfigurálva gyorsítótárnak, de rossz \"memcache\" PHP modul van telepítve. \\OC\\Memcache\\Memcached csak a \"memcached\"-t támogatja, és nem a \"memcache\"-t. Kérlek, nézd meg a <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki oldalt a modulokkal kapcsolatban</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Néhány fájl nem felelt meg az integritás ellenőrzésen. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találhatsz. (<a href=\"{codeIntegrityDownloadEndpoint}\">Érvénytelen fájlok listája…</a> / <a href=\"{rescanEndpoint}\">Újra ellenőrzés…</a>)",
+ "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "A \"Strict-Transport-Security\" HTTP fejléc nincs beállítva hogy \"{seconds}\" másodpercig tartson. Biztonsági okokból ajánljuk, hogy engedélyezd a HSTS, ahogyan ezt részletezzük a <a href=\"{docUrl}\">biztonsági tippek</a> dokumentációban.",
"An error occured. Please try again" : "Hiba történt. Kérjük, próbálja újra!",
"not assignable" : "nem hozzárendelhető",
+ "Updating {productName} to version {version}, this may take a while." : "{productName} frissítése erre a verzióra: {version}, ez eltarthat egy ideig.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "A szerver megfelelő beállításához kérjük olvasd el a <a href=\"%s\" target=\"_blank\">dokumentációt</a>.",
"An internal error occured." : "Belső hiba történt."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/hu_HU.json b/core/l10n/hu_HU.json
index ad53caccea6..677e9591928 100644
--- a/core/l10n/hu_HU.json
+++ b/core/l10n/hu_HU.json
@@ -121,6 +121,7 @@
"Strong password" : "Erős jelszó",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "A webszerver nincs megfelelően beállítva a fájl szinkronizációhoz, mert a WebDAV interfész nem működik.",
"Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "A webszerver nincs jól beállítva, hogy kiszolgálja a(z) „{url}” hivatkozást. Bővebb információt a <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentációban</a> találhat.",
+ "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ennek a szervernek nincs működő internet kapcsolata: több végpont nem érhető el. Ez azt jelenti, hogy néhány funkció, mint pl. külső tárolók csatolása, frissítési értesítések, vagy a harmadik féltől származó alkalmazások telepítése nem fog működni. A fájlok távoli elérése és az e-mail értesítések is lehet, hogy nem működnek. Ajánlott az internet kapcsolat engedélyezése a szerveren, ha minden funkciót használni szeretnél.",
"No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Nincs memória gyorsítótár beállítva. A teljesítmény növelése érdekében kérjük állítsa be a memcache-t, ha elérhető. Bővebb információt a <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentációban</a> találhat.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "/dev/urandom nem olvasható a PHP számára, mely nagy biztonsági probléma. Bővebb információt a <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentációban</a> találhat.",
"You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Jelenleg {version} PHP verziót használ. Javasoljuk, hogy frissítse a PHP verziót, hogy kihasználhassa a <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">teljesítménybeli és a biztonságbeli előnyöket, amiket a PHP csoport kínál</a>, amilyen hamar a disztribúciója támogatja.",
@@ -202,7 +203,6 @@
"Error loading dialog template: {error}" : "Hiba a párbeszédpanel-sablon betöltésekor: {error}",
"No tags selected for deletion." : "Nincs törlésre kijelölt címke.",
"unknown text" : "ismeretlen szöveg",
- "Hello world!" : "Üdv, Világ!",
"sunny" : "napos",
"Hello {name}, the weather is {weather}" : "Üdv {name}, {weather} időnk van",
"Hello {name}" : "Üdv {name}!",
@@ -214,6 +214,7 @@
"Please reload the page." : "Kérjük frissítse az oldalt!",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Frissítés sikertelen. Bővebb információért <a href=\"{url}\">keresse fel a fórumunkat</a> a probléma lefedéséért.",
"The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "A frissítés sikertelen volt. Kérlek jelezd a problémát a <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud közösségnek</a>.",
+ "Continue to Nextcloud" : "Irány a Nextcloud",
"The update was successful. Redirecting you to Nextcloud now." : "A frissítés sikeres volt. Most átirányítunk a Nextcloudhoz.",
"Searching other places" : "Keresés más helyeken",
"No search results in other folders" : "Nincs keresési eredmény a másik mappákban",
@@ -319,14 +320,25 @@
"Error favoriting" : "Hiba a kedvencekhez adáskor",
"Error unfavoriting" : "Hiba a kedvencekből törléskor",
"Couldn't send mail to following users: %s " : "Nem sikerült e-mailt küldeni a következő felhasználóknak: %s",
+ "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ennek a szervernek nincs működő internet kapcsolata. Ez azt jelenti, hogy néhány funkció, mint pl. külső tárolók csatolása, frissítési értesítések, vagy a harmadik féltől származó alkalmazások telepítése nem fog működni. A fájlok távoli elérése és az e-mail értesítések is lehet, hogy nem működnek. Ajánlott az internet kapcsolat engedélyezése a szerveren, ha minden funkciót használni szeretnél.",
"Allow editing" : "Szerkesztés engedélyezése",
"The upgrade is in progress, leaving this page might interrupt the process in some environments." : "A frissítés folyamatban van, az oldal elhagyása néhány környezetben lehet, hogy megszakítja a folyamatot.",
"Updating to {version}" : "Frissítés erre a verzióra: {version}",
"The update was successful. There were warnings." : "A frissítés sikerült. Figyelmeztetések találhatók.",
"Two-step verification" : "Kétlépcsős ellenőrzés",
"Cancel login" : "Bejelentkezés megszakítása",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "A webszer nincs megfelelően beállítva a következő feloldására: \"{url}\". További információkat a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
+ "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Nincs memória gyorsítótár beállítva. A teljesítmény növelése érdekében kérlek állítd be a memcache-t, ha elérhető. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
+ "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom nem olvasható a PHP számára, ami biztonsági okokból nem javasolt.. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
+ "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Jelenleg {version} PHP verziót futtatsz. Javasoljuk, hogy amilyen hamar a disztribúciód támogatja, frissítsd a PHP verziót, hogy kihasználhasd a <a target=\"_blank\" href=\"{phpLink}\">teljesítménybeli és a biztonságbeli előnyöket, amiket a PHP Group kínál</a>.",
+ "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "A fordított proxy fejlécek konfigurációs beállításai helytelenek, vagy egy megbízható proxy-ból próbálod a Nextcloudot elérni. Ha nem megbízható proxy-ból próbálod elérni az Nextcloudot, akkor ez egy biztonsági probléma, a támadó az Nextcloud számára látható IP cím csalást tud végrehajtani. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találhatsz.",
+ "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "A memcached be van konfigurálva gyorsítótárnak, de rossz \"memcache\" PHP modul van telepítve. \\OC\\Memcache\\Memcached csak a \"memcached\"-t támogatja, és nem a \"memcache\"-t. Kérlek, nézd meg a <a target=\"_blank\" href=\"{wikiLink}\">memcached wiki oldalt a modulokkal kapcsolatban</a>.",
+ "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Néhány fájl nem felelt meg az integritás ellenőrzésen. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találhatsz. (<a href=\"{codeIntegrityDownloadEndpoint}\">Érvénytelen fájlok listája…</a> / <a href=\"{rescanEndpoint}\">Újra ellenőrzés…</a>)",
+ "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "A \"Strict-Transport-Security\" HTTP fejléc nincs beállítva hogy \"{seconds}\" másodpercig tartson. Biztonsági okokból ajánljuk, hogy engedélyezd a HSTS, ahogyan ezt részletezzük a <a href=\"{docUrl}\">biztonsági tippek</a> dokumentációban.",
"An error occured. Please try again" : "Hiba történt. Kérjük, próbálja újra!",
"not assignable" : "nem hozzárendelhető",
+ "Updating {productName} to version {version}, this may take a while." : "{productName} frissítése erre a verzióra: {version}, ez eltarthat egy ideig.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "A szerver megfelelő beállításához kérjük olvasd el a <a href=\"%s\" target=\"_blank\">dokumentációt</a>.",
"An internal error occured." : "Belső hiba történt."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/vendor/.gitignore b/core/vendor/.gitignore
index c20abadb44c..70636c39323 100644
--- a/core/vendor/.gitignore
+++ b/core/vendor/.gitignore
@@ -24,12 +24,11 @@ blueimp-md5/js/*
blueimp-md5/index.html
# momentjs - ignore all files except the two listed below
-moment/benchmarks
-moment/locale
+moment/**
+!moment/.bower.json
+!moment/min
+!moment/LICENSE
moment/min/**
-moment/moment.js
-moment/scripts
-moment/templates
!moment/min/moment-with-locales.js
# jquery
diff --git a/core/vendor/handlebars/.bower.json b/core/vendor/handlebars/.bower.json
index 2d17a2faacb..b526f462e19 100644
--- a/core/vendor/handlebars/.bower.json
+++ b/core/vendor/handlebars/.bower.json
@@ -1,16 +1,17 @@
{
"name": "handlebars",
- "version": "1.3.0",
+ "version": "4.0.5",
"main": "handlebars.js",
+ "license": "MIT",
"dependencies": {},
"homepage": "https://github.com/components/handlebars.js",
- "_release": "1.3.0",
+ "_release": "4.0.5",
"_resolution": {
"type": "version",
- "tag": "v1.3.0",
- "commit": "ddd21a44be399ae4de486ddd868bacf84e92b9c4"
+ "tag": "v4.0.5",
+ "commit": "9b7adf2df23cf0ecc7bd60b43d43989e63222f5a"
},
- "_source": "git://github.com/components/handlebars.js.git",
- "_target": "~1.3.0",
+ "_source": "https://github.com/components/handlebars.js.git",
+ "_target": "^4.0.5",
"_originalSource": "handlebars"
} \ No newline at end of file
diff --git a/core/vendor/handlebars/handlebars.js b/core/vendor/handlebars/handlebars.js
index bec7085c510..182c1be831d 100644
--- a/core/vendor/handlebars/handlebars.js
+++ b/core/vendor/handlebars/handlebars.js
@@ -1,8 +1,8 @@
/*!
- handlebars v1.3.0
+ handlebars v4.0.5
-Copyright (C) 2011 by Yehuda Katz
+Copyright (C) 2011-2015 by Yehuda Katz
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -24,2723 +24,4585 @@ THE SOFTWARE.
@license
*/
-/* exported Handlebars */
-var Handlebars = (function() {
-// handlebars/safe-string.js
-var __module4__ = (function() {
- "use strict";
- var __exports__;
- // Build out our basic SafeString type
- function SafeString(string) {
- this.string = string;
- }
-
- SafeString.prototype.toString = function() {
- return "" + this.string;
- };
-
- __exports__ = SafeString;
- return __exports__;
-})();
-
-// handlebars/utils.js
-var __module3__ = (function(__dependency1__) {
- "use strict";
- var __exports__ = {};
- /*jshint -W004 */
- var SafeString = __dependency1__;
-
- var escape = {
- "&": "&amp;",
- "<": "&lt;",
- ">": "&gt;",
- '"': "&quot;",
- "'": "&#x27;",
- "`": "&#x60;"
- };
-
- var badChars = /[&<>"'`]/g;
- var possible = /[&<>"'`]/;
-
- function escapeChar(chr) {
- return escape[chr] || "&amp;";
- }
-
- function extend(obj, value) {
- for(var key in value) {
- if(Object.prototype.hasOwnProperty.call(value, key)) {
- obj[key] = value[key];
- }
- }
- }
-
- __exports__.extend = extend;var toString = Object.prototype.toString;
- __exports__.toString = toString;
- // Sourced from lodash
- // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
- var isFunction = function(value) {
- return typeof value === 'function';
- };
- // fallback for older versions of Chrome and Safari
- if (isFunction(/x/)) {
- isFunction = function(value) {
- return typeof value === 'function' && toString.call(value) === '[object Function]';
- };
- }
- var isFunction;
- __exports__.isFunction = isFunction;
- var isArray = Array.isArray || function(value) {
- return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false;
- };
- __exports__.isArray = isArray;
-
- function escapeExpression(string) {
- // don't escape SafeStrings, since they're already safe
- if (string instanceof SafeString) {
- return string.toString();
- } else if (!string && string !== 0) {
- return "";
- }
-
- // Force a string conversion as this will be done by the append regardless and
- // the regex test will do this transparently behind the scenes, causing issues if
- // an object's to string has escaped characters in it.
- string = "" + string;
-
- if(!possible.test(string)) { return string; }
- return string.replace(badChars, escapeChar);
- }
-
- __exports__.escapeExpression = escapeExpression;function isEmpty(value) {
- if (!value && value !== 0) {
- return true;
- } else if (isArray(value) && value.length === 0) {
- return true;
- } else {
- return false;
- }
- }
-
- __exports__.isEmpty = isEmpty;
- return __exports__;
-})(__module4__);
-
-// handlebars/exception.js
-var __module5__ = (function() {
- "use strict";
- var __exports__;
-
- var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
-
- function Exception(message, node) {
- var line;
- if (node && node.firstLine) {
- line = node.firstLine;
-
- message += ' - ' + line + ':' + node.firstColumn;
- }
-
- var tmp = Error.prototype.constructor.call(this, message);
-
- // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
- for (var idx = 0; idx < errorProps.length; idx++) {
- this[errorProps[idx]] = tmp[errorProps[idx]];
- }
-
- if (line) {
- this.lineNumber = line;
- this.column = node.firstColumn;
- }
- }
-
- Exception.prototype = new Error();
-
- __exports__ = Exception;
- return __exports__;
-})();
-
-// handlebars/base.js
-var __module2__ = (function(__dependency1__, __dependency2__) {
- "use strict";
- var __exports__ = {};
- var Utils = __dependency1__;
- var Exception = __dependency2__;
-
- var VERSION = "1.3.0";
- __exports__.VERSION = VERSION;var COMPILER_REVISION = 4;
- __exports__.COMPILER_REVISION = COMPILER_REVISION;
- var REVISION_CHANGES = {
- 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it
- 2: '== 1.0.0-rc.3',
- 3: '== 1.0.0-rc.4',
- 4: '>= 1.0.0'
- };
- __exports__.REVISION_CHANGES = REVISION_CHANGES;
- var isArray = Utils.isArray,
- isFunction = Utils.isFunction,
- toString = Utils.toString,
- objectType = '[object Object]';
-
- function HandlebarsEnvironment(helpers, partials) {
- this.helpers = helpers || {};
- this.partials = partials || {};
-
- registerDefaultHelpers(this);
- }
-
- __exports__.HandlebarsEnvironment = HandlebarsEnvironment;HandlebarsEnvironment.prototype = {
- constructor: HandlebarsEnvironment,
-
- logger: logger,
- log: log,
-
- registerHelper: function(name, fn, inverse) {
- if (toString.call(name) === objectType) {
- if (inverse || fn) { throw new Exception('Arg not supported with multiple helpers'); }
- Utils.extend(this.helpers, name);
- } else {
- if (inverse) { fn.not = inverse; }
- this.helpers[name] = fn;
- }
- },
-
- registerPartial: function(name, str) {
- if (toString.call(name) === objectType) {
- Utils.extend(this.partials, name);
- } else {
- this.partials[name] = str;
- }
- }
- };
-
- function registerDefaultHelpers(instance) {
- instance.registerHelper('helperMissing', function(arg) {
- if(arguments.length === 2) {
- return undefined;
- } else {
- throw new Exception("Missing helper: '" + arg + "'");
- }
- });
-
- instance.registerHelper('blockHelperMissing', function(context, options) {
- var inverse = options.inverse || function() {}, fn = options.fn;
-
- if (isFunction(context)) { context = context.call(this); }
-
- if(context === true) {
- return fn(this);
- } else if(context === false || context == null) {
- return inverse(this);
- } else if (isArray(context)) {
- if(context.length > 0) {
- return instance.helpers.each(context, options);
- } else {
- return inverse(this);
- }
- } else {
- return fn(context);
- }
- });
-
- instance.registerHelper('each', function(context, options) {
- var fn = options.fn, inverse = options.inverse;
- var i = 0, ret = "", data;
-
- if (isFunction(context)) { context = context.call(this); }
-
- if (options.data) {
- data = createFrame(options.data);
- }
-
- if(context && typeof context === 'object') {
- if (isArray(context)) {
- for(var j = context.length; i<j; i++) {
- if (data) {
- data.index = i;
- data.first = (i === 0);
- data.last = (i === (context.length-1));
- }
- ret = ret + fn(context[i], { data: data });
- }
- } else {
- for(var key in context) {
- if(context.hasOwnProperty(key)) {
- if(data) {
- data.key = key;
- data.index = i;
- data.first = (i === 0);
- }
- ret = ret + fn(context[key], {data: data});
- i++;
- }
- }
- }
- }
-
- if(i === 0){
- ret = inverse(this);
- }
-
- return ret;
- });
-
- instance.registerHelper('if', function(conditional, options) {
- if (isFunction(conditional)) { conditional = conditional.call(this); }
-
- // Default behavior is to render the positive path if the value is truthy and not empty.
- // The `includeZero` option may be set to treat the condtional as purely not empty based on the
- // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.
- if ((!options.hash.includeZero && !conditional) || Utils.isEmpty(conditional)) {
- return options.inverse(this);
- } else {
- return options.fn(this);
- }
- });
-
- instance.registerHelper('unless', function(conditional, options) {
- return instance.helpers['if'].call(this, conditional, {fn: options.inverse, inverse: options.fn, hash: options.hash});
- });
-
- instance.registerHelper('with', function(context, options) {
- if (isFunction(context)) { context = context.call(this); }
-
- if (!Utils.isEmpty(context)) return options.fn(context);
- });
-
- instance.registerHelper('log', function(context, options) {
- var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1;
- instance.log(level, context);
- });
- }
-
- var logger = {
- methodMap: { 0: 'debug', 1: 'info', 2: 'warn', 3: 'error' },
-
- // State enum
- DEBUG: 0,
- INFO: 1,
- WARN: 2,
- ERROR: 3,
- level: 3,
-
- // can be overridden in the host environment
- log: function(level, obj) {
- if (logger.level <= level) {
- var method = logger.methodMap[level];
- if (typeof console !== 'undefined' && console[method]) {
- console[method].call(console, obj);
- }
- }
- }
- };
- __exports__.logger = logger;
- function log(level, obj) { logger.log(level, obj); }
-
- __exports__.log = log;var createFrame = function(object) {
- var obj = {};
- Utils.extend(obj, object);
- return obj;
- };
- __exports__.createFrame = createFrame;
- return __exports__;
-})(__module3__, __module5__);
-
-// handlebars/runtime.js
-var __module6__ = (function(__dependency1__, __dependency2__, __dependency3__) {
- "use strict";
- var __exports__ = {};
- var Utils = __dependency1__;
- var Exception = __dependency2__;
- var COMPILER_REVISION = __dependency3__.COMPILER_REVISION;
- var REVISION_CHANGES = __dependency3__.REVISION_CHANGES;
-
- function checkRevision(compilerInfo) {
- var compilerRevision = compilerInfo && compilerInfo[0] || 1,
- currentRevision = COMPILER_REVISION;
-
- if (compilerRevision !== currentRevision) {
- if (compilerRevision < currentRevision) {
- var runtimeVersions = REVISION_CHANGES[currentRevision],
- compilerVersions = REVISION_CHANGES[compilerRevision];
- throw new Exception("Template was precompiled with an older version of Handlebars than the current runtime. "+
- "Please update your precompiler to a newer version ("+runtimeVersions+") or downgrade your runtime to an older version ("+compilerVersions+").");
- } else {
- // Use the embedded version info since the runtime doesn't know about this revision yet
- throw new Exception("Template was precompiled with a newer version of Handlebars than the current runtime. "+
- "Please update your runtime to a newer version ("+compilerInfo[1]+").");
- }
- }
- }
-
- __exports__.checkRevision = checkRevision;// TODO: Remove this line and break up compilePartial
-
- function template(templateSpec, env) {
- if (!env) {
- throw new Exception("No environment passed to template");
- }
-
- // Note: Using env.VM references rather than local var references throughout this section to allow
- // for external users to override these as psuedo-supported APIs.
- var invokePartialWrapper = function(partial, name, context, helpers, partials, data) {
- var result = env.VM.invokePartial.apply(this, arguments);
- if (result != null) { return result; }
-
- if (env.compile) {
- var options = { helpers: helpers, partials: partials, data: data };
- partials[name] = env.compile(partial, { data: data !== undefined }, env);
- return partials[name](context, options);
- } else {
- throw new Exception("The partial " + name + " could not be compiled when running in runtime-only mode");
- }
- };
-
- // Just add water
- var container = {
- escapeExpression: Utils.escapeExpression,
- invokePartial: invokePartialWrapper,
- programs: [],
- program: function(i, fn, data) {
- var programWrapper = this.programs[i];
- if(data) {
- programWrapper = program(i, fn, data);
- } else if (!programWrapper) {
- programWrapper = this.programs[i] = program(i, fn);
- }
- return programWrapper;
- },
- merge: function(param, common) {
- var ret = param || common;
-
- if (param && common && (param !== common)) {
- ret = {};
- Utils.extend(ret, common);
- Utils.extend(ret, param);
- }
- return ret;
- },
- programWithDepth: env.VM.programWithDepth,
- noop: env.VM.noop,
- compilerInfo: null
- };
-
- return function(context, options) {
- options = options || {};
- var namespace = options.partial ? options : env,
- helpers,
- partials;
-
- if (!options.partial) {
- helpers = options.helpers;
- partials = options.partials;
- }
- var result = templateSpec.call(
- container,
- namespace, context,
- helpers,
- partials,
- options.data);
-
- if (!options.partial) {
- env.VM.checkRevision(container.compilerInfo);
- }
-
- return result;
- };
- }
-
- __exports__.template = template;function programWithDepth(i, fn, data /*, $depth */) {
- var args = Array.prototype.slice.call(arguments, 3);
-
- var prog = function(context, options) {
- options = options || {};
-
- return fn.apply(this, [context, options.data || data].concat(args));
- };
- prog.program = i;
- prog.depth = args.length;
- return prog;
- }
-
- __exports__.programWithDepth = programWithDepth;function program(i, fn, data) {
- var prog = function(context, options) {
- options = options || {};
-
- return fn(context, options.data || data);
- };
- prog.program = i;
- prog.depth = 0;
- return prog;
- }
-
- __exports__.program = program;function invokePartial(partial, name, context, helpers, partials, data) {
- var options = { partial: true, helpers: helpers, partials: partials, data: data };
-
- if(partial === undefined) {
- throw new Exception("The partial " + name + " could not be found");
- } else if(partial instanceof Function) {
- return partial(context, options);
- }
- }
-
- __exports__.invokePartial = invokePartial;function noop() { return ""; }
-
- __exports__.noop = noop;
- return __exports__;
-})(__module3__, __module5__, __module2__);
-
-// handlebars.runtime.js
-var __module1__ = (function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {
- "use strict";
- var __exports__;
- /*globals Handlebars: true */
- var base = __dependency1__;
-
- // Each of these augment the Handlebars object. No need to setup here.
- // (This is done to easily share code between commonjs and browse envs)
- var SafeString = __dependency2__;
- var Exception = __dependency3__;
- var Utils = __dependency4__;
- var runtime = __dependency5__;
-
- // For compatibility and usage outside of module systems, make the Handlebars object a namespace
- var create = function() {
- var hb = new base.HandlebarsEnvironment();
-
- Utils.extend(hb, base);
- hb.SafeString = SafeString;
- hb.Exception = Exception;
- hb.Utils = Utils;
-
- hb.VM = runtime;
- hb.template = function(spec) {
- return runtime.template(spec, hb);
- };
-
- return hb;
- };
-
- var Handlebars = create();
- Handlebars.create = create;
-
- __exports__ = Handlebars;
- return __exports__;
-})(__module2__, __module4__, __module5__, __module3__, __module6__);
-
-// handlebars/compiler/ast.js
-var __module7__ = (function(__dependency1__) {
- "use strict";
- var __exports__;
- var Exception = __dependency1__;
-
- function LocationInfo(locInfo){
- locInfo = locInfo || {};
- this.firstLine = locInfo.first_line;
- this.firstColumn = locInfo.first_column;
- this.lastColumn = locInfo.last_column;
- this.lastLine = locInfo.last_line;
- }
-
- var AST = {
- ProgramNode: function(statements, inverseStrip, inverse, locInfo) {
- var inverseLocationInfo, firstInverseNode;
- if (arguments.length === 3) {
- locInfo = inverse;
- inverse = null;
- } else if (arguments.length === 2) {
- locInfo = inverseStrip;
- inverseStrip = null;
- }
-
- LocationInfo.call(this, locInfo);
- this.type = "program";
- this.statements = statements;
- this.strip = {};
-
- if(inverse) {
- firstInverseNode = inverse[0];
- if (firstInverseNode) {
- inverseLocationInfo = {
- first_line: firstInverseNode.firstLine,
- last_line: firstInverseNode.lastLine,
- last_column: firstInverseNode.lastColumn,
- first_column: firstInverseNode.firstColumn
- };
- this.inverse = new AST.ProgramNode(inverse, inverseStrip, inverseLocationInfo);
- } else {
- this.inverse = new AST.ProgramNode(inverse, inverseStrip);
- }
- this.strip.right = inverseStrip.left;
- } else if (inverseStrip) {
- this.strip.left = inverseStrip.right;
- }
- },
-
- MustacheNode: function(rawParams, hash, open, strip, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "mustache";
- this.strip = strip;
-
- // Open may be a string parsed from the parser or a passed boolean flag
- if (open != null && open.charAt) {
- // Must use charAt to support IE pre-10
- var escapeFlag = open.charAt(3) || open.charAt(2);
- this.escaped = escapeFlag !== '{' && escapeFlag !== '&';
- } else {
- this.escaped = !!open;
- }
-
- if (rawParams instanceof AST.SexprNode) {
- this.sexpr = rawParams;
- } else {
- // Support old AST API
- this.sexpr = new AST.SexprNode(rawParams, hash);
- }
-
- this.sexpr.isRoot = true;
-
- // Support old AST API that stored this info in MustacheNode
- this.id = this.sexpr.id;
- this.params = this.sexpr.params;
- this.hash = this.sexpr.hash;
- this.eligibleHelper = this.sexpr.eligibleHelper;
- this.isHelper = this.sexpr.isHelper;
- },
-
- SexprNode: function(rawParams, hash, locInfo) {
- LocationInfo.call(this, locInfo);
-
- this.type = "sexpr";
- this.hash = hash;
-
- var id = this.id = rawParams[0];
- var params = this.params = rawParams.slice(1);
-
- // a mustache is an eligible helper if:
- // * its id is simple (a single part, not `this` or `..`)
- var eligibleHelper = this.eligibleHelper = id.isSimple;
-
- // a mustache is definitely a helper if:
- // * it is an eligible helper, and
- // * it has at least one parameter or hash segment
- this.isHelper = eligibleHelper && (params.length || hash);
-
- // if a mustache is an eligible helper but not a definite
- // helper, it is ambiguous, and will be resolved in a later
- // pass or at runtime.
- },
-
- PartialNode: function(partialName, context, strip, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "partial";
- this.partialName = partialName;
- this.context = context;
- this.strip = strip;
- },
-
- BlockNode: function(mustache, program, inverse, close, locInfo) {
- LocationInfo.call(this, locInfo);
-
- if(mustache.sexpr.id.original !== close.path.original) {
- throw new Exception(mustache.sexpr.id.original + " doesn't match " + close.path.original, this);
- }
-
- this.type = 'block';
- this.mustache = mustache;
- this.program = program;
- this.inverse = inverse;
-
- this.strip = {
- left: mustache.strip.left,
- right: close.strip.right
- };
-
- (program || inverse).strip.left = mustache.strip.right;
- (inverse || program).strip.right = close.strip.left;
-
- if (inverse && !program) {
- this.isInverse = true;
- }
- },
-
- ContentNode: function(string, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "content";
- this.string = string;
- },
-
- HashNode: function(pairs, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "hash";
- this.pairs = pairs;
- },
-
- IdNode: function(parts, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "ID";
-
- var original = "",
- dig = [],
- depth = 0;
-
- for(var i=0,l=parts.length; i<l; i++) {
- var part = parts[i].part;
- original += (parts[i].separator || '') + part;
-
- if (part === ".." || part === "." || part === "this") {
- if (dig.length > 0) {
- throw new Exception("Invalid path: " + original, this);
- } else if (part === "..") {
- depth++;
- } else {
- this.isScoped = true;
- }
- } else {
- dig.push(part);
- }
- }
-
- this.original = original;
- this.parts = dig;
- this.string = dig.join('.');
- this.depth = depth;
-
- // an ID is simple if it only has one part, and that part is not
- // `..` or `this`.
- this.isSimple = parts.length === 1 && !this.isScoped && depth === 0;
-
- this.stringModeValue = this.string;
- },
-
- PartialNameNode: function(name, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "PARTIAL_NAME";
- this.name = name.original;
- },
-
- DataNode: function(id, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "DATA";
- this.id = id;
- },
-
- StringNode: function(string, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "STRING";
- this.original =
- this.string =
- this.stringModeValue = string;
- },
-
- IntegerNode: function(integer, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "INTEGER";
- this.original =
- this.integer = integer;
- this.stringModeValue = Number(integer);
- },
-
- BooleanNode: function(bool, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "BOOLEAN";
- this.bool = bool;
- this.stringModeValue = bool === "true";
- },
-
- CommentNode: function(comment, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "comment";
- this.comment = comment;
- }
- };
-
- // Must be exported as an object rather than the root of the module as the jison lexer
- // most modify the object to operate properly.
- __exports__ = AST;
- return __exports__;
-})(__module5__);
-
-// handlebars/compiler/parser.js
-var __module9__ = (function() {
- "use strict";
- var __exports__;
- /* jshint ignore:start */
- /* Jison generated parser */
- var handlebars = (function(){
- var parser = {trace: function trace() { },
- yy: {},
- symbols_: {"error":2,"root":3,"statements":4,"EOF":5,"program":6,"simpleInverse":7,"statement":8,"openInverse":9,"closeBlock":10,"openBlock":11,"mustache":12,"partial":13,"CONTENT":14,"COMMENT":15,"OPEN_BLOCK":16,"sexpr":17,"CLOSE":18,"OPEN_INVERSE":19,"OPEN_ENDBLOCK":20,"path":21,"OPEN":22,"OPEN_UNESCAPED":23,"CLOSE_UNESCAPED":24,"OPEN_PARTIAL":25,"partialName":26,"partial_option0":27,"sexpr_repetition0":28,"sexpr_option0":29,"dataName":30,"param":31,"STRING":32,"INTEGER":33,"BOOLEAN":34,"OPEN_SEXPR":35,"CLOSE_SEXPR":36,"hash":37,"hash_repetition_plus0":38,"hashSegment":39,"ID":40,"EQUALS":41,"DATA":42,"pathSegments":43,"SEP":44,"$accept":0,"$end":1},
- terminals_: {2:"error",5:"EOF",14:"CONTENT",15:"COMMENT",16:"OPEN_BLOCK",18:"CLOSE",19:"OPEN_INVERSE",20:"OPEN_ENDBLOCK",22:"OPEN",23:"OPEN_UNESCAPED",24:"CLOSE_UNESCAPED",25:"OPEN_PARTIAL",32:"STRING",33:"INTEGER",34:"BOOLEAN",35:"OPEN_SEXPR",36:"CLOSE_SEXPR",40:"ID",41:"EQUALS",42:"DATA",44:"SEP"},
- productions_: [0,[3,2],[3,1],[6,2],[6,3],[6,2],[6,1],[6,1],[6,0],[4,1],[4,2],[8,3],[8,3],[8,1],[8,1],[8,1],[8,1],[11,3],[9,3],[10,3],[12,3],[12,3],[13,4],[7,2],[17,3],[17,1],[31,1],[31,1],[31,1],[31,1],[31,1],[31,3],[37,1],[39,3],[26,1],[26,1],[26,1],[30,2],[21,1],[43,3],[43,1],[27,0],[27,1],[28,0],[28,2],[29,0],[29,1],[38,1],[38,2]],
- performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
-
- var $0 = $$.length - 1;
- switch (yystate) {
- case 1: return new yy.ProgramNode($$[$0-1], this._$);
- break;
- case 2: return new yy.ProgramNode([], this._$);
- break;
- case 3:this.$ = new yy.ProgramNode([], $$[$0-1], $$[$0], this._$);
- break;
- case 4:this.$ = new yy.ProgramNode($$[$0-2], $$[$0-1], $$[$0], this._$);
- break;
- case 5:this.$ = new yy.ProgramNode($$[$0-1], $$[$0], [], this._$);
- break;
- case 6:this.$ = new yy.ProgramNode($$[$0], this._$);
- break;
- case 7:this.$ = new yy.ProgramNode([], this._$);
- break;
- case 8:this.$ = new yy.ProgramNode([], this._$);
- break;
- case 9:this.$ = [$$[$0]];
- break;
- case 10: $$[$0-1].push($$[$0]); this.$ = $$[$0-1];
- break;
- case 11:this.$ = new yy.BlockNode($$[$0-2], $$[$0-1].inverse, $$[$0-1], $$[$0], this._$);
- break;
- case 12:this.$ = new yy.BlockNode($$[$0-2], $$[$0-1], $$[$0-1].inverse, $$[$0], this._$);
- break;
- case 13:this.$ = $$[$0];
- break;
- case 14:this.$ = $$[$0];
- break;
- case 15:this.$ = new yy.ContentNode($$[$0], this._$);
- break;
- case 16:this.$ = new yy.CommentNode($$[$0], this._$);
- break;
- case 17:this.$ = new yy.MustacheNode($$[$0-1], null, $$[$0-2], stripFlags($$[$0-2], $$[$0]), this._$);
- break;
- case 18:this.$ = new yy.MustacheNode($$[$0-1], null, $$[$0-2], stripFlags($$[$0-2], $$[$0]), this._$);
- break;
- case 19:this.$ = {path: $$[$0-1], strip: stripFlags($$[$0-2], $$[$0])};
- break;
- case 20:this.$ = new yy.MustacheNode($$[$0-1], null, $$[$0-2], stripFlags($$[$0-2], $$[$0]), this._$);
- break;
- case 21:this.$ = new yy.MustacheNode($$[$0-1], null, $$[$0-2], stripFlags($$[$0-2], $$[$0]), this._$);
- break;
- case 22:this.$ = new yy.PartialNode($$[$0-2], $$[$0-1], stripFlags($$[$0-3], $$[$0]), this._$);
- break;
- case 23:this.$ = stripFlags($$[$0-1], $$[$0]);
- break;
- case 24:this.$ = new yy.SexprNode([$$[$0-2]].concat($$[$0-1]), $$[$0], this._$);
- break;
- case 25:this.$ = new yy.SexprNode([$$[$0]], null, this._$);
- break;
- case 26:this.$ = $$[$0];
- break;
- case 27:this.$ = new yy.StringNode($$[$0], this._$);
- break;
- case 28:this.$ = new yy.IntegerNode($$[$0], this._$);
- break;
- case 29:this.$ = new yy.BooleanNode($$[$0], this._$);
- break;
- case 30:this.$ = $$[$0];
- break;
- case 31:$$[$0-1].isHelper = true; this.$ = $$[$0-1];
- break;
- case 32:this.$ = new yy.HashNode($$[$0], this._$);
- break;
- case 33:this.$ = [$$[$0-2], $$[$0]];
- break;
- case 34:this.$ = new yy.PartialNameNode($$[$0], this._$);
- break;
- case 35:this.$ = new yy.PartialNameNode(new yy.StringNode($$[$0], this._$), this._$);
- break;
- case 36:this.$ = new yy.PartialNameNode(new yy.IntegerNode($$[$0], this._$));
- break;
- case 37:this.$ = new yy.DataNode($$[$0], this._$);
- break;
- case 38:this.$ = new yy.IdNode($$[$0], this._$);
- break;
- case 39: $$[$0-2].push({part: $$[$0], separator: $$[$0-1]}); this.$ = $$[$0-2];
- break;
- case 40:this.$ = [{part: $$[$0]}];
- break;
- case 43:this.$ = [];
- break;
- case 44:$$[$0-1].push($$[$0]);
- break;
- case 47:this.$ = [$$[$0]];
- break;
- case 48:$$[$0-1].push($$[$0]);
- break;
- }
- },
- table: [{3:1,4:2,5:[1,3],8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],25:[1,15]},{1:[3]},{5:[1,16],8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],25:[1,15]},{1:[2,2]},{5:[2,9],14:[2,9],15:[2,9],16:[2,9],19:[2,9],20:[2,9],22:[2,9],23:[2,9],25:[2,9]},{4:20,6:18,7:19,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,8],22:[1,13],23:[1,14],25:[1,15]},{4:20,6:22,7:19,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,8],22:[1,13],23:[1,14],25:[1,15]},{5:[2,13],14:[2,13],15:[2,13],16:[2,13],19:[2,13],20:[2,13],22:[2,13],23:[2,13],25:[2,13]},{5:[2,14],14:[2,14],15:[2,14],16:[2,14],19:[2,14],20:[2,14],22:[2,14],23:[2,14],25:[2,14]},{5:[2,15],14:[2,15],15:[2,15],16:[2,15],19:[2,15],20:[2,15],22:[2,15],23:[2,15],25:[2,15]},{5:[2,16],14:[2,16],15:[2,16],16:[2,16],19:[2,16],20:[2,16],22:[2,16],23:[2,16],25:[2,16]},{17:23,21:24,30:25,40:[1,28],42:[1,27],43:26},{17:29,21:24,30:25,40:[1,28],42:[1,27],43:26},{17:30,21:24,30:25,40:[1,28],42:[1,27],43:26},{17:31,21:24,30:25,40:[1,28],42:[1,27],43:26},{21:33,26:32,32:[1,34],33:[1,35],40:[1,28],43:26},{1:[2,1]},{5:[2,10],14:[2,10],15:[2,10],16:[2,10],19:[2,10],20:[2,10],22:[2,10],23:[2,10],25:[2,10]},{10:36,20:[1,37]},{4:38,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,7],22:[1,13],23:[1,14],25:[1,15]},{7:39,8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,6],22:[1,13],23:[1,14],25:[1,15]},{17:23,18:[1,40],21:24,30:25,40:[1,28],42:[1,27],43:26},{10:41,20:[1,37]},{18:[1,42]},{18:[2,43],24:[2,43],28:43,32:[2,43],33:[2,43],34:[2,43],35:[2,43],36:[2,43],40:[2,43],42:[2,43]},{18:[2,25],24:[2,25],36:[2,25]},{18:[2,38],24:[2,38],32:[2,38],33:[2,38],34:[2,38],35:[2,38],36:[2,38],40:[2,38],42:[2,38],44:[1,44]},{21:45,40:[1,28],43:26},{18:[2,40],24:[2,40],32:[2,40],33:[2,40],34:[2,40],35:[2,40],36:[2,40],40:[2,40],42:[2,40],44:[2,40]},{18:[1,46]},{18:[1,47]},{24:[1,48]},{18:[2,41],21:50,27:49,40:[1,28],43:26},{18:[2,34],40:[2,34]},{18:[2,35],40:[2,35]},{18:[2,36],40:[2,36]},{5:[2,11],14:[2,11],15:[2,11],16:[2,11],19:[2,11],20:[2,11],22:[2,11],23:[2,11],25:[2,11]},{21:51,40:[1,28],43:26},{8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,3],22:[1,13],23:[1,14],25:[1,15]},{4:52,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,5],22:[1,13],23:[1,14],25:[1,15]},{14:[2,23],15:[2,23],16:[2,23],19:[2,23],20:[2,23],22:[2,23],23:[2,23],25:[2,23]},{5:[2,12],14:[2,12],15:[2,12],16:[2,12],19:[2,12],20:[2,12],22:[2,12],23:[2,12],25:[2,12]},{14:[2,18],15:[2,18],16:[2,18],19:[2,18],20:[2,18],22:[2,18],23:[2,18],25:[2,18]},{18:[2,45],21:56,24:[2,45],29:53,30:60,31:54,32:[1,57],33:[1,58],34:[1,59],35:[1,61],36:[2,45],37:55,38:62,39:63,40:[1,64],42:[1,27],43:26},{40:[1,65]},{18:[2,37],24:[2,37],32:[2,37],33:[2,37],34:[2,37],35:[2,37],36:[2,37],40:[2,37],42:[2,37]},{14:[2,17],15:[2,17],16:[2,17],19:[2,17],20:[2,17],22:[2,17],23:[2,17],25:[2,17]},{5:[2,20],14:[2,20],15:[2,20],16:[2,20],19:[2,20],20:[2,20],22:[2,20],23:[2,20],25:[2,20]},{5:[2,21],14:[2,21],15:[2,21],16:[2,21],19:[2,21],20:[2,21],22:[2,21],23:[2,21],25:[2,21]},{18:[1,66]},{18:[2,42]},{18:[1,67]},{8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,4],22:[1,13],23:[1,14],25:[1,15]},{18:[2,24],24:[2,24],36:[2,24]},{18:[2,44],24:[2,44],32:[2,44],33:[2,44],34:[2,44],35:[2,44],36:[2,44],40:[2,44],42:[2,44]},{18:[2,46],24:[2,46],36:[2,46]},{18:[2,26],24:[2,26],32:[2,26],33:[2,26],34:[2,26],35:[2,26],36:[2,26],40:[2,26],42:[2,26]},{18:[2,27],24:[2,27],32:[2,27],33:[2,27],34:[2,27],35:[2,27],36:[2,27],40:[2,27],42:[2,27]},{18:[2,28],24:[2,28],32:[2,28],33:[2,28],34:[2,28],35:[2,28],36:[2,28],40:[2,28],42:[2,28]},{18:[2,29],24:[2,29],32:[2,29],33:[2,29],34:[2,29],35:[2,29],36:[2,29],40:[2,29],42:[2,29]},{18:[2,30],24:[2,30],32:[2,30],33:[2,30],34:[2,30],35:[2,30],36:[2,30],40:[2,30],42:[2,30]},{17:68,21:24,30:25,40:[1,28],42:[1,27],43:26},{18:[2,32],24:[2,32],36:[2,32],39:69,40:[1,70]},{18:[2,47],24:[2,47],36:[2,47],40:[2,47]},{18:[2,40],24:[2,40],32:[2,40],33:[2,40],34:[2,40],35:[2,40],36:[2,40],40:[2,40],41:[1,71],42:[2,40],44:[2,40]},{18:[2,39],24:[2,39],32:[2,39],33:[2,39],34:[2,39],35:[2,39],36:[2,39],40:[2,39],42:[2,39],44:[2,39]},{5:[2,22],14:[2,22],15:[2,22],16:[2,22],19:[2,22],20:[2,22],22:[2,22],23:[2,22],25:[2,22]},{5:[2,19],14:[2,19],15:[2,19],16:[2,19],19:[2,19],20:[2,19],22:[2,19],23:[2,19],25:[2,19]},{36:[1,72]},{18:[2,48],24:[2,48],36:[2,48],40:[2,48]},{41:[1,71]},{21:56,30:60,31:73,32:[1,57],33:[1,58],34:[1,59],35:[1,61],40:[1,28],42:[1,27],43:26},{18:[2,31],24:[2,31],32:[2,31],33:[2,31],34:[2,31],35:[2,31],36:[2,31],40:[2,31],42:[2,31]},{18:[2,33],24:[2,33],36:[2,33],40:[2,33]}],
- defaultActions: {3:[2,2],16:[2,1],50:[2,42]},
- parseError: function parseError(str, hash) {
- throw new Error(str);
- },
- parse: function parse(input) {
- var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
- this.lexer.setInput(input);
- this.lexer.yy = this.yy;
- this.yy.lexer = this.lexer;
- this.yy.parser = this;
- if (typeof this.lexer.yylloc == "undefined")
- this.lexer.yylloc = {};
- var yyloc = this.lexer.yylloc;
- lstack.push(yyloc);
- var ranges = this.lexer.options && this.lexer.options.ranges;
- if (typeof this.yy.parseError === "function")
- this.parseError = this.yy.parseError;
- function popStack(n) {
- stack.length = stack.length - 2 * n;
- vstack.length = vstack.length - n;
- lstack.length = lstack.length - n;
- }
- function lex() {
- var token;
- token = self.lexer.lex() || 1;
- if (typeof token !== "number") {
- token = self.symbols_[token] || token;
- }
- return token;
- }
- var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
- while (true) {
- state = stack[stack.length - 1];
- if (this.defaultActions[state]) {
- action = this.defaultActions[state];
- } else {
- if (symbol === null || typeof symbol == "undefined") {
- symbol = lex();
- }
- action = table[state] && table[state][symbol];
- }
- if (typeof action === "undefined" || !action.length || !action[0]) {
- var errStr = "";
- if (!recovering) {
- expected = [];
- for (p in table[state])
- if (this.terminals_[p] && p > 2) {
- expected.push("'" + this.terminals_[p] + "'");
- }
- if (this.lexer.showPosition) {
- errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
- } else {
- errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1?"end of input":"'" + (this.terminals_[symbol] || symbol) + "'");
- }
- this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});
- }
- }
- if (action[0] instanceof Array && action.length > 1) {
- throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
- }
- switch (action[0]) {
- case 1:
- stack.push(symbol);
- vstack.push(this.lexer.yytext);
- lstack.push(this.lexer.yylloc);
- stack.push(action[1]);
- symbol = null;
- if (!preErrorSymbol) {
- yyleng = this.lexer.yyleng;
- yytext = this.lexer.yytext;
- yylineno = this.lexer.yylineno;
- yyloc = this.lexer.yylloc;
- if (recovering > 0)
- recovering--;
- } else {
- symbol = preErrorSymbol;
- preErrorSymbol = null;
- }
- break;
- case 2:
- len = this.productions_[action[1]][1];
- yyval.$ = vstack[vstack.length - len];
- yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};
- if (ranges) {
- yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];
- }
- r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
- if (typeof r !== "undefined") {
- return r;
- }
- if (len) {
- stack = stack.slice(0, -1 * len * 2);
- vstack = vstack.slice(0, -1 * len);
- lstack = lstack.slice(0, -1 * len);
- }
- stack.push(this.productions_[action[1]][0]);
- vstack.push(yyval.$);
- lstack.push(yyval._$);
- newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
- stack.push(newState);
- break;
- case 3:
- return true;
- }
- }
- return true;
- }
- };
-
-
- function stripFlags(open, close) {
- return {
- left: open.charAt(2) === '~',
- right: close.charAt(0) === '~' || close.charAt(1) === '~'
- };
- }
-
- /* Jison generated lexer */
- var lexer = (function(){
- var lexer = ({EOF:1,
- parseError:function parseError(str, hash) {
- if (this.yy.parser) {
- this.yy.parser.parseError(str, hash);
- } else {
- throw new Error(str);
- }
- },
- setInput:function (input) {
- this._input = input;
- this._more = this._less = this.done = false;
- this.yylineno = this.yyleng = 0;
- this.yytext = this.matched = this.match = '';
- this.conditionStack = ['INITIAL'];
- this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};
- if (this.options.ranges) this.yylloc.range = [0,0];
- this.offset = 0;
- return this;
- },
- input:function () {
- var ch = this._input[0];
- this.yytext += ch;
- this.yyleng++;
- this.offset++;
- this.match += ch;
- this.matched += ch;
- var lines = ch.match(/(?:\r\n?|\n).*/g);
- if (lines) {
- this.yylineno++;
- this.yylloc.last_line++;
- } else {
- this.yylloc.last_column++;
- }
- if (this.options.ranges) this.yylloc.range[1]++;
-
- this._input = this._input.slice(1);
- return ch;
- },
- unput:function (ch) {
- var len = ch.length;
- var lines = ch.split(/(?:\r\n?|\n)/g);
-
- this._input = ch + this._input;
- this.yytext = this.yytext.substr(0, this.yytext.length-len-1);
- //this.yyleng -= len;
- this.offset -= len;
- var oldLines = this.match.split(/(?:\r\n?|\n)/g);
- this.match = this.match.substr(0, this.match.length-1);
- this.matched = this.matched.substr(0, this.matched.length-1);
-
- if (lines.length-1) this.yylineno -= lines.length-1;
- var r = this.yylloc.range;
-
- this.yylloc = {first_line: this.yylloc.first_line,
- last_line: this.yylineno+1,
- first_column: this.yylloc.first_column,
- last_column: lines ?
- (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length:
- this.yylloc.first_column - len
- };
-
- if (this.options.ranges) {
- this.yylloc.range = [r[0], r[0] + this.yyleng - len];
- }
- return this;
- },
- more:function () {
- this._more = true;
- return this;
- },
- less:function (n) {
- this.unput(this.match.slice(n));
- },
- pastInput:function () {
- var past = this.matched.substr(0, this.matched.length - this.match.length);
- return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");
- },
- upcomingInput:function () {
- var next = this.match;
- if (next.length < 20) {
- next += this._input.substr(0, 20-next.length);
- }
- return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\n/g, "");
- },
- showPosition:function () {
- var pre = this.pastInput();
- var c = new Array(pre.length + 1).join("-");
- return pre + this.upcomingInput() + "\n" + c+"^";
- },
- next:function () {
- if (this.done) {
- return this.EOF;
- }
- if (!this._input) this.done = true;
-
- var token,
- match,
- tempMatch,
- index,
- col,
- lines;
- if (!this._more) {
- this.yytext = '';
- this.match = '';
- }
- var rules = this._currentRules();
- for (var i=0;i < rules.length; i++) {
- tempMatch = this._input.match(this.rules[rules[i]]);
- if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
- match = tempMatch;
- index = i;
- if (!this.options.flex) break;
- }
- }
- if (match) {
- lines = match[0].match(/(?:\r\n?|\n).*/g);
- if (lines) this.yylineno += lines.length;
- this.yylloc = {first_line: this.yylloc.last_line,
- last_line: this.yylineno+1,
- first_column: this.yylloc.last_column,
- last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length};
- this.yytext += match[0];
- this.match += match[0];
- this.matches = match;
- this.yyleng = this.yytext.length;
- if (this.options.ranges) {
- this.yylloc.range = [this.offset, this.offset += this.yyleng];
- }
- this._more = false;
- this._input = this._input.slice(match[0].length);
- this.matched += match[0];
- token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);
- if (this.done && this._input) this.done = false;
- if (token) return token;
- else return;
- }
- if (this._input === "") {
- return this.EOF;
- } else {
- return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\n'+this.showPosition(),
- {text: "", token: null, line: this.yylineno});
- }
- },
- lex:function lex() {
- var r = this.next();
- if (typeof r !== 'undefined') {
- return r;
- } else {
- return this.lex();
- }
- },
- begin:function begin(condition) {
- this.conditionStack.push(condition);
- },
- popState:function popState() {
- return this.conditionStack.pop();
- },
- _currentRules:function _currentRules() {
- return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;
- },
- topState:function () {
- return this.conditionStack[this.conditionStack.length-2];
- },
- pushState:function begin(condition) {
- this.begin(condition);
- }});
- lexer.options = {};
- lexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {
-
-
- function strip(start, end) {
- return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng-end);
- }
-
-
- var YYSTATE=YY_START
- switch($avoiding_name_collisions) {
- case 0:
- if(yy_.yytext.slice(-2) === "\\\\") {
- strip(0,1);
- this.begin("mu");
- } else if(yy_.yytext.slice(-1) === "\\") {
- strip(0,1);
- this.begin("emu");
- } else {
- this.begin("mu");
- }
- if(yy_.yytext) return 14;
-
- break;
- case 1:return 14;
- break;
- case 2:
- this.popState();
- return 14;
-
- break;
- case 3:strip(0,4); this.popState(); return 15;
- break;
- case 4:return 35;
- break;
- case 5:return 36;
- break;
- case 6:return 25;
- break;
- case 7:return 16;
- break;
- case 8:return 20;
- break;
- case 9:return 19;
- break;
- case 10:return 19;
- break;
- case 11:return 23;
- break;
- case 12:return 22;
- break;
- case 13:this.popState(); this.begin('com');
- break;
- case 14:strip(3,5); this.popState(); return 15;
- break;
- case 15:return 22;
- break;
- case 16:return 41;
- break;
- case 17:return 40;
- break;
- case 18:return 40;
- break;
- case 19:return 44;
- break;
- case 20:// ignore whitespace
- break;
- case 21:this.popState(); return 24;
- break;
- case 22:this.popState(); return 18;
- break;
- case 23:yy_.yytext = strip(1,2).replace(/\\"/g,'"'); return 32;
- break;
- case 24:yy_.yytext = strip(1,2).replace(/\\'/g,"'"); return 32;
- break;
- case 25:return 42;
- break;
- case 26:return 34;
- break;
- case 27:return 34;
- break;
- case 28:return 33;
- break;
- case 29:return 40;
- break;
- case 30:yy_.yytext = strip(1,2); return 40;
- break;
- case 31:return 'INVALID';
- break;
- case 32:return 5;
- break;
- }
- };
- lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:[\s\S]*?--\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{!--)/,/^(?:\{\{![\s\S]*?\}\})/,/^(?:\{\{(~)?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:-?[0-9]+(?=([~}\s)])))/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)]))))/,/^(?:\[[^\]]*\])/,/^(?:.)/,/^(?:$)/];
- lexer.conditions = {"mu":{"rules":[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],"inclusive":false},"emu":{"rules":[2],"inclusive":false},"com":{"rules":[3],"inclusive":false},"INITIAL":{"rules":[0,1,32],"inclusive":true}};
- return lexer;})()
- parser.lexer = lexer;
- function Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;
- return new Parser;
- })();__exports__ = handlebars;
- /* jshint ignore:end */
- return __exports__;
-})();
-
-// handlebars/compiler/base.js
-var __module8__ = (function(__dependency1__, __dependency2__) {
- "use strict";
- var __exports__ = {};
- var parser = __dependency1__;
- var AST = __dependency2__;
-
- __exports__.parser = parser;
-
- function parse(input) {
- // Just return if an already-compile AST was passed in.
- if(input.constructor === AST.ProgramNode) { return input; }
-
- parser.yy = AST;
- return parser.parse(input);
- }
-
- __exports__.parse = parse;
- return __exports__;
-})(__module9__, __module7__);
-
-// handlebars/compiler/compiler.js
-var __module10__ = (function(__dependency1__) {
- "use strict";
- var __exports__ = {};
- var Exception = __dependency1__;
-
- function Compiler() {}
-
- __exports__.Compiler = Compiler;// the foundHelper register will disambiguate helper lookup from finding a
- // function in a context. This is necessary for mustache compatibility, which
- // requires that context functions in blocks are evaluated by blockHelperMissing,
- // and then proceed as if the resulting value was provided to blockHelperMissing.
-
- Compiler.prototype = {
- compiler: Compiler,
-
- disassemble: function() {
- var opcodes = this.opcodes, opcode, out = [], params, param;
-
- for (var i=0, l=opcodes.length; i<l; i++) {
- opcode = opcodes[i];
-
- if (opcode.opcode === 'DECLARE') {
- out.push("DECLARE " + opcode.name + "=" + opcode.value);
- } else {
- params = [];
- for (var j=0; j<opcode.args.length; j++) {
- param = opcode.args[j];
- if (typeof param === "string") {
- param = "\"" + param.replace("\n", "\\n") + "\"";
- }
- params.push(param);
- }
- out.push(opcode.opcode + " " + params.join(" "));
- }
- }
-
- return out.join("\n");
- },
-
- equals: function(other) {
- var len = this.opcodes.length;
- if (other.opcodes.length !== len) {
- return false;
- }
-
- for (var i = 0; i < len; i++) {
- var opcode = this.opcodes[i],
- otherOpcode = other.opcodes[i];
- if (opcode.opcode !== otherOpcode.opcode || opcode.args.length !== otherOpcode.args.length) {
- return false;
- }
- for (var j = 0; j < opcode.args.length; j++) {
- if (opcode.args[j] !== otherOpcode.args[j]) {
- return false;
- }
- }
- }
-
- len = this.children.length;
- if (other.children.length !== len) {
- return false;
- }
- for (i = 0; i < len; i++) {
- if (!this.children[i].equals(other.children[i])) {
- return false;
- }
- }
-
- return true;
- },
-
- guid: 0,
-
- compile: function(program, options) {
- this.opcodes = [];
- this.children = [];
- this.depths = {list: []};
- this.options = options;
-
- // These changes will propagate to the other compiler components
- var knownHelpers = this.options.knownHelpers;
- this.options.knownHelpers = {
- 'helperMissing': true,
- 'blockHelperMissing': true,
- 'each': true,
- 'if': true,
- 'unless': true,
- 'with': true,
- 'log': true
- };
- if (knownHelpers) {
- for (var name in knownHelpers) {
- this.options.knownHelpers[name] = knownHelpers[name];
- }
- }
-
- return this.accept(program);
- },
-
- accept: function(node) {
- var strip = node.strip || {},
- ret;
- if (strip.left) {
- this.opcode('strip');
- }
-
- ret = this[node.type](node);
-
- if (strip.right) {
- this.opcode('strip');
- }
-
- return ret;
- },
-
- program: function(program) {
- var statements = program.statements;
-
- for(var i=0, l=statements.length; i<l; i++) {
- this.accept(statements[i]);
- }
- this.isSimple = l === 1;
-
- this.depths.list = this.depths.list.sort(function(a, b) {
- return a - b;
- });
-
- return this;
- },
-
- compileProgram: function(program) {
- var result = new this.compiler().compile(program, this.options);
- var guid = this.guid++, depth;
-
- this.usePartial = this.usePartial || result.usePartial;
-
- this.children[guid] = result;
-
- for(var i=0, l=result.depths.list.length; i<l; i++) {
- depth = result.depths.list[i];
-
- if(depth < 2) { continue; }
- else { this.addDepth(depth - 1); }
- }
-
- return guid;
- },
-
- block: function(block) {
- var mustache = block.mustache,
- program = block.program,
- inverse = block.inverse;
-
- if (program) {
- program = this.compileProgram(program);
- }
-
- if (inverse) {
- inverse = this.compileProgram(inverse);
- }
-
- var sexpr = mustache.sexpr;
- var type = this.classifySexpr(sexpr);
-
- if (type === "helper") {
- this.helperSexpr(sexpr, program, inverse);
- } else if (type === "simple") {
- this.simpleSexpr(sexpr);
-
- // now that the simple mustache is resolved, we need to
- // evaluate it by executing `blockHelperMissing`
- this.opcode('pushProgram', program);
- this.opcode('pushProgram', inverse);
- this.opcode('emptyHash');
- this.opcode('blockValue');
- } else {
- this.ambiguousSexpr(sexpr, program, inverse);
-
- // now that the simple mustache is resolved, we need to
- // evaluate it by executing `blockHelperMissing`
- this.opcode('pushProgram', program);
- this.opcode('pushProgram', inverse);
- this.opcode('emptyHash');
- this.opcode('ambiguousBlockValue');
- }
-
- this.opcode('append');
- },
-
- hash: function(hash) {
- var pairs = hash.pairs, pair, val;
-
- this.opcode('pushHash');
-
- for(var i=0, l=pairs.length; i<l; i++) {
- pair = pairs[i];
- val = pair[1];
-
- if (this.options.stringParams) {
- if(val.depth) {
- this.addDepth(val.depth);
- }
- this.opcode('getContext', val.depth || 0);
- this.opcode('pushStringParam', val.stringModeValue, val.type);
-
- if (val.type === 'sexpr') {
- // Subexpressions get evaluated and passed in
- // in string params mode.
- this.sexpr(val);
- }
- } else {
- this.accept(val);
- }
-
- this.opcode('assignToHash', pair[0]);
- }
- this.opcode('popHash');
- },
-
- partial: function(partial) {
- var partialName = partial.partialName;
- this.usePartial = true;
-
- if(partial.context) {
- this.ID(partial.context);
- } else {
- this.opcode('push', 'depth0');
- }
-
- this.opcode('invokePartial', partialName.name);
- this.opcode('append');
- },
-
- content: function(content) {
- this.opcode('appendContent', content.string);
- },
-
- mustache: function(mustache) {
- this.sexpr(mustache.sexpr);
-
- if(mustache.escaped && !this.options.noEscape) {
- this.opcode('appendEscaped');
- } else {
- this.opcode('append');
- }
- },
-
- ambiguousSexpr: function(sexpr, program, inverse) {
- var id = sexpr.id,
- name = id.parts[0],
- isBlock = program != null || inverse != null;
-
- this.opcode('getContext', id.depth);
-
- this.opcode('pushProgram', program);
- this.opcode('pushProgram', inverse);
-
- this.opcode('invokeAmbiguous', name, isBlock);
- },
-
- simpleSexpr: function(sexpr) {
- var id = sexpr.id;
-
- if (id.type === 'DATA') {
- this.DATA(id);
- } else if (id.parts.length) {
- this.ID(id);
- } else {
- // Simplified ID for `this`
- this.addDepth(id.depth);
- this.opcode('getContext', id.depth);
- this.opcode('pushContext');
- }
-
- this.opcode('resolvePossibleLambda');
- },
-
- helperSexpr: function(sexpr, program, inverse) {
- var params = this.setupFullMustacheParams(sexpr, program, inverse),
- name = sexpr.id.parts[0];
-
- if (this.options.knownHelpers[name]) {
- this.opcode('invokeKnownHelper', params.length, name);
- } else if (this.options.knownHelpersOnly) {
- throw new Exception("You specified knownHelpersOnly, but used the unknown helper " + name, sexpr);
- } else {
- this.opcode('invokeHelper', params.length, name, sexpr.isRoot);
- }
- },
-
- sexpr: function(sexpr) {
- var type = this.classifySexpr(sexpr);
-
- if (type === "simple") {
- this.simpleSexpr(sexpr);
- } else if (type === "helper") {
- this.helperSexpr(sexpr);
- } else {
- this.ambiguousSexpr(sexpr);
- }
- },
-
- ID: function(id) {
- this.addDepth(id.depth);
- this.opcode('getContext', id.depth);
-
- var name = id.parts[0];
- if (!name) {
- this.opcode('pushContext');
- } else {
- this.opcode('lookupOnContext', id.parts[0]);
- }
-
- for(var i=1, l=id.parts.length; i<l; i++) {
- this.opcode('lookup', id.parts[i]);
- }
- },
-
- DATA: function(data) {
- this.options.data = true;
- if (data.id.isScoped || data.id.depth) {
- throw new Exception('Scoped data references are not supported: ' + data.original, data);
- }
-
- this.opcode('lookupData');
- var parts = data.id.parts;
- for(var i=0, l=parts.length; i<l; i++) {
- this.opcode('lookup', parts[i]);
- }
- },
-
- STRING: function(string) {
- this.opcode('pushString', string.string);
- },
-
- INTEGER: function(integer) {
- this.opcode('pushLiteral', integer.integer);
- },
-
- BOOLEAN: function(bool) {
- this.opcode('pushLiteral', bool.bool);
- },
-
- comment: function() {},
-
- // HELPERS
- opcode: function(name) {
- this.opcodes.push({ opcode: name, args: [].slice.call(arguments, 1) });
- },
-
- declare: function(name, value) {
- this.opcodes.push({ opcode: 'DECLARE', name: name, value: value });
- },
-
- addDepth: function(depth) {
- if(depth === 0) { return; }
-
- if(!this.depths[depth]) {
- this.depths[depth] = true;
- this.depths.list.push(depth);
- }
- },
-
- classifySexpr: function(sexpr) {
- var isHelper = sexpr.isHelper;
- var isEligible = sexpr.eligibleHelper;
- var options = this.options;
-
- // if ambiguous, we can possibly resolve the ambiguity now
- if (isEligible && !isHelper) {
- var name = sexpr.id.parts[0];
-
- if (options.knownHelpers[name]) {
- isHelper = true;
- } else if (options.knownHelpersOnly) {
- isEligible = false;
- }
- }
-
- if (isHelper) { return "helper"; }
- else if (isEligible) { return "ambiguous"; }
- else { return "simple"; }
- },
-
- pushParams: function(params) {
- var i = params.length, param;
-
- while(i--) {
- param = params[i];
-
- if(this.options.stringParams) {
- if(param.depth) {
- this.addDepth(param.depth);
- }
-
- this.opcode('getContext', param.depth || 0);
- this.opcode('pushStringParam', param.stringModeValue, param.type);
-
- if (param.type === 'sexpr') {
- // Subexpressions get evaluated and passed in
- // in string params mode.
- this.sexpr(param);
- }
- } else {
- this[param.type](param);
- }
- }
- },
-
- setupFullMustacheParams: function(sexpr, program, inverse) {
- var params = sexpr.params;
- this.pushParams(params);
-
- this.opcode('pushProgram', program);
- this.opcode('pushProgram', inverse);
-
- if (sexpr.hash) {
- this.hash(sexpr.hash);
- } else {
- this.opcode('emptyHash');
- }
-
- return params;
- }
- };
-
- function precompile(input, options, env) {
- if (input == null || (typeof input !== 'string' && input.constructor !== env.AST.ProgramNode)) {
- throw new Exception("You must pass a string or Handlebars AST to Handlebars.precompile. You passed " + input);
- }
-
- options = options || {};
- if (!('data' in options)) {
- options.data = true;
- }
-
- var ast = env.parse(input);
- var environment = new env.Compiler().compile(ast, options);
- return new env.JavaScriptCompiler().compile(environment, options);
- }
-
- __exports__.precompile = precompile;function compile(input, options, env) {
- if (input == null || (typeof input !== 'string' && input.constructor !== env.AST.ProgramNode)) {
- throw new Exception("You must pass a string or Handlebars AST to Handlebars.compile. You passed " + input);
- }
-
- options = options || {};
-
- if (!('data' in options)) {
- options.data = true;
- }
-
- var compiled;
-
- function compileInput() {
- var ast = env.parse(input);
- var environment = new env.Compiler().compile(ast, options);
- var templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);
- return env.template(templateSpec);
- }
-
- // Template is only compiled on first use and cached after that point.
- return function(context, options) {
- if (!compiled) {
- compiled = compileInput();
- }
- return compiled.call(this, context, options);
- };
- }
-
- __exports__.compile = compile;
- return __exports__;
-})(__module5__);
-
-// handlebars/compiler/javascript-compiler.js
-var __module11__ = (function(__dependency1__, __dependency2__) {
- "use strict";
- var __exports__;
- var COMPILER_REVISION = __dependency1__.COMPILER_REVISION;
- var REVISION_CHANGES = __dependency1__.REVISION_CHANGES;
- var log = __dependency1__.log;
- var Exception = __dependency2__;
-
- function Literal(value) {
- this.value = value;
- }
-
- function JavaScriptCompiler() {}
-
- JavaScriptCompiler.prototype = {
- // PUBLIC API: You can override these methods in a subclass to provide
- // alternative compiled forms for name lookup and buffering semantics
- nameLookup: function(parent, name /* , type*/) {
- var wrap,
- ret;
- if (parent.indexOf('depth') === 0) {
- wrap = true;
- }
-
- if (/^[0-9]+$/.test(name)) {
- ret = parent + "[" + name + "]";
- } else if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {
- ret = parent + "." + name;
- }
- else {
- ret = parent + "['" + name + "']";
- }
-
- if (wrap) {
- return '(' + parent + ' && ' + ret + ')';
- } else {
- return ret;
- }
- },
-
- compilerInfo: function() {
- var revision = COMPILER_REVISION,
- versions = REVISION_CHANGES[revision];
- return "this.compilerInfo = ["+revision+",'"+versions+"'];\n";
- },
-
- appendToBuffer: function(string) {
- if (this.environment.isSimple) {
- return "return " + string + ";";
- } else {
- return {
- appendToBuffer: true,
- content: string,
- toString: function() { return "buffer += " + string + ";"; }
- };
- }
- },
-
- initializeBuffer: function() {
- return this.quotedString("");
- },
-
- namespace: "Handlebars",
- // END PUBLIC API
-
- compile: function(environment, options, context, asObject) {
- this.environment = environment;
- this.options = options || {};
-
- log('debug', this.environment.disassemble() + "\n\n");
-
- this.name = this.environment.name;
- this.isChild = !!context;
- this.context = context || {
- programs: [],
- environments: [],
- aliases: { }
- };
-
- this.preamble();
-
- this.stackSlot = 0;
- this.stackVars = [];
- this.registers = { list: [] };
- this.hashes = [];
- this.compileStack = [];
- this.inlineStack = [];
-
- this.compileChildren(environment, options);
-
- var opcodes = environment.opcodes, opcode;
-
- this.i = 0;
-
- for(var l=opcodes.length; this.i<l; this.i++) {
- opcode = opcodes[this.i];
-
- if(opcode.opcode === 'DECLARE') {
- this[opcode.name] = opcode.value;
- } else {
- this[opcode.opcode].apply(this, opcode.args);
- }
-
- // Reset the stripNext flag if it was not set by this operation.
- if (opcode.opcode !== this.stripNext) {
- this.stripNext = false;
- }
- }
-
- // Flush any trailing content that might be pending.
- this.pushSource('');
-
- if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {
- throw new Exception('Compile completed with content left on stack');
- }
-
- return this.createFunctionContext(asObject);
- },
-
- preamble: function() {
- var out = [];
-
- if (!this.isChild) {
- var namespace = this.namespace;
-
- var copies = "helpers = this.merge(helpers, " + namespace + ".helpers);";
- if (this.environment.usePartial) { copies = copies + " partials = this.merge(partials, " + namespace + ".partials);"; }
- if (this.options.data) { copies = copies + " data = data || {};"; }
- out.push(copies);
- } else {
- out.push('');
- }
-
- if (!this.environment.isSimple) {
- out.push(", buffer = " + this.initializeBuffer());
- } else {
- out.push("");
- }
-
- // track the last context pushed into place to allow skipping the
- // getContext opcode when it would be a noop
- this.lastContext = 0;
- this.source = out;
- },
-
- createFunctionContext: function(asObject) {
- var locals = this.stackVars.concat(this.registers.list);
-
- if(locals.length > 0) {
- this.source[1] = this.source[1] + ", " + locals.join(", ");
- }
-
- // Generate minimizer alias mappings
- if (!this.isChild) {
- for (var alias in this.context.aliases) {
- if (this.context.aliases.hasOwnProperty(alias)) {
- this.source[1] = this.source[1] + ', ' + alias + '=' + this.context.aliases[alias];
- }
- }
- }
-
- if (this.source[1]) {
- this.source[1] = "var " + this.source[1].substring(2) + ";";
- }
-
- // Merge children
- if (!this.isChild) {
- this.source[1] += '\n' + this.context.programs.join('\n') + '\n';
- }
-
- if (!this.environment.isSimple) {
- this.pushSource("return buffer;");
- }
-
- var params = this.isChild ? ["depth0", "data"] : ["Handlebars", "depth0", "helpers", "partials", "data"];
-
- for(var i=0, l=this.environment.depths.list.length; i<l; i++) {
- params.push("depth" + this.environment.depths.list[i]);
- }
-
- // Perform a second pass over the output to merge content when possible
- var source = this.mergeSource();
-
- if (!this.isChild) {
- source = this.compilerInfo()+source;
- }
-
- if (asObject) {
- params.push(source);
-
- return Function.apply(this, params);
- } else {
- var functionSource = 'function ' + (this.name || '') + '(' + params.join(',') + ') {\n ' + source + '}';
- log('debug', functionSource + "\n\n");
- return functionSource;
- }
- },
- mergeSource: function() {
- // WARN: We are not handling the case where buffer is still populated as the source should
- // not have buffer append operations as their final action.
- var source = '',
- buffer;
- for (var i = 0, len = this.source.length; i < len; i++) {
- var line = this.source[i];
- if (line.appendToBuffer) {
- if (buffer) {
- buffer = buffer + '\n + ' + line.content;
- } else {
- buffer = line.content;
- }
- } else {
- if (buffer) {
- source += 'buffer += ' + buffer + ';\n ';
- buffer = undefined;
- }
- source += line + '\n ';
- }
- }
- return source;
- },
-
- // [blockValue]
- //
- // On stack, before: hash, inverse, program, value
- // On stack, after: return value of blockHelperMissing
- //
- // The purpose of this opcode is to take a block of the form
- // `{{#foo}}...{{/foo}}`, resolve the value of `foo`, and
- // replace it on the stack with the result of properly
- // invoking blockHelperMissing.
- blockValue: function() {
- this.context.aliases.blockHelperMissing = 'helpers.blockHelperMissing';
-
- var params = ["depth0"];
- this.setupParams(0, params);
-
- this.replaceStack(function(current) {
- params.splice(1, 0, current);
- return "blockHelperMissing.call(" + params.join(", ") + ")";
- });
- },
-
- // [ambiguousBlockValue]
- //
- // On stack, before: hash, inverse, program, value
- // Compiler value, before: lastHelper=value of last found helper, if any
- // On stack, after, if no lastHelper: same as [blockValue]
- // On stack, after, if lastHelper: value
- ambiguousBlockValue: function() {
- this.context.aliases.blockHelperMissing = 'helpers.blockHelperMissing';
-
- var params = ["depth0"];
- this.setupParams(0, params);
-
- var current = this.topStack();
- params.splice(1, 0, current);
-
- this.pushSource("if (!" + this.lastHelper + ") { " + current + " = blockHelperMissing.call(" + params.join(", ") + "); }");
- },
-
- // [appendContent]
- //
- // On stack, before: ...
- // On stack, after: ...
- //
- // Appends the string value of `content` to the current buffer
- appendContent: function(content) {
- if (this.pendingContent) {
- content = this.pendingContent + content;
- }
- if (this.stripNext) {
- content = content.replace(/^\s+/, '');
- }
-
- this.pendingContent = content;
- },
-
- // [strip]
- //
- // On stack, before: ...
- // On stack, after: ...
- //
- // Removes any trailing whitespace from the prior content node and flags
- // the next operation for stripping if it is a content node.
- strip: function() {
- if (this.pendingContent) {
- this.pendingContent = this.pendingContent.replace(/\s+$/, '');
- }
- this.stripNext = 'strip';
- },
-
- // [append]
- //
- // On stack, before: value, ...
- // On stack, after: ...
- //
- // Coerces `value` to a String and appends it to the current buffer.
- //
- // If `value` is truthy, or 0, it is coerced into a string and appended
- // Otherwise, the empty string is appended
- append: function() {
- // Force anything that is inlined onto the stack so we don't have duplication
- // when we examine local
- this.flushInline();
- var local = this.popStack();
- this.pushSource("if(" + local + " || " + local + " === 0) { " + this.appendToBuffer(local) + " }");
- if (this.environment.isSimple) {
- this.pushSource("else { " + this.appendToBuffer("''") + " }");
- }
- },
-
- // [appendEscaped]
- //
- // On stack, before: value, ...
- // On stack, after: ...
- //
- // Escape `value` and append it to the buffer
- appendEscaped: function() {
- this.context.aliases.escapeExpression = 'this.escapeExpression';
-
- this.pushSource(this.appendToBuffer("escapeExpression(" + this.popStack() + ")"));
- },
-
- // [getContext]
- //
- // On stack, before: ...
- // On stack, after: ...
- // Compiler value, after: lastContext=depth
- //
- // Set the value of the `lastContext` compiler value to the depth
- getContext: function(depth) {
- if(this.lastContext !== depth) {
- this.lastContext = depth;
- }
- },
-
- // [lookupOnContext]
- //
- // On stack, before: ...
- // On stack, after: currentContext[name], ...
- //
- // Looks up the value of `name` on the current context and pushes
- // it onto the stack.
- lookupOnContext: function(name) {
- this.push(this.nameLookup('depth' + this.lastContext, name, 'context'));
- },
-
- // [pushContext]
- //
- // On stack, before: ...
- // On stack, after: currentContext, ...
- //
- // Pushes the value of the current context onto the stack.
- pushContext: function() {
- this.pushStackLiteral('depth' + this.lastContext);
- },
-
- // [resolvePossibleLambda]
- //
- // On stack, before: value, ...
- // On stack, after: resolved value, ...
- //
- // If the `value` is a lambda, replace it on the stack by
- // the return value of the lambda
- resolvePossibleLambda: function() {
- this.context.aliases.functionType = '"function"';
-
- this.replaceStack(function(current) {
- return "typeof " + current + " === functionType ? " + current + ".apply(depth0) : " + current;
- });
- },
-
- // [lookup]
- //
- // On stack, before: value, ...
- // On stack, after: value[name], ...
- //
- // Replace the value on the stack with the result of looking
- // up `name` on `value`
- lookup: function(name) {
- this.replaceStack(function(current) {
- return current + " == null || " + current + " === false ? " + current + " : " + this.nameLookup(current, name, 'context');
- });
- },
-
- // [lookupData]
- //
- // On stack, before: ...
- // On stack, after: data, ...
- //
- // Push the data lookup operator
- lookupData: function() {
- this.pushStackLiteral('data');
- },
-
- // [pushStringParam]
- //
- // On stack, before: ...
- // On stack, after: string, currentContext, ...
- //
- // This opcode is designed for use in string mode, which
- // provides the string value of a parameter along with its
- // depth rather than resolving it immediately.
- pushStringParam: function(string, type) {
- this.pushStackLiteral('depth' + this.lastContext);
-
- this.pushString(type);
-
- // If it's a subexpression, the string result
- // will be pushed after this opcode.
- if (type !== 'sexpr') {
- if (typeof string === 'string') {
- this.pushString(string);
- } else {
- this.pushStackLiteral(string);
- }
- }
- },
-
- emptyHash: function() {
- this.pushStackLiteral('{}');
-
- if (this.options.stringParams) {
- this.push('{}'); // hashContexts
- this.push('{}'); // hashTypes
- }
- },
- pushHash: function() {
- if (this.hash) {
- this.hashes.push(this.hash);
- }
- this.hash = {values: [], types: [], contexts: []};
- },
- popHash: function() {
- var hash = this.hash;
- this.hash = this.hashes.pop();
-
- if (this.options.stringParams) {
- this.push('{' + hash.contexts.join(',') + '}');
- this.push('{' + hash.types.join(',') + '}');
- }
-
- this.push('{\n ' + hash.values.join(',\n ') + '\n }');
- },
-
- // [pushString]
- //
- // On stack, before: ...
- // On stack, after: quotedString(string), ...
- //
- // Push a quoted version of `string` onto the stack
- pushString: function(string) {
- this.pushStackLiteral(this.quotedString(string));
- },
-
- // [push]
- //
- // On stack, before: ...
- // On stack, after: expr, ...
- //
- // Push an expression onto the stack
- push: function(expr) {
- this.inlineStack.push(expr);
- return expr;
- },
-
- // [pushLiteral]
- //
- // On stack, before: ...
- // On stack, after: value, ...
- //
- // Pushes a value onto the stack. This operation prevents
- // the compiler from creating a temporary variable to hold
- // it.
- pushLiteral: function(value) {
- this.pushStackLiteral(value);
- },
-
- // [pushProgram]
- //
- // On stack, before: ...
- // On stack, after: program(guid), ...
- //
- // Push a program expression onto the stack. This takes
- // a compile-time guid and converts it into a runtime-accessible
- // expression.
- pushProgram: function(guid) {
- if (guid != null) {
- this.pushStackLiteral(this.programExpression(guid));
- } else {
- this.pushStackLiteral(null);
- }
- },
-
- // [invokeHelper]
- //
- // On stack, before: hash, inverse, program, params..., ...
- // On stack, after: result of helper invocation
- //
- // Pops off the helper's parameters, invokes the helper,
- // and pushes the helper's return value onto the stack.
- //
- // If the helper is not found, `helperMissing` is called.
- invokeHelper: function(paramSize, name, isRoot) {
- this.context.aliases.helperMissing = 'helpers.helperMissing';
- this.useRegister('helper');
-
- var helper = this.lastHelper = this.setupHelper(paramSize, name, true);
- var nonHelper = this.nameLookup('depth' + this.lastContext, name, 'context');
-
- var lookup = 'helper = ' + helper.name + ' || ' + nonHelper;
- if (helper.paramsInit) {
- lookup += ',' + helper.paramsInit;
- }
-
- this.push(
- '('
- + lookup
- + ',helper '
- + '? helper.call(' + helper.callParams + ') '
- + ': helperMissing.call(' + helper.helperMissingParams + '))');
-
- // Always flush subexpressions. This is both to prevent the compounding size issue that
- // occurs when the code has to be duplicated for inlining and also to prevent errors
- // due to the incorrect options object being passed due to the shared register.
- if (!isRoot) {
- this.flushInline();
- }
- },
-
- // [invokeKnownHelper]
- //
- // On stack, before: hash, inverse, program, params..., ...
- // On stack, after: result of helper invocation
- //
- // This operation is used when the helper is known to exist,
- // so a `helperMissing` fallback is not required.
- invokeKnownHelper: function(paramSize, name) {
- var helper = this.setupHelper(paramSize, name);
- this.push(helper.name + ".call(" + helper.callParams + ")");
- },
-
- // [invokeAmbiguous]
- //
- // On stack, before: hash, inverse, program, params..., ...
- // On stack, after: result of disambiguation
- //
- // This operation is used when an expression like `{{foo}}`
- // is provided, but we don't know at compile-time whether it
- // is a helper or a path.
- //
- // This operation emits more code than the other options,
- // and can be avoided by passing the `knownHelpers` and
- // `knownHelpersOnly` flags at compile-time.
- invokeAmbiguous: function(name, helperCall) {
- this.context.aliases.functionType = '"function"';
- this.useRegister('helper');
-
- this.emptyHash();
- var helper = this.setupHelper(0, name, helperCall);
-
- var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');
-
- var nonHelper = this.nameLookup('depth' + this.lastContext, name, 'context');
- var nextStack = this.nextStack();
-
- if (helper.paramsInit) {
- this.pushSource(helper.paramsInit);
- }
- this.pushSource('if (helper = ' + helperName + ') { ' + nextStack + ' = helper.call(' + helper.callParams + '); }');
- this.pushSource('else { helper = ' + nonHelper + '; ' + nextStack + ' = typeof helper === functionType ? helper.call(' + helper.callParams + ') : helper; }');
- },
-
- // [invokePartial]
- //
- // On stack, before: context, ...
- // On stack after: result of partial invocation
- //
- // This operation pops off a context, invokes a partial with that context,
- // and pushes the result of the invocation back.
- invokePartial: function(name) {
- var params = [this.nameLookup('partials', name, 'partial'), "'" + name + "'", this.popStack(), "helpers", "partials"];
-
- if (this.options.data) {
- params.push("data");
- }
-
- this.context.aliases.self = "this";
- this.push("self.invokePartial(" + params.join(", ") + ")");
- },
-
- // [assignToHash]
- //
- // On stack, before: value, hash, ...
- // On stack, after: hash, ...
- //
- // Pops a value and hash off the stack, assigns `hash[key] = value`
- // and pushes the hash back onto the stack.
- assignToHash: function(key) {
- var value = this.popStack(),
- context,
- type;
-
- if (this.options.stringParams) {
- type = this.popStack();
- context = this.popStack();
- }
-
- var hash = this.hash;
- if (context) {
- hash.contexts.push("'" + key + "': " + context);
- }
- if (type) {
- hash.types.push("'" + key + "': " + type);
- }
- hash.values.push("'" + key + "': (" + value + ")");
- },
-
- // HELPERS
-
- compiler: JavaScriptCompiler,
-
- compileChildren: function(environment, options) {
- var children = environment.children, child, compiler;
-
- for(var i=0, l=children.length; i<l; i++) {
- child = children[i];
- compiler = new this.compiler();
-
- var index = this.matchExistingProgram(child);
-
- if (index == null) {
- this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children
- index = this.context.programs.length;
- child.index = index;
- child.name = 'program' + index;
- this.context.programs[index] = compiler.compile(child, options, this.context);
- this.context.environments[index] = child;
- } else {
- child.index = index;
- child.name = 'program' + index;
- }
- }
- },
- matchExistingProgram: function(child) {
- for (var i = 0, len = this.context.environments.length; i < len; i++) {
- var environment = this.context.environments[i];
- if (environment && environment.equals(child)) {
- return i;
- }
- }
- },
-
- programExpression: function(guid) {
- this.context.aliases.self = "this";
-
- if(guid == null) {
- return "self.noop";
- }
-
- var child = this.environment.children[guid],
- depths = child.depths.list, depth;
-
- var programParams = [child.index, child.name, "data"];
-
- for(var i=0, l = depths.length; i<l; i++) {
- depth = depths[i];
-
- if(depth === 1) { programParams.push("depth0"); }
- else { programParams.push("depth" + (depth - 1)); }
- }
-
- return (depths.length === 0 ? "self.program(" : "self.programWithDepth(") + programParams.join(", ") + ")";
- },
-
- register: function(name, val) {
- this.useRegister(name);
- this.pushSource(name + " = " + val + ";");
- },
-
- useRegister: function(name) {
- if(!this.registers[name]) {
- this.registers[name] = true;
- this.registers.list.push(name);
- }
- },
-
- pushStackLiteral: function(item) {
- return this.push(new Literal(item));
- },
-
- pushSource: function(source) {
- if (this.pendingContent) {
- this.source.push(this.appendToBuffer(this.quotedString(this.pendingContent)));
- this.pendingContent = undefined;
- }
-
- if (source) {
- this.source.push(source);
- }
- },
-
- pushStack: function(item) {
- this.flushInline();
-
- var stack = this.incrStack();
- if (item) {
- this.pushSource(stack + " = " + item + ";");
- }
- this.compileStack.push(stack);
- return stack;
- },
-
- replaceStack: function(callback) {
- var prefix = '',
- inline = this.isInline(),
- stack,
- createdStack,
- usedLiteral;
-
- // If we are currently inline then we want to merge the inline statement into the
- // replacement statement via ','
- if (inline) {
- var top = this.popStack(true);
-
- if (top instanceof Literal) {
- // Literals do not need to be inlined
- stack = top.value;
- usedLiteral = true;
- } else {
- // Get or create the current stack name for use by the inline
- createdStack = !this.stackSlot;
- var name = !createdStack ? this.topStackName() : this.incrStack();
-
- prefix = '(' + this.push(name) + ' = ' + top + '),';
- stack = this.topStack();
- }
- } else {
- stack = this.topStack();
- }
-
- var item = callback.call(this, stack);
-
- if (inline) {
- if (!usedLiteral) {
- this.popStack();
- }
- if (createdStack) {
- this.stackSlot--;
- }
- this.push('(' + prefix + item + ')');
- } else {
- // Prevent modification of the context depth variable. Through replaceStack
- if (!/^stack/.test(stack)) {
- stack = this.nextStack();
- }
-
- this.pushSource(stack + " = (" + prefix + item + ");");
- }
- return stack;
- },
-
- nextStack: function() {
- return this.pushStack();
- },
-
- incrStack: function() {
- this.stackSlot++;
- if(this.stackSlot > this.stackVars.length) { this.stackVars.push("stack" + this.stackSlot); }
- return this.topStackName();
- },
- topStackName: function() {
- return "stack" + this.stackSlot;
- },
- flushInline: function() {
- var inlineStack = this.inlineStack;
- if (inlineStack.length) {
- this.inlineStack = [];
- for (var i = 0, len = inlineStack.length; i < len; i++) {
- var entry = inlineStack[i];
- if (entry instanceof Literal) {
- this.compileStack.push(entry);
- } else {
- this.pushStack(entry);
- }
- }
- }
- },
- isInline: function() {
- return this.inlineStack.length;
- },
-
- popStack: function(wrapped) {
- var inline = this.isInline(),
- item = (inline ? this.inlineStack : this.compileStack).pop();
-
- if (!wrapped && (item instanceof Literal)) {
- return item.value;
- } else {
- if (!inline) {
- if (!this.stackSlot) {
- throw new Exception('Invalid stack pop');
- }
- this.stackSlot--;
- }
- return item;
- }
- },
-
- topStack: function(wrapped) {
- var stack = (this.isInline() ? this.inlineStack : this.compileStack),
- item = stack[stack.length - 1];
-
- if (!wrapped && (item instanceof Literal)) {
- return item.value;
- } else {
- return item;
- }
- },
-
- quotedString: function(str) {
- return '"' + str
- .replace(/\\/g, '\\\\')
- .replace(/"/g, '\\"')
- .replace(/\n/g, '\\n')
- .replace(/\r/g, '\\r')
- .replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4
- .replace(/\u2029/g, '\\u2029') + '"';
- },
-
- setupHelper: function(paramSize, name, missingParams) {
- var params = [],
- paramsInit = this.setupParams(paramSize, params, missingParams);
- var foundHelper = this.nameLookup('helpers', name, 'helper');
-
- return {
- params: params,
- paramsInit: paramsInit,
- name: foundHelper,
- callParams: ["depth0"].concat(params).join(", "),
- helperMissingParams: missingParams && ["depth0", this.quotedString(name)].concat(params).join(", ")
- };
- },
-
- setupOptions: function(paramSize, params) {
- var options = [], contexts = [], types = [], param, inverse, program;
-
- options.push("hash:" + this.popStack());
-
- if (this.options.stringParams) {
- options.push("hashTypes:" + this.popStack());
- options.push("hashContexts:" + this.popStack());
- }
-
- inverse = this.popStack();
- program = this.popStack();
-
- // Avoid setting fn and inverse if neither are set. This allows
- // helpers to do a check for `if (options.fn)`
- if (program || inverse) {
- if (!program) {
- this.context.aliases.self = "this";
- program = "self.noop";
- }
-
- if (!inverse) {
- this.context.aliases.self = "this";
- inverse = "self.noop";
- }
-
- options.push("inverse:" + inverse);
- options.push("fn:" + program);
- }
-
- for(var i=0; i<paramSize; i++) {
- param = this.popStack();
- params.push(param);
-
- if(this.options.stringParams) {
- types.push(this.popStack());
- contexts.push(this.popStack());
- }
- }
-
- if (this.options.stringParams) {
- options.push("contexts:[" + contexts.join(",") + "]");
- options.push("types:[" + types.join(",") + "]");
- }
-
- if(this.options.data) {
- options.push("data:data");
- }
-
- return options;
- },
-
- // the params and contexts arguments are passed in arrays
- // to fill in
- setupParams: function(paramSize, params, useRegister) {
- var options = '{' + this.setupOptions(paramSize, params).join(',') + '}';
-
- if (useRegister) {
- this.useRegister('options');
- params.push('options');
- return 'options=' + options;
- } else {
- params.push(options);
- return '';
- }
- }
- };
-
- var reservedWords = (
- "break else new var" +
- " case finally return void" +
- " catch for switch while" +
- " continue function this with" +
- " default if throw" +
- " delete in try" +
- " do instanceof typeof" +
- " abstract enum int short" +
- " boolean export interface static" +
- " byte extends long super" +
- " char final native synchronized" +
- " class float package throws" +
- " const goto private transient" +
- " debugger implements protected volatile" +
- " double import public let yield"
- ).split(" ");
-
- var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};
-
- for(var i=0, l=reservedWords.length; i<l; i++) {
- compilerWords[reservedWords[i]] = true;
- }
-
- JavaScriptCompiler.isValidJavaScriptVariableName = function(name) {
- if(!JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name)) {
- return true;
- }
- return false;
- };
-
- __exports__ = JavaScriptCompiler;
- return __exports__;
-})(__module2__, __module5__);
-
-// handlebars.js
-var __module0__ = (function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {
- "use strict";
- var __exports__;
- /*globals Handlebars: true */
- var Handlebars = __dependency1__;
-
- // Compiler imports
- var AST = __dependency2__;
- var Parser = __dependency3__.parser;
- var parse = __dependency3__.parse;
- var Compiler = __dependency4__.Compiler;
- var compile = __dependency4__.compile;
- var precompile = __dependency4__.precompile;
- var JavaScriptCompiler = __dependency5__;
-
- var _create = Handlebars.create;
- var create = function() {
- var hb = _create();
-
- hb.compile = function(input, options) {
- return compile(input, options, hb);
- };
- hb.precompile = function (input, options) {
- return precompile(input, options, hb);
- };
-
- hb.AST = AST;
- hb.Compiler = Compiler;
- hb.JavaScriptCompiler = JavaScriptCompiler;
- hb.Parser = Parser;
- hb.parse = parse;
-
- return hb;
- };
-
- Handlebars = create();
- Handlebars.create = create;
-
- __exports__ = Handlebars;
- return __exports__;
-})(__module1__, __module7__, __module8__, __module10__, __module11__);
-
- return __module0__;
-})();
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory();
+ else if(typeof define === 'function' && define.amd)
+ define([], factory);
+ else if(typeof exports === 'object')
+ exports["Handlebars"] = factory();
+ else
+ root["Handlebars"] = factory();
+})(this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId])
+/******/ return installedModules[moduleId].exports;
+
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ exports: {},
+/******/ id: moduleId,
+/******/ loaded: false
+/******/ };
+
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ // Flag the module as loaded
+/******/ module.loaded = true;
+
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+
+
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+
+ var _handlebarsRuntime = __webpack_require__(2);
+
+ var _handlebarsRuntime2 = _interopRequireDefault(_handlebarsRuntime);
+
+ // Compiler imports
+
+ var _handlebarsCompilerAst = __webpack_require__(21);
+
+ var _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst);
+
+ var _handlebarsCompilerBase = __webpack_require__(22);
+
+ var _handlebarsCompilerCompiler = __webpack_require__(27);
+
+ var _handlebarsCompilerJavascriptCompiler = __webpack_require__(28);
+
+ var _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler);
+
+ var _handlebarsCompilerVisitor = __webpack_require__(25);
+
+ var _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor);
+
+ var _handlebarsNoConflict = __webpack_require__(20);
+
+ var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
+
+ var _create = _handlebarsRuntime2['default'].create;
+ function create() {
+ var hb = _create();
+
+ hb.compile = function (input, options) {
+ return _handlebarsCompilerCompiler.compile(input, options, hb);
+ };
+ hb.precompile = function (input, options) {
+ return _handlebarsCompilerCompiler.precompile(input, options, hb);
+ };
+
+ hb.AST = _handlebarsCompilerAst2['default'];
+ hb.Compiler = _handlebarsCompilerCompiler.Compiler;
+ hb.JavaScriptCompiler = _handlebarsCompilerJavascriptCompiler2['default'];
+ hb.Parser = _handlebarsCompilerBase.parser;
+ hb.parse = _handlebarsCompilerBase.parse;
+
+ return hb;
+ }
+
+ var inst = create();
+ inst.create = create;
+
+ _handlebarsNoConflict2['default'](inst);
+
+ inst.Visitor = _handlebarsCompilerVisitor2['default'];
+
+ inst['default'] = inst;
+
+ exports['default'] = inst;
+ module.exports = exports['default'];
+
+/***/ },
+/* 1 */
+/***/ function(module, exports) {
+
+ "use strict";
+
+ exports["default"] = function (obj) {
+ return obj && obj.__esModule ? obj : {
+ "default": obj
+ };
+ };
+
+ exports.__esModule = true;
+
+/***/ },
+/* 2 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireWildcard = __webpack_require__(3)['default'];
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+
+ var _handlebarsBase = __webpack_require__(4);
+
+ var base = _interopRequireWildcard(_handlebarsBase);
+
+ // Each of these augment the Handlebars object. No need to setup here.
+ // (This is done to easily share code between commonjs and browse envs)
+
+ var _handlebarsSafeString = __webpack_require__(18);
+
+ var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);
+
+ var _handlebarsException = __webpack_require__(6);
+
+ var _handlebarsException2 = _interopRequireDefault(_handlebarsException);
+
+ var _handlebarsUtils = __webpack_require__(5);
+
+ var Utils = _interopRequireWildcard(_handlebarsUtils);
+
+ var _handlebarsRuntime = __webpack_require__(19);
+
+ var runtime = _interopRequireWildcard(_handlebarsRuntime);
+
+ var _handlebarsNoConflict = __webpack_require__(20);
+
+ var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
+
+ // For compatibility and usage outside of module systems, make the Handlebars object a namespace
+ function create() {
+ var hb = new base.HandlebarsEnvironment();
+
+ Utils.extend(hb, base);
+ hb.SafeString = _handlebarsSafeString2['default'];
+ hb.Exception = _handlebarsException2['default'];
+ hb.Utils = Utils;
+ hb.escapeExpression = Utils.escapeExpression;
+
+ hb.VM = runtime;
+ hb.template = function (spec) {
+ return runtime.template(spec, hb);
+ };
+
+ return hb;
+ }
+
+ var inst = create();
+ inst.create = create;
+
+ _handlebarsNoConflict2['default'](inst);
+
+ inst['default'] = inst;
+
+ exports['default'] = inst;
+ module.exports = exports['default'];
+
+/***/ },
+/* 3 */
+/***/ function(module, exports) {
+
+ "use strict";
+
+ exports["default"] = function (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;
+ }
+ };
+
+ exports.__esModule = true;
+
+/***/ },
+/* 4 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+ exports.HandlebarsEnvironment = HandlebarsEnvironment;
+
+ var _utils = __webpack_require__(5);
+
+ var _exception = __webpack_require__(6);
+
+ var _exception2 = _interopRequireDefault(_exception);
+
+ var _helpers = __webpack_require__(7);
+
+ var _decorators = __webpack_require__(15);
+
+ var _logger = __webpack_require__(17);
+
+ var _logger2 = _interopRequireDefault(_logger);
+
+ var VERSION = '4.0.5';
+ exports.VERSION = VERSION;
+ var COMPILER_REVISION = 7;
+
+ exports.COMPILER_REVISION = COMPILER_REVISION;
+ var REVISION_CHANGES = {
+ 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it
+ 2: '== 1.0.0-rc.3',
+ 3: '== 1.0.0-rc.4',
+ 4: '== 1.x.x',
+ 5: '== 2.0.0-alpha.x',
+ 6: '>= 2.0.0-beta.1',
+ 7: '>= 4.0.0'
+ };
+
+ exports.REVISION_CHANGES = REVISION_CHANGES;
+ var objectType = '[object Object]';
+
+ function HandlebarsEnvironment(helpers, partials, decorators) {
+ this.helpers = helpers || {};
+ this.partials = partials || {};
+ this.decorators = decorators || {};
+
+ _helpers.registerDefaultHelpers(this);
+ _decorators.registerDefaultDecorators(this);
+ }
+
+ HandlebarsEnvironment.prototype = {
+ constructor: HandlebarsEnvironment,
+
+ logger: _logger2['default'],
+ log: _logger2['default'].log,
+
+ registerHelper: function registerHelper(name, fn) {
+ if (_utils.toString.call(name) === objectType) {
+ if (fn) {
+ throw new _exception2['default']('Arg not supported with multiple helpers');
+ }
+ _utils.extend(this.helpers, name);
+ } else {
+ this.helpers[name] = fn;
+ }
+ },
+ unregisterHelper: function unregisterHelper(name) {
+ delete this.helpers[name];
+ },
+
+ registerPartial: function registerPartial(name, partial) {
+ if (_utils.toString.call(name) === objectType) {
+ _utils.extend(this.partials, name);
+ } else {
+ if (typeof partial === 'undefined') {
+ throw new _exception2['default']('Attempting to register a partial called "' + name + '" as undefined');
+ }
+ this.partials[name] = partial;
+ }
+ },
+ unregisterPartial: function unregisterPartial(name) {
+ delete this.partials[name];
+ },
+
+ registerDecorator: function registerDecorator(name, fn) {
+ if (_utils.toString.call(name) === objectType) {
+ if (fn) {
+ throw new _exception2['default']('Arg not supported with multiple decorators');
+ }
+ _utils.extend(this.decorators, name);
+ } else {
+ this.decorators[name] = fn;
+ }
+ },
+ unregisterDecorator: function unregisterDecorator(name) {
+ delete this.decorators[name];
+ }
+ };
+
+ var log = _logger2['default'].log;
+
+ exports.log = log;
+ exports.createFrame = _utils.createFrame;
+ exports.logger = _logger2['default'];
+
+/***/ },
+/* 5 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ exports.extend = extend;
+ exports.indexOf = indexOf;
+ exports.escapeExpression = escapeExpression;
+ exports.isEmpty = isEmpty;
+ exports.createFrame = createFrame;
+ exports.blockParams = blockParams;
+ exports.appendContextPath = appendContextPath;
+ var escape = {
+ '&': '&amp;',
+ '<': '&lt;',
+ '>': '&gt;',
+ '"': '&quot;',
+ "'": '&#x27;',
+ '`': '&#x60;',
+ '=': '&#x3D;'
+ };
+
+ var badChars = /[&<>"'`=]/g,
+ possible = /[&<>"'`=]/;
+
+ function escapeChar(chr) {
+ return escape[chr];
+ }
+
+ function extend(obj /* , ...source */) {
+ for (var i = 1; i < arguments.length; i++) {
+ for (var key in arguments[i]) {
+ if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {
+ obj[key] = arguments[i][key];
+ }
+ }
+ }
+
+ return obj;
+ }
+
+ var toString = Object.prototype.toString;
+
+ exports.toString = toString;
+ // Sourced from lodash
+ // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
+ /* eslint-disable func-style */
+ var isFunction = function isFunction(value) {
+ return typeof value === 'function';
+ };
+ // fallback for older versions of Chrome and Safari
+ /* istanbul ignore next */
+ if (isFunction(/x/)) {
+ exports.isFunction = isFunction = function (value) {
+ return typeof value === 'function' && toString.call(value) === '[object Function]';
+ };
+ }
+ exports.isFunction = isFunction;
+
+ /* eslint-enable func-style */
+
+ /* istanbul ignore next */
+ var isArray = Array.isArray || function (value) {
+ return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;
+ };
+
+ exports.isArray = isArray;
+ // Older IE versions do not directly support indexOf so we must implement our own, sadly.
+
+ function indexOf(array, value) {
+ for (var i = 0, len = array.length; i < len; i++) {
+ if (array[i] === value) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ function escapeExpression(string) {
+ if (typeof string !== 'string') {
+ // don't escape SafeStrings, since they're already safe
+ if (string && string.toHTML) {
+ return string.toHTML();
+ } else if (string == null) {
+ return '';
+ } else if (!string) {
+ return string + '';
+ }
+
+ // Force a string conversion as this will be done by the append regardless and
+ // the regex test will do this transparently behind the scenes, causing issues if
+ // an object's to string has escaped characters in it.
+ string = '' + string;
+ }
+
+ if (!possible.test(string)) {
+ return string;
+ }
+ return string.replace(badChars, escapeChar);
+ }
+
+ function isEmpty(value) {
+ if (!value && value !== 0) {
+ return true;
+ } else if (isArray(value) && value.length === 0) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ function createFrame(object) {
+ var frame = extend({}, object);
+ frame._parent = object;
+ return frame;
+ }
+
+ function blockParams(params, ids) {
+ params.path = ids;
+ return params;
+ }
+
+ function appendContextPath(contextPath, id) {
+ return (contextPath ? contextPath + '.' : '') + id;
+ }
+
+/***/ },
+/* 6 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
+
+ function Exception(message, node) {
+ var loc = node && node.loc,
+ line = undefined,
+ column = undefined;
+ if (loc) {
+ line = loc.start.line;
+ column = loc.start.column;
+
+ message += ' - ' + line + ':' + column;
+ }
+
+ var tmp = Error.prototype.constructor.call(this, message);
+
+ // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
+ for (var idx = 0; idx < errorProps.length; idx++) {
+ this[errorProps[idx]] = tmp[errorProps[idx]];
+ }
+
+ /* istanbul ignore else */
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, Exception);
+ }
+
+ if (loc) {
+ this.lineNumber = line;
+ this.column = column;
+ }
+ }
+
+ Exception.prototype = new Error();
+
+ exports['default'] = Exception;
+ module.exports = exports['default'];
+
+/***/ },
+/* 7 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+ exports.registerDefaultHelpers = registerDefaultHelpers;
+
+ var _helpersBlockHelperMissing = __webpack_require__(8);
+
+ var _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);
+
+ var _helpersEach = __webpack_require__(9);
+
+ var _helpersEach2 = _interopRequireDefault(_helpersEach);
+
+ var _helpersHelperMissing = __webpack_require__(10);
+
+ var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);
+
+ var _helpersIf = __webpack_require__(11);
+
+ var _helpersIf2 = _interopRequireDefault(_helpersIf);
+
+ var _helpersLog = __webpack_require__(12);
+
+ var _helpersLog2 = _interopRequireDefault(_helpersLog);
+
+ var _helpersLookup = __webpack_require__(13);
+
+ var _helpersLookup2 = _interopRequireDefault(_helpersLookup);
+
+ var _helpersWith = __webpack_require__(14);
+
+ var _helpersWith2 = _interopRequireDefault(_helpersWith);
+
+ function registerDefaultHelpers(instance) {
+ _helpersBlockHelperMissing2['default'](instance);
+ _helpersEach2['default'](instance);
+ _helpersHelperMissing2['default'](instance);
+ _helpersIf2['default'](instance);
+ _helpersLog2['default'](instance);
+ _helpersLookup2['default'](instance);
+ _helpersWith2['default'](instance);
+ }
+
+/***/ },
+/* 8 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _utils = __webpack_require__(5);
+
+ exports['default'] = function (instance) {
+ instance.registerHelper('blockHelperMissing', function (context, options) {
+ var inverse = options.inverse,
+ fn = options.fn;
+
+ if (context === true) {
+ return fn(this);
+ } else if (context === false || context == null) {
+ return inverse(this);
+ } else if (_utils.isArray(context)) {
+ if (context.length > 0) {
+ if (options.ids) {
+ options.ids = [options.name];
+ }
+
+ return instance.helpers.each(context, options);
+ } else {
+ return inverse(this);
+ }
+ } else {
+ if (options.data && options.ids) {
+ var data = _utils.createFrame(options.data);
+ data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);
+ options = { data: data };
+ }
+
+ return fn(context, options);
+ }
+ });
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 9 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+
+ var _utils = __webpack_require__(5);
+
+ var _exception = __webpack_require__(6);
+
+ var _exception2 = _interopRequireDefault(_exception);
+
+ exports['default'] = function (instance) {
+ instance.registerHelper('each', function (context, options) {
+ if (!options) {
+ throw new _exception2['default']('Must pass iterator to #each');
+ }
+
+ var fn = options.fn,
+ inverse = options.inverse,
+ i = 0,
+ ret = '',
+ data = undefined,
+ contextPath = undefined;
+
+ if (options.data && options.ids) {
+ contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';
+ }
+
+ if (_utils.isFunction(context)) {
+ context = context.call(this);
+ }
+
+ if (options.data) {
+ data = _utils.createFrame(options.data);
+ }
+
+ function execIteration(field, index, last) {
+ if (data) {
+ data.key = field;
+ data.index = index;
+ data.first = index === 0;
+ data.last = !!last;
+
+ if (contextPath) {
+ data.contextPath = contextPath + field;
+ }
+ }
+
+ ret = ret + fn(context[field], {
+ data: data,
+ blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])
+ });
+ }
+
+ if (context && typeof context === 'object') {
+ if (_utils.isArray(context)) {
+ for (var j = context.length; i < j; i++) {
+ if (i in context) {
+ execIteration(i, i, i === context.length - 1);
+ }
+ }
+ } else {
+ var priorKey = undefined;
+
+ for (var key in context) {
+ if (context.hasOwnProperty(key)) {
+ // We're running the iterations one step out of sync so we can detect
+ // the last iteration without have to scan the object twice and create
+ // an itermediate keys array.
+ if (priorKey !== undefined) {
+ execIteration(priorKey, i - 1);
+ }
+ priorKey = key;
+ i++;
+ }
+ }
+ if (priorKey !== undefined) {
+ execIteration(priorKey, i - 1, true);
+ }
+ }
+ }
+
+ if (i === 0) {
+ ret = inverse(this);
+ }
+
+ return ret;
+ });
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 10 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+
+ var _exception = __webpack_require__(6);
+
+ var _exception2 = _interopRequireDefault(_exception);
+
+ exports['default'] = function (instance) {
+ instance.registerHelper('helperMissing', function () /* [args, ]options */{
+ if (arguments.length === 1) {
+ // A missing field in a {{foo}} construct.
+ return undefined;
+ } else {
+ // Someone is actually trying to call something, blow up.
+ throw new _exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"');
+ }
+ });
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 11 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _utils = __webpack_require__(5);
+
+ exports['default'] = function (instance) {
+ instance.registerHelper('if', function (conditional, options) {
+ if (_utils.isFunction(conditional)) {
+ conditional = conditional.call(this);
+ }
+
+ // Default behavior is to render the positive path if the value is truthy and not empty.
+ // The `includeZero` option may be set to treat the condtional as purely not empty based on the
+ // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.
+ if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {
+ return options.inverse(this);
+ } else {
+ return options.fn(this);
+ }
+ });
+
+ instance.registerHelper('unless', function (conditional, options) {
+ return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash });
+ });
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 12 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ exports['default'] = function (instance) {
+ instance.registerHelper('log', function () /* message, options */{
+ var args = [undefined],
+ options = arguments[arguments.length - 1];
+ for (var i = 0; i < arguments.length - 1; i++) {
+ args.push(arguments[i]);
+ }
+
+ var level = 1;
+ if (options.hash.level != null) {
+ level = options.hash.level;
+ } else if (options.data && options.data.level != null) {
+ level = options.data.level;
+ }
+ args[0] = level;
+
+ instance.log.apply(instance, args);
+ });
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 13 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ exports['default'] = function (instance) {
+ instance.registerHelper('lookup', function (obj, field) {
+ return obj && obj[field];
+ });
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 14 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _utils = __webpack_require__(5);
+
+ exports['default'] = function (instance) {
+ instance.registerHelper('with', function (context, options) {
+ if (_utils.isFunction(context)) {
+ context = context.call(this);
+ }
+
+ var fn = options.fn;
+
+ if (!_utils.isEmpty(context)) {
+ var data = options.data;
+ if (options.data && options.ids) {
+ data = _utils.createFrame(options.data);
+ data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);
+ }
+
+ return fn(context, {
+ data: data,
+ blockParams: _utils.blockParams([context], [data && data.contextPath])
+ });
+ } else {
+ return options.inverse(this);
+ }
+ });
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 15 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+ exports.registerDefaultDecorators = registerDefaultDecorators;
+
+ var _decoratorsInline = __webpack_require__(16);
+
+ var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);
+
+ function registerDefaultDecorators(instance) {
+ _decoratorsInline2['default'](instance);
+ }
+
+/***/ },
+/* 16 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _utils = __webpack_require__(5);
+
+ exports['default'] = function (instance) {
+ instance.registerDecorator('inline', function (fn, props, container, options) {
+ var ret = fn;
+ if (!props.partials) {
+ props.partials = {};
+ ret = function (context, options) {
+ // Create a new partials stack frame prior to exec.
+ var original = container.partials;
+ container.partials = _utils.extend({}, original, props.partials);
+ var ret = fn(context, options);
+ container.partials = original;
+ return ret;
+ };
+ }
+
+ props.partials[options.args[0]] = options.fn;
+
+ return ret;
+ });
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 17 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _utils = __webpack_require__(5);
+
+ var logger = {
+ methodMap: ['debug', 'info', 'warn', 'error'],
+ level: 'info',
+
+ // Maps a given level value to the `methodMap` indexes above.
+ lookupLevel: function lookupLevel(level) {
+ if (typeof level === 'string') {
+ var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());
+ if (levelMap >= 0) {
+ level = levelMap;
+ } else {
+ level = parseInt(level, 10);
+ }
+ }
+
+ return level;
+ },
+
+ // Can be overridden in the host environment
+ log: function log(level) {
+ level = logger.lookupLevel(level);
+
+ if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {
+ var method = logger.methodMap[level];
+ if (!console[method]) {
+ // eslint-disable-line no-console
+ method = 'log';
+ }
+
+ for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ message[_key - 1] = arguments[_key];
+ }
+
+ console[method].apply(console, message); // eslint-disable-line no-console
+ }
+ }
+ };
+
+ exports['default'] = logger;
+ module.exports = exports['default'];
+
+/***/ },
+/* 18 */
+/***/ function(module, exports) {
+
+ // Build out our basic SafeString type
+ 'use strict';
+
+ exports.__esModule = true;
+ function SafeString(string) {
+ this.string = string;
+ }
+
+ SafeString.prototype.toString = SafeString.prototype.toHTML = function () {
+ return '' + this.string;
+ };
+
+ exports['default'] = SafeString;
+ module.exports = exports['default'];
+
+/***/ },
+/* 19 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireWildcard = __webpack_require__(3)['default'];
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+ exports.checkRevision = checkRevision;
+ exports.template = template;
+ exports.wrapProgram = wrapProgram;
+ exports.resolvePartial = resolvePartial;
+ exports.invokePartial = invokePartial;
+ exports.noop = noop;
+
+ var _utils = __webpack_require__(5);
+
+ var Utils = _interopRequireWildcard(_utils);
+
+ var _exception = __webpack_require__(6);
+
+ var _exception2 = _interopRequireDefault(_exception);
+
+ var _base = __webpack_require__(4);
+
+ function checkRevision(compilerInfo) {
+ var compilerRevision = compilerInfo && compilerInfo[0] || 1,
+ currentRevision = _base.COMPILER_REVISION;
+
+ if (compilerRevision !== currentRevision) {
+ if (compilerRevision < currentRevision) {
+ var runtimeVersions = _base.REVISION_CHANGES[currentRevision],
+ compilerVersions = _base.REVISION_CHANGES[compilerRevision];
+ throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');
+ } else {
+ // Use the embedded version info since the runtime doesn't know about this revision yet
+ throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');
+ }
+ }
+ }
+
+ function template(templateSpec, env) {
+ /* istanbul ignore next */
+ if (!env) {
+ throw new _exception2['default']('No environment passed to template');
+ }
+ if (!templateSpec || !templateSpec.main) {
+ throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);
+ }
+
+ templateSpec.main.decorator = templateSpec.main_d;
+
+ // Note: Using env.VM references rather than local var references throughout this section to allow
+ // for external users to override these as psuedo-supported APIs.
+ env.VM.checkRevision(templateSpec.compiler);
+
+ function invokePartialWrapper(partial, context, options) {
+ if (options.hash) {
+ context = Utils.extend({}, context, options.hash);
+ if (options.ids) {
+ options.ids[0] = true;
+ }
+ }
+
+ partial = env.VM.resolvePartial.call(this, partial, context, options);
+ var result = env.VM.invokePartial.call(this, partial, context, options);
+
+ if (result == null && env.compile) {
+ options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);
+ result = options.partials[options.name](context, options);
+ }
+ if (result != null) {
+ if (options.indent) {
+ var lines = result.split('\n');
+ for (var i = 0, l = lines.length; i < l; i++) {
+ if (!lines[i] && i + 1 === l) {
+ break;
+ }
+
+ lines[i] = options.indent + lines[i];
+ }
+ result = lines.join('\n');
+ }
+ return result;
+ } else {
+ throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');
+ }
+ }
+
+ // Just add water
+ var container = {
+ strict: function strict(obj, name) {
+ if (!(name in obj)) {
+ throw new _exception2['default']('"' + name + '" not defined in ' + obj);
+ }
+ return obj[name];
+ },
+ lookup: function lookup(depths, name) {
+ var len = depths.length;
+ for (var i = 0; i < len; i++) {
+ if (depths[i] && depths[i][name] != null) {
+ return depths[i][name];
+ }
+ }
+ },
+ lambda: function lambda(current, context) {
+ return typeof current === 'function' ? current.call(context) : current;
+ },
+
+ escapeExpression: Utils.escapeExpression,
+ invokePartial: invokePartialWrapper,
+
+ fn: function fn(i) {
+ var ret = templateSpec[i];
+ ret.decorator = templateSpec[i + '_d'];
+ return ret;
+ },
+
+ programs: [],
+ program: function program(i, data, declaredBlockParams, blockParams, depths) {
+ var programWrapper = this.programs[i],
+ fn = this.fn(i);
+ if (data || depths || blockParams || declaredBlockParams) {
+ programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);
+ } else if (!programWrapper) {
+ programWrapper = this.programs[i] = wrapProgram(this, i, fn);
+ }
+ return programWrapper;
+ },
+
+ data: function data(value, depth) {
+ while (value && depth--) {
+ value = value._parent;
+ }
+ return value;
+ },
+ merge: function merge(param, common) {
+ var obj = param || common;
+
+ if (param && common && param !== common) {
+ obj = Utils.extend({}, common, param);
+ }
+
+ return obj;
+ },
+
+ noop: env.VM.noop,
+ compilerInfo: templateSpec.compiler
+ };
+
+ function ret(context) {
+ var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+ var data = options.data;
+
+ ret._setup(options);
+ if (!options.partial && templateSpec.useData) {
+ data = initData(context, data);
+ }
+ var depths = undefined,
+ blockParams = templateSpec.useBlockParams ? [] : undefined;
+ if (templateSpec.useDepths) {
+ if (options.depths) {
+ depths = context !== options.depths[0] ? [context].concat(options.depths) : options.depths;
+ } else {
+ depths = [context];
+ }
+ }
+
+ function main(context /*, options*/) {
+ return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);
+ }
+ main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);
+ return main(context, options);
+ }
+ ret.isTop = true;
+
+ ret._setup = function (options) {
+ if (!options.partial) {
+ container.helpers = container.merge(options.helpers, env.helpers);
+
+ if (templateSpec.usePartial) {
+ container.partials = container.merge(options.partials, env.partials);
+ }
+ if (templateSpec.usePartial || templateSpec.useDecorators) {
+ container.decorators = container.merge(options.decorators, env.decorators);
+ }
+ } else {
+ container.helpers = options.helpers;
+ container.partials = options.partials;
+ container.decorators = options.decorators;
+ }
+ };
+
+ ret._child = function (i, data, blockParams, depths) {
+ if (templateSpec.useBlockParams && !blockParams) {
+ throw new _exception2['default']('must pass block params');
+ }
+ if (templateSpec.useDepths && !depths) {
+ throw new _exception2['default']('must pass parent depths');
+ }
+
+ return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);
+ };
+ return ret;
+ }
+
+ function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {
+ function prog(context) {
+ var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+ var currentDepths = depths;
+ if (depths && context !== depths[0]) {
+ currentDepths = [context].concat(depths);
+ }
+
+ return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);
+ }
+
+ prog = executeDecorators(fn, prog, container, depths, data, blockParams);
+
+ prog.program = i;
+ prog.depth = depths ? depths.length : 0;
+ prog.blockParams = declaredBlockParams || 0;
+ return prog;
+ }
+
+ function resolvePartial(partial, context, options) {
+ if (!partial) {
+ if (options.name === '@partial-block') {
+ partial = options.data['partial-block'];
+ } else {
+ partial = options.partials[options.name];
+ }
+ } else if (!partial.call && !options.name) {
+ // This is a dynamic partial that returned a string
+ options.name = partial;
+ partial = options.partials[partial];
+ }
+ return partial;
+ }
+
+ function invokePartial(partial, context, options) {
+ options.partial = true;
+ if (options.ids) {
+ options.data.contextPath = options.ids[0] || options.data.contextPath;
+ }
+
+ var partialBlock = undefined;
+ if (options.fn && options.fn !== noop) {
+ options.data = _base.createFrame(options.data);
+ partialBlock = options.data['partial-block'] = options.fn;
+
+ if (partialBlock.partials) {
+ options.partials = Utils.extend({}, options.partials, partialBlock.partials);
+ }
+ }
+
+ if (partial === undefined && partialBlock) {
+ partial = partialBlock;
+ }
+
+ if (partial === undefined) {
+ throw new _exception2['default']('The partial ' + options.name + ' could not be found');
+ } else if (partial instanceof Function) {
+ return partial(context, options);
+ }
+ }
+
+ function noop() {
+ return '';
+ }
+
+ function initData(context, data) {
+ if (!data || !('root' in data)) {
+ data = data ? _base.createFrame(data) : {};
+ data.root = context;
+ }
+ return data;
+ }
+
+ function executeDecorators(fn, prog, container, depths, data, blockParams) {
+ if (fn.decorator) {
+ var props = {};
+ prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);
+ Utils.extend(prog, props);
+ }
+ return prog;
+ }
+
+/***/ },
+/* 20 */
+/***/ function(module, exports) {
+
+ /* WEBPACK VAR INJECTION */(function(global) {/* global window */
+ 'use strict';
+
+ exports.__esModule = true;
+
+ exports['default'] = function (Handlebars) {
+ /* istanbul ignore next */
+ var root = typeof global !== 'undefined' ? global : window,
+ $Handlebars = root.Handlebars;
+ /* istanbul ignore next */
+ Handlebars.noConflict = function () {
+ if (root.Handlebars === Handlebars) {
+ root.Handlebars = $Handlebars;
+ }
+ return Handlebars;
+ };
+ };
+
+ module.exports = exports['default'];
+ /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
+
+/***/ },
+/* 21 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ var AST = {
+ // Public API used to evaluate derived attributes regarding AST nodes
+ helpers: {
+ // a mustache is definitely a helper if:
+ // * it is an eligible helper, and
+ // * it has at least one parameter or hash segment
+ helperExpression: function helperExpression(node) {
+ return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash);
+ },
+
+ scopedId: function scopedId(path) {
+ return (/^\.|this\b/.test(path.original)
+ );
+ },
+
+ // an ID is simple if it only has one part, and that part is not
+ // `..` or `this`.
+ simpleId: function simpleId(path) {
+ return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth;
+ }
+ }
+ };
+
+ // Must be exported as an object rather than the root of the module as the jison lexer
+ // must modify the object to operate properly.
+ exports['default'] = AST;
+ module.exports = exports['default'];
+
+/***/ },
+/* 22 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ var _interopRequireWildcard = __webpack_require__(3)['default'];
+
+ exports.__esModule = true;
+ exports.parse = parse;
+
+ var _parser = __webpack_require__(23);
+
+ var _parser2 = _interopRequireDefault(_parser);
+
+ var _whitespaceControl = __webpack_require__(24);
+
+ var _whitespaceControl2 = _interopRequireDefault(_whitespaceControl);
+
+ var _helpers = __webpack_require__(26);
+
+ var Helpers = _interopRequireWildcard(_helpers);
+
+ var _utils = __webpack_require__(5);
+
+ exports.parser = _parser2['default'];
+
+ var yy = {};
+ _utils.extend(yy, Helpers);
+
+ function parse(input, options) {
+ // Just return if an already-compiled AST was passed in.
+ if (input.type === 'Program') {
+ return input;
+ }
+
+ _parser2['default'].yy = yy;
+
+ // Altering the shared object here, but this is ok as parser is a sync operation
+ yy.locInfo = function (locInfo) {
+ return new yy.SourceLocation(options && options.srcName, locInfo);
+ };
+
+ var strip = new _whitespaceControl2['default'](options);
+ return strip.accept(_parser2['default'].parse(input));
+ }
+
+/***/ },
+/* 23 */
+/***/ function(module, exports) {
+
+ /* istanbul ignore next */
+ /* Jison generated parser */
+ "use strict";
+
+ var handlebars = (function () {
+ var parser = { trace: function trace() {},
+ yy: {},
+ symbols_: { "error": 2, "root": 3, "program": 4, "EOF": 5, "program_repetition0": 6, "statement": 7, "mustache": 8, "block": 9, "rawBlock": 10, "partial": 11, "partialBlock": 12, "content": 13, "COMMENT": 14, "CONTENT": 15, "openRawBlock": 16, "rawBlock_repetition_plus0": 17, "END_RAW_BLOCK": 18, "OPEN_RAW_BLOCK": 19, "helperName": 20, "openRawBlock_repetition0": 21, "openRawBlock_option0": 22, "CLOSE_RAW_BLOCK": 23, "openBlock": 24, "block_option0": 25, "closeBlock": 26, "openInverse": 27, "block_option1": 28, "OPEN_BLOCK": 29, "openBlock_repetition0": 30, "openBlock_option0": 31, "openBlock_option1": 32, "CLOSE": 33, "OPEN_INVERSE": 34, "openInverse_repetition0": 35, "openInverse_option0": 36, "openInverse_option1": 37, "openInverseChain": 38, "OPEN_INVERSE_CHAIN": 39, "openInverseChain_repetition0": 40, "openInverseChain_option0": 41, "openInverseChain_option1": 42, "inverseAndProgram": 43, "INVERSE": 44, "inverseChain": 45, "inverseChain_option0": 46, "OPEN_ENDBLOCK": 47, "OPEN": 48, "mustache_repetition0": 49, "mustache_option0": 50, "OPEN_UNESCAPED": 51, "mustache_repetition1": 52, "mustache_option1": 53, "CLOSE_UNESCAPED": 54, "OPEN_PARTIAL": 55, "partialName": 56, "partial_repetition0": 57, "partial_option0": 58, "openPartialBlock": 59, "OPEN_PARTIAL_BLOCK": 60, "openPartialBlock_repetition0": 61, "openPartialBlock_option0": 62, "param": 63, "sexpr": 64, "OPEN_SEXPR": 65, "sexpr_repetition0": 66, "sexpr_option0": 67, "CLOSE_SEXPR": 68, "hash": 69, "hash_repetition_plus0": 70, "hashSegment": 71, "ID": 72, "EQUALS": 73, "blockParams": 74, "OPEN_BLOCK_PARAMS": 75, "blockParams_repetition_plus0": 76, "CLOSE_BLOCK_PARAMS": 77, "path": 78, "dataName": 79, "STRING": 80, "NUMBER": 81, "BOOLEAN": 82, "UNDEFINED": 83, "NULL": 84, "DATA": 85, "pathSegments": 86, "SEP": 87, "$accept": 0, "$end": 1 },
+ terminals_: { 2: "error", 5: "EOF", 14: "COMMENT", 15: "CONTENT", 18: "END_RAW_BLOCK", 19: "OPEN_RAW_BLOCK", 23: "CLOSE_RAW_BLOCK", 29: "OPEN_BLOCK", 33: "CLOSE", 34: "OPEN_INVERSE", 39: "OPEN_INVERSE_CHAIN", 44: "INVERSE", 47: "OPEN_ENDBLOCK", 48: "OPEN", 51: "OPEN_UNESCAPED", 54: "CLOSE_UNESCAPED", 55: "OPEN_PARTIAL", 60: "OPEN_PARTIAL_BLOCK", 65: "OPEN_SEXPR", 68: "CLOSE_SEXPR", 72: "ID", 73: "EQUALS", 75: "OPEN_BLOCK_PARAMS", 77: "CLOSE_BLOCK_PARAMS", 80: "STRING", 81: "NUMBER", 82: "BOOLEAN", 83: "UNDEFINED", 84: "NULL", 85: "DATA", 87: "SEP" },
+ productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 1], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]],
+ performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$
+ /**/) {
+
+ var $0 = $$.length - 1;
+ switch (yystate) {
+ case 1:
+ return $$[$0 - 1];
+ break;
+ case 2:
+ this.$ = yy.prepareProgram($$[$0]);
+ break;
+ case 3:
+ this.$ = $$[$0];
+ break;
+ case 4:
+ this.$ = $$[$0];
+ break;
+ case 5:
+ this.$ = $$[$0];
+ break;
+ case 6:
+ this.$ = $$[$0];
+ break;
+ case 7:
+ this.$ = $$[$0];
+ break;
+ case 8:
+ this.$ = $$[$0];
+ break;
+ case 9:
+ this.$ = {
+ type: 'CommentStatement',
+ value: yy.stripComment($$[$0]),
+ strip: yy.stripFlags($$[$0], $$[$0]),
+ loc: yy.locInfo(this._$)
+ };
+
+ break;
+ case 10:
+ this.$ = {
+ type: 'ContentStatement',
+ original: $$[$0],
+ value: $$[$0],
+ loc: yy.locInfo(this._$)
+ };
+
+ break;
+ case 11:
+ this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);
+ break;
+ case 12:
+ this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] };
+ break;
+ case 13:
+ this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$);
+ break;
+ case 14:
+ this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$);
+ break;
+ case 15:
+ this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };
+ break;
+ case 16:
+ this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };
+ break;
+ case 17:
+ this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };
+ break;
+ case 18:
+ this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] };
+ break;
+ case 19:
+ var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$),
+ program = yy.prepareProgram([inverse], $$[$0 - 1].loc);
+ program.chained = true;
+
+ this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true };
+
+ break;
+ case 20:
+ this.$ = $$[$0];
+ break;
+ case 21:
+ this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) };
+ break;
+ case 22:
+ this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);
+ break;
+ case 23:
+ this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);
+ break;
+ case 24:
+ this.$ = {
+ type: 'PartialStatement',
+ name: $$[$0 - 3],
+ params: $$[$0 - 2],
+ hash: $$[$0 - 1],
+ indent: '',
+ strip: yy.stripFlags($$[$0 - 4], $$[$0]),
+ loc: yy.locInfo(this._$)
+ };
+
+ break;
+ case 25:
+ this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);
+ break;
+ case 26:
+ this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) };
+ break;
+ case 27:
+ this.$ = $$[$0];
+ break;
+ case 28:
+ this.$ = $$[$0];
+ break;
+ case 29:
+ this.$ = {
+ type: 'SubExpression',
+ path: $$[$0 - 3],
+ params: $$[$0 - 2],
+ hash: $$[$0 - 1],
+ loc: yy.locInfo(this._$)
+ };
+
+ break;
+ case 30:
+ this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) };
+ break;
+ case 31:
+ this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) };
+ break;
+ case 32:
+ this.$ = yy.id($$[$0 - 1]);
+ break;
+ case 33:
+ this.$ = $$[$0];
+ break;
+ case 34:
+ this.$ = $$[$0];
+ break;
+ case 35:
+ this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) };
+ break;
+ case 36:
+ this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) };
+ break;
+ case 37:
+ this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) };
+ break;
+ case 38:
+ this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) };
+ break;
+ case 39:
+ this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) };
+ break;
+ case 40:
+ this.$ = $$[$0];
+ break;
+ case 41:
+ this.$ = $$[$0];
+ break;
+ case 42:
+ this.$ = yy.preparePath(true, $$[$0], this._$);
+ break;
+ case 43:
+ this.$ = yy.preparePath(false, $$[$0], this._$);
+ break;
+ case 44:
+ $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2];
+ break;
+ case 45:
+ this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }];
+ break;
+ case 46:
+ this.$ = [];
+ break;
+ case 47:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 48:
+ this.$ = [$$[$0]];
+ break;
+ case 49:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 50:
+ this.$ = [];
+ break;
+ case 51:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 58:
+ this.$ = [];
+ break;
+ case 59:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 64:
+ this.$ = [];
+ break;
+ case 65:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 70:
+ this.$ = [];
+ break;
+ case 71:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 78:
+ this.$ = [];
+ break;
+ case 79:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 82:
+ this.$ = [];
+ break;
+ case 83:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 86:
+ this.$ = [];
+ break;
+ case 87:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 90:
+ this.$ = [];
+ break;
+ case 91:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 94:
+ this.$ = [];
+ break;
+ case 95:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 98:
+ this.$ = [$$[$0]];
+ break;
+ case 99:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 100:
+ this.$ = [$$[$0]];
+ break;
+ case 101:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ }
+ },
+ table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 13: 40, 15: [1, 20], 17: 39 }, { 20: 42, 56: 41, 64: 43, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 45, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 48, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 42, 56: 49, 64: 43, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 50, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 51] }, { 72: [1, 35], 86: 52 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 53, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 54, 38: 56, 39: [1, 58], 43: 57, 44: [1, 59], 45: 55, 47: [2, 54] }, { 28: 60, 43: 61, 44: [1, 59], 47: [2, 56] }, { 13: 63, 15: [1, 20], 18: [1, 62] }, { 15: [2, 48], 18: [2, 48] }, { 33: [2, 86], 57: 64, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 65, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 66, 47: [1, 67] }, { 30: 68, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 69, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 70, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 71, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 75, 33: [2, 80], 50: 72, 63: 73, 64: 76, 65: [1, 44], 69: 74, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 80] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 51] }, { 20: 75, 53: 81, 54: [2, 84], 63: 82, 64: 76, 65: [1, 44], 69: 83, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 84, 47: [1, 67] }, { 47: [2, 55] }, { 4: 85, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 86, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 87, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 88, 47: [1, 67] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 75, 33: [2, 88], 58: 89, 63: 90, 64: 76, 65: [1, 44], 69: 91, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 92, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 93, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 31: 94, 33: [2, 60], 63: 95, 64: 76, 65: [1, 44], 69: 96, 70: 77, 71: 78, 72: [1, 79], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 33: [2, 66], 36: 97, 63: 98, 64: 76, 65: [1, 44], 69: 99, 70: 77, 71: 78, 72: [1, 79], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 22: 100, 23: [2, 52], 63: 101, 64: 76, 65: [1, 44], 69: 102, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 33: [2, 92], 62: 103, 63: 104, 64: 76, 65: [1, 44], 69: 105, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 106] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 107, 72: [1, 108], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 109], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 110] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 56, 39: [1, 58], 43: 57, 44: [1, 59], 45: 112, 46: 111, 47: [2, 76] }, { 33: [2, 70], 40: 113, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 114] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 75, 63: 116, 64: 76, 65: [1, 44], 67: 115, 68: [2, 96], 69: 117, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 118] }, { 32: 119, 33: [2, 62], 74: 120, 75: [1, 121] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 122, 74: 123, 75: [1, 121] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 124] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 125] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 109] }, { 20: 75, 63: 126, 64: 76, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 75, 33: [2, 72], 41: 127, 63: 128, 64: 76, 65: [1, 44], 69: 129, 70: 77, 71: 78, 72: [1, 79], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 130] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 131] }, { 33: [2, 63] }, { 72: [1, 133], 76: 132 }, { 33: [1, 134] }, { 33: [2, 69] }, { 15: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 135, 74: 136, 75: [1, 121] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 138], 77: [1, 137] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 139] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }],
+ defaultActions: { 4: [2, 1], 55: [2, 55], 57: [2, 20], 61: [2, 57], 74: [2, 81], 83: [2, 85], 87: [2, 18], 91: [2, 89], 102: [2, 53], 105: [2, 93], 111: [2, 19], 112: [2, 77], 117: [2, 97], 120: [2, 63], 123: [2, 69], 124: [2, 12], 136: [2, 75], 137: [2, 32] },
+ parseError: function parseError(str, hash) {
+ throw new Error(str);
+ },
+ parse: function parse(input) {
+ var self = this,
+ stack = [0],
+ vstack = [null],
+ lstack = [],
+ table = this.table,
+ yytext = "",
+ yylineno = 0,
+ yyleng = 0,
+ recovering = 0,
+ TERROR = 2,
+ EOF = 1;
+ this.lexer.setInput(input);
+ this.lexer.yy = this.yy;
+ this.yy.lexer = this.lexer;
+ this.yy.parser = this;
+ if (typeof this.lexer.yylloc == "undefined") this.lexer.yylloc = {};
+ var yyloc = this.lexer.yylloc;
+ lstack.push(yyloc);
+ var ranges = this.lexer.options && this.lexer.options.ranges;
+ if (typeof this.yy.parseError === "function") this.parseError = this.yy.parseError;
+ function popStack(n) {
+ stack.length = stack.length - 2 * n;
+ vstack.length = vstack.length - n;
+ lstack.length = lstack.length - n;
+ }
+ function lex() {
+ var token;
+ token = self.lexer.lex() || 1;
+ if (typeof token !== "number") {
+ token = self.symbols_[token] || token;
+ }
+ return token;
+ }
+ var symbol,
+ preErrorSymbol,
+ state,
+ action,
+ a,
+ r,
+ yyval = {},
+ p,
+ len,
+ newState,
+ expected;
+ while (true) {
+ state = stack[stack.length - 1];
+ if (this.defaultActions[state]) {
+ action = this.defaultActions[state];
+ } else {
+ if (symbol === null || typeof symbol == "undefined") {
+ symbol = lex();
+ }
+ action = table[state] && table[state][symbol];
+ }
+ if (typeof action === "undefined" || !action.length || !action[0]) {
+ var errStr = "";
+ if (!recovering) {
+ expected = [];
+ for (p in table[state]) if (this.terminals_[p] && p > 2) {
+ expected.push("'" + this.terminals_[p] + "'");
+ }
+ if (this.lexer.showPosition) {
+ errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
+ } else {
+ errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
+ }
+ this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected });
+ }
+ }
+ if (action[0] instanceof Array && action.length > 1) {
+ throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
+ }
+ switch (action[0]) {
+ case 1:
+ stack.push(symbol);
+ vstack.push(this.lexer.yytext);
+ lstack.push(this.lexer.yylloc);
+ stack.push(action[1]);
+ symbol = null;
+ if (!preErrorSymbol) {
+ yyleng = this.lexer.yyleng;
+ yytext = this.lexer.yytext;
+ yylineno = this.lexer.yylineno;
+ yyloc = this.lexer.yylloc;
+ if (recovering > 0) recovering--;
+ } else {
+ symbol = preErrorSymbol;
+ preErrorSymbol = null;
+ }
+ break;
+ case 2:
+ len = this.productions_[action[1]][1];
+ yyval.$ = vstack[vstack.length - len];
+ yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column };
+ if (ranges) {
+ yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];
+ }
+ r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
+ if (typeof r !== "undefined") {
+ return r;
+ }
+ if (len) {
+ stack = stack.slice(0, -1 * len * 2);
+ vstack = vstack.slice(0, -1 * len);
+ lstack = lstack.slice(0, -1 * len);
+ }
+ stack.push(this.productions_[action[1]][0]);
+ vstack.push(yyval.$);
+ lstack.push(yyval._$);
+ newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
+ stack.push(newState);
+ break;
+ case 3:
+ return true;
+ }
+ }
+ return true;
+ }
+ };
+ /* Jison generated lexer */
+ var lexer = (function () {
+ var lexer = { EOF: 1,
+ parseError: function parseError(str, hash) {
+ if (this.yy.parser) {
+ this.yy.parser.parseError(str, hash);
+ } else {
+ throw new Error(str);
+ }
+ },
+ setInput: function setInput(input) {
+ this._input = input;
+ this._more = this._less = this.done = false;
+ this.yylineno = this.yyleng = 0;
+ this.yytext = this.matched = this.match = '';
+ this.conditionStack = ['INITIAL'];
+ this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 };
+ if (this.options.ranges) this.yylloc.range = [0, 0];
+ this.offset = 0;
+ return this;
+ },
+ input: function input() {
+ var ch = this._input[0];
+ this.yytext += ch;
+ this.yyleng++;
+ this.offset++;
+ this.match += ch;
+ this.matched += ch;
+ var lines = ch.match(/(?:\r\n?|\n).*/g);
+ if (lines) {
+ this.yylineno++;
+ this.yylloc.last_line++;
+ } else {
+ this.yylloc.last_column++;
+ }
+ if (this.options.ranges) this.yylloc.range[1]++;
+
+ this._input = this._input.slice(1);
+ return ch;
+ },
+ unput: function unput(ch) {
+ var len = ch.length;
+ var lines = ch.split(/(?:\r\n?|\n)/g);
+
+ this._input = ch + this._input;
+ this.yytext = this.yytext.substr(0, this.yytext.length - len - 1);
+ //this.yyleng -= len;
+ this.offset -= len;
+ var oldLines = this.match.split(/(?:\r\n?|\n)/g);
+ this.match = this.match.substr(0, this.match.length - 1);
+ this.matched = this.matched.substr(0, this.matched.length - 1);
+
+ if (lines.length - 1) this.yylineno -= lines.length - 1;
+ var r = this.yylloc.range;
+
+ this.yylloc = { first_line: this.yylloc.first_line,
+ last_line: this.yylineno + 1,
+ first_column: this.yylloc.first_column,
+ last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
+ };
+
+ if (this.options.ranges) {
+ this.yylloc.range = [r[0], r[0] + this.yyleng - len];
+ }
+ return this;
+ },
+ more: function more() {
+ this._more = true;
+ return this;
+ },
+ less: function less(n) {
+ this.unput(this.match.slice(n));
+ },
+ pastInput: function pastInput() {
+ var past = this.matched.substr(0, this.matched.length - this.match.length);
+ return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, "");
+ },
+ upcomingInput: function upcomingInput() {
+ var next = this.match;
+ if (next.length < 20) {
+ next += this._input.substr(0, 20 - next.length);
+ }
+ return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, "");
+ },
+ showPosition: function showPosition() {
+ var pre = this.pastInput();
+ var c = new Array(pre.length + 1).join("-");
+ return pre + this.upcomingInput() + "\n" + c + "^";
+ },
+ next: function next() {
+ if (this.done) {
+ return this.EOF;
+ }
+ if (!this._input) this.done = true;
+
+ var token, match, tempMatch, index, col, lines;
+ if (!this._more) {
+ this.yytext = '';
+ this.match = '';
+ }
+ var rules = this._currentRules();
+ for (var i = 0; i < rules.length; i++) {
+ tempMatch = this._input.match(this.rules[rules[i]]);
+ if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
+ match = tempMatch;
+ index = i;
+ if (!this.options.flex) break;
+ }
+ }
+ if (match) {
+ lines = match[0].match(/(?:\r\n?|\n).*/g);
+ if (lines) this.yylineno += lines.length;
+ this.yylloc = { first_line: this.yylloc.last_line,
+ last_line: this.yylineno + 1,
+ first_column: this.yylloc.last_column,
+ last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length };
+ this.yytext += match[0];
+ this.match += match[0];
+ this.matches = match;
+ this.yyleng = this.yytext.length;
+ if (this.options.ranges) {
+ this.yylloc.range = [this.offset, this.offset += this.yyleng];
+ }
+ this._more = false;
+ this._input = this._input.slice(match[0].length);
+ this.matched += match[0];
+ token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]);
+ if (this.done && this._input) this.done = false;
+ if (token) return token;else return;
+ }
+ if (this._input === "") {
+ return this.EOF;
+ } else {
+ return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { text: "", token: null, line: this.yylineno });
+ }
+ },
+ lex: function lex() {
+ var r = this.next();
+ if (typeof r !== 'undefined') {
+ return r;
+ } else {
+ return this.lex();
+ }
+ },
+ begin: function begin(condition) {
+ this.conditionStack.push(condition);
+ },
+ popState: function popState() {
+ return this.conditionStack.pop();
+ },
+ _currentRules: function _currentRules() {
+ return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
+ },
+ topState: function topState() {
+ return this.conditionStack[this.conditionStack.length - 2];
+ },
+ pushState: function begin(condition) {
+ this.begin(condition);
+ } };
+ lexer.options = {};
+ lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START
+ /**/) {
+
+ function strip(start, end) {
+ return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng - end);
+ }
+
+ var YYSTATE = YY_START;
+ switch ($avoiding_name_collisions) {
+ case 0:
+ if (yy_.yytext.slice(-2) === "\\\\") {
+ strip(0, 1);
+ this.begin("mu");
+ } else if (yy_.yytext.slice(-1) === "\\") {
+ strip(0, 1);
+ this.begin("emu");
+ } else {
+ this.begin("mu");
+ }
+ if (yy_.yytext) return 15;
+
+ break;
+ case 1:
+ return 15;
+ break;
+ case 2:
+ this.popState();
+ return 15;
+
+ break;
+ case 3:
+ this.begin('raw');return 15;
+ break;
+ case 4:
+ this.popState();
+ // Should be using `this.topState()` below, but it currently
+ // returns the second top instead of the first top. Opened an
+ // issue about it at https://github.com/zaach/jison/issues/291
+ if (this.conditionStack[this.conditionStack.length - 1] === 'raw') {
+ return 15;
+ } else {
+ yy_.yytext = yy_.yytext.substr(5, yy_.yyleng - 9);
+ return 'END_RAW_BLOCK';
+ }
+
+ break;
+ case 5:
+ return 15;
+ break;
+ case 6:
+ this.popState();
+ return 14;
+
+ break;
+ case 7:
+ return 65;
+ break;
+ case 8:
+ return 68;
+ break;
+ case 9:
+ return 19;
+ break;
+ case 10:
+ this.popState();
+ this.begin('raw');
+ return 23;
+
+ break;
+ case 11:
+ return 55;
+ break;
+ case 12:
+ return 60;
+ break;
+ case 13:
+ return 29;
+ break;
+ case 14:
+ return 47;
+ break;
+ case 15:
+ this.popState();return 44;
+ break;
+ case 16:
+ this.popState();return 44;
+ break;
+ case 17:
+ return 34;
+ break;
+ case 18:
+ return 39;
+ break;
+ case 19:
+ return 51;
+ break;
+ case 20:
+ return 48;
+ break;
+ case 21:
+ this.unput(yy_.yytext);
+ this.popState();
+ this.begin('com');
+
+ break;
+ case 22:
+ this.popState();
+ return 14;
+
+ break;
+ case 23:
+ return 48;
+ break;
+ case 24:
+ return 73;
+ break;
+ case 25:
+ return 72;
+ break;
+ case 26:
+ return 72;
+ break;
+ case 27:
+ return 87;
+ break;
+ case 28:
+ // ignore whitespace
+ break;
+ case 29:
+ this.popState();return 54;
+ break;
+ case 30:
+ this.popState();return 33;
+ break;
+ case 31:
+ yy_.yytext = strip(1, 2).replace(/\\"/g, '"');return 80;
+ break;
+ case 32:
+ yy_.yytext = strip(1, 2).replace(/\\'/g, "'");return 80;
+ break;
+ case 33:
+ return 85;
+ break;
+ case 34:
+ return 82;
+ break;
+ case 35:
+ return 82;
+ break;
+ case 36:
+ return 83;
+ break;
+ case 37:
+ return 84;
+ break;
+ case 38:
+ return 81;
+ break;
+ case 39:
+ return 75;
+ break;
+ case 40:
+ return 77;
+ break;
+ case 41:
+ return 72;
+ break;
+ case 42:
+ yy_.yytext = yy_.yytext.replace(/\\([\\\]])/g, '$1');return 72;
+ break;
+ case 43:
+ return 'INVALID';
+ break;
+ case 44:
+ return 5;
+ break;
+ }
+ };
+ lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/, /^(?:[^\x00]+)/, /^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/, /^(?:\{\{\{\{(?=[^\/]))/, /^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/, /^(?:[^\x00]*?(?=(\{\{\{\{)))/, /^(?:[\s\S]*?--(~)?\}\})/, /^(?:\()/, /^(?:\))/, /^(?:\{\{\{\{)/, /^(?:\}\}\}\})/, /^(?:\{\{(~)?>)/, /^(?:\{\{(~)?#>)/, /^(?:\{\{(~)?#\*?)/, /^(?:\{\{(~)?\/)/, /^(?:\{\{(~)?\^\s*(~)?\}\})/, /^(?:\{\{(~)?\s*else\s*(~)?\}\})/, /^(?:\{\{(~)?\^)/, /^(?:\{\{(~)?\s*else\b)/, /^(?:\{\{(~)?\{)/, /^(?:\{\{(~)?&)/, /^(?:\{\{(~)?!--)/, /^(?:\{\{(~)?![\s\S]*?\}\})/, /^(?:\{\{(~)?\*?)/, /^(?:=)/, /^(?:\.\.)/, /^(?:\.(?=([=~}\s\/.)|])))/, /^(?:[\/.])/, /^(?:\s+)/, /^(?:\}(~)?\}\})/, /^(?:(~)?\}\})/, /^(?:"(\\["]|[^"])*")/, /^(?:'(\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\s)])))/, /^(?:false(?=([~}\s)])))/, /^(?:undefined(?=([~}\s)])))/, /^(?:null(?=([~}\s)])))/, /^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/, /^(?:as\s+\|)/, /^(?:\|)/, /^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/, /^(?:\[(\\\]|[^\]])*\])/, /^(?:.)/, /^(?:$)/];
+ lexer.conditions = { "mu": { "rules": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], "inclusive": false }, "emu": { "rules": [2], "inclusive": false }, "com": { "rules": [6], "inclusive": false }, "raw": { "rules": [3, 4, 5], "inclusive": false }, "INITIAL": { "rules": [0, 1, 44], "inclusive": true } };
+ return lexer;
+ })();
+ parser.lexer = lexer;
+ function Parser() {
+ this.yy = {};
+ }Parser.prototype = parser;parser.Parser = Parser;
+ return new Parser();
+ })();exports.__esModule = true;
+ exports['default'] = handlebars;
+
+/***/ },
+/* 24 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+
+ var _visitor = __webpack_require__(25);
+
+ var _visitor2 = _interopRequireDefault(_visitor);
+
+ function WhitespaceControl() {
+ var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+ this.options = options;
+ }
+ WhitespaceControl.prototype = new _visitor2['default']();
+
+ WhitespaceControl.prototype.Program = function (program) {
+ var doStandalone = !this.options.ignoreStandalone;
+
+ var isRoot = !this.isRootSeen;
+ this.isRootSeen = true;
+
+ var body = program.body;
+ for (var i = 0, l = body.length; i < l; i++) {
+ var current = body[i],
+ strip = this.accept(current);
+
+ if (!strip) {
+ continue;
+ }
+
+ var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),
+ _isNextWhitespace = isNextWhitespace(body, i, isRoot),
+ openStandalone = strip.openStandalone && _isPrevWhitespace,
+ closeStandalone = strip.closeStandalone && _isNextWhitespace,
+ inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;
+
+ if (strip.close) {
+ omitRight(body, i, true);
+ }
+ if (strip.open) {
+ omitLeft(body, i, true);
+ }
+
+ if (doStandalone && inlineStandalone) {
+ omitRight(body, i);
+
+ if (omitLeft(body, i)) {
+ // If we are on a standalone node, save the indent info for partials
+ if (current.type === 'PartialStatement') {
+ // Pull out the whitespace from the final line
+ current.indent = /([ \t]+$)/.exec(body[i - 1].original)[1];
+ }
+ }
+ }
+ if (doStandalone && openStandalone) {
+ omitRight((current.program || current.inverse).body);
+
+ // Strip out the previous content node if it's whitespace only
+ omitLeft(body, i);
+ }
+ if (doStandalone && closeStandalone) {
+ // Always strip the next node
+ omitRight(body, i);
+
+ omitLeft((current.inverse || current.program).body);
+ }
+ }
+
+ return program;
+ };
+
+ WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) {
+ this.accept(block.program);
+ this.accept(block.inverse);
+
+ // Find the inverse program that is involed with whitespace stripping.
+ var program = block.program || block.inverse,
+ inverse = block.program && block.inverse,
+ firstInverse = inverse,
+ lastInverse = inverse;
+
+ if (inverse && inverse.chained) {
+ firstInverse = inverse.body[0].program;
+
+ // Walk the inverse chain to find the last inverse that is actually in the chain.
+ while (lastInverse.chained) {
+ lastInverse = lastInverse.body[lastInverse.body.length - 1].program;
+ }
+ }
+
+ var strip = {
+ open: block.openStrip.open,
+ close: block.closeStrip.close,
+
+ // Determine the standalone candiacy. Basically flag our content as being possibly standalone
+ // so our parent can determine if we actually are standalone
+ openStandalone: isNextWhitespace(program.body),
+ closeStandalone: isPrevWhitespace((firstInverse || program).body)
+ };
+
+ if (block.openStrip.close) {
+ omitRight(program.body, null, true);
+ }
+
+ if (inverse) {
+ var inverseStrip = block.inverseStrip;
+
+ if (inverseStrip.open) {
+ omitLeft(program.body, null, true);
+ }
+
+ if (inverseStrip.close) {
+ omitRight(firstInverse.body, null, true);
+ }
+ if (block.closeStrip.open) {
+ omitLeft(lastInverse.body, null, true);
+ }
+
+ // Find standalone else statments
+ if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {
+ omitLeft(program.body);
+ omitRight(firstInverse.body);
+ }
+ } else if (block.closeStrip.open) {
+ omitLeft(program.body, null, true);
+ }
+
+ return strip;
+ };
+
+ WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {
+ return mustache.strip;
+ };
+
+ WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {
+ /* istanbul ignore next */
+ var strip = node.strip || {};
+ return {
+ inlineStandalone: true,
+ open: strip.open,
+ close: strip.close
+ };
+ };
+
+ function isPrevWhitespace(body, i, isRoot) {
+ if (i === undefined) {
+ i = body.length;
+ }
+
+ // Nodes that end with newlines are considered whitespace (but are special
+ // cased for strip operations)
+ var prev = body[i - 1],
+ sibling = body[i - 2];
+ if (!prev) {
+ return isRoot;
+ }
+
+ if (prev.type === 'ContentStatement') {
+ return (sibling || !isRoot ? /\r?\n\s*?$/ : /(^|\r?\n)\s*?$/).test(prev.original);
+ }
+ }
+ function isNextWhitespace(body, i, isRoot) {
+ if (i === undefined) {
+ i = -1;
+ }
+
+ var next = body[i + 1],
+ sibling = body[i + 2];
+ if (!next) {
+ return isRoot;
+ }
+
+ if (next.type === 'ContentStatement') {
+ return (sibling || !isRoot ? /^\s*?\r?\n/ : /^\s*?(\r?\n|$)/).test(next.original);
+ }
+ }
+
+ // Marks the node to the right of the position as omitted.
+ // I.e. {{foo}}' ' will mark the ' ' node as omitted.
+ //
+ // If i is undefined, then the first child will be marked as such.
+ //
+ // If mulitple is truthy then all whitespace will be stripped out until non-whitespace
+ // content is met.
+ function omitRight(body, i, multiple) {
+ var current = body[i == null ? 0 : i + 1];
+ if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {
+ return;
+ }
+
+ var original = current.value;
+ current.value = current.value.replace(multiple ? /^\s+/ : /^[ \t]*\r?\n?/, '');
+ current.rightStripped = current.value !== original;
+ }
+
+ // Marks the node to the left of the position as omitted.
+ // I.e. ' '{{foo}} will mark the ' ' node as omitted.
+ //
+ // If i is undefined then the last child will be marked as such.
+ //
+ // If mulitple is truthy then all whitespace will be stripped out until non-whitespace
+ // content is met.
+ function omitLeft(body, i, multiple) {
+ var current = body[i == null ? body.length - 1 : i - 1];
+ if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {
+ return;
+ }
+
+ // We omit the last node if it's whitespace only and not preceeded by a non-content node.
+ var original = current.value;
+ current.value = current.value.replace(multiple ? /\s+$/ : /[ \t]+$/, '');
+ current.leftStripped = current.value !== original;
+ return current.leftStripped;
+ }
+
+ exports['default'] = WhitespaceControl;
+ module.exports = exports['default'];
+
+/***/ },
+/* 25 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+
+ var _exception = __webpack_require__(6);
+
+ var _exception2 = _interopRequireDefault(_exception);
+
+ function Visitor() {
+ this.parents = [];
+ }
+
+ Visitor.prototype = {
+ constructor: Visitor,
+ mutating: false,
+
+ // Visits a given value. If mutating, will replace the value if necessary.
+ acceptKey: function acceptKey(node, name) {
+ var value = this.accept(node[name]);
+ if (this.mutating) {
+ // Hacky sanity check: This may have a few false positives for type for the helper
+ // methods but will generally do the right thing without a lot of overhead.
+ if (value && !Visitor.prototype[value.type]) {
+ throw new _exception2['default']('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type);
+ }
+ node[name] = value;
+ }
+ },
+
+ // Performs an accept operation with added sanity check to ensure
+ // required keys are not removed.
+ acceptRequired: function acceptRequired(node, name) {
+ this.acceptKey(node, name);
+
+ if (!node[name]) {
+ throw new _exception2['default'](node.type + ' requires ' + name);
+ }
+ },
+
+ // Traverses a given array. If mutating, empty respnses will be removed
+ // for child elements.
+ acceptArray: function acceptArray(array) {
+ for (var i = 0, l = array.length; i < l; i++) {
+ this.acceptKey(array, i);
+
+ if (!array[i]) {
+ array.splice(i, 1);
+ i--;
+ l--;
+ }
+ }
+ },
+
+ accept: function accept(object) {
+ if (!object) {
+ return;
+ }
+
+ /* istanbul ignore next: Sanity code */
+ if (!this[object.type]) {
+ throw new _exception2['default']('Unknown type: ' + object.type, object);
+ }
+
+ if (this.current) {
+ this.parents.unshift(this.current);
+ }
+ this.current = object;
+
+ var ret = this[object.type](object);
+
+ this.current = this.parents.shift();
+
+ if (!this.mutating || ret) {
+ return ret;
+ } else if (ret !== false) {
+ return object;
+ }
+ },
+
+ Program: function Program(program) {
+ this.acceptArray(program.body);
+ },
+
+ MustacheStatement: visitSubExpression,
+ Decorator: visitSubExpression,
+
+ BlockStatement: visitBlock,
+ DecoratorBlock: visitBlock,
+
+ PartialStatement: visitPartial,
+ PartialBlockStatement: function PartialBlockStatement(partial) {
+ visitPartial.call(this, partial);
+
+ this.acceptKey(partial, 'program');
+ },
+
+ ContentStatement: function ContentStatement() /* content */{},
+ CommentStatement: function CommentStatement() /* comment */{},
+
+ SubExpression: visitSubExpression,
+
+ PathExpression: function PathExpression() /* path */{},
+
+ StringLiteral: function StringLiteral() /* string */{},
+ NumberLiteral: function NumberLiteral() /* number */{},
+ BooleanLiteral: function BooleanLiteral() /* bool */{},
+ UndefinedLiteral: function UndefinedLiteral() /* literal */{},
+ NullLiteral: function NullLiteral() /* literal */{},
+
+ Hash: function Hash(hash) {
+ this.acceptArray(hash.pairs);
+ },
+ HashPair: function HashPair(pair) {
+ this.acceptRequired(pair, 'value');
+ }
+ };
+
+ function visitSubExpression(mustache) {
+ this.acceptRequired(mustache, 'path');
+ this.acceptArray(mustache.params);
+ this.acceptKey(mustache, 'hash');
+ }
+ function visitBlock(block) {
+ visitSubExpression.call(this, block);
+
+ this.acceptKey(block, 'program');
+ this.acceptKey(block, 'inverse');
+ }
+ function visitPartial(partial) {
+ this.acceptRequired(partial, 'name');
+ this.acceptArray(partial.params);
+ this.acceptKey(partial, 'hash');
+ }
+
+ exports['default'] = Visitor;
+ module.exports = exports['default'];
+
+/***/ },
+/* 26 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+ exports.SourceLocation = SourceLocation;
+ exports.id = id;
+ exports.stripFlags = stripFlags;
+ exports.stripComment = stripComment;
+ exports.preparePath = preparePath;
+ exports.prepareMustache = prepareMustache;
+ exports.prepareRawBlock = prepareRawBlock;
+ exports.prepareBlock = prepareBlock;
+ exports.prepareProgram = prepareProgram;
+ exports.preparePartialBlock = preparePartialBlock;
+
+ var _exception = __webpack_require__(6);
+
+ var _exception2 = _interopRequireDefault(_exception);
+
+ function validateClose(open, close) {
+ close = close.path ? close.path.original : close;
+
+ if (open.path.original !== close) {
+ var errorNode = { loc: open.path.loc };
+
+ throw new _exception2['default'](open.path.original + " doesn't match " + close, errorNode);
+ }
+ }
+
+ function SourceLocation(source, locInfo) {
+ this.source = source;
+ this.start = {
+ line: locInfo.first_line,
+ column: locInfo.first_column
+ };
+ this.end = {
+ line: locInfo.last_line,
+ column: locInfo.last_column
+ };
+ }
+
+ function id(token) {
+ if (/^\[.*\]$/.test(token)) {
+ return token.substr(1, token.length - 2);
+ } else {
+ return token;
+ }
+ }
+
+ function stripFlags(open, close) {
+ return {
+ open: open.charAt(2) === '~',
+ close: close.charAt(close.length - 3) === '~'
+ };
+ }
+
+ function stripComment(comment) {
+ return comment.replace(/^\{\{~?\!-?-?/, '').replace(/-?-?~?\}\}$/, '');
+ }
+
+ function preparePath(data, parts, loc) {
+ loc = this.locInfo(loc);
+
+ var original = data ? '@' : '',
+ dig = [],
+ depth = 0,
+ depthString = '';
+
+ for (var i = 0, l = parts.length; i < l; i++) {
+ var part = parts[i].part,
+
+ // If we have [] syntax then we do not treat path references as operators,
+ // i.e. foo.[this] resolves to approximately context.foo['this']
+ isLiteral = parts[i].original !== part;
+ original += (parts[i].separator || '') + part;
+
+ if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {
+ if (dig.length > 0) {
+ throw new _exception2['default']('Invalid path: ' + original, { loc: loc });
+ } else if (part === '..') {
+ depth++;
+ depthString += '../';
+ }
+ } else {
+ dig.push(part);
+ }
+ }
+
+ return {
+ type: 'PathExpression',
+ data: data,
+ depth: depth,
+ parts: dig,
+ original: original,
+ loc: loc
+ };
+ }
+
+ function prepareMustache(path, params, hash, open, strip, locInfo) {
+ // Must use charAt to support IE pre-10
+ var escapeFlag = open.charAt(3) || open.charAt(2),
+ escaped = escapeFlag !== '{' && escapeFlag !== '&';
+
+ var decorator = /\*/.test(open);
+ return {
+ type: decorator ? 'Decorator' : 'MustacheStatement',
+ path: path,
+ params: params,
+ hash: hash,
+ escaped: escaped,
+ strip: strip,
+ loc: this.locInfo(locInfo)
+ };
+ }
+
+ function prepareRawBlock(openRawBlock, contents, close, locInfo) {
+ validateClose(openRawBlock, close);
+
+ locInfo = this.locInfo(locInfo);
+ var program = {
+ type: 'Program',
+ body: contents,
+ strip: {},
+ loc: locInfo
+ };
+
+ return {
+ type: 'BlockStatement',
+ path: openRawBlock.path,
+ params: openRawBlock.params,
+ hash: openRawBlock.hash,
+ program: program,
+ openStrip: {},
+ inverseStrip: {},
+ closeStrip: {},
+ loc: locInfo
+ };
+ }
+
+ function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {
+ if (close && close.path) {
+ validateClose(openBlock, close);
+ }
+
+ var decorator = /\*/.test(openBlock.open);
+
+ program.blockParams = openBlock.blockParams;
+
+ var inverse = undefined,
+ inverseStrip = undefined;
+
+ if (inverseAndProgram) {
+ if (decorator) {
+ throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram);
+ }
+
+ if (inverseAndProgram.chain) {
+ inverseAndProgram.program.body[0].closeStrip = close.strip;
+ }
+
+ inverseStrip = inverseAndProgram.strip;
+ inverse = inverseAndProgram.program;
+ }
+
+ if (inverted) {
+ inverted = inverse;
+ inverse = program;
+ program = inverted;
+ }
+
+ return {
+ type: decorator ? 'DecoratorBlock' : 'BlockStatement',
+ path: openBlock.path,
+ params: openBlock.params,
+ hash: openBlock.hash,
+ program: program,
+ inverse: inverse,
+ openStrip: openBlock.strip,
+ inverseStrip: inverseStrip,
+ closeStrip: close && close.strip,
+ loc: this.locInfo(locInfo)
+ };
+ }
+
+ function prepareProgram(statements, loc) {
+ if (!loc && statements.length) {
+ var firstLoc = statements[0].loc,
+ lastLoc = statements[statements.length - 1].loc;
+
+ /* istanbul ignore else */
+ if (firstLoc && lastLoc) {
+ loc = {
+ source: firstLoc.source,
+ start: {
+ line: firstLoc.start.line,
+ column: firstLoc.start.column
+ },
+ end: {
+ line: lastLoc.end.line,
+ column: lastLoc.end.column
+ }
+ };
+ }
+ }
+
+ return {
+ type: 'Program',
+ body: statements,
+ strip: {},
+ loc: loc
+ };
+ }
+
+ function preparePartialBlock(open, program, close, locInfo) {
+ validateClose(open, close);
+
+ return {
+ type: 'PartialBlockStatement',
+ name: open.path,
+ params: open.params,
+ hash: open.hash,
+ program: program,
+ openStrip: open.strip,
+ closeStrip: close && close.strip,
+ loc: this.locInfo(locInfo)
+ };
+ }
+
+/***/ },
+/* 27 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* eslint-disable new-cap */
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+ exports.Compiler = Compiler;
+ exports.precompile = precompile;
+ exports.compile = compile;
+
+ var _exception = __webpack_require__(6);
+
+ var _exception2 = _interopRequireDefault(_exception);
+
+ var _utils = __webpack_require__(5);
+
+ var _ast = __webpack_require__(21);
+
+ var _ast2 = _interopRequireDefault(_ast);
+
+ var slice = [].slice;
+
+ function Compiler() {}
+
+ // the foundHelper register will disambiguate helper lookup from finding a
+ // function in a context. This is necessary for mustache compatibility, which
+ // requires that context functions in blocks are evaluated by blockHelperMissing,
+ // and then proceed as if the resulting value was provided to blockHelperMissing.
+
+ Compiler.prototype = {
+ compiler: Compiler,
+
+ equals: function equals(other) {
+ var len = this.opcodes.length;
+ if (other.opcodes.length !== len) {
+ return false;
+ }
+
+ for (var i = 0; i < len; i++) {
+ var opcode = this.opcodes[i],
+ otherOpcode = other.opcodes[i];
+ if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) {
+ return false;
+ }
+ }
+
+ // We know that length is the same between the two arrays because they are directly tied
+ // to the opcode behavior above.
+ len = this.children.length;
+ for (var i = 0; i < len; i++) {
+ if (!this.children[i].equals(other.children[i])) {
+ return false;
+ }
+ }
+
+ return true;
+ },
+
+ guid: 0,
+
+ compile: function compile(program, options) {
+ this.sourceNode = [];
+ this.opcodes = [];
+ this.children = [];
+ this.options = options;
+ this.stringParams = options.stringParams;
+ this.trackIds = options.trackIds;
+
+ options.blockParams = options.blockParams || [];
+
+ // These changes will propagate to the other compiler components
+ var knownHelpers = options.knownHelpers;
+ options.knownHelpers = {
+ 'helperMissing': true,
+ 'blockHelperMissing': true,
+ 'each': true,
+ 'if': true,
+ 'unless': true,
+ 'with': true,
+ 'log': true,
+ 'lookup': true
+ };
+ if (knownHelpers) {
+ for (var _name in knownHelpers) {
+ /* istanbul ignore else */
+ if (_name in knownHelpers) {
+ options.knownHelpers[_name] = knownHelpers[_name];
+ }
+ }
+ }
+
+ return this.accept(program);
+ },
+
+ compileProgram: function compileProgram(program) {
+ var childCompiler = new this.compiler(),
+ // eslint-disable-line new-cap
+ result = childCompiler.compile(program, this.options),
+ guid = this.guid++;
+
+ this.usePartial = this.usePartial || result.usePartial;
+
+ this.children[guid] = result;
+ this.useDepths = this.useDepths || result.useDepths;
+
+ return guid;
+ },
+
+ accept: function accept(node) {
+ /* istanbul ignore next: Sanity code */
+ if (!this[node.type]) {
+ throw new _exception2['default']('Unknown type: ' + node.type, node);
+ }
+
+ this.sourceNode.unshift(node);
+ var ret = this[node.type](node);
+ this.sourceNode.shift();
+ return ret;
+ },
+
+ Program: function Program(program) {
+ this.options.blockParams.unshift(program.blockParams);
+
+ var body = program.body,
+ bodyLength = body.length;
+ for (var i = 0; i < bodyLength; i++) {
+ this.accept(body[i]);
+ }
+
+ this.options.blockParams.shift();
+
+ this.isSimple = bodyLength === 1;
+ this.blockParams = program.blockParams ? program.blockParams.length : 0;
+
+ return this;
+ },
+
+ BlockStatement: function BlockStatement(block) {
+ transformLiteralToPath(block);
+
+ var program = block.program,
+ inverse = block.inverse;
+
+ program = program && this.compileProgram(program);
+ inverse = inverse && this.compileProgram(inverse);
+
+ var type = this.classifySexpr(block);
+
+ if (type === 'helper') {
+ this.helperSexpr(block, program, inverse);
+ } else if (type === 'simple') {
+ this.simpleSexpr(block);
+
+ // now that the simple mustache is resolved, we need to
+ // evaluate it by executing `blockHelperMissing`
+ this.opcode('pushProgram', program);
+ this.opcode('pushProgram', inverse);
+ this.opcode('emptyHash');
+ this.opcode('blockValue', block.path.original);
+ } else {
+ this.ambiguousSexpr(block, program, inverse);
+
+ // now that the simple mustache is resolved, we need to
+ // evaluate it by executing `blockHelperMissing`
+ this.opcode('pushProgram', program);
+ this.opcode('pushProgram', inverse);
+ this.opcode('emptyHash');
+ this.opcode('ambiguousBlockValue');
+ }
+
+ this.opcode('append');
+ },
+
+ DecoratorBlock: function DecoratorBlock(decorator) {
+ var program = decorator.program && this.compileProgram(decorator.program);
+ var params = this.setupFullMustacheParams(decorator, program, undefined),
+ path = decorator.path;
+
+ this.useDecorators = true;
+ this.opcode('registerDecorator', params.length, path.original);
+ },
+
+ PartialStatement: function PartialStatement(partial) {
+ this.usePartial = true;
+
+ var program = partial.program;
+ if (program) {
+ program = this.compileProgram(partial.program);
+ }
+
+ var params = partial.params;
+ if (params.length > 1) {
+ throw new _exception2['default']('Unsupported number of partial arguments: ' + params.length, partial);
+ } else if (!params.length) {
+ if (this.options.explicitPartialContext) {
+ this.opcode('pushLiteral', 'undefined');
+ } else {
+ params.push({ type: 'PathExpression', parts: [], depth: 0 });
+ }
+ }
+
+ var partialName = partial.name.original,
+ isDynamic = partial.name.type === 'SubExpression';
+ if (isDynamic) {
+ this.accept(partial.name);
+ }
+
+ this.setupFullMustacheParams(partial, program, undefined, true);
+
+ var indent = partial.indent || '';
+ if (this.options.preventIndent && indent) {
+ this.opcode('appendContent', indent);
+ indent = '';
+ }
+
+ this.opcode('invokePartial', isDynamic, partialName, indent);
+ this.opcode('append');
+ },
+ PartialBlockStatement: function PartialBlockStatement(partialBlock) {
+ this.PartialStatement(partialBlock);
+ },
+
+ MustacheStatement: function MustacheStatement(mustache) {
+ this.SubExpression(mustache);
+
+ if (mustache.escaped && !this.options.noEscape) {
+ this.opcode('appendEscaped');
+ } else {
+ this.opcode('append');
+ }
+ },
+ Decorator: function Decorator(decorator) {
+ this.DecoratorBlock(decorator);
+ },
+
+ ContentStatement: function ContentStatement(content) {
+ if (content.value) {
+ this.opcode('appendContent', content.value);
+ }
+ },
+
+ CommentStatement: function CommentStatement() {},
+
+ SubExpression: function SubExpression(sexpr) {
+ transformLiteralToPath(sexpr);
+ var type = this.classifySexpr(sexpr);
+
+ if (type === 'simple') {
+ this.simpleSexpr(sexpr);
+ } else if (type === 'helper') {
+ this.helperSexpr(sexpr);
+ } else {
+ this.ambiguousSexpr(sexpr);
+ }
+ },
+ ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) {
+ var path = sexpr.path,
+ name = path.parts[0],
+ isBlock = program != null || inverse != null;
+
+ this.opcode('getContext', path.depth);
+
+ this.opcode('pushProgram', program);
+ this.opcode('pushProgram', inverse);
+
+ path.strict = true;
+ this.accept(path);
+
+ this.opcode('invokeAmbiguous', name, isBlock);
+ },
+
+ simpleSexpr: function simpleSexpr(sexpr) {
+ var path = sexpr.path;
+ path.strict = true;
+ this.accept(path);
+ this.opcode('resolvePossibleLambda');
+ },
+
+ helperSexpr: function helperSexpr(sexpr, program, inverse) {
+ var params = this.setupFullMustacheParams(sexpr, program, inverse),
+ path = sexpr.path,
+ name = path.parts[0];
+
+ if (this.options.knownHelpers[name]) {
+ this.opcode('invokeKnownHelper', params.length, name);
+ } else if (this.options.knownHelpersOnly) {
+ throw new _exception2['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr);
+ } else {
+ path.strict = true;
+ path.falsy = true;
+
+ this.accept(path);
+ this.opcode('invokeHelper', params.length, path.original, _ast2['default'].helpers.simpleId(path));
+ }
+ },
+
+ PathExpression: function PathExpression(path) {
+ this.addDepth(path.depth);
+ this.opcode('getContext', path.depth);
+
+ var name = path.parts[0],
+ scoped = _ast2['default'].helpers.scopedId(path),
+ blockParamId = !path.depth && !scoped && this.blockParamIndex(name);
+
+ if (blockParamId) {
+ this.opcode('lookupBlockParam', blockParamId, path.parts);
+ } else if (!name) {
+ // Context reference, i.e. `{{foo .}}` or `{{foo ..}}`
+ this.opcode('pushContext');
+ } else if (path.data) {
+ this.options.data = true;
+ this.opcode('lookupData', path.depth, path.parts, path.strict);
+ } else {
+ this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped);
+ }
+ },
+
+ StringLiteral: function StringLiteral(string) {
+ this.opcode('pushString', string.value);
+ },
+
+ NumberLiteral: function NumberLiteral(number) {
+ this.opcode('pushLiteral', number.value);
+ },
+
+ BooleanLiteral: function BooleanLiteral(bool) {
+ this.opcode('pushLiteral', bool.value);
+ },
+
+ UndefinedLiteral: function UndefinedLiteral() {
+ this.opcode('pushLiteral', 'undefined');
+ },
+
+ NullLiteral: function NullLiteral() {
+ this.opcode('pushLiteral', 'null');
+ },
+
+ Hash: function Hash(hash) {
+ var pairs = hash.pairs,
+ i = 0,
+ l = pairs.length;
+
+ this.opcode('pushHash');
+
+ for (; i < l; i++) {
+ this.pushParam(pairs[i].value);
+ }
+ while (i--) {
+ this.opcode('assignToHash', pairs[i].key);
+ }
+ this.opcode('popHash');
+ },
+
+ // HELPERS
+ opcode: function opcode(name) {
+ this.opcodes.push({ opcode: name, args: slice.call(arguments, 1), loc: this.sourceNode[0].loc });
+ },
+
+ addDepth: function addDepth(depth) {
+ if (!depth) {
+ return;
+ }
+
+ this.useDepths = true;
+ },
+
+ classifySexpr: function classifySexpr(sexpr) {
+ var isSimple = _ast2['default'].helpers.simpleId(sexpr.path);
+
+ var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]);
+
+ // a mustache is an eligible helper if:
+ // * its id is simple (a single part, not `this` or `..`)
+ var isHelper = !isBlockParam && _ast2['default'].helpers.helperExpression(sexpr);
+
+ // if a mustache is an eligible helper but not a definite
+ // helper, it is ambiguous, and will be resolved in a later
+ // pass or at runtime.
+ var isEligible = !isBlockParam && (isHelper || isSimple);
+
+ // if ambiguous, we can possibly resolve the ambiguity now
+ // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.
+ if (isEligible && !isHelper) {
+ var _name2 = sexpr.path.parts[0],
+ options = this.options;
+
+ if (options.knownHelpers[_name2]) {
+ isHelper = true;
+ } else if (options.knownHelpersOnly) {
+ isEligible = false;
+ }
+ }
+
+ if (isHelper) {
+ return 'helper';
+ } else if (isEligible) {
+ return 'ambiguous';
+ } else {
+ return 'simple';
+ }
+ },
+
+ pushParams: function pushParams(params) {
+ for (var i = 0, l = params.length; i < l; i++) {
+ this.pushParam(params[i]);
+ }
+ },
+
+ pushParam: function pushParam(val) {
+ var value = val.value != null ? val.value : val.original || '';
+
+ if (this.stringParams) {
+ if (value.replace) {
+ value = value.replace(/^(\.?\.\/)*/g, '').replace(/\//g, '.');
+ }
+
+ if (val.depth) {
+ this.addDepth(val.depth);
+ }
+ this.opcode('getContext', val.depth || 0);
+ this.opcode('pushStringParam', value, val.type);
+
+ if (val.type === 'SubExpression') {
+ // SubExpressions get evaluated and passed in
+ // in string params mode.
+ this.accept(val);
+ }
+ } else {
+ if (this.trackIds) {
+ var blockParamIndex = undefined;
+ if (val.parts && !_ast2['default'].helpers.scopedId(val) && !val.depth) {
+ blockParamIndex = this.blockParamIndex(val.parts[0]);
+ }
+ if (blockParamIndex) {
+ var blockParamChild = val.parts.slice(1).join('.');
+ this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);
+ } else {
+ value = val.original || value;
+ if (value.replace) {
+ value = value.replace(/^this(?:\.|$)/, '').replace(/^\.\//, '').replace(/^\.$/, '');
+ }
+
+ this.opcode('pushId', val.type, value);
+ }
+ }
+ this.accept(val);
+ }
+ },
+
+ setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) {
+ var params = sexpr.params;
+ this.pushParams(params);
+
+ this.opcode('pushProgram', program);
+ this.opcode('pushProgram', inverse);
+
+ if (sexpr.hash) {
+ this.accept(sexpr.hash);
+ } else {
+ this.opcode('emptyHash', omitEmpty);
+ }
+
+ return params;
+ },
+
+ blockParamIndex: function blockParamIndex(name) {
+ for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) {
+ var blockParams = this.options.blockParams[depth],
+ param = blockParams && _utils.indexOf(blockParams, name);
+ if (blockParams && param >= 0) {
+ return [depth, param];
+ }
+ }
+ }
+ };
+
+ function precompile(input, options, env) {
+ if (input == null || typeof input !== 'string' && input.type !== 'Program') {
+ throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input);
+ }
+
+ options = options || {};
+ if (!('data' in options)) {
+ options.data = true;
+ }
+ if (options.compat) {
+ options.useDepths = true;
+ }
+
+ var ast = env.parse(input, options),
+ environment = new env.Compiler().compile(ast, options);
+ return new env.JavaScriptCompiler().compile(environment, options);
+ }
+
+ function compile(input, options, env) {
+ if (options === undefined) options = {};
+
+ if (input == null || typeof input !== 'string' && input.type !== 'Program') {
+ throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input);
+ }
+
+ if (!('data' in options)) {
+ options.data = true;
+ }
+ if (options.compat) {
+ options.useDepths = true;
+ }
+
+ var compiled = undefined;
+
+ function compileInput() {
+ var ast = env.parse(input, options),
+ environment = new env.Compiler().compile(ast, options),
+ templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);
+ return env.template(templateSpec);
+ }
+
+ // Template is only compiled on first use and cached after that point.
+ function ret(context, execOptions) {
+ if (!compiled) {
+ compiled = compileInput();
+ }
+ return compiled.call(this, context, execOptions);
+ }
+ ret._setup = function (setupOptions) {
+ if (!compiled) {
+ compiled = compileInput();
+ }
+ return compiled._setup(setupOptions);
+ };
+ ret._child = function (i, data, blockParams, depths) {
+ if (!compiled) {
+ compiled = compileInput();
+ }
+ return compiled._child(i, data, blockParams, depths);
+ };
+ return ret;
+ }
+
+ function argEquals(a, b) {
+ if (a === b) {
+ return true;
+ }
+
+ if (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) {
+ for (var i = 0; i < a.length; i++) {
+ if (!argEquals(a[i], b[i])) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+
+ function transformLiteralToPath(sexpr) {
+ if (!sexpr.path.parts) {
+ var literal = sexpr.path;
+ // Casting to string here to make false and 0 literal values play nicely with the rest
+ // of the system.
+ sexpr.path = {
+ type: 'PathExpression',
+ data: false,
+ depth: 0,
+ parts: [literal.original + ''],
+ original: literal.original + '',
+ loc: literal.loc
+ };
+ }
+ }
+
+/***/ },
+/* 28 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+
+ var _base = __webpack_require__(4);
+
+ var _exception = __webpack_require__(6);
+
+ var _exception2 = _interopRequireDefault(_exception);
+
+ var _utils = __webpack_require__(5);
+
+ var _codeGen = __webpack_require__(29);
+
+ var _codeGen2 = _interopRequireDefault(_codeGen);
+
+ function Literal(value) {
+ this.value = value;
+ }
+
+ function JavaScriptCompiler() {}
+
+ JavaScriptCompiler.prototype = {
+ // PUBLIC API: You can override these methods in a subclass to provide
+ // alternative compiled forms for name lookup and buffering semantics
+ nameLookup: function nameLookup(parent, name /* , type*/) {
+ if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {
+ return [parent, '.', name];
+ } else {
+ return [parent, '[', JSON.stringify(name), ']'];
+ }
+ },
+ depthedLookup: function depthedLookup(name) {
+ return [this.aliasable('container.lookup'), '(depths, "', name, '")'];
+ },
+
+ compilerInfo: function compilerInfo() {
+ var revision = _base.COMPILER_REVISION,
+ versions = _base.REVISION_CHANGES[revision];
+ return [revision, versions];
+ },
+
+ appendToBuffer: function appendToBuffer(source, location, explicit) {
+ // Force a source as this simplifies the merge logic.
+ if (!_utils.isArray(source)) {
+ source = [source];
+ }
+ source = this.source.wrap(source, location);
+
+ if (this.environment.isSimple) {
+ return ['return ', source, ';'];
+ } else if (explicit) {
+ // This is a case where the buffer operation occurs as a child of another
+ // construct, generally braces. We have to explicitly output these buffer
+ // operations to ensure that the emitted code goes in the correct location.
+ return ['buffer += ', source, ';'];
+ } else {
+ source.appendToBuffer = true;
+ return source;
+ }
+ },
+
+ initializeBuffer: function initializeBuffer() {
+ return this.quotedString('');
+ },
+ // END PUBLIC API
+
+ compile: function compile(environment, options, context, asObject) {
+ this.environment = environment;
+ this.options = options;
+ this.stringParams = this.options.stringParams;
+ this.trackIds = this.options.trackIds;
+ this.precompile = !asObject;
+
+ this.name = this.environment.name;
+ this.isChild = !!context;
+ this.context = context || {
+ decorators: [],
+ programs: [],
+ environments: []
+ };
+
+ this.preamble();
+
+ this.stackSlot = 0;
+ this.stackVars = [];
+ this.aliases = {};
+ this.registers = { list: [] };
+ this.hashes = [];
+ this.compileStack = [];
+ this.inlineStack = [];
+ this.blockParams = [];
+
+ this.compileChildren(environment, options);
+
+ this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat;
+ this.useBlockParams = this.useBlockParams || environment.useBlockParams;
+
+ var opcodes = environment.opcodes,
+ opcode = undefined,
+ firstLoc = undefined,
+ i = undefined,
+ l = undefined;
+
+ for (i = 0, l = opcodes.length; i < l; i++) {
+ opcode = opcodes[i];
+
+ this.source.currentLocation = opcode.loc;
+ firstLoc = firstLoc || opcode.loc;
+ this[opcode.opcode].apply(this, opcode.args);
+ }
+
+ // Flush any trailing content that might be pending.
+ this.source.currentLocation = firstLoc;
+ this.pushSource('');
+
+ /* istanbul ignore next */
+ if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {
+ throw new _exception2['default']('Compile completed with content left on stack');
+ }
+
+ if (!this.decorators.isEmpty()) {
+ this.useDecorators = true;
+
+ this.decorators.prepend('var decorators = container.decorators;\n');
+ this.decorators.push('return fn;');
+
+ if (asObject) {
+ this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]);
+ } else {
+ this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\n');
+ this.decorators.push('}\n');
+ this.decorators = this.decorators.merge();
+ }
+ } else {
+ this.decorators = undefined;
+ }
+
+ var fn = this.createFunctionContext(asObject);
+ if (!this.isChild) {
+ var ret = {
+ compiler: this.compilerInfo(),
+ main: fn
+ };
+
+ if (this.decorators) {
+ ret.main_d = this.decorators; // eslint-disable-line camelcase
+ ret.useDecorators = true;
+ }
+
+ var _context = this.context;
+ var programs = _context.programs;
+ var decorators = _context.decorators;
+
+ for (i = 0, l = programs.length; i < l; i++) {
+ if (programs[i]) {
+ ret[i] = programs[i];
+ if (decorators[i]) {
+ ret[i + '_d'] = decorators[i];
+ ret.useDecorators = true;
+ }
+ }
+ }
+
+ if (this.environment.usePartial) {
+ ret.usePartial = true;
+ }
+ if (this.options.data) {
+ ret.useData = true;
+ }
+ if (this.useDepths) {
+ ret.useDepths = true;
+ }
+ if (this.useBlockParams) {
+ ret.useBlockParams = true;
+ }
+ if (this.options.compat) {
+ ret.compat = true;
+ }
+
+ if (!asObject) {
+ ret.compiler = JSON.stringify(ret.compiler);
+
+ this.source.currentLocation = { start: { line: 1, column: 0 } };
+ ret = this.objectLiteral(ret);
+
+ if (options.srcName) {
+ ret = ret.toStringWithSourceMap({ file: options.destName });
+ ret.map = ret.map && ret.map.toString();
+ } else {
+ ret = ret.toString();
+ }
+ } else {
+ ret.compilerOptions = this.options;
+ }
+
+ return ret;
+ } else {
+ return fn;
+ }
+ },
+
+ preamble: function preamble() {
+ // track the last context pushed into place to allow skipping the
+ // getContext opcode when it would be a noop
+ this.lastContext = 0;
+ this.source = new _codeGen2['default'](this.options.srcName);
+ this.decorators = new _codeGen2['default'](this.options.srcName);
+ },
+
+ createFunctionContext: function createFunctionContext(asObject) {
+ var varDeclarations = '';
+
+ var locals = this.stackVars.concat(this.registers.list);
+ if (locals.length > 0) {
+ varDeclarations += ', ' + locals.join(', ');
+ }
+
+ // Generate minimizer alias mappings
+ //
+ // When using true SourceNodes, this will update all references to the given alias
+ // as the source nodes are reused in situ. For the non-source node compilation mode,
+ // aliases will not be used, but this case is already being run on the client and
+ // we aren't concern about minimizing the template size.
+ var aliasCount = 0;
+ for (var alias in this.aliases) {
+ // eslint-disable-line guard-for-in
+ var node = this.aliases[alias];
+
+ if (this.aliases.hasOwnProperty(alias) && node.children && node.referenceCount > 1) {
+ varDeclarations += ', alias' + ++aliasCount + '=' + alias;
+ node.children[0] = 'alias' + aliasCount;
+ }
+ }
+
+ var params = ['container', 'depth0', 'helpers', 'partials', 'data'];
+
+ if (this.useBlockParams || this.useDepths) {
+ params.push('blockParams');
+ }
+ if (this.useDepths) {
+ params.push('depths');
+ }
+
+ // Perform a second pass over the output to merge content when possible
+ var source = this.mergeSource(varDeclarations);
+
+ if (asObject) {
+ params.push(source);
+
+ return Function.apply(this, params);
+ } else {
+ return this.source.wrap(['function(', params.join(','), ') {\n ', source, '}']);
+ }
+ },
+ mergeSource: function mergeSource(varDeclarations) {
+ var isSimple = this.environment.isSimple,
+ appendOnly = !this.forceBuffer,
+ appendFirst = undefined,
+ sourceSeen = undefined,
+ bufferStart = undefined,
+ bufferEnd = undefined;
+ this.source.each(function (line) {
+ if (line.appendToBuffer) {
+ if (bufferStart) {
+ line.prepend(' + ');
+ } else {
+ bufferStart = line;
+ }
+ bufferEnd = line;
+ } else {
+ if (bufferStart) {
+ if (!sourceSeen) {
+ appendFirst = true;
+ } else {
+ bufferStart.prepend('buffer += ');
+ }
+ bufferEnd.add(';');
+ bufferStart = bufferEnd = undefined;
+ }
+
+ sourceSeen = true;
+ if (!isSimple) {
+ appendOnly = false;
+ }
+ }
+ });
+
+ if (appendOnly) {
+ if (bufferStart) {
+ bufferStart.prepend('return ');
+ bufferEnd.add(';');
+ } else if (!sourceSeen) {
+ this.source.push('return "";');
+ }
+ } else {
+ varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer());
+
+ if (bufferStart) {
+ bufferStart.prepend('return buffer + ');
+ bufferEnd.add(';');
+ } else {
+ this.source.push('return buffer;');
+ }
+ }
+
+ if (varDeclarations) {
+ this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\n'));
+ }
+
+ return this.source.merge();
+ },
+
+ // [blockValue]
+ //
+ // On stack, before: hash, inverse, program, value
+ // On stack, after: return value of blockHelperMissing
+ //
+ // The purpose of this opcode is to take a block of the form
+ // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and
+ // replace it on the stack with the result of properly
+ // invoking blockHelperMissing.
+ blockValue: function blockValue(name) {
+ var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'),
+ params = [this.contextName(0)];
+ this.setupHelperArgs(name, 0, params);
+
+ var blockName = this.popStack();
+ params.splice(1, 0, blockName);
+
+ this.push(this.source.functionCall(blockHelperMissing, 'call', params));
+ },
+
+ // [ambiguousBlockValue]
+ //
+ // On stack, before: hash, inverse, program, value
+ // Compiler value, before: lastHelper=value of last found helper, if any
+ // On stack, after, if no lastHelper: same as [blockValue]
+ // On stack, after, if lastHelper: value
+ ambiguousBlockValue: function ambiguousBlockValue() {
+ // We're being a bit cheeky and reusing the options value from the prior exec
+ var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'),
+ params = [this.contextName(0)];
+ this.setupHelperArgs('', 0, params, true);
+
+ this.flushInline();
+
+ var current = this.topStack();
+ params.splice(1, 0, current);
+
+ this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']);
+ },
+
+ // [appendContent]
+ //
+ // On stack, before: ...
+ // On stack, after: ...
+ //
+ // Appends the string value of `content` to the current buffer
+ appendContent: function appendContent(content) {
+ if (this.pendingContent) {
+ content = this.pendingContent + content;
+ } else {
+ this.pendingLocation = this.source.currentLocation;
+ }
+
+ this.pendingContent = content;
+ },
+
+ // [append]
+ //
+ // On stack, before: value, ...
+ // On stack, after: ...
+ //
+ // Coerces `value` to a String and appends it to the current buffer.
+ //
+ // If `value` is truthy, or 0, it is coerced into a string and appended
+ // Otherwise, the empty string is appended
+ append: function append() {
+ if (this.isInline()) {
+ this.replaceStack(function (current) {
+ return [' != null ? ', current, ' : ""'];
+ });
+
+ this.pushSource(this.appendToBuffer(this.popStack()));
+ } else {
+ var local = this.popStack();
+ this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']);
+ if (this.environment.isSimple) {
+ this.pushSource(['else { ', this.appendToBuffer("''", undefined, true), ' }']);
+ }
+ }
+ },
+
+ // [appendEscaped]
+ //
+ // On stack, before: value, ...
+ // On stack, after: ...
+ //
+ // Escape `value` and append it to the buffer
+ appendEscaped: function appendEscaped() {
+ this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')']));
+ },
+
+ // [getContext]
+ //
+ // On stack, before: ...
+ // On stack, after: ...
+ // Compiler value, after: lastContext=depth
+ //
+ // Set the value of the `lastContext` compiler value to the depth
+ getContext: function getContext(depth) {
+ this.lastContext = depth;
+ },
+
+ // [pushContext]
+ //
+ // On stack, before: ...
+ // On stack, after: currentContext, ...
+ //
+ // Pushes the value of the current context onto the stack.
+ pushContext: function pushContext() {
+ this.pushStackLiteral(this.contextName(this.lastContext));
+ },
+
+ // [lookupOnContext]
+ //
+ // On stack, before: ...
+ // On stack, after: currentContext[name], ...
+ //
+ // Looks up the value of `name` on the current context and pushes
+ // it onto the stack.
+ lookupOnContext: function lookupOnContext(parts, falsy, strict, scoped) {
+ var i = 0;
+
+ if (!scoped && this.options.compat && !this.lastContext) {
+ // The depthed query is expected to handle the undefined logic for the root level that
+ // is implemented below, so we evaluate that directly in compat mode
+ this.push(this.depthedLookup(parts[i++]));
+ } else {
+ this.pushContext();
+ }
+
+ this.resolvePath('context', parts, i, falsy, strict);
+ },
+
+ // [lookupBlockParam]
+ //
+ // On stack, before: ...
+ // On stack, after: blockParam[name], ...
+ //
+ // Looks up the value of `parts` on the given block param and pushes
+ // it onto the stack.
+ lookupBlockParam: function lookupBlockParam(blockParamId, parts) {
+ this.useBlockParams = true;
+
+ this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']);
+ this.resolvePath('context', parts, 1);
+ },
+
+ // [lookupData]
+ //
+ // On stack, before: ...
+ // On stack, after: data, ...
+ //
+ // Push the data lookup operator
+ lookupData: function lookupData(depth, parts, strict) {
+ if (!depth) {
+ this.pushStackLiteral('data');
+ } else {
+ this.pushStackLiteral('container.data(data, ' + depth + ')');
+ }
+
+ this.resolvePath('data', parts, 0, true, strict);
+ },
+
+ resolvePath: function resolvePath(type, parts, i, falsy, strict) {
+ // istanbul ignore next
+
+ var _this = this;
+
+ if (this.options.strict || this.options.assumeObjects) {
+ this.push(strictLookup(this.options.strict && strict, this, parts, type));
+ return;
+ }
+
+ var len = parts.length;
+ for (; i < len; i++) {
+ /* eslint-disable no-loop-func */
+ this.replaceStack(function (current) {
+ var lookup = _this.nameLookup(current, parts[i], type);
+ // We want to ensure that zero and false are handled properly if the context (falsy flag)
+ // needs to have the special handling for these values.
+ if (!falsy) {
+ return [' != null ? ', lookup, ' : ', current];
+ } else {
+ // Otherwise we can use generic falsy handling
+ return [' && ', lookup];
+ }
+ });
+ /* eslint-enable no-loop-func */
+ }
+ },
+
+ // [resolvePossibleLambda]
+ //
+ // On stack, before: value, ...
+ // On stack, after: resolved value, ...
+ //
+ // If the `value` is a lambda, replace it on the stack by
+ // the return value of the lambda
+ resolvePossibleLambda: function resolvePossibleLambda() {
+ this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']);
+ },
+
+ // [pushStringParam]
+ //
+ // On stack, before: ...
+ // On stack, after: string, currentContext, ...
+ //
+ // This opcode is designed for use in string mode, which
+ // provides the string value of a parameter along with its
+ // depth rather than resolving it immediately.
+ pushStringParam: function pushStringParam(string, type) {
+ this.pushContext();
+ this.pushString(type);
+
+ // If it's a subexpression, the string result
+ // will be pushed after this opcode.
+ if (type !== 'SubExpression') {
+ if (typeof string === 'string') {
+ this.pushString(string);
+ } else {
+ this.pushStackLiteral(string);
+ }
+ }
+ },
+
+ emptyHash: function emptyHash(omitEmpty) {
+ if (this.trackIds) {
+ this.push('{}'); // hashIds
+ }
+ if (this.stringParams) {
+ this.push('{}'); // hashContexts
+ this.push('{}'); // hashTypes
+ }
+ this.pushStackLiteral(omitEmpty ? 'undefined' : '{}');
+ },
+ pushHash: function pushHash() {
+ if (this.hash) {
+ this.hashes.push(this.hash);
+ }
+ this.hash = { values: [], types: [], contexts: [], ids: [] };
+ },
+ popHash: function popHash() {
+ var hash = this.hash;
+ this.hash = this.hashes.pop();
+
+ if (this.trackIds) {
+ this.push(this.objectLiteral(hash.ids));
+ }
+ if (this.stringParams) {
+ this.push(this.objectLiteral(hash.contexts));
+ this.push(this.objectLiteral(hash.types));
+ }
+
+ this.push(this.objectLiteral(hash.values));
+ },
+
+ // [pushString]
+ //
+ // On stack, before: ...
+ // On stack, after: quotedString(string), ...
+ //
+ // Push a quoted version of `string` onto the stack
+ pushString: function pushString(string) {
+ this.pushStackLiteral(this.quotedString(string));
+ },
+
+ // [pushLiteral]
+ //
+ // On stack, before: ...
+ // On stack, after: value, ...
+ //
+ // Pushes a value onto the stack. This operation prevents
+ // the compiler from creating a temporary variable to hold
+ // it.
+ pushLiteral: function pushLiteral(value) {
+ this.pushStackLiteral(value);
+ },
+
+ // [pushProgram]
+ //
+ // On stack, before: ...
+ // On stack, after: program(guid), ...
+ //
+ // Push a program expression onto the stack. This takes
+ // a compile-time guid and converts it into a runtime-accessible
+ // expression.
+ pushProgram: function pushProgram(guid) {
+ if (guid != null) {
+ this.pushStackLiteral(this.programExpression(guid));
+ } else {
+ this.pushStackLiteral(null);
+ }
+ },
+
+ // [registerDecorator]
+ //
+ // On stack, before: hash, program, params..., ...
+ // On stack, after: ...
+ //
+ // Pops off the decorator's parameters, invokes the decorator,
+ // and inserts the decorator into the decorators list.
+ registerDecorator: function registerDecorator(paramSize, name) {
+ var foundDecorator = this.nameLookup('decorators', name, 'decorator'),
+ options = this.setupHelperArgs(name, paramSize);
+
+ this.decorators.push(['fn = ', this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), ' || fn;']);
+ },
+
+ // [invokeHelper]
+ //
+ // On stack, before: hash, inverse, program, params..., ...
+ // On stack, after: result of helper invocation
+ //
+ // Pops off the helper's parameters, invokes the helper,
+ // and pushes the helper's return value onto the stack.
+ //
+ // If the helper is not found, `helperMissing` is called.
+ invokeHelper: function invokeHelper(paramSize, name, isSimple) {
+ var nonHelper = this.popStack(),
+ helper = this.setupHelper(paramSize, name),
+ simple = isSimple ? [helper.name, ' || '] : '';
+
+ var lookup = ['('].concat(simple, nonHelper);
+ if (!this.options.strict) {
+ lookup.push(' || ', this.aliasable('helpers.helperMissing'));
+ }
+ lookup.push(')');
+
+ this.push(this.source.functionCall(lookup, 'call', helper.callParams));
+ },
+
+ // [invokeKnownHelper]
+ //
+ // On stack, before: hash, inverse, program, params..., ...
+ // On stack, after: result of helper invocation
+ //
+ // This operation is used when the helper is known to exist,
+ // so a `helperMissing` fallback is not required.
+ invokeKnownHelper: function invokeKnownHelper(paramSize, name) {
+ var helper = this.setupHelper(paramSize, name);
+ this.push(this.source.functionCall(helper.name, 'call', helper.callParams));
+ },
+
+ // [invokeAmbiguous]
+ //
+ // On stack, before: hash, inverse, program, params..., ...
+ // On stack, after: result of disambiguation
+ //
+ // This operation is used when an expression like `{{foo}}`
+ // is provided, but we don't know at compile-time whether it
+ // is a helper or a path.
+ //
+ // This operation emits more code than the other options,
+ // and can be avoided by passing the `knownHelpers` and
+ // `knownHelpersOnly` flags at compile-time.
+ invokeAmbiguous: function invokeAmbiguous(name, helperCall) {
+ this.useRegister('helper');
+
+ var nonHelper = this.popStack();
+
+ this.emptyHash();
+ var helper = this.setupHelper(0, name, helperCall);
+
+ var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');
+
+ var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')'];
+ if (!this.options.strict) {
+ lookup[0] = '(helper = ';
+ lookup.push(' != null ? helper : ', this.aliasable('helpers.helperMissing'));
+ }
+
+ this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('"function"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']);
+ },
+
+ // [invokePartial]
+ //
+ // On stack, before: context, ...
+ // On stack after: result of partial invocation
+ //
+ // This operation pops off a context, invokes a partial with that context,
+ // and pushes the result of the invocation back.
+ invokePartial: function invokePartial(isDynamic, name, indent) {
+ var params = [],
+ options = this.setupParams(name, 1, params);
+
+ if (isDynamic) {
+ name = this.popStack();
+ delete options.name;
+ }
+
+ if (indent) {
+ options.indent = JSON.stringify(indent);
+ }
+ options.helpers = 'helpers';
+ options.partials = 'partials';
+ options.decorators = 'container.decorators';
+
+ if (!isDynamic) {
+ params.unshift(this.nameLookup('partials', name, 'partial'));
+ } else {
+ params.unshift(name);
+ }
+
+ if (this.options.compat) {
+ options.depths = 'depths';
+ }
+ options = this.objectLiteral(options);
+ params.push(options);
+
+ this.push(this.source.functionCall('container.invokePartial', '', params));
+ },
+
+ // [assignToHash]
+ //
+ // On stack, before: value, ..., hash, ...
+ // On stack, after: ..., hash, ...
+ //
+ // Pops a value off the stack and assigns it to the current hash
+ assignToHash: function assignToHash(key) {
+ var value = this.popStack(),
+ context = undefined,
+ type = undefined,
+ id = undefined;
+
+ if (this.trackIds) {
+ id = this.popStack();
+ }
+ if (this.stringParams) {
+ type = this.popStack();
+ context = this.popStack();
+ }
+
+ var hash = this.hash;
+ if (context) {
+ hash.contexts[key] = context;
+ }
+ if (type) {
+ hash.types[key] = type;
+ }
+ if (id) {
+ hash.ids[key] = id;
+ }
+ hash.values[key] = value;
+ },
+
+ pushId: function pushId(type, name, child) {
+ if (type === 'BlockParam') {
+ this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : ''));
+ } else if (type === 'PathExpression') {
+ this.pushString(name);
+ } else if (type === 'SubExpression') {
+ this.pushStackLiteral('true');
+ } else {
+ this.pushStackLiteral('null');
+ }
+ },
+
+ // HELPERS
+
+ compiler: JavaScriptCompiler,
+
+ compileChildren: function compileChildren(environment, options) {
+ var children = environment.children,
+ child = undefined,
+ compiler = undefined;
+
+ for (var i = 0, l = children.length; i < l; i++) {
+ child = children[i];
+ compiler = new this.compiler(); // eslint-disable-line new-cap
+
+ var index = this.matchExistingProgram(child);
+
+ if (index == null) {
+ this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children
+ index = this.context.programs.length;
+ child.index = index;
+ child.name = 'program' + index;
+ this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile);
+ this.context.decorators[index] = compiler.decorators;
+ this.context.environments[index] = child;
+
+ this.useDepths = this.useDepths || compiler.useDepths;
+ this.useBlockParams = this.useBlockParams || compiler.useBlockParams;
+ } else {
+ child.index = index;
+ child.name = 'program' + index;
+
+ this.useDepths = this.useDepths || child.useDepths;
+ this.useBlockParams = this.useBlockParams || child.useBlockParams;
+ }
+ }
+ },
+ matchExistingProgram: function matchExistingProgram(child) {
+ for (var i = 0, len = this.context.environments.length; i < len; i++) {
+ var environment = this.context.environments[i];
+ if (environment && environment.equals(child)) {
+ return i;
+ }
+ }
+ },
+
+ programExpression: function programExpression(guid) {
+ var child = this.environment.children[guid],
+ programParams = [child.index, 'data', child.blockParams];
+
+ if (this.useBlockParams || this.useDepths) {
+ programParams.push('blockParams');
+ }
+ if (this.useDepths) {
+ programParams.push('depths');
+ }
+
+ return 'container.program(' + programParams.join(', ') + ')';
+ },
+
+ useRegister: function useRegister(name) {
+ if (!this.registers[name]) {
+ this.registers[name] = true;
+ this.registers.list.push(name);
+ }
+ },
+
+ push: function push(expr) {
+ if (!(expr instanceof Literal)) {
+ expr = this.source.wrap(expr);
+ }
+
+ this.inlineStack.push(expr);
+ return expr;
+ },
+
+ pushStackLiteral: function pushStackLiteral(item) {
+ this.push(new Literal(item));
+ },
+
+ pushSource: function pushSource(source) {
+ if (this.pendingContent) {
+ this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation));
+ this.pendingContent = undefined;
+ }
+
+ if (source) {
+ this.source.push(source);
+ }
+ },
+
+ replaceStack: function replaceStack(callback) {
+ var prefix = ['('],
+ stack = undefined,
+ createdStack = undefined,
+ usedLiteral = undefined;
+
+ /* istanbul ignore next */
+ if (!this.isInline()) {
+ throw new _exception2['default']('replaceStack on non-inline');
+ }
+
+ // We want to merge the inline statement into the replacement statement via ','
+ var top = this.popStack(true);
+
+ if (top instanceof Literal) {
+ // Literals do not need to be inlined
+ stack = [top.value];
+ prefix = ['(', stack];
+ usedLiteral = true;
+ } else {
+ // Get or create the current stack name for use by the inline
+ createdStack = true;
+ var _name = this.incrStack();
+
+ prefix = ['((', this.push(_name), ' = ', top, ')'];
+ stack = this.topStack();
+ }
+
+ var item = callback.call(this, stack);
+
+ if (!usedLiteral) {
+ this.popStack();
+ }
+ if (createdStack) {
+ this.stackSlot--;
+ }
+ this.push(prefix.concat(item, ')'));
+ },
+
+ incrStack: function incrStack() {
+ this.stackSlot++;
+ if (this.stackSlot > this.stackVars.length) {
+ this.stackVars.push('stack' + this.stackSlot);
+ }
+ return this.topStackName();
+ },
+ topStackName: function topStackName() {
+ return 'stack' + this.stackSlot;
+ },
+ flushInline: function flushInline() {
+ var inlineStack = this.inlineStack;
+ this.inlineStack = [];
+ for (var i = 0, len = inlineStack.length; i < len; i++) {
+ var entry = inlineStack[i];
+ /* istanbul ignore if */
+ if (entry instanceof Literal) {
+ this.compileStack.push(entry);
+ } else {
+ var stack = this.incrStack();
+ this.pushSource([stack, ' = ', entry, ';']);
+ this.compileStack.push(stack);
+ }
+ }
+ },
+ isInline: function isInline() {
+ return this.inlineStack.length;
+ },
+
+ popStack: function popStack(wrapped) {
+ var inline = this.isInline(),
+ item = (inline ? this.inlineStack : this.compileStack).pop();
+
+ if (!wrapped && item instanceof Literal) {
+ return item.value;
+ } else {
+ if (!inline) {
+ /* istanbul ignore next */
+ if (!this.stackSlot) {
+ throw new _exception2['default']('Invalid stack pop');
+ }
+ this.stackSlot--;
+ }
+ return item;
+ }
+ },
+
+ topStack: function topStack() {
+ var stack = this.isInline() ? this.inlineStack : this.compileStack,
+ item = stack[stack.length - 1];
+
+ /* istanbul ignore if */
+ if (item instanceof Literal) {
+ return item.value;
+ } else {
+ return item;
+ }
+ },
+
+ contextName: function contextName(context) {
+ if (this.useDepths && context) {
+ return 'depths[' + context + ']';
+ } else {
+ return 'depth' + context;
+ }
+ },
+
+ quotedString: function quotedString(str) {
+ return this.source.quotedString(str);
+ },
+
+ objectLiteral: function objectLiteral(obj) {
+ return this.source.objectLiteral(obj);
+ },
+
+ aliasable: function aliasable(name) {
+ var ret = this.aliases[name];
+ if (ret) {
+ ret.referenceCount++;
+ return ret;
+ }
+
+ ret = this.aliases[name] = this.source.wrap(name);
+ ret.aliasable = true;
+ ret.referenceCount = 1;
+
+ return ret;
+ },
+
+ setupHelper: function setupHelper(paramSize, name, blockHelper) {
+ var params = [],
+ paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper);
+ var foundHelper = this.nameLookup('helpers', name, 'helper'),
+ callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : {}');
+
+ return {
+ params: params,
+ paramsInit: paramsInit,
+ name: foundHelper,
+ callParams: [callContext].concat(params)
+ };
+ },
+
+ setupParams: function setupParams(helper, paramSize, params) {
+ var options = {},
+ contexts = [],
+ types = [],
+ ids = [],
+ objectArgs = !params,
+ param = undefined;
+
+ if (objectArgs) {
+ params = [];
+ }
+
+ options.name = this.quotedString(helper);
+ options.hash = this.popStack();
+
+ if (this.trackIds) {
+ options.hashIds = this.popStack();
+ }
+ if (this.stringParams) {
+ options.hashTypes = this.popStack();
+ options.hashContexts = this.popStack();
+ }
+
+ var inverse = this.popStack(),
+ program = this.popStack();
+
+ // Avoid setting fn and inverse if neither are set. This allows
+ // helpers to do a check for `if (options.fn)`
+ if (program || inverse) {
+ options.fn = program || 'container.noop';
+ options.inverse = inverse || 'container.noop';
+ }
+
+ // The parameters go on to the stack in order (making sure that they are evaluated in order)
+ // so we need to pop them off the stack in reverse order
+ var i = paramSize;
+ while (i--) {
+ param = this.popStack();
+ params[i] = param;
+
+ if (this.trackIds) {
+ ids[i] = this.popStack();
+ }
+ if (this.stringParams) {
+ types[i] = this.popStack();
+ contexts[i] = this.popStack();
+ }
+ }
+
+ if (objectArgs) {
+ options.args = this.source.generateArray(params);
+ }
+
+ if (this.trackIds) {
+ options.ids = this.source.generateArray(ids);
+ }
+ if (this.stringParams) {
+ options.types = this.source.generateArray(types);
+ options.contexts = this.source.generateArray(contexts);
+ }
+
+ if (this.options.data) {
+ options.data = 'data';
+ }
+ if (this.useBlockParams) {
+ options.blockParams = 'blockParams';
+ }
+ return options;
+ },
+
+ setupHelperArgs: function setupHelperArgs(helper, paramSize, params, useRegister) {
+ var options = this.setupParams(helper, paramSize, params);
+ options = this.objectLiteral(options);
+ if (useRegister) {
+ this.useRegister('options');
+ params.push('options');
+ return ['options=', options];
+ } else if (params) {
+ params.push(options);
+ return '';
+ } else {
+ return options;
+ }
+ }
+ };
+
+ (function () {
+ var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' ');
+
+ var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};
+
+ for (var i = 0, l = reservedWords.length; i < l; i++) {
+ compilerWords[reservedWords[i]] = true;
+ }
+ })();
+
+ JavaScriptCompiler.isValidJavaScriptVariableName = function (name) {
+ return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name);
+ };
+
+ function strictLookup(requireTerminal, compiler, parts, type) {
+ var stack = compiler.popStack(),
+ i = 0,
+ len = parts.length;
+ if (requireTerminal) {
+ len--;
+ }
+
+ for (; i < len; i++) {
+ stack = compiler.nameLookup(stack, parts[i], type);
+ }
+
+ if (requireTerminal) {
+ return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ')'];
+ } else {
+ return stack;
+ }
+ }
+
+ exports['default'] = JavaScriptCompiler;
+ module.exports = exports['default'];
+
+/***/ },
+/* 29 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* global define */
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _utils = __webpack_require__(5);
+
+ var SourceNode = undefined;
+
+ try {
+ /* istanbul ignore next */
+ if (false) {
+ // We don't support this in AMD environments. For these environments, we asusme that
+ // they are running on the browser and thus have no need for the source-map library.
+ var SourceMap = require('source-map');
+ SourceNode = SourceMap.SourceNode;
+ }
+ } catch (err) {}
+ /* NOP */
+
+ /* istanbul ignore if: tested but not covered in istanbul due to dist build */
+ if (!SourceNode) {
+ SourceNode = function (line, column, srcFile, chunks) {
+ this.src = '';
+ if (chunks) {
+ this.add(chunks);
+ }
+ };
+ /* istanbul ignore next */
+ SourceNode.prototype = {
+ add: function add(chunks) {
+ if (_utils.isArray(chunks)) {
+ chunks = chunks.join('');
+ }
+ this.src += chunks;
+ },
+ prepend: function prepend(chunks) {
+ if (_utils.isArray(chunks)) {
+ chunks = chunks.join('');
+ }
+ this.src = chunks + this.src;
+ },
+ toStringWithSourceMap: function toStringWithSourceMap() {
+ return { code: this.toString() };
+ },
+ toString: function toString() {
+ return this.src;
+ }
+ };
+ }
+
+ function castChunk(chunk, codeGen, loc) {
+ if (_utils.isArray(chunk)) {
+ var ret = [];
+
+ for (var i = 0, len = chunk.length; i < len; i++) {
+ ret.push(codeGen.wrap(chunk[i], loc));
+ }
+ return ret;
+ } else if (typeof chunk === 'boolean' || typeof chunk === 'number') {
+ // Handle primitives that the SourceNode will throw up on
+ return chunk + '';
+ }
+ return chunk;
+ }
+
+ function CodeGen(srcFile) {
+ this.srcFile = srcFile;
+ this.source = [];
+ }
+
+ CodeGen.prototype = {
+ isEmpty: function isEmpty() {
+ return !this.source.length;
+ },
+ prepend: function prepend(source, loc) {
+ this.source.unshift(this.wrap(source, loc));
+ },
+ push: function push(source, loc) {
+ this.source.push(this.wrap(source, loc));
+ },
+
+ merge: function merge() {
+ var source = this.empty();
+ this.each(function (line) {
+ source.add([' ', line, '\n']);
+ });
+ return source;
+ },
+
+ each: function each(iter) {
+ for (var i = 0, len = this.source.length; i < len; i++) {
+ iter(this.source[i]);
+ }
+ },
+
+ empty: function empty() {
+ var loc = this.currentLocation || { start: {} };
+ return new SourceNode(loc.start.line, loc.start.column, this.srcFile);
+ },
+ wrap: function wrap(chunk) {
+ var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1];
+
+ if (chunk instanceof SourceNode) {
+ return chunk;
+ }
+
+ chunk = castChunk(chunk, this, loc);
+
+ return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk);
+ },
+
+ functionCall: function functionCall(fn, type, params) {
+ params = this.generateList(params);
+ return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);
+ },
+
+ quotedString: function quotedString(str) {
+ return '"' + (str + '').replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4
+ .replace(/\u2029/g, '\\u2029') + '"';
+ },
+
+ objectLiteral: function objectLiteral(obj) {
+ var pairs = [];
+
+ for (var key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ var value = castChunk(obj[key], this);
+ if (value !== 'undefined') {
+ pairs.push([this.quotedString(key), ':', value]);
+ }
+ }
+ }
+
+ var ret = this.generateList(pairs);
+ ret.prepend('{');
+ ret.add('}');
+ return ret;
+ },
+
+ generateList: function generateList(entries) {
+ var ret = this.empty();
+
+ for (var i = 0, len = entries.length; i < len; i++) {
+ if (i) {
+ ret.add(',');
+ }
+
+ ret.add(castChunk(entries[i], this));
+ }
+
+ return ret;
+ },
+
+ generateArray: function generateArray(entries) {
+ var ret = this.generateList(entries);
+ ret.prepend('[');
+ ret.add(']');
+
+ return ret;
+ }
+ };
+
+ exports['default'] = CodeGen;
+ module.exports = exports['default'];
+
+/***/ }
+/******/ ])
+});
+; \ No newline at end of file
diff --git a/core/vendor/moment/.bower.json b/core/vendor/moment/.bower.json
index 3d09c660400..58c7c593575 100644
--- a/core/vendor/moment/.bower.json
+++ b/core/vendor/moment/.bower.json
@@ -1,6 +1,5 @@
{
"name": "moment",
- "version": "2.10.3",
"main": "moment.js",
"ignore": [
"**/.*",
@@ -21,13 +20,14 @@
"package.json"
],
"homepage": "https://github.com/moment/moment",
- "_release": "2.10.3",
+ "version": "2.15.0",
+ "_release": "2.15.0",
"_resolution": {
"type": "version",
- "tag": "2.10.3",
- "commit": "6fa444238494318e3c488c81d8520ad2eba8bae7"
+ "tag": "2.15.0",
+ "commit": "0d01bda39d30c904977d385d2e5352c6a02600dc"
},
- "_source": "git://github.com/moment/moment.git",
- "_target": "~2.10.0",
+ "_source": "https://github.com/moment/moment.git",
+ "_target": "^2.15.0",
"_originalSource": "moment"
} \ No newline at end of file
diff --git a/core/vendor/moment/LICENSE b/core/vendor/moment/LICENSE
index 34f5b3707a9..9ee537448a3 100644
--- a/core/vendor/moment/LICENSE
+++ b/core/vendor/moment/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2011-2015 Tim Wood, Iskren Chernev, Moment.js contributors
+Copyright (c) 2011-2016 Tim Wood, Iskren Chernev, Moment.js contributors
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
diff --git a/core/vendor/moment/min/moment-with-locales.js b/core/vendor/moment/min/moment-with-locales.js
index 61145c0ff75..e6afacc63aa 100644
--- a/core/vendor/moment/min/moment-with-locales.js
+++ b/core/vendor/moment/min/moment-with-locales.js
@@ -1,4 +1,10 @@
-(function (global, factory) {
+//! moment.js
+//! version : 2.15.0
+//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
+//! license : MIT
+//! momentjs.com
+
+;(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
global.moment = factory()
@@ -17,7 +23,22 @@
}
function isArray(input) {
- return Object.prototype.toString.call(input) === '[object Array]';
+ return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
+ }
+
+ function isObject(input) {
+ // IE8 will treat undefined and null as object if it wasn't for
+ // input != null
+ return input != null && Object.prototype.toString.call(input) === '[object Object]';
+ }
+
+ function isObjectEmpty(obj) {
+ var k;
+ for (k in obj) {
+ // even if its not own property I'd still call it non-empty
+ return false;
+ }
+ return true;
}
function isDate(input) {
@@ -70,7 +91,9 @@
invalidMonth : null,
invalidFormat : false,
userInvalidated : false,
- iso : false
+ iso : false,
+ parsedDateParts : [],
+ meridiem : null
};
}
@@ -81,23 +104,53 @@
return m._pf;
}
+ var some;
+ if (Array.prototype.some) {
+ some = Array.prototype.some;
+ } else {
+ some = function (fun) {
+ var t = Object(this);
+ var len = t.length >>> 0;
+
+ for (var i = 0; i < len; i++) {
+ if (i in t && fun.call(this, t[i], i, t)) {
+ return true;
+ }
+ }
+
+ return false;
+ };
+ }
+
function valid__isValid(m) {
if (m._isValid == null) {
var flags = getParsingFlags(m);
- m._isValid = !isNaN(m._d.getTime()) &&
+ var parsedParts = some.call(flags.parsedDateParts, function (i) {
+ return i != null;
+ });
+ var isNowValid = !isNaN(m._d.getTime()) &&
flags.overflow < 0 &&
!flags.empty &&
!flags.invalidMonth &&
+ !flags.invalidWeekday &&
!flags.nullInput &&
!flags.invalidFormat &&
- !flags.userInvalidated;
+ !flags.userInvalidated &&
+ (!flags.meridiem || (flags.meridiem && parsedParts));
if (m._strict) {
- m._isValid = m._isValid &&
+ isNowValid = isNowValid &&
flags.charsLeftOver === 0 &&
flags.unusedTokens.length === 0 &&
flags.bigHour === undefined;
}
+
+ if (Object.isFrozen == null || !Object.isFrozen(m)) {
+ m._isValid = isNowValid;
+ }
+ else {
+ return isNowValid;
+ }
}
return m._isValid;
}
@@ -114,39 +167,45 @@
return m;
}
+ function isUndefined(input) {
+ return input === void 0;
+ }
+
+ // Plugins that add properties should also add the key here (null value),
+ // so we can properly clone ourselves.
var momentProperties = utils_hooks__hooks.momentProperties = [];
function copyConfig(to, from) {
var i, prop, val;
- if (typeof from._isAMomentObject !== 'undefined') {
+ if (!isUndefined(from._isAMomentObject)) {
to._isAMomentObject = from._isAMomentObject;
}
- if (typeof from._i !== 'undefined') {
+ if (!isUndefined(from._i)) {
to._i = from._i;
}
- if (typeof from._f !== 'undefined') {
+ if (!isUndefined(from._f)) {
to._f = from._f;
}
- if (typeof from._l !== 'undefined') {
+ if (!isUndefined(from._l)) {
to._l = from._l;
}
- if (typeof from._strict !== 'undefined') {
+ if (!isUndefined(from._strict)) {
to._strict = from._strict;
}
- if (typeof from._tzm !== 'undefined') {
+ if (!isUndefined(from._tzm)) {
to._tzm = from._tzm;
}
- if (typeof from._isUTC !== 'undefined') {
+ if (!isUndefined(from._isUTC)) {
to._isUTC = from._isUTC;
}
- if (typeof from._offset !== 'undefined') {
+ if (!isUndefined(from._offset)) {
to._offset = from._offset;
}
- if (typeof from._pf !== 'undefined') {
+ if (!isUndefined(from._pf)) {
to._pf = getParsingFlags(from);
}
- if (typeof from._locale !== 'undefined') {
+ if (!isUndefined(from._locale)) {
to._locale = from._locale;
}
@@ -154,7 +213,7 @@
for (i in momentProperties) {
prop = momentProperties[i];
val = from[prop];
- if (typeof val !== 'undefined') {
+ if (!isUndefined(val)) {
to[prop] = val;
}
}
@@ -168,7 +227,7 @@
// Moment prototype object
function Moment(config) {
copyConfig(this, config);
- this._d = new Date(+config._d);
+ this._d = new Date(config._d != null ? config._d.getTime() : NaN);
// Prevent infinite loop in case updateOffset creates new moment
// objects.
if (updateInProgress === false) {
@@ -182,21 +241,27 @@
return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);
}
+ function absFloor (number) {
+ if (number < 0) {
+ // -0 -> 0
+ return Math.ceil(number) || 0;
+ } else {
+ return Math.floor(number);
+ }
+ }
+
function toInt(argumentForCoercion) {
var coercedNumber = +argumentForCoercion,
value = 0;
if (coercedNumber !== 0 && isFinite(coercedNumber)) {
- if (coercedNumber >= 0) {
- value = Math.floor(coercedNumber);
- } else {
- value = Math.ceil(coercedNumber);
- }
+ value = absFloor(coercedNumber);
}
return value;
}
+ // compare two arrays, return the number of differences
function compareArrays(array1, array2, dontConvert) {
var len = Math.min(array1.length, array2.length),
lengthDiff = Math.abs(array1.length - array2.length),
@@ -211,122 +276,203 @@
return diffs + lengthDiff;
}
- function Locale() {
+ function warn(msg) {
+ if (utils_hooks__hooks.suppressDeprecationWarnings === false &&
+ (typeof console !== 'undefined') && console.warn) {
+ console.warn('Deprecation warning: ' + msg);
+ }
}
- var locales = {};
- var globalLocale;
+ function deprecate(msg, fn) {
+ var firstTime = true;
- function normalizeLocale(key) {
- return key ? key.toLowerCase().replace('_', '-') : key;
+ return extend(function () {
+ if (utils_hooks__hooks.deprecationHandler != null) {
+ utils_hooks__hooks.deprecationHandler(null, msg);
+ }
+ if (firstTime) {
+ var args = [];
+ var arg;
+ for (var i = 0; i < arguments.length; i++) {
+ arg = '';
+ if (typeof arguments[i] === 'object') {
+ arg += '\n[' + i + '] ';
+ for (var key in arguments[0]) {
+ arg += key + ': ' + arguments[0][key] + ', ';
+ }
+ arg = arg.slice(0, -2); // Remove trailing comma and space
+ } else {
+ arg = arguments[i];
+ }
+ args.push(arg);
+ }
+ warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack);
+ firstTime = false;
+ }
+ return fn.apply(this, arguments);
+ }, fn);
}
- // pick the locale from the array
- // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
- // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
- function chooseLocale(names) {
- var i = 0, j, next, locale, split;
+ var deprecations = {};
- while (i < names.length) {
- split = normalizeLocale(names[i]).split('-');
- j = split.length;
- next = normalizeLocale(names[i + 1]);
- next = next ? next.split('-') : null;
- while (j > 0) {
- locale = loadLocale(split.slice(0, j).join('-'));
- if (locale) {
- return locale;
- }
- if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
- //the next array item is better than a shallower substring of this one
- break;
- }
- j--;
- }
- i++;
+ function deprecateSimple(name, msg) {
+ if (utils_hooks__hooks.deprecationHandler != null) {
+ utils_hooks__hooks.deprecationHandler(name, msg);
+ }
+ if (!deprecations[name]) {
+ warn(msg);
+ deprecations[name] = true;
}
- return null;
}
- function loadLocale(name) {
- var oldLocale = null;
- // TODO: Find a better way to register and load all the locales in Node
- if (!locales[name] && typeof module !== 'undefined' &&
- module && module.exports) {
- try {
- oldLocale = globalLocale._abbr;
- require('./locale/' + name);
- // because defineLocale currently also sets the global locale, we
- // want to undo that for lazy loaded locales
- locale_locales__getSetGlobalLocale(oldLocale);
- } catch (e) { }
- }
- return locales[name];
+ utils_hooks__hooks.suppressDeprecationWarnings = false;
+ utils_hooks__hooks.deprecationHandler = null;
+
+ function isFunction(input) {
+ return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
}
- // This function will load locale and then set the global locale. If
- // no arguments are passed in, it will simply return the current global
- // locale key.
- function locale_locales__getSetGlobalLocale (key, values) {
- var data;
- if (key) {
- if (typeof values === 'undefined') {
- data = locale_locales__getLocale(key);
- }
- else {
- data = defineLocale(key, values);
+ function locale_set__set (config) {
+ var prop, i;
+ for (i in config) {
+ prop = config[i];
+ if (isFunction(prop)) {
+ this[i] = prop;
+ } else {
+ this['_' + i] = prop;
}
+ }
+ this._config = config;
+ // Lenient ordinal parsing accepts just a number in addition to
+ // number + (possibly) stuff coming from _ordinalParseLenient.
+ this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source);
+ }
- if (data) {
- // moment.duration._locale = moment._locale = data;
- globalLocale = data;
+ function mergeConfigs(parentConfig, childConfig) {
+ var res = extend({}, parentConfig), prop;
+ for (prop in childConfig) {
+ if (hasOwnProp(childConfig, prop)) {
+ if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
+ res[prop] = {};
+ extend(res[prop], parentConfig[prop]);
+ extend(res[prop], childConfig[prop]);
+ } else if (childConfig[prop] != null) {
+ res[prop] = childConfig[prop];
+ } else {
+ delete res[prop];
+ }
+ }
+ }
+ for (prop in parentConfig) {
+ if (hasOwnProp(parentConfig, prop) &&
+ !hasOwnProp(childConfig, prop) &&
+ isObject(parentConfig[prop])) {
+ // make sure changes to properties don't modify parent config
+ res[prop] = extend({}, res[prop]);
}
}
+ return res;
+ }
- return globalLocale._abbr;
+ function Locale(config) {
+ if (config != null) {
+ this.set(config);
+ }
}
- function defineLocale (name, values) {
- if (values !== null) {
- values.abbr = name;
- if (!locales[name]) {
- locales[name] = new Locale();
+ var keys;
+
+ if (Object.keys) {
+ keys = Object.keys;
+ } else {
+ keys = function (obj) {
+ var i, res = [];
+ for (i in obj) {
+ if (hasOwnProp(obj, i)) {
+ res.push(i);
+ }
}
- locales[name].set(values);
+ return res;
+ };
+ }
- // backwards compat for now: also set the locale
- locale_locales__getSetGlobalLocale(name);
+ var defaultCalendar = {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ };
- return locales[name];
- } else {
- // useful for testing
- delete locales[name];
- return null;
- }
+ function locale_calendar__calendar (key, mom, now) {
+ var output = this._calendar[key] || this._calendar['sameElse'];
+ return isFunction(output) ? output.call(mom, now) : output;
}
- // returns locale data
- function locale_locales__getLocale (key) {
- var locale;
+ var defaultLongDateFormat = {
+ LTS : 'h:mm:ss A',
+ LT : 'h:mm A',
+ L : 'MM/DD/YYYY',
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY h:mm A',
+ LLLL : 'dddd, MMMM D, YYYY h:mm A'
+ };
- if (key && key._locale && key._locale._abbr) {
- key = key._locale._abbr;
- }
+ function longDateFormat (key) {
+ var format = this._longDateFormat[key],
+ formatUpper = this._longDateFormat[key.toUpperCase()];
- if (!key) {
- return globalLocale;
+ if (format || !formatUpper) {
+ return format;
}
- if (!isArray(key)) {
- //short-circuit everything else
- locale = loadLocale(key);
- if (locale) {
- return locale;
- }
- key = [key];
- }
+ this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
+ return val.slice(1);
+ });
- return chooseLocale(key);
+ return this._longDateFormat[key];
+ }
+
+ var defaultInvalidDate = 'Invalid date';
+
+ function invalidDate () {
+ return this._invalidDate;
+ }
+
+ var defaultOrdinal = '%d';
+ var defaultOrdinalParse = /\d{1,2}/;
+
+ function ordinal (number) {
+ return this._ordinal.replace('%d', number);
+ }
+
+ var defaultRelativeTime = {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ };
+
+ function relative__relativeTime (number, withoutSuffix, string, isFuture) {
+ var output = this._relativeTime[string];
+ return (isFunction(output)) ?
+ output(number, withoutSuffix, string, isFuture) :
+ output.replace(/%d/i, number);
+ }
+
+ function pastFuture (diff, output) {
+ var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
+ return isFunction(format) ? format(output) : format.replace(/%s/i, output);
}
var aliases = {};
@@ -357,6 +503,23 @@
return normalizedInput;
}
+ var priorities = {};
+
+ function addUnitPriority(unit, priority) {
+ priorities[unit] = priority;
+ }
+
+ function getPrioritizedUnits(unitsObj) {
+ var units = [];
+ for (var u in unitsObj) {
+ units.push({unit: u, priority: priorities[u]});
+ }
+ units.sort(function (a, b) {
+ return a.priority - b.priority;
+ });
+ return units;
+ }
+
function makeGetSet (unit, keepTime) {
return function (value) {
if (value != null) {
@@ -370,24 +533,37 @@
}
function get_set__get (mom, unit) {
- return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]();
+ return mom.isValid() ?
+ mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;
}
function get_set__set (mom, unit, value) {
- return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
+ if (mom.isValid()) {
+ mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
+ }
}
// MOMENTS
- function getSet (units, value) {
- var unit;
+ function stringGet (units) {
+ units = normalizeUnits(units);
+ if (isFunction(this[units])) {
+ return this[units]();
+ }
+ return this;
+ }
+
+
+ function stringSet (units, value) {
if (typeof units === 'object') {
- for (unit in units) {
- this.set(unit, units[unit]);
+ units = normalizeObjectUnits(units);
+ var prioritized = getPrioritizedUnits(units);
+ for (var i = 0; i < prioritized.length; i++) {
+ this[prioritized[i].unit](units[prioritized[i].unit]);
}
} else {
units = normalizeUnits(units);
- if (typeof this[units] === 'function') {
+ if (isFunction(this[units])) {
return this[units](value);
}
}
@@ -395,16 +571,14 @@
}
function zeroFill(number, targetLength, forceSign) {
- var output = '' + Math.abs(number),
+ var absNumber = '' + Math.abs(number),
+ zerosToFill = targetLength - absNumber.length,
sign = number >= 0;
-
- while (output.length < targetLength) {
- output = '0' + output;
- }
- return (sign ? (forceSign ? '+' : '') : '-') + output;
+ return (sign ? (forceSign ? '+' : '') : '-') +
+ Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
}
- var formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g;
+ var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;
var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
@@ -457,7 +631,7 @@
}
return function (mom) {
- var output = '';
+ var output = '', i;
for (i = 0; i < length; i++) {
output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];
}
@@ -472,10 +646,7 @@
}
format = expandFormat(format, m.localeData());
-
- if (!formatFunctions[format]) {
- formatFunctions[format] = makeFormatFunction(format);
- }
+ formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
return formatFunctions[format](m);
}
@@ -503,6 +674,8 @@
var match4 = /\d{4}/; // 0000 - 9999
var match6 = /[+-]?\d{6}/; // -999999 - 999999
var match1to2 = /\d\d?/; // 0 - 99
+ var match3to4 = /\d\d\d\d?/; // 999 - 9999
+ var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999
var match1to3 = /\d{1,3}/; // 0 - 999
var match1to4 = /\d{1,4}/; // 0 - 9999
var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999
@@ -511,16 +684,19 @@
var matchSigned = /[+-]?\d+/; // -inf - inf
var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z
+ var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z
var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123
// any word (or two) characters or numbers including two/three word month in arabic.
+ // includes scottish gaelic two word and hyphenated months
var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;
+
var regexes = {};
function addRegexToken (token, regex, strictRegex) {
- regexes[token] = typeof regex === 'function' ? regex : function (isStrict) {
+ regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {
return (isStrict && strictRegex) ? strictRegex : regex;
};
}
@@ -535,9 +711,13 @@
// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
function unescapeFormat(s) {
- return s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
+ return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
return p1 || p2 || p3 || p4;
- }).replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+ }));
+ }
+
+ function regexEscape(s) {
+ return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
}
var tokens = {};
@@ -577,6 +757,25 @@
var MINUTE = 4;
var SECOND = 5;
var MILLISECOND = 6;
+ var WEEK = 7;
+ var WEEKDAY = 8;
+
+ var indexOf;
+
+ if (Array.prototype.indexOf) {
+ indexOf = Array.prototype.indexOf;
+ } else {
+ indexOf = function (o) {
+ // I know
+ var i;
+ for (i = 0; i < this.length; ++i) {
+ if (this[i] === o) {
+ return i;
+ }
+ }
+ return -1;
+ };
+ }
function daysInMonth(year, month) {
return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();
@@ -600,12 +799,20 @@
addUnitAlias('month', 'M');
+ // PRIORITY
+
+ addUnitPriority('month', 8);
+
// PARSING
addRegexToken('M', match1to2);
addRegexToken('MM', match1to2, match2);
- addRegexToken('MMM', matchWord);
- addRegexToken('MMMM', matchWord);
+ addRegexToken('MMM', function (isStrict, locale) {
+ return locale.monthsShortRegex(isStrict);
+ });
+ addRegexToken('MMMM', function (isStrict, locale) {
+ return locale.monthsRegex(isStrict);
+ });
addParseToken(['M', 'MM'], function (input, array) {
array[MONTH] = toInt(input) - 1;
@@ -623,25 +830,82 @@
// LOCALES
+ var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/;
var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');
- function localeMonths (m) {
- return this._months[m.month()];
+ function localeMonths (m, format) {
+ if (!m) {
+ return this._months;
+ }
+ return isArray(this._months) ? this._months[m.month()] :
+ this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];
}
var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
- function localeMonthsShort (m) {
- return this._monthsShort[m.month()];
+ function localeMonthsShort (m, format) {
+ if (!m) {
+ return this._monthsShort;
+ }
+ return isArray(this._monthsShort) ? this._monthsShort[m.month()] :
+ this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
+ }
+
+ function units_month__handleStrictParse(monthName, format, strict) {
+ var i, ii, mom, llc = monthName.toLocaleLowerCase();
+ if (!this._monthsParse) {
+ // this is not used
+ this._monthsParse = [];
+ this._longMonthsParse = [];
+ this._shortMonthsParse = [];
+ for (i = 0; i < 12; ++i) {
+ mom = create_utc__createUTC([2000, i]);
+ this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
+ this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
+ }
+ }
+
+ if (strict) {
+ if (format === 'MMM') {
+ ii = indexOf.call(this._shortMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._longMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ } else {
+ if (format === 'MMM') {
+ ii = indexOf.call(this._shortMonthsParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._longMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._longMonthsParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._shortMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ }
}
function localeMonthsParse (monthName, format, strict) {
var i, mom, regex;
+ if (this._monthsParseExact) {
+ return units_month__handleStrictParse.call(this, monthName, format, strict);
+ }
+
if (!this._monthsParse) {
this._monthsParse = [];
this._longMonthsParse = [];
this._shortMonthsParse = [];
}
+ // TODO: add sorting
+ // Sorting makes sure if one month (or abbr) is a prefix of another
+ // see sorting in computeMonthsParse
for (i = 0; i < 12; i++) {
// make the regex if we don't have it already
mom = create_utc__createUTC([2000, i]);
@@ -669,12 +933,20 @@
function setMonth (mom, value) {
var dayOfMonth;
- // TODO: Move this out of here!
+ if (!mom.isValid()) {
+ // No op
+ return mom;
+ }
+
if (typeof value === 'string') {
- value = mom.localeData().monthsParse(value);
- // TODO: Another silent failure?
- if (typeof value !== 'number') {
- return mom;
+ if (/^\d+$/.test(value)) {
+ value = toInt(value);
+ } else {
+ value = mom.localeData().monthsParse(value);
+ // TODO: Another silent failure?
+ if (typeof value !== 'number') {
+ return mom;
+ }
}
}
@@ -697,155 +969,86 @@
return daysInMonth(this.year(), this.month());
}
- function checkOverflow (m) {
- var overflow;
- var a = m._a;
-
- if (a && getParsingFlags(m).overflow === -2) {
- overflow =
- a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :
- a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
- a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :
- a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :
- a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :
- a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
- -1;
-
- if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
- overflow = DATE;
+ var defaultMonthsShortRegex = matchWord;
+ function monthsShortRegex (isStrict) {
+ if (this._monthsParseExact) {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ computeMonthsParse.call(this);
}
-
- getParsingFlags(m).overflow = overflow;
- }
-
- return m;
- }
-
- function warn(msg) {
- if (utils_hooks__hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) {
- console.warn('Deprecation warning: ' + msg);
- }
- }
-
- function deprecate(msg, fn) {
- var firstTime = true,
- msgWithStack = msg + '\n' + (new Error()).stack;
-
- return extend(function () {
- if (firstTime) {
- warn(msgWithStack);
- firstTime = false;
+ if (isStrict) {
+ return this._monthsShortStrictRegex;
+ } else {
+ return this._monthsShortRegex;
}
- return fn.apply(this, arguments);
- }, fn);
- }
-
- var deprecations = {};
-
- function deprecateSimple(name, msg) {
- if (!deprecations[name]) {
- warn(msg);
- deprecations[name] = true;
+ } else {
+ if (!hasOwnProp(this, '_monthsShortRegex')) {
+ this._monthsShortRegex = defaultMonthsShortRegex;
+ }
+ return this._monthsShortStrictRegex && isStrict ?
+ this._monthsShortStrictRegex : this._monthsShortRegex;
}
}
- utils_hooks__hooks.suppressDeprecationWarnings = false;
-
- var from_string__isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
-
- var isoDates = [
- ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/],
- ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/],
- ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/],
- ['GGGG-[W]WW', /\d{4}-W\d{2}/],
- ['YYYY-DDD', /\d{4}-\d{3}/]
- ];
-
- // iso time formats and regexes
- var isoTimes = [
- ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/],
- ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/],
- ['HH:mm', /(T| )\d\d:\d\d/],
- ['HH', /(T| )\d\d/]
- ];
-
- var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
-
- // date from iso format
- function configFromISO(config) {
- var i, l,
- string = config._i,
- match = from_string__isoRegex.exec(string);
-
- if (match) {
- getParsingFlags(config).iso = true;
- for (i = 0, l = isoDates.length; i < l; i++) {
- if (isoDates[i][1].exec(string)) {
- // match[5] should be 'T' or undefined
- config._f = isoDates[i][0] + (match[6] || ' ');
- break;
- }
+ var defaultMonthsRegex = matchWord;
+ function units_month__monthsRegex (isStrict) {
+ if (this._monthsParseExact) {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ computeMonthsParse.call(this);
}
- for (i = 0, l = isoTimes.length; i < l; i++) {
- if (isoTimes[i][1].exec(string)) {
- config._f += isoTimes[i][0];
- break;
- }
- }
- if (string.match(matchOffset)) {
- config._f += 'Z';
+ if (isStrict) {
+ return this._monthsStrictRegex;
+ } else {
+ return this._monthsRegex;
}
- configFromStringAndFormat(config);
} else {
- config._isValid = false;
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ this._monthsRegex = defaultMonthsRegex;
+ }
+ return this._monthsStrictRegex && isStrict ?
+ this._monthsStrictRegex : this._monthsRegex;
}
}
- // date from iso format or fallback
- function configFromString(config) {
- var matched = aspNetJsonRegex.exec(config._i);
-
- if (matched !== null) {
- config._d = new Date(+matched[1]);
- return;
+ function computeMonthsParse () {
+ function cmpLenRev(a, b) {
+ return b.length - a.length;
}
- configFromISO(config);
- if (config._isValid === false) {
- delete config._isValid;
- utils_hooks__hooks.createFromInputFallback(config);
+ var shortPieces = [], longPieces = [], mixedPieces = [],
+ i, mom;
+ for (i = 0; i < 12; i++) {
+ // make the regex if we don't have it already
+ mom = create_utc__createUTC([2000, i]);
+ shortPieces.push(this.monthsShort(mom, ''));
+ longPieces.push(this.months(mom, ''));
+ mixedPieces.push(this.months(mom, ''));
+ mixedPieces.push(this.monthsShort(mom, ''));
+ }
+ // Sorting makes sure if one month (or abbr) is a prefix of another it
+ // will match the longer piece.
+ shortPieces.sort(cmpLenRev);
+ longPieces.sort(cmpLenRev);
+ mixedPieces.sort(cmpLenRev);
+ for (i = 0; i < 12; i++) {
+ shortPieces[i] = regexEscape(shortPieces[i]);
+ longPieces[i] = regexEscape(longPieces[i]);
}
- }
-
- utils_hooks__hooks.createFromInputFallback = deprecate(
- 'moment construction falls back to js Date. This is ' +
- 'discouraged and will be removed in upcoming major ' +
- 'release. Please refer to ' +
- 'https://github.com/moment/moment/issues/1407 for more info.',
- function (config) {
- config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
+ for (i = 0; i < 24; i++) {
+ mixedPieces[i] = regexEscape(mixedPieces[i]);
}
- );
- function createDate (y, m, d, h, M, s, ms) {
- //can't just apply() to create a date:
- //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
- var date = new Date(y, m, d, h, M, s, ms);
-
- //the date constructor doesn't accept years < 1970
- if (y < 1970) {
- date.setFullYear(y);
- }
- return date;
+ this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+ this._monthsShortRegex = this._monthsRegex;
+ this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+ this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
}
- function createUTCDate (y) {
- var date = new Date(Date.UTC.apply(null, arguments));
- if (y < 1970) {
- date.setUTCFullYear(y);
- }
- return date;
- }
+ // FORMATTING
+
+ addFormatToken('Y', 0, 0, function () {
+ var y = this.year();
+ return y <= 9999 ? '' + y : '+' + y;
+ });
addFormatToken(0, ['YY', 2], 0, function () {
return this.year() % 100;
@@ -859,6 +1062,10 @@
addUnitAlias('year', 'y');
+ // PRIORITIES
+
+ addUnitPriority('year', 1);
+
// PARSING
addRegexToken('Y', matchSigned);
@@ -867,10 +1074,16 @@
addRegexToken('YYYYY', match1to6, match6);
addRegexToken('YYYYYY', match1to6, match6);
- addParseToken(['YYYY', 'YYYYY', 'YYYYYY'], YEAR);
+ addParseToken(['YYYYY', 'YYYYYY'], YEAR);
+ addParseToken('YYYY', function (input, array) {
+ array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input);
+ });
addParseToken('YY', function (input, array) {
array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input);
});
+ addParseToken('Y', function (input, array) {
+ array[YEAR] = parseInt(input, 10);
+ });
// HELPERS
@@ -890,12 +1103,98 @@
// MOMENTS
- var getSetYear = makeGetSet('FullYear', false);
+ var getSetYear = makeGetSet('FullYear', true);
function getIsLeapYear () {
return isLeapYear(this.year());
}
+ function createDate (y, m, d, h, M, s, ms) {
+ //can't just apply() to create a date:
+ //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
+ var date = new Date(y, m, d, h, M, s, ms);
+
+ //the date constructor remaps years 0-99 to 1900-1999
+ if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {
+ date.setFullYear(y);
+ }
+ return date;
+ }
+
+ function createUTCDate (y) {
+ var date = new Date(Date.UTC.apply(null, arguments));
+
+ //the Date.UTC function remaps years 0-99 to 1900-1999
+ if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {
+ date.setUTCFullYear(y);
+ }
+ return date;
+ }
+
+ // start-of-first-week - start-of-year
+ function firstWeekOffset(year, dow, doy) {
+ var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
+ fwd = 7 + dow - doy,
+ // first-week day local weekday -- which local weekday is fwd
+ fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
+
+ return -fwdlw + fwd - 1;
+ }
+
+ //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+ function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
+ var localWeekday = (7 + weekday - dow) % 7,
+ weekOffset = firstWeekOffset(year, dow, doy),
+ dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
+ resYear, resDayOfYear;
+
+ if (dayOfYear <= 0) {
+ resYear = year - 1;
+ resDayOfYear = daysInYear(resYear) + dayOfYear;
+ } else if (dayOfYear > daysInYear(year)) {
+ resYear = year + 1;
+ resDayOfYear = dayOfYear - daysInYear(year);
+ } else {
+ resYear = year;
+ resDayOfYear = dayOfYear;
+ }
+
+ return {
+ year: resYear,
+ dayOfYear: resDayOfYear
+ };
+ }
+
+ function weekOfYear(mom, dow, doy) {
+ var weekOffset = firstWeekOffset(mom.year(), dow, doy),
+ week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
+ resWeek, resYear;
+
+ if (week < 1) {
+ resYear = mom.year() - 1;
+ resWeek = week + weeksInYear(resYear, dow, doy);
+ } else if (week > weeksInYear(mom.year(), dow, doy)) {
+ resWeek = week - weeksInYear(mom.year(), dow, doy);
+ resYear = mom.year() + 1;
+ } else {
+ resYear = mom.year();
+ resWeek = week;
+ }
+
+ return {
+ week: resWeek,
+ year: resYear
+ };
+ }
+
+ function weeksInYear(year, dow, doy) {
+ var weekOffset = firstWeekOffset(year, dow, doy),
+ weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
+ return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
+ }
+
+ // FORMATTING
+
addFormatToken('w', ['ww', 2], 'wo', 'week');
addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
@@ -904,6 +1203,11 @@
addUnitAlias('week', 'w');
addUnitAlias('isoWeek', 'W');
+ // PRIORITIES
+
+ addUnitPriority('week', 5);
+ addUnitPriority('isoWeek', 5);
+
// PARSING
addRegexToken('w', match1to2);
@@ -917,34 +1221,6 @@
// HELPERS
- // firstDayOfWeek 0 = sun, 6 = sat
- // the day of the week that starts the week
- // (usually sunday or monday)
- // firstDayOfWeekOfYear 0 = sun, 6 = sat
- // the first week is the week that contains the first
- // of this day of the week
- // (eg. ISO weeks use thursday (4))
- function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) {
- var end = firstDayOfWeekOfYear - firstDayOfWeek,
- daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(),
- adjustedMoment;
-
-
- if (daysToDayOfWeek > end) {
- daysToDayOfWeek -= 7;
- }
-
- if (daysToDayOfWeek < end - 7) {
- daysToDayOfWeek += 7;
- }
-
- adjustedMoment = local__createLocal(mom).add(daysToDayOfWeek, 'd');
- return {
- week: Math.ceil(adjustedMoment.dayOfYear() / 7),
- year: adjustedMoment.year()
- };
- }
-
// LOCALES
function localeWeek (mom) {
@@ -976,46 +1252,813 @@
return input == null ? week : this.add((input - week) * 7, 'd');
}
- addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
+ // FORMATTING
+
+ addFormatToken('d', 0, 'do', 'day');
+
+ addFormatToken('dd', 0, 0, function (format) {
+ return this.localeData().weekdaysMin(this, format);
+ });
+
+ addFormatToken('ddd', 0, 0, function (format) {
+ return this.localeData().weekdaysShort(this, format);
+ });
+
+ addFormatToken('dddd', 0, 0, function (format) {
+ return this.localeData().weekdays(this, format);
+ });
+
+ addFormatToken('e', 0, 0, 'weekday');
+ addFormatToken('E', 0, 0, 'isoWeekday');
// ALIASES
- addUnitAlias('dayOfYear', 'DDD');
+ addUnitAlias('day', 'd');
+ addUnitAlias('weekday', 'e');
+ addUnitAlias('isoWeekday', 'E');
+
+ // PRIORITY
+ addUnitPriority('day', 11);
+ addUnitPriority('weekday', 11);
+ addUnitPriority('isoWeekday', 11);
// PARSING
- addRegexToken('DDD', match1to3);
- addRegexToken('DDDD', match3);
- addParseToken(['DDD', 'DDDD'], function (input, array, config) {
- config._dayOfYear = toInt(input);
+ addRegexToken('d', match1to2);
+ addRegexToken('e', match1to2);
+ addRegexToken('E', match1to2);
+ addRegexToken('dd', function (isStrict, locale) {
+ return locale.weekdaysMinRegex(isStrict);
+ });
+ addRegexToken('ddd', function (isStrict, locale) {
+ return locale.weekdaysShortRegex(isStrict);
+ });
+ addRegexToken('dddd', function (isStrict, locale) {
+ return locale.weekdaysRegex(isStrict);
+ });
+
+ addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
+ var weekday = config._locale.weekdaysParse(input, token, config._strict);
+ // if we didn't get a weekday name, mark the date as invalid
+ if (weekday != null) {
+ week.d = weekday;
+ } else {
+ getParsingFlags(config).invalidWeekday = input;
+ }
+ });
+
+ addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
+ week[token] = toInt(input);
});
// HELPERS
- //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
- function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {
- var d = createUTCDate(year, 0, 1).getUTCDay();
- var daysToAdd;
- var dayOfYear;
+ function parseWeekday(input, locale) {
+ if (typeof input !== 'string') {
+ return input;
+ }
- d = d === 0 ? 7 : d;
- weekday = weekday != null ? weekday : firstDayOfWeek;
- daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0);
- dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1;
+ if (!isNaN(input)) {
+ return parseInt(input, 10);
+ }
- return {
- year : dayOfYear > 0 ? year : year - 1,
- dayOfYear : dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear
- };
+ input = locale.weekdaysParse(input);
+ if (typeof input === 'number') {
+ return input;
+ }
+
+ return null;
+ }
+
+ function parseIsoWeekday(input, locale) {
+ if (typeof input === 'string') {
+ return locale.weekdaysParse(input) % 7 || 7;
+ }
+ return isNaN(input) ? null : input;
+ }
+
+ // LOCALES
+
+ var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
+ function localeWeekdays (m, format) {
+ if (!m) {
+ return this._weekdays;
+ }
+ return isArray(this._weekdays) ? this._weekdays[m.day()] :
+ this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];
+ }
+
+ var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
+ function localeWeekdaysShort (m) {
+ return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;
+ }
+
+ var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
+ function localeWeekdaysMin (m) {
+ return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;
+ }
+
+ function day_of_week__handleStrictParse(weekdayName, format, strict) {
+ var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
+ if (!this._weekdaysParse) {
+ this._weekdaysParse = [];
+ this._shortWeekdaysParse = [];
+ this._minWeekdaysParse = [];
+
+ for (i = 0; i < 7; ++i) {
+ mom = create_utc__createUTC([2000, 1]).day(i);
+ this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();
+ this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();
+ this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
+ }
+ }
+
+ if (strict) {
+ if (format === 'dddd') {
+ ii = indexOf.call(this._weekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else if (format === 'ddd') {
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ } else {
+ if (format === 'dddd') {
+ ii = indexOf.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else if (format === 'ddd') {
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ }
+ }
+
+ function localeWeekdaysParse (weekdayName, format, strict) {
+ var i, mom, regex;
+
+ if (this._weekdaysParseExact) {
+ return day_of_week__handleStrictParse.call(this, weekdayName, format, strict);
+ }
+
+ if (!this._weekdaysParse) {
+ this._weekdaysParse = [];
+ this._minWeekdaysParse = [];
+ this._shortWeekdaysParse = [];
+ this._fullWeekdaysParse = [];
+ }
+
+ for (i = 0; i < 7; i++) {
+ // make the regex if we don't have it already
+
+ mom = create_utc__createUTC([2000, 1]).day(i);
+ if (strict && !this._fullWeekdaysParse[i]) {
+ this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i');
+ this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i');
+ this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i');
+ }
+ if (!this._weekdaysParse[i]) {
+ regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
+ this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
+ }
+ // test the regex
+ if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
+ return i;
+ }
+ }
}
// MOMENTS
- function getSetDayOfYear (input) {
- var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
- return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
+ function getSetDayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
+ if (input != null) {
+ input = parseWeekday(input, this.localeData());
+ return this.add(input - day, 'd');
+ } else {
+ return day;
+ }
+ }
+
+ function getSetLocaleDayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
+ return input == null ? weekday : this.add(input - weekday, 'd');
+ }
+
+ function getSetISODayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+
+ // behaves the same as moment#day except
+ // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+ // as a setter, sunday should belong to the previous week.
+
+ if (input != null) {
+ var weekday = parseIsoWeekday(input, this.localeData());
+ return this.day(this.day() % 7 ? weekday : weekday - 7);
+ } else {
+ return this.day() || 7;
+ }
+ }
+
+ var defaultWeekdaysRegex = matchWord;
+ function weekdaysRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysStrictRegex;
+ } else {
+ return this._weekdaysRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ this._weekdaysRegex = defaultWeekdaysRegex;
+ }
+ return this._weekdaysStrictRegex && isStrict ?
+ this._weekdaysStrictRegex : this._weekdaysRegex;
+ }
+ }
+
+ var defaultWeekdaysShortRegex = matchWord;
+ function weekdaysShortRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysShortStrictRegex;
+ } else {
+ return this._weekdaysShortRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysShortRegex')) {
+ this._weekdaysShortRegex = defaultWeekdaysShortRegex;
+ }
+ return this._weekdaysShortStrictRegex && isStrict ?
+ this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
+ }
+ }
+
+ var defaultWeekdaysMinRegex = matchWord;
+ function weekdaysMinRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysMinStrictRegex;
+ } else {
+ return this._weekdaysMinRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysMinRegex')) {
+ this._weekdaysMinRegex = defaultWeekdaysMinRegex;
+ }
+ return this._weekdaysMinStrictRegex && isStrict ?
+ this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
+ }
+ }
+
+
+ function computeWeekdaysParse () {
+ function cmpLenRev(a, b) {
+ return b.length - a.length;
+ }
+
+ var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],
+ i, mom, minp, shortp, longp;
+ for (i = 0; i < 7; i++) {
+ // make the regex if we don't have it already
+ mom = create_utc__createUTC([2000, 1]).day(i);
+ minp = this.weekdaysMin(mom, '');
+ shortp = this.weekdaysShort(mom, '');
+ longp = this.weekdays(mom, '');
+ minPieces.push(minp);
+ shortPieces.push(shortp);
+ longPieces.push(longp);
+ mixedPieces.push(minp);
+ mixedPieces.push(shortp);
+ mixedPieces.push(longp);
+ }
+ // Sorting makes sure if one weekday (or abbr) is a prefix of another it
+ // will match the longer piece.
+ minPieces.sort(cmpLenRev);
+ shortPieces.sort(cmpLenRev);
+ longPieces.sort(cmpLenRev);
+ mixedPieces.sort(cmpLenRev);
+ for (i = 0; i < 7; i++) {
+ shortPieces[i] = regexEscape(shortPieces[i]);
+ longPieces[i] = regexEscape(longPieces[i]);
+ mixedPieces[i] = regexEscape(mixedPieces[i]);
+ }
+
+ this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+ this._weekdaysShortRegex = this._weekdaysRegex;
+ this._weekdaysMinRegex = this._weekdaysRegex;
+
+ this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+ this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
+ this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');
+ }
+
+ // FORMATTING
+
+ function hFormat() {
+ return this.hours() % 12 || 12;
+ }
+
+ function kFormat() {
+ return this.hours() || 24;
+ }
+
+ addFormatToken('H', ['HH', 2], 0, 'hour');
+ addFormatToken('h', ['hh', 2], 0, hFormat);
+ addFormatToken('k', ['kk', 2], 0, kFormat);
+
+ addFormatToken('hmm', 0, 0, function () {
+ return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
+ });
+
+ addFormatToken('hmmss', 0, 0, function () {
+ return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +
+ zeroFill(this.seconds(), 2);
+ });
+
+ addFormatToken('Hmm', 0, 0, function () {
+ return '' + this.hours() + zeroFill(this.minutes(), 2);
+ });
+
+ addFormatToken('Hmmss', 0, 0, function () {
+ return '' + this.hours() + zeroFill(this.minutes(), 2) +
+ zeroFill(this.seconds(), 2);
+ });
+
+ function meridiem (token, lowercase) {
+ addFormatToken(token, 0, 0, function () {
+ return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
+ });
+ }
+
+ meridiem('a', true);
+ meridiem('A', false);
+
+ // ALIASES
+
+ addUnitAlias('hour', 'h');
+
+ // PRIORITY
+ addUnitPriority('hour', 13);
+
+ // PARSING
+
+ function matchMeridiem (isStrict, locale) {
+ return locale._meridiemParse;
+ }
+
+ addRegexToken('a', matchMeridiem);
+ addRegexToken('A', matchMeridiem);
+ addRegexToken('H', match1to2);
+ addRegexToken('h', match1to2);
+ addRegexToken('HH', match1to2, match2);
+ addRegexToken('hh', match1to2, match2);
+
+ addRegexToken('hmm', match3to4);
+ addRegexToken('hmmss', match5to6);
+ addRegexToken('Hmm', match3to4);
+ addRegexToken('Hmmss', match5to6);
+
+ addParseToken(['H', 'HH'], HOUR);
+ addParseToken(['a', 'A'], function (input, array, config) {
+ config._isPm = config._locale.isPM(input);
+ config._meridiem = input;
+ });
+ addParseToken(['h', 'hh'], function (input, array, config) {
+ array[HOUR] = toInt(input);
+ getParsingFlags(config).bigHour = true;
+ });
+ addParseToken('hmm', function (input, array, config) {
+ var pos = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos));
+ array[MINUTE] = toInt(input.substr(pos));
+ getParsingFlags(config).bigHour = true;
+ });
+ addParseToken('hmmss', function (input, array, config) {
+ var pos1 = input.length - 4;
+ var pos2 = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos1));
+ array[MINUTE] = toInt(input.substr(pos1, 2));
+ array[SECOND] = toInt(input.substr(pos2));
+ getParsingFlags(config).bigHour = true;
+ });
+ addParseToken('Hmm', function (input, array, config) {
+ var pos = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos));
+ array[MINUTE] = toInt(input.substr(pos));
+ });
+ addParseToken('Hmmss', function (input, array, config) {
+ var pos1 = input.length - 4;
+ var pos2 = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos1));
+ array[MINUTE] = toInt(input.substr(pos1, 2));
+ array[SECOND] = toInt(input.substr(pos2));
+ });
+
+ // LOCALES
+
+ function localeIsPM (input) {
+ // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+ // Using charAt should be more compatible.
+ return ((input + '').toLowerCase().charAt(0) === 'p');
+ }
+
+ var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
+ function localeMeridiem (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'pm' : 'PM';
+ } else {
+ return isLower ? 'am' : 'AM';
+ }
+ }
+
+
+ // MOMENTS
+
+ // Setting the hour should keep the time, because the user explicitly
+ // specified which hour he wants. So trying to maintain the same hour (in
+ // a new timezone) makes sense. Adding/subtracting hours does not follow
+ // this rule.
+ var getSetHour = makeGetSet('Hours', true);
+
+ var baseConfig = {
+ calendar: defaultCalendar,
+ longDateFormat: defaultLongDateFormat,
+ invalidDate: defaultInvalidDate,
+ ordinal: defaultOrdinal,
+ ordinalParse: defaultOrdinalParse,
+ relativeTime: defaultRelativeTime,
+
+ months: defaultLocaleMonths,
+ monthsShort: defaultLocaleMonthsShort,
+
+ week: defaultLocaleWeek,
+
+ weekdays: defaultLocaleWeekdays,
+ weekdaysMin: defaultLocaleWeekdaysMin,
+ weekdaysShort: defaultLocaleWeekdaysShort,
+
+ meridiemParse: defaultLocaleMeridiemParse
+ };
+
+ // internal storage for locale config files
+ var locales = {};
+ var globalLocale;
+
+ function normalizeLocale(key) {
+ return key ? key.toLowerCase().replace('_', '-') : key;
+ }
+
+ // pick the locale from the array
+ // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+ // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+ function chooseLocale(names) {
+ var i = 0, j, next, locale, split;
+
+ while (i < names.length) {
+ split = normalizeLocale(names[i]).split('-');
+ j = split.length;
+ next = normalizeLocale(names[i + 1]);
+ next = next ? next.split('-') : null;
+ while (j > 0) {
+ locale = loadLocale(split.slice(0, j).join('-'));
+ if (locale) {
+ return locale;
+ }
+ if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
+ //the next array item is better than a shallower substring of this one
+ break;
+ }
+ j--;
+ }
+ i++;
+ }
+ return null;
+ }
+
+ function loadLocale(name) {
+ var oldLocale = null;
+ // TODO: Find a better way to register and load all the locales in Node
+ if (!locales[name] && (typeof module !== 'undefined') &&
+ module && module.require) {
+ try {
+ oldLocale = globalLocale._abbr;
+ module.require('./locale/' + name);
+ // because defineLocale currently also sets the global locale, we
+ // want to undo that for lazy loaded locales
+ locale_locales__getSetGlobalLocale(oldLocale);
+ } catch (e) { }
+ }
+ return locales[name];
+ }
+
+ // This function will load locale and then set the global locale. If
+ // no arguments are passed in, it will simply return the current global
+ // locale key.
+ function locale_locales__getSetGlobalLocale (key, values) {
+ var data;
+ if (key) {
+ if (isUndefined(values)) {
+ data = locale_locales__getLocale(key);
+ }
+ else {
+ data = defineLocale(key, values);
+ }
+
+ if (data) {
+ // moment.duration._locale = moment._locale = data;
+ globalLocale = data;
+ }
+ }
+
+ return globalLocale._abbr;
+ }
+
+ function defineLocale (name, config) {
+ if (config !== null) {
+ var parentConfig = baseConfig;
+ config.abbr = name;
+ if (locales[name] != null) {
+ deprecateSimple('defineLocaleOverride',
+ 'use moment.updateLocale(localeName, config) to change ' +
+ 'an existing locale. moment.defineLocale(localeName, ' +
+ 'config) should only be used for creating a new locale ' +
+ 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');
+ parentConfig = locales[name]._config;
+ } else if (config.parentLocale != null) {
+ if (locales[config.parentLocale] != null) {
+ parentConfig = locales[config.parentLocale]._config;
+ } else {
+ // treat as if there is no base config
+ deprecateSimple('parentLocaleUndefined',
+ 'specified parentLocale is not defined yet. See http://momentjs.com/guides/#/warnings/parent-locale/');
+ }
+ }
+ locales[name] = new Locale(mergeConfigs(parentConfig, config));
+
+ // backwards compat for now: also set the locale
+ locale_locales__getSetGlobalLocale(name);
+
+ return locales[name];
+ } else {
+ // useful for testing
+ delete locales[name];
+ return null;
+ }
+ }
+
+ function updateLocale(name, config) {
+ if (config != null) {
+ var locale, parentConfig = baseConfig;
+ // MERGE
+ if (locales[name] != null) {
+ parentConfig = locales[name]._config;
+ }
+ config = mergeConfigs(parentConfig, config);
+ locale = new Locale(config);
+ locale.parentLocale = locales[name];
+ locales[name] = locale;
+
+ // backwards compat for now: also set the locale
+ locale_locales__getSetGlobalLocale(name);
+ } else {
+ // pass null for config to unupdate, useful for tests
+ if (locales[name] != null) {
+ if (locales[name].parentLocale != null) {
+ locales[name] = locales[name].parentLocale;
+ } else if (locales[name] != null) {
+ delete locales[name];
+ }
+ }
+ }
+ return locales[name];
+ }
+
+ // returns locale data
+ function locale_locales__getLocale (key) {
+ var locale;
+
+ if (key && key._locale && key._locale._abbr) {
+ key = key._locale._abbr;
+ }
+
+ if (!key) {
+ return globalLocale;
+ }
+
+ if (!isArray(key)) {
+ //short-circuit everything else
+ locale = loadLocale(key);
+ if (locale) {
+ return locale;
+ }
+ key = [key];
+ }
+
+ return chooseLocale(key);
}
+ function locale_locales__listLocales() {
+ return keys(locales);
+ }
+
+ function checkOverflow (m) {
+ var overflow;
+ var a = m._a;
+
+ if (a && getParsingFlags(m).overflow === -2) {
+ overflow =
+ a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :
+ a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
+ a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :
+ a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :
+ a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :
+ a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
+ -1;
+
+ if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
+ overflow = DATE;
+ }
+ if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
+ overflow = WEEK;
+ }
+ if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
+ overflow = WEEKDAY;
+ }
+
+ getParsingFlags(m).overflow = overflow;
+ }
+
+ return m;
+ }
+
+ // iso 8601 regex
+ // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
+ var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/;
+ var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/;
+
+ var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/;
+
+ var isoDates = [
+ ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
+ ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
+ ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
+ ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
+ ['YYYY-DDD', /\d{4}-\d{3}/],
+ ['YYYY-MM', /\d{4}-\d\d/, false],
+ ['YYYYYYMMDD', /[+-]\d{10}/],
+ ['YYYYMMDD', /\d{8}/],
+ // YYYYMM is NOT allowed by the standard
+ ['GGGG[W]WWE', /\d{4}W\d{3}/],
+ ['GGGG[W]WW', /\d{4}W\d{2}/, false],
+ ['YYYYDDD', /\d{7}/]
+ ];
+
+ // iso time formats and regexes
+ var isoTimes = [
+ ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
+ ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
+ ['HH:mm:ss', /\d\d:\d\d:\d\d/],
+ ['HH:mm', /\d\d:\d\d/],
+ ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
+ ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
+ ['HHmmss', /\d\d\d\d\d\d/],
+ ['HHmm', /\d\d\d\d/],
+ ['HH', /\d\d/]
+ ];
+
+ var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
+
+ // date from iso format
+ function configFromISO(config) {
+ var i, l,
+ string = config._i,
+ match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
+ allowTime, dateFormat, timeFormat, tzFormat;
+
+ if (match) {
+ getParsingFlags(config).iso = true;
+
+ for (i = 0, l = isoDates.length; i < l; i++) {
+ if (isoDates[i][1].exec(match[1])) {
+ dateFormat = isoDates[i][0];
+ allowTime = isoDates[i][2] !== false;
+ break;
+ }
+ }
+ if (dateFormat == null) {
+ config._isValid = false;
+ return;
+ }
+ if (match[3]) {
+ for (i = 0, l = isoTimes.length; i < l; i++) {
+ if (isoTimes[i][1].exec(match[3])) {
+ // match[2] should be 'T' or space
+ timeFormat = (match[2] || ' ') + isoTimes[i][0];
+ break;
+ }
+ }
+ if (timeFormat == null) {
+ config._isValid = false;
+ return;
+ }
+ }
+ if (!allowTime && timeFormat != null) {
+ config._isValid = false;
+ return;
+ }
+ if (match[4]) {
+ if (tzRegex.exec(match[4])) {
+ tzFormat = 'Z';
+ } else {
+ config._isValid = false;
+ return;
+ }
+ }
+ config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
+ configFromStringAndFormat(config);
+ } else {
+ config._isValid = false;
+ }
+ }
+
+ // date from iso format or fallback
+ function configFromString(config) {
+ var matched = aspNetJsonRegex.exec(config._i);
+
+ if (matched !== null) {
+ config._d = new Date(+matched[1]);
+ return;
+ }
+
+ configFromISO(config);
+ if (config._isValid === false) {
+ delete config._isValid;
+ utils_hooks__hooks.createFromInputFallback(config);
+ }
+ }
+
+ utils_hooks__hooks.createFromInputFallback = deprecate(
+ 'value provided is not in a recognized ISO format. moment construction falls back to js Date(), ' +
+ 'which is not reliable across all browsers and versions. Non ISO date formats are ' +
+ 'discouraged and will be removed in an upcoming major release. Please refer to ' +
+ 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
+ function (config) {
+ config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
+ }
+ );
+
// Pick the first defined of two or three arguments.
function defaults(a, b, c) {
if (a != null) {
@@ -1028,11 +2071,12 @@
}
function currentDateArray(config) {
- var now = new Date();
+ // hooks is actually the exported moment object
+ var nowValue = new Date(utils_hooks__hooks.now());
if (config._useUTC) {
- return [now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()];
+ return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];
}
- return [now.getFullYear(), now.getMonth(), now.getDate()];
+ return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
}
// convert an array to a date.
@@ -1102,7 +2146,7 @@
}
function dayOfYearFromWeekInfo(config) {
- var w, weekYear, week, weekday, dow, doy, temp;
+ var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;
w = config._w;
if (w.GG != null || w.W != null || w.E != null) {
@@ -1116,6 +2160,9 @@
weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year);
week = defaults(w.W, 1);
weekday = defaults(w.E, 1);
+ if (weekday < 1 || weekday > 7) {
+ weekdayOverflow = true;
+ }
} else {
dow = config._locale._week.dow;
doy = config._locale._week.doy;
@@ -1126,23 +2173,32 @@
if (w.d != null) {
// weekday -- low day numbers are considered next week
weekday = w.d;
- if (weekday < dow) {
- ++week;
+ if (weekday < 0 || weekday > 6) {
+ weekdayOverflow = true;
}
} else if (w.e != null) {
// local weekday -- counting starts from begining of week
weekday = w.e + dow;
+ if (w.e < 0 || w.e > 6) {
+ weekdayOverflow = true;
+ }
} else {
// default to begining of week
weekday = dow;
}
}
- temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow);
-
- config._a[YEAR] = temp.year;
- config._dayOfYear = temp.dayOfYear;
+ if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
+ getParsingFlags(config)._overflowWeeks = true;
+ } else if (weekdayOverflow != null) {
+ getParsingFlags(config)._overflowWeekday = true;
+ } else {
+ temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
+ config._a[YEAR] = temp.year;
+ config._dayOfYear = temp.dayOfYear;
+ }
}
+ // constant that refers to the ISO standard
utils_hooks__hooks.ISO_8601 = function () {};
// date from string and format string
@@ -1167,6 +2223,8 @@
for (i = 0; i < tokens.length; i++) {
token = tokens[i];
parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
+ // console.log('token', token, 'parsedInput', parsedInput,
+ // 'regex', getParseRegexForToken(token, config));
if (parsedInput) {
skipped = string.substr(0, string.indexOf(parsedInput));
if (skipped.length > 0) {
@@ -1197,11 +2255,14 @@
}
// clear _12h flag if hour is <= 12
- if (getParsingFlags(config).bigHour === true &&
- config._a[HOUR] <= 12 &&
- config._a[HOUR] > 0) {
+ if (config._a[HOUR] <= 12 &&
+ getParsingFlags(config).bigHour === true &&
+ config._a[HOUR] > 0) {
getParsingFlags(config).bigHour = undefined;
}
+
+ getParsingFlags(config).parsedDateParts = config._a.slice(0);
+ getParsingFlags(config).meridiem = config._meridiem;
// handle meridiem
config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
@@ -1235,6 +2296,7 @@
}
}
+ // date from string and array of format strings
function configFromStringAndArray(config) {
var tempConfig,
bestMoment,
@@ -1285,15 +2347,27 @@
}
var i = normalizeObjectUnits(config._i);
- config._a = [i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond];
+ config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {
+ return obj && parseInt(obj, 10);
+ });
configFromArray(config);
}
function createFromConfig (config) {
+ var res = new Moment(checkOverflow(prepareConfig(config)));
+ if (res._nextDay) {
+ // Adding is smart enough around DST
+ res.add(1, 'd');
+ res._nextDay = undefined;
+ }
+
+ return res;
+ }
+
+ function prepareConfig (config) {
var input = config._i,
- format = config._f,
- res;
+ format = config._f;
config._locale = config._locale || locale_locales__getLocale(config._l);
@@ -1309,30 +2383,27 @@
return new Moment(checkOverflow(input));
} else if (isArray(format)) {
configFromStringAndArray(config);
- } else if (format) {
- configFromStringAndFormat(config);
} else if (isDate(input)) {
config._d = input;
- } else {
+ } else if (format) {
+ configFromStringAndFormat(config);
+ } else {
configFromInput(config);
}
- res = new Moment(checkOverflow(config));
- if (res._nextDay) {
- // Adding is smart enough around DST
- res.add(1, 'd');
- res._nextDay = undefined;
+ if (!valid__isValid(config)) {
+ config._d = null;
}
- return res;
+ return config;
}
function configFromInput(config) {
var input = config._i;
if (input === undefined) {
- config._d = new Date();
+ config._d = new Date(utils_hooks__hooks.now());
} else if (isDate(input)) {
- config._d = new Date(+input);
+ config._d = new Date(input.valueOf());
} else if (typeof input === 'string') {
configFromString(config);
} else if (isArray(input)) {
@@ -1357,6 +2428,11 @@
strict = locale;
locale = undefined;
}
+
+ if ((isObject(input) && isObjectEmpty(input)) ||
+ (isArray(input) && input.length === 0)) {
+ input = undefined;
+ }
// object construction must be done this way.
// https://github.com/moment/moment/issues/1423
c._isAMomentObject = true;
@@ -1374,18 +2450,26 @@
}
var prototypeMin = deprecate(
- 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548',
- function () {
- var other = local__createLocal.apply(null, arguments);
- return other < this ? this : other;
- }
- );
+ 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
+ function () {
+ var other = local__createLocal.apply(null, arguments);
+ if (this.isValid() && other.isValid()) {
+ return other < this ? this : other;
+ } else {
+ return valid__createInvalid();
+ }
+ }
+ );
var prototypeMax = deprecate(
- 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548',
+ 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
function () {
var other = local__createLocal.apply(null, arguments);
- return other > this ? this : other;
+ if (this.isValid() && other.isValid()) {
+ return other > this ? this : other;
+ } else {
+ return valid__createInvalid();
+ }
}
);
@@ -1404,7 +2488,7 @@
}
res = moments[0];
for (i = 1; i < moments.length; ++i) {
- if (moments[i][fn](res)) {
+ if (!moments[i].isValid() || moments[i][fn](res)) {
res = moments[i];
}
}
@@ -1424,6 +2508,10 @@
return pickBy('isAfter', args);
}
+ var now = function () {
+ return Date.now ? Date.now() : +(new Date());
+ };
+
function Duration (duration) {
var normalizedInput = normalizeObjectUnits(duration),
years = normalizedInput.year || 0,
@@ -1440,7 +2528,7 @@
this._milliseconds = +milliseconds +
seconds * 1e3 + // 1000
minutes * 6e4 + // 1000 * 60
- hours * 36e5; // 1000 * 60 * 60
+ hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
// Because of dateAddRemove treats 24 hours as different from a
// day when working around DST, we need to store them separately
this._days = +days +
@@ -1463,6 +2551,16 @@
return obj instanceof Duration;
}
+ function absRound (number) {
+ if (number < 0) {
+ return Math.round(-1 * number) * -1;
+ } else {
+ return Math.round(number);
+ }
+ }
+
+ // FORMATTING
+
function offset (token, separator) {
addFormatToken(token, 0, 0, function () {
var offset = this.utcOffset();
@@ -1480,11 +2578,11 @@
// PARSING
- addRegexToken('Z', matchOffset);
- addRegexToken('ZZ', matchOffset);
+ addRegexToken('Z', matchShortOffset);
+ addRegexToken('ZZ', matchShortOffset);
addParseToken(['Z', 'ZZ'], function (input, array, config) {
config._useUTC = true;
- config._tzm = offsetFromString(input);
+ config._tzm = offsetFromString(matchShortOffset, input);
});
// HELPERS
@@ -1494,8 +2592,8 @@
// '-1530' > ['-15', '30']
var chunkOffset = /([\+\-]|\d\d)/gi;
- function offsetFromString(string) {
- var matches = ((string || '').match(matchOffset) || []);
+ function offsetFromString(matcher, string) {
+ var matches = ((string || '').match(matcher) || []);
var chunk = matches[matches.length - 1] || [];
var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
var minutes = +(parts[1] * 60) + toInt(parts[2]);
@@ -1508,15 +2606,14 @@
var res, diff;
if (model._isUTC) {
res = model.clone();
- diff = (isMoment(input) || isDate(input) ? +input : +local__createLocal(input)) - (+res);
+ diff = (isMoment(input) || isDate(input) ? input.valueOf() : local__createLocal(input).valueOf()) - res.valueOf();
// Use low-level api, because this fn is low-level api.
- res._d.setTime(+res._d + diff);
+ res._d.setTime(res._d.valueOf() + diff);
utils_hooks__hooks.updateOffset(res, false);
return res;
} else {
return local__createLocal(input).local();
}
- return model._isUTC ? local__createLocal(input).zone(model._offset || 0) : local__createLocal(input).local();
}
function getDateOffset (m) {
@@ -1546,11 +2643,13 @@
function getSetOffset (input, keepLocalTime) {
var offset = this._offset || 0,
localAdjust;
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
if (input != null) {
if (typeof input === 'string') {
- input = offsetFromString(input);
- }
- if (Math.abs(input) < 16) {
+ input = offsetFromString(matchShortOffset, input);
+ } else if (Math.abs(input) < 16) {
input = input * 60;
}
if (!this._isUTC && keepLocalTime) {
@@ -1610,18 +2709,22 @@
if (this._tzm) {
this.utcOffset(this._tzm);
} else if (typeof this._i === 'string') {
- this.utcOffset(offsetFromString(this._i));
+ var tZone = offsetFromString(matchOffset, this._i);
+
+ if (tZone === 0) {
+ this.utcOffset(0, true);
+ } else {
+ this.utcOffset(offsetFromString(matchOffset, this._i));
+ }
}
return this;
}
function hasAlignedHourOffset (input) {
- if (!input) {
- input = 0;
- }
- else {
- input = local__createLocal(input).utcOffset();
+ if (!this.isValid()) {
+ return false;
}
+ input = input ? local__createLocal(input).utcOffset() : 0;
return (this.utcOffset() - input) % 60 === 0;
}
@@ -1634,31 +2737,45 @@
}
function isDaylightSavingTimeShifted () {
- if (this._a) {
- var other = this._isUTC ? create_utc__createUTC(this._a) : local__createLocal(this._a);
- return this.isValid() && compareArrays(this._a, other.toArray()) > 0;
+ if (!isUndefined(this._isDSTShifted)) {
+ return this._isDSTShifted;
}
- return false;
+ var c = {};
+
+ copyConfig(c, this);
+ c = prepareConfig(c);
+
+ if (c._a) {
+ var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a);
+ this._isDSTShifted = this.isValid() &&
+ compareArrays(c._a, other.toArray()) > 0;
+ } else {
+ this._isDSTShifted = false;
+ }
+
+ return this._isDSTShifted;
}
function isLocal () {
- return !this._isUTC;
+ return this.isValid() ? !this._isUTC : false;
}
function isUtcOffset () {
- return this._isUTC;
+ return this.isValid() ? this._isUTC : false;
}
function isUtc () {
- return this._isUTC && this._offset === 0;
+ return this.isValid() ? this._isUTC && this._offset === 0 : false;
}
- var aspNetRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/;
+ // ASP.NET json date format regex
+ var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/;
// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
- var create__isoRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;
+ // and further modified to allow for strings containing both week and day
+ var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;
function create__createDuration (input, key) {
var duration = input,
@@ -1685,22 +2802,22 @@
sign = (match[1] === '-') ? -1 : 1;
duration = {
y : 0,
- d : toInt(match[DATE]) * sign,
- h : toInt(match[HOUR]) * sign,
- m : toInt(match[MINUTE]) * sign,
- s : toInt(match[SECOND]) * sign,
- ms : toInt(match[MILLISECOND]) * sign
+ d : toInt(match[DATE]) * sign,
+ h : toInt(match[HOUR]) * sign,
+ m : toInt(match[MINUTE]) * sign,
+ s : toInt(match[SECOND]) * sign,
+ ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match
};
- } else if (!!(match = create__isoRegex.exec(input))) {
+ } else if (!!(match = isoRegex.exec(input))) {
sign = (match[1] === '-') ? -1 : 1;
duration = {
y : parseIso(match[2], sign),
M : parseIso(match[3], sign),
- d : parseIso(match[4], sign),
- h : parseIso(match[5], sign),
- m : parseIso(match[6], sign),
- s : parseIso(match[7], sign),
- w : parseIso(match[8], sign)
+ w : parseIso(match[4], sign),
+ d : parseIso(match[5], sign),
+ h : parseIso(match[6], sign),
+ m : parseIso(match[7], sign),
+ s : parseIso(match[8], sign)
};
} else if (duration == null) {// checks for null or undefined
duration = {};
@@ -1748,6 +2865,10 @@
function momentsDifference(base, other) {
var res;
+ if (!(base.isValid() && other.isValid())) {
+ return {milliseconds: 0, months: 0};
+ }
+
other = cloneWithOffset(other, base);
if (base.isBefore(other)) {
res = positiveMomentsDifference(base, other);
@@ -1760,12 +2881,14 @@
return res;
}
+ // TODO: remove 'name' arg after deprecation is removed
function createAdder(direction, name) {
return function (val, period) {
var dur, tmp;
//invert the arguments, but complain about it
if (period !== null && !isNaN(+period)) {
- deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).');
+ deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +
+ 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');
tmp = val; val = period; period = tmp;
}
@@ -1778,12 +2901,18 @@
function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) {
var milliseconds = duration._milliseconds,
- days = duration._days,
- months = duration._months;
+ days = absRound(duration._days),
+ months = absRound(duration._months);
+
+ if (!mom.isValid()) {
+ // No op
+ return;
+ }
+
updateOffset = updateOffset == null ? true : updateOffset;
if (milliseconds) {
- mom._d.setTime(+mom._d + milliseconds * isAdding);
+ mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
}
if (days) {
get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding);
@@ -1799,19 +2928,26 @@
var add_subtract__add = createAdder(1, 'add');
var add_subtract__subtract = createAdder(-1, 'subtract');
- function moment_calendar__calendar (time) {
- // We want to compare the start of today, vs this.
- // Getting start-of-today depends on whether we're local/utc/offset or not.
- var now = time || local__createLocal(),
- sod = cloneWithOffset(now, this).startOf('day'),
- diff = this.diff(sod, 'days', true),
- format = diff < -6 ? 'sameElse' :
+ function getCalendarFormat(myMoment, now) {
+ var diff = myMoment.diff(now, 'days', true);
+ return diff < -6 ? 'sameElse' :
diff < -1 ? 'lastWeek' :
diff < 0 ? 'lastDay' :
diff < 1 ? 'sameDay' :
diff < 2 ? 'nextDay' :
diff < 7 ? 'nextWeek' : 'sameElse';
- return this.format(this.localeData().calendar(format, this, local__createLocal(now)));
+ }
+
+ function moment_calendar__calendar (time, formats) {
+ // We want to compare the start of today, vs this.
+ // Getting start-of-today depends on whether we're local/utc/offset or not.
+ var now = time || local__createLocal(),
+ sod = cloneWithOffset(now, this).startOf('day'),
+ format = utils_hooks__hooks.calendarFormat(this, sod) || 'sameElse';
+
+ var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
+
+ return this.format(output || this.localeData().calendar(format, this, local__createLocal(now)));
}
function clone () {
@@ -1819,58 +2955,77 @@
}
function isAfter (input, units) {
- var inputMs;
- units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');
+ var localInput = isMoment(input) ? input : local__createLocal(input);
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
+ units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
if (units === 'millisecond') {
- input = isMoment(input) ? input : local__createLocal(input);
- return +this > +input;
+ return this.valueOf() > localInput.valueOf();
} else {
- inputMs = isMoment(input) ? +input : +local__createLocal(input);
- return inputMs < +this.clone().startOf(units);
+ return localInput.valueOf() < this.clone().startOf(units).valueOf();
}
}
function isBefore (input, units) {
- var inputMs;
- units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');
+ var localInput = isMoment(input) ? input : local__createLocal(input);
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
+ units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
if (units === 'millisecond') {
- input = isMoment(input) ? input : local__createLocal(input);
- return +this < +input;
+ return this.valueOf() < localInput.valueOf();
} else {
- inputMs = isMoment(input) ? +input : +local__createLocal(input);
- return +this.clone().endOf(units) < inputMs;
+ return this.clone().endOf(units).valueOf() < localInput.valueOf();
}
}
- function isBetween (from, to, units) {
- return this.isAfter(from, units) && this.isBefore(to, units);
+ function isBetween (from, to, units, inclusivity) {
+ inclusivity = inclusivity || '()';
+ return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&
+ (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));
}
function isSame (input, units) {
- var inputMs;
+ var localInput = isMoment(input) ? input : local__createLocal(input),
+ inputMs;
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
units = normalizeUnits(units || 'millisecond');
if (units === 'millisecond') {
- input = isMoment(input) ? input : local__createLocal(input);
- return +this === +input;
+ return this.valueOf() === localInput.valueOf();
} else {
- inputMs = +local__createLocal(input);
- return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units));
+ inputMs = localInput.valueOf();
+ return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
}
}
- function absFloor (number) {
- if (number < 0) {
- return Math.ceil(number);
- } else {
- return Math.floor(number);
- }
+ function isSameOrAfter (input, units) {
+ return this.isSame(input, units) || this.isAfter(input,units);
+ }
+
+ function isSameOrBefore (input, units) {
+ return this.isSame(input, units) || this.isBefore(input,units);
}
function diff (input, units, asFloat) {
- var that = cloneWithOffset(input, this),
- zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4,
+ var that,
+ zoneDelta,
delta, output;
+ if (!this.isValid()) {
+ return NaN;
+ }
+
+ that = cloneWithOffset(input, this);
+
+ if (!that.isValid()) {
+ return NaN;
+ }
+
+ zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
+
units = normalizeUnits(units);
if (units === 'year' || units === 'month' || units === 'quarter') {
@@ -1909,10 +3064,12 @@
adjust = (b - anchor) / (anchor2 - anchor);
}
- return -(wholeMonthDiff + adjust);
+ //check for negative zero, return zero if negative zero
+ return -(wholeMonthDiff + adjust) || 0;
}
utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
+ utils_hooks__hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
function toString () {
return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
@@ -1921,7 +3078,7 @@
function moment_format__toISOString () {
var m = this.clone().utc();
if (0 < m.year() && m.year() <= 9999) {
- if ('function' === typeof Date.prototype.toISOString) {
+ if (isFunction(Date.prototype.toISOString)) {
// native implementation is ~50x faster, use it when we can
return this.toDate().toISOString();
} else {
@@ -1933,15 +3090,21 @@
}
function moment_format__format (inputString) {
- var output = formatMoment(this, inputString || utils_hooks__hooks.defaultFormat);
+ if (!inputString) {
+ inputString = this.isUtc() ? utils_hooks__hooks.defaultFormatUtc : utils_hooks__hooks.defaultFormat;
+ }
+ var output = formatMoment(this, inputString);
return this.localeData().postformat(output);
}
function from (time, withoutSuffix) {
- if (!this.isValid()) {
+ if (this.isValid() &&
+ ((isMoment(time) && time.isValid()) ||
+ local__createLocal(time).isValid())) {
+ return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
+ } else {
return this.localeData().invalidDate();
}
- return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
}
function fromNow (withoutSuffix) {
@@ -1949,16 +3112,22 @@
}
function to (time, withoutSuffix) {
- if (!this.isValid()) {
+ if (this.isValid() &&
+ ((isMoment(time) && time.isValid()) ||
+ local__createLocal(time).isValid())) {
+ return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
+ } else {
return this.localeData().invalidDate();
}
- return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
}
function toNow (withoutSuffix) {
return this.to(local__createLocal(), withoutSuffix);
}
+ // If passed a locale key, it will set the locale for this
+ // instance. Otherwise, it will return the locale configuration
+ // variables for this instance.
function locale (key) {
var newLocaleData;
@@ -1993,26 +3162,27 @@
// the following switch intentionally omits break keywords
// to utilize falling through the cases.
switch (units) {
- case 'year':
- this.month(0);
- /* falls through */
- case 'quarter':
- case 'month':
- this.date(1);
- /* falls through */
- case 'week':
- case 'isoWeek':
- case 'day':
- this.hours(0);
- /* falls through */
- case 'hour':
- this.minutes(0);
- /* falls through */
- case 'minute':
- this.seconds(0);
- /* falls through */
- case 'second':
- this.milliseconds(0);
+ case 'year':
+ this.month(0);
+ /* falls through */
+ case 'quarter':
+ case 'month':
+ this.date(1);
+ /* falls through */
+ case 'week':
+ case 'isoWeek':
+ case 'day':
+ case 'date':
+ this.hours(0);
+ /* falls through */
+ case 'hour':
+ this.minutes(0);
+ /* falls through */
+ case 'minute':
+ this.seconds(0);
+ /* falls through */
+ case 'second':
+ this.milliseconds(0);
}
// weeks are a special case
@@ -2036,19 +3206,25 @@
if (units === undefined || units === 'millisecond') {
return this;
}
+
+ // 'date' is an alias for 'day', so it should be considered as such.
+ if (units === 'date') {
+ units = 'day';
+ }
+
return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');
}
function to_type__valueOf () {
- return +this._d - ((this._offset || 0) * 60000);
+ return this._d.valueOf() - ((this._offset || 0) * 60000);
}
function unix () {
- return Math.floor(+this / 1000);
+ return Math.floor(this.valueOf() / 1000);
}
function toDate () {
- return this._offset ? new Date(+this) : this._d;
+ return new Date(this.valueOf());
}
function toArray () {
@@ -2056,6 +3232,24 @@
return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
}
+ function toObject () {
+ var m = this;
+ return {
+ years: m.year(),
+ months: m.month(),
+ date: m.date(),
+ hours: m.hours(),
+ minutes: m.minutes(),
+ seconds: m.seconds(),
+ milliseconds: m.milliseconds()
+ };
+ }
+
+ function toJSON () {
+ // new Date(NaN).toJSON() === null
+ return this.isValid() ? this.toISOString() : null;
+ }
+
function moment_valid__isValid () {
return valid__isValid(this);
}
@@ -2068,6 +3262,18 @@
return getParsingFlags(this).overflow;
}
+ function creationData() {
+ return {
+ input: this._i,
+ format: this._f,
+ locale: this._locale,
+ isUTC: this._isUTC,
+ strict: this._strict
+ };
+ }
+
+ // FORMATTING
+
addFormatToken(0, ['gg', 2], 0, function () {
return this.weekYear() % 100;
});
@@ -2090,6 +3296,12 @@
addUnitAlias('weekYear', 'gg');
addUnitAlias('isoWeekYear', 'GG');
+ // PRIORITY
+
+ addUnitPriority('weekYear', 1);
+ addUnitPriority('isoWeekYear', 1);
+
+
// PARSING
addRegexToken('G', matchSigned);
@@ -2109,22 +3321,20 @@
week[token] = utils_hooks__hooks.parseTwoDigitYear(input);
});
- // HELPERS
-
- function weeksInYear(year, dow, doy) {
- return weekOfYear(local__createLocal([year, 11, 31 + dow - doy]), dow, doy).week;
- }
-
// MOMENTS
function getSetWeekYear (input) {
- var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year;
- return input == null ? year : this.add((input - year), 'y');
+ return getSetWeekYearHelper.call(this,
+ input,
+ this.week(),
+ this.weekday(),
+ this.localeData()._week.dow,
+ this.localeData()._week.doy);
}
function getSetISOWeekYear (input) {
- var year = weekOfYear(this, 1, 4).year;
- return input == null ? year : this.add((input - year), 'y');
+ return getSetWeekYearHelper.call(this,
+ input, this.isoWeek(), this.isoWeekday(), 1, 4);
}
function getISOWeeksInYear () {
@@ -2136,12 +3346,41 @@
return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
}
- addFormatToken('Q', 0, 0, 'quarter');
+ function getSetWeekYearHelper(input, week, weekday, dow, doy) {
+ var weeksTarget;
+ if (input == null) {
+ return weekOfYear(this, dow, doy).year;
+ } else {
+ weeksTarget = weeksInYear(input, dow, doy);
+ if (week > weeksTarget) {
+ week = weeksTarget;
+ }
+ return setWeekAll.call(this, input, week, weekday, dow, doy);
+ }
+ }
+
+ function setWeekAll(weekYear, week, weekday, dow, doy) {
+ var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
+ date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
+
+ this.year(date.getUTCFullYear());
+ this.month(date.getUTCMonth());
+ this.date(date.getUTCDate());
+ return this;
+ }
+
+ // FORMATTING
+
+ addFormatToken('Q', 0, 'Qo', 'quarter');
// ALIASES
addUnitAlias('quarter', 'Q');
+ // PRIORITY
+
+ addUnitPriority('quarter', 7);
+
// PARSING
addRegexToken('Q', match1);
@@ -2155,12 +3394,17 @@
return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
}
+ // FORMATTING
+
addFormatToken('D', ['DD', 2], 'Do', 'date');
// ALIASES
addUnitAlias('date', 'D');
+ // PRIOROITY
+ addUnitPriority('date', 9);
+
// PARSING
addRegexToken('D', match1to2);
@@ -2178,197 +3422,35 @@
var getSetDayOfMonth = makeGetSet('Date', true);
- addFormatToken('d', 0, 'do', 'day');
-
- addFormatToken('dd', 0, 0, function (format) {
- return this.localeData().weekdaysMin(this, format);
- });
-
- addFormatToken('ddd', 0, 0, function (format) {
- return this.localeData().weekdaysShort(this, format);
- });
-
- addFormatToken('dddd', 0, 0, function (format) {
- return this.localeData().weekdays(this, format);
- });
+ // FORMATTING
- addFormatToken('e', 0, 0, 'weekday');
- addFormatToken('E', 0, 0, 'isoWeekday');
+ addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
// ALIASES
- addUnitAlias('day', 'd');
- addUnitAlias('weekday', 'e');
- addUnitAlias('isoWeekday', 'E');
-
- // PARSING
+ addUnitAlias('dayOfYear', 'DDD');
- addRegexToken('d', match1to2);
- addRegexToken('e', match1to2);
- addRegexToken('E', match1to2);
- addRegexToken('dd', matchWord);
- addRegexToken('ddd', matchWord);
- addRegexToken('dddd', matchWord);
+ // PRIORITY
+ addUnitPriority('dayOfYear', 4);
- addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config) {
- var weekday = config._locale.weekdaysParse(input);
- // if we didn't get a weekday name, mark the date as invalid
- if (weekday != null) {
- week.d = weekday;
- } else {
- getParsingFlags(config).invalidWeekday = input;
- }
- });
+ // PARSING
- addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
- week[token] = toInt(input);
+ addRegexToken('DDD', match1to3);
+ addRegexToken('DDDD', match3);
+ addParseToken(['DDD', 'DDDD'], function (input, array, config) {
+ config._dayOfYear = toInt(input);
});
// HELPERS
- function parseWeekday(input, locale) {
- if (typeof input === 'string') {
- if (!isNaN(input)) {
- input = parseInt(input, 10);
- }
- else {
- input = locale.weekdaysParse(input);
- if (typeof input !== 'number') {
- return null;
- }
- }
- }
- return input;
- }
-
- // LOCALES
-
- var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
- function localeWeekdays (m) {
- return this._weekdays[m.day()];
- }
-
- var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
- function localeWeekdaysShort (m) {
- return this._weekdaysShort[m.day()];
- }
-
- var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
- function localeWeekdaysMin (m) {
- return this._weekdaysMin[m.day()];
- }
-
- function localeWeekdaysParse (weekdayName) {
- var i, mom, regex;
-
- if (!this._weekdaysParse) {
- this._weekdaysParse = [];
- }
-
- for (i = 0; i < 7; i++) {
- // make the regex if we don't have it already
- if (!this._weekdaysParse[i]) {
- mom = local__createLocal([2000, 1]).day(i);
- regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
- this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
- }
- // test the regex
- if (this._weekdaysParse[i].test(weekdayName)) {
- return i;
- }
- }
- }
-
// MOMENTS
- function getSetDayOfWeek (input) {
- var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
- if (input != null) {
- input = parseWeekday(input, this.localeData());
- return this.add(input - day, 'd');
- } else {
- return day;
- }
- }
-
- function getSetLocaleDayOfWeek (input) {
- var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
- return input == null ? weekday : this.add(input - weekday, 'd');
- }
-
- function getSetISODayOfWeek (input) {
- // behaves the same as moment#day except
- // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
- // as a setter, sunday should belong to the previous week.
- return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7);
- }
-
- addFormatToken('H', ['HH', 2], 0, 'hour');
- addFormatToken('h', ['hh', 2], 0, function () {
- return this.hours() % 12 || 12;
- });
-
- function meridiem (token, lowercase) {
- addFormatToken(token, 0, 0, function () {
- return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
- });
- }
-
- meridiem('a', true);
- meridiem('A', false);
-
- // ALIASES
-
- addUnitAlias('hour', 'h');
-
- // PARSING
-
- function matchMeridiem (isStrict, locale) {
- return locale._meridiemParse;
- }
-
- addRegexToken('a', matchMeridiem);
- addRegexToken('A', matchMeridiem);
- addRegexToken('H', match1to2);
- addRegexToken('h', match1to2);
- addRegexToken('HH', match1to2, match2);
- addRegexToken('hh', match1to2, match2);
-
- addParseToken(['H', 'HH'], HOUR);
- addParseToken(['a', 'A'], function (input, array, config) {
- config._isPm = config._locale.isPM(input);
- config._meridiem = input;
- });
- addParseToken(['h', 'hh'], function (input, array, config) {
- array[HOUR] = toInt(input);
- getParsingFlags(config).bigHour = true;
- });
-
- // LOCALES
-
- function localeIsPM (input) {
- // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
- // Using charAt should be more compatible.
- return ((input + '').toLowerCase().charAt(0) === 'p');
- }
-
- var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
- function localeMeridiem (hours, minutes, isLower) {
- if (hours > 11) {
- return isLower ? 'pm' : 'PM';
- } else {
- return isLower ? 'am' : 'AM';
- }
+ function getSetDayOfYear (input) {
+ var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
+ return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
}
-
- // MOMENTS
-
- // Setting the hour should keep the time, because the user explicitly
- // specified which hour he wants. So trying to maintain the same hour (in
- // a new timezone) makes sense. Adding/subtracting hours does not follow
- // this rule.
- var getSetHour = makeGetSet('Hours', true);
+ // FORMATTING
addFormatToken('m', ['mm', 2], 0, 'minute');
@@ -2376,6 +3458,10 @@
addUnitAlias('minute', 'm');
+ // PRIORITY
+
+ addUnitPriority('minute', 14);
+
// PARSING
addRegexToken('m', match1to2);
@@ -2386,12 +3472,18 @@
var getSetMinute = makeGetSet('Minutes', false);
+ // FORMATTING
+
addFormatToken('s', ['ss', 2], 0, 'second');
// ALIASES
addUnitAlias('second', 's');
+ // PRIORITY
+
+ addUnitPriority('second', 15);
+
// PARSING
addRegexToken('s', match1to2);
@@ -2402,6 +3494,8 @@
var getSetSecond = makeGetSet('Seconds', false);
+ // FORMATTING
+
addFormatToken('S', 0, 0, function () {
return ~~(this.millisecond() / 100);
});
@@ -2410,31 +3504,59 @@
return ~~(this.millisecond() / 10);
});
- function millisecond__milliseconds (token) {
- addFormatToken(0, [token, 3], 0, 'millisecond');
- }
+ addFormatToken(0, ['SSS', 3], 0, 'millisecond');
+ addFormatToken(0, ['SSSS', 4], 0, function () {
+ return this.millisecond() * 10;
+ });
+ addFormatToken(0, ['SSSSS', 5], 0, function () {
+ return this.millisecond() * 100;
+ });
+ addFormatToken(0, ['SSSSSS', 6], 0, function () {
+ return this.millisecond() * 1000;
+ });
+ addFormatToken(0, ['SSSSSSS', 7], 0, function () {
+ return this.millisecond() * 10000;
+ });
+ addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
+ return this.millisecond() * 100000;
+ });
+ addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
+ return this.millisecond() * 1000000;
+ });
- millisecond__milliseconds('SSS');
- millisecond__milliseconds('SSSS');
// ALIASES
addUnitAlias('millisecond', 'ms');
+ // PRIORITY
+
+ addUnitPriority('millisecond', 16);
+
// PARSING
addRegexToken('S', match1to3, match1);
addRegexToken('SS', match1to3, match2);
addRegexToken('SSS', match1to3, match3);
- addRegexToken('SSSS', matchUnsigned);
- addParseToken(['S', 'SS', 'SSS', 'SSSS'], function (input, array) {
+
+ var token;
+ for (token = 'SSSS'; token.length <= 9; token += 'S') {
+ addRegexToken(token, matchUnsigned);
+ }
+
+ function parseMs(input, array) {
array[MILLISECOND] = toInt(('0.' + input) * 1000);
- });
+ }
+ for (token = 'S'; token.length <= 9; token += 'S') {
+ addParseToken(token, parseMs);
+ }
// MOMENTS
var getSetMillisecond = makeGetSet('Milliseconds', false);
+ // FORMATTING
+
addFormatToken('z', 0, 0, 'zoneAbbr');
addFormatToken('zz', 0, 0, 'zoneName');
@@ -2450,39 +3572,43 @@
var momentPrototype__proto = Moment.prototype;
- momentPrototype__proto.add = add_subtract__add;
- momentPrototype__proto.calendar = moment_calendar__calendar;
- momentPrototype__proto.clone = clone;
- momentPrototype__proto.diff = diff;
- momentPrototype__proto.endOf = endOf;
- momentPrototype__proto.format = moment_format__format;
- momentPrototype__proto.from = from;
- momentPrototype__proto.fromNow = fromNow;
- momentPrototype__proto.to = to;
- momentPrototype__proto.toNow = toNow;
- momentPrototype__proto.get = getSet;
- momentPrototype__proto.invalidAt = invalidAt;
- momentPrototype__proto.isAfter = isAfter;
- momentPrototype__proto.isBefore = isBefore;
- momentPrototype__proto.isBetween = isBetween;
- momentPrototype__proto.isSame = isSame;
- momentPrototype__proto.isValid = moment_valid__isValid;
- momentPrototype__proto.lang = lang;
- momentPrototype__proto.locale = locale;
- momentPrototype__proto.localeData = localeData;
- momentPrototype__proto.max = prototypeMax;
- momentPrototype__proto.min = prototypeMin;
- momentPrototype__proto.parsingFlags = parsingFlags;
- momentPrototype__proto.set = getSet;
- momentPrototype__proto.startOf = startOf;
- momentPrototype__proto.subtract = add_subtract__subtract;
- momentPrototype__proto.toArray = toArray;
- momentPrototype__proto.toDate = toDate;
- momentPrototype__proto.toISOString = moment_format__toISOString;
- momentPrototype__proto.toJSON = moment_format__toISOString;
- momentPrototype__proto.toString = toString;
- momentPrototype__proto.unix = unix;
- momentPrototype__proto.valueOf = to_type__valueOf;
+ momentPrototype__proto.add = add_subtract__add;
+ momentPrototype__proto.calendar = moment_calendar__calendar;
+ momentPrototype__proto.clone = clone;
+ momentPrototype__proto.diff = diff;
+ momentPrototype__proto.endOf = endOf;
+ momentPrototype__proto.format = moment_format__format;
+ momentPrototype__proto.from = from;
+ momentPrototype__proto.fromNow = fromNow;
+ momentPrototype__proto.to = to;
+ momentPrototype__proto.toNow = toNow;
+ momentPrototype__proto.get = stringGet;
+ momentPrototype__proto.invalidAt = invalidAt;
+ momentPrototype__proto.isAfter = isAfter;
+ momentPrototype__proto.isBefore = isBefore;
+ momentPrototype__proto.isBetween = isBetween;
+ momentPrototype__proto.isSame = isSame;
+ momentPrototype__proto.isSameOrAfter = isSameOrAfter;
+ momentPrototype__proto.isSameOrBefore = isSameOrBefore;
+ momentPrototype__proto.isValid = moment_valid__isValid;
+ momentPrototype__proto.lang = lang;
+ momentPrototype__proto.locale = locale;
+ momentPrototype__proto.localeData = localeData;
+ momentPrototype__proto.max = prototypeMax;
+ momentPrototype__proto.min = prototypeMin;
+ momentPrototype__proto.parsingFlags = parsingFlags;
+ momentPrototype__proto.set = stringSet;
+ momentPrototype__proto.startOf = startOf;
+ momentPrototype__proto.subtract = add_subtract__subtract;
+ momentPrototype__proto.toArray = toArray;
+ momentPrototype__proto.toObject = toObject;
+ momentPrototype__proto.toDate = toDate;
+ momentPrototype__proto.toISOString = moment_format__toISOString;
+ momentPrototype__proto.toJSON = toJSON;
+ momentPrototype__proto.toString = toString;
+ momentPrototype__proto.unix = unix;
+ momentPrototype__proto.valueOf = to_type__valueOf;
+ momentPrototype__proto.creationData = creationData;
// Year
momentPrototype__proto.year = getSetYear;
@@ -2531,7 +3657,6 @@
momentPrototype__proto.parseZone = setOffsetToParsedOffset;
momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset;
momentPrototype__proto.isDST = isDaylightSavingTime;
- momentPrototype__proto.isDSTShifted = isDaylightSavingTimeShifted;
momentPrototype__proto.isLocal = isLocal;
momentPrototype__proto.isUtcOffset = isUtcOffset;
momentPrototype__proto.isUtc = isUtc;
@@ -2545,7 +3670,8 @@
momentPrototype__proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
momentPrototype__proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);
- momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779', getSetZone);
+ momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);
+ momentPrototype__proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);
var momentPrototype = momentPrototype__proto;
@@ -2557,143 +3683,46 @@
return local__createLocal.apply(null, arguments).parseZone();
}
- var defaultCalendar = {
- sameDay : '[Today at] LT',
- nextDay : '[Tomorrow at] LT',
- nextWeek : 'dddd [at] LT',
- lastDay : '[Yesterday at] LT',
- lastWeek : '[Last] dddd [at] LT',
- sameElse : 'L'
- };
-
- function locale_calendar__calendar (key, mom, now) {
- var output = this._calendar[key];
- return typeof output === 'function' ? output.call(mom, now) : output;
- }
-
- var defaultLongDateFormat = {
- LTS : 'h:mm:ss A',
- LT : 'h:mm A',
- L : 'MM/DD/YYYY',
- LL : 'MMMM D, YYYY',
- LLL : 'MMMM D, YYYY LT',
- LLLL : 'dddd, MMMM D, YYYY LT'
- };
-
- function longDateFormat (key) {
- var output = this._longDateFormat[key];
- if (!output && this._longDateFormat[key.toUpperCase()]) {
- output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) {
- return val.slice(1);
- });
- this._longDateFormat[key] = output;
- }
- return output;
- }
-
- var defaultInvalidDate = 'Invalid date';
-
- function invalidDate () {
- return this._invalidDate;
- }
-
- var defaultOrdinal = '%d';
- var defaultOrdinalParse = /\d{1,2}/;
-
- function ordinal (number) {
- return this._ordinal.replace('%d', number);
- }
-
function preParsePostFormat (string) {
return string;
}
- var defaultRelativeTime = {
- future : 'in %s',
- past : '%s ago',
- s : 'a few seconds',
- m : 'a minute',
- mm : '%d minutes',
- h : 'an hour',
- hh : '%d hours',
- d : 'a day',
- dd : '%d days',
- M : 'a month',
- MM : '%d months',
- y : 'a year',
- yy : '%d years'
- };
-
- function relative__relativeTime (number, withoutSuffix, string, isFuture) {
- var output = this._relativeTime[string];
- return (typeof output === 'function') ?
- output(number, withoutSuffix, string, isFuture) :
- output.replace(/%d/i, number);
- }
-
- function pastFuture (diff, output) {
- var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
- return typeof format === 'function' ? format(output) : format.replace(/%s/i, output);
- }
-
- function locale_set__set (config) {
- var prop, i;
- for (i in config) {
- prop = config[i];
- if (typeof prop === 'function') {
- this[i] = prop;
- } else {
- this['_' + i] = prop;
- }
- }
- // Lenient ordinal parsing accepts just a number in addition to
- // number + (possibly) stuff coming from _ordinalParseLenient.
- this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source);
- }
-
var prototype__proto = Locale.prototype;
- prototype__proto._calendar = defaultCalendar;
prototype__proto.calendar = locale_calendar__calendar;
- prototype__proto._longDateFormat = defaultLongDateFormat;
prototype__proto.longDateFormat = longDateFormat;
- prototype__proto._invalidDate = defaultInvalidDate;
prototype__proto.invalidDate = invalidDate;
- prototype__proto._ordinal = defaultOrdinal;
prototype__proto.ordinal = ordinal;
- prototype__proto._ordinalParse = defaultOrdinalParse;
prototype__proto.preparse = preParsePostFormat;
prototype__proto.postformat = preParsePostFormat;
- prototype__proto._relativeTime = defaultRelativeTime;
prototype__proto.relativeTime = relative__relativeTime;
prototype__proto.pastFuture = pastFuture;
prototype__proto.set = locale_set__set;
// Month
- prototype__proto.months = localeMonths;
- prototype__proto._months = defaultLocaleMonths;
- prototype__proto.monthsShort = localeMonthsShort;
- prototype__proto._monthsShort = defaultLocaleMonthsShort;
- prototype__proto.monthsParse = localeMonthsParse;
+ prototype__proto.months = localeMonths;
+ prototype__proto.monthsShort = localeMonthsShort;
+ prototype__proto.monthsParse = localeMonthsParse;
+ prototype__proto.monthsRegex = units_month__monthsRegex;
+ prototype__proto.monthsShortRegex = monthsShortRegex;
// Week
prototype__proto.week = localeWeek;
- prototype__proto._week = defaultLocaleWeek;
prototype__proto.firstDayOfYear = localeFirstDayOfYear;
prototype__proto.firstDayOfWeek = localeFirstDayOfWeek;
// Day of Week
prototype__proto.weekdays = localeWeekdays;
- prototype__proto._weekdays = defaultLocaleWeekdays;
prototype__proto.weekdaysMin = localeWeekdaysMin;
- prototype__proto._weekdaysMin = defaultLocaleWeekdaysMin;
prototype__proto.weekdaysShort = localeWeekdaysShort;
- prototype__proto._weekdaysShort = defaultLocaleWeekdaysShort;
prototype__proto.weekdaysParse = localeWeekdaysParse;
+ prototype__proto.weekdaysRegex = weekdaysRegex;
+ prototype__proto.weekdaysShortRegex = weekdaysShortRegex;
+ prototype__proto.weekdaysMinRegex = weekdaysMinRegex;
+
// Hours
prototype__proto.isPM = localeIsPM;
- prototype__proto._meridiemParse = defaultLocaleMeridiemParse;
prototype__proto.meridiem = localeMeridiem;
function lists__get (format, index, field, setter) {
@@ -2702,7 +3731,7 @@
return locale[field](utc, format);
}
- function list (format, index, field, count, setter) {
+ function listMonthsImpl (format, index, field) {
if (typeof format === 'number') {
index = format;
format = undefined;
@@ -2711,35 +3740,79 @@
format = format || '';
if (index != null) {
- return lists__get(format, index, field, setter);
+ return lists__get(format, index, field, 'month');
+ }
+
+ var i;
+ var out = [];
+ for (i = 0; i < 12; i++) {
+ out[i] = lists__get(format, i, field, 'month');
+ }
+ return out;
+ }
+
+ // ()
+ // (5)
+ // (fmt, 5)
+ // (fmt)
+ // (true)
+ // (true, 5)
+ // (true, fmt, 5)
+ // (true, fmt)
+ function listWeekdaysImpl (localeSorted, format, index, field) {
+ if (typeof localeSorted === 'boolean') {
+ if (typeof format === 'number') {
+ index = format;
+ format = undefined;
+ }
+
+ format = format || '';
+ } else {
+ format = localeSorted;
+ index = format;
+ localeSorted = false;
+
+ if (typeof format === 'number') {
+ index = format;
+ format = undefined;
+ }
+
+ format = format || '';
+ }
+
+ var locale = locale_locales__getLocale(),
+ shift = localeSorted ? locale._week.dow : 0;
+
+ if (index != null) {
+ return lists__get(format, (index + shift) % 7, field, 'day');
}
var i;
var out = [];
- for (i = 0; i < count; i++) {
- out[i] = lists__get(format, i, field, setter);
+ for (i = 0; i < 7; i++) {
+ out[i] = lists__get(format, (i + shift) % 7, field, 'day');
}
return out;
}
function lists__listMonths (format, index) {
- return list(format, index, 'months', 12, 'month');
+ return listMonthsImpl(format, index, 'months');
}
function lists__listMonthsShort (format, index) {
- return list(format, index, 'monthsShort', 12, 'month');
+ return listMonthsImpl(format, index, 'monthsShort');
}
- function lists__listWeekdays (format, index) {
- return list(format, index, 'weekdays', 7, 'day');
+ function lists__listWeekdays (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
}
- function lists__listWeekdaysShort (format, index) {
- return list(format, index, 'weekdaysShort', 7, 'day');
+ function lists__listWeekdaysShort (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
}
- function lists__listWeekdaysMin (format, index) {
- return list(format, index, 'weekdaysMin', 7, 'day');
+ function lists__listWeekdaysMin (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
}
locale_locales__getSetGlobalLocale('en', {
@@ -2797,12 +3870,29 @@
return duration_add_subtract__addSubtract(this, input, value, -1);
}
+ function absCeil (number) {
+ if (number < 0) {
+ return Math.floor(number);
+ } else {
+ return Math.ceil(number);
+ }
+ }
+
function bubble () {
var milliseconds = this._milliseconds;
var days = this._days;
var months = this._months;
var data = this._data;
- var seconds, minutes, hours, years = 0;
+ var seconds, minutes, hours, years, monthsFromDays;
+
+ // if we have a mix of positive and negative values, bubble down first
+ // check: https://github.com/moment/moment/issues/2166
+ if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||
+ (milliseconds <= 0 && days <= 0 && months <= 0))) {
+ milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
+ days = 0;
+ months = 0;
+ }
// The following code bubbles up values, see the tests for
// examples of what that means.
@@ -2819,17 +3909,13 @@
days += absFloor(hours / 24);
- // Accurately convert days to years, assume start from year 0.
- years = absFloor(daysToYears(days));
- days -= absFloor(yearsToDays(years));
-
- // 30 days to a month
- // TODO (iskren): Use anchor date (like 1st Jan) to compute this.
- months += absFloor(days / 30);
- days %= 30;
+ // convert days to months
+ monthsFromDays = absFloor(daysToMonths(days));
+ months += monthsFromDays;
+ days -= absCeil(monthsToDays(monthsFromDays));
// 12 months -> 1 year
- years += absFloor(months / 12);
+ years = absFloor(months / 12);
months %= 12;
data.days = days;
@@ -2839,15 +3925,15 @@
return this;
}
- function daysToYears (days) {
+ function daysToMonths (days) {
// 400 years have 146097 days (taking into account leap year rules)
- return days * 400 / 146097;
+ // 400 years have 12 months === 4800
+ return days * 4800 / 146097;
}
- function yearsToDays (years) {
- // years * 365 + absFloor(years / 4) -
- // absFloor(years / 100) + absFloor(years / 400);
- return years * 146097 / 400;
+ function monthsToDays (months) {
+ // the reverse of daysToMonths
+ return months * 146097 / 4800;
}
function as (units) {
@@ -2859,11 +3945,11 @@
if (units === 'month' || units === 'year') {
days = this._days + milliseconds / 864e5;
- months = this._months + daysToYears(days) * 12;
+ months = this._months + daysToMonths(days);
return units === 'month' ? months : months / 12;
} else {
// handle milliseconds separately because of floating point math errors (issue #1867)
- days = this._days + Math.round(yearsToDays(this._months / 12));
+ days = this._days + Math.round(monthsToDays(this._months));
switch (units) {
case 'week' : return days / 7 + milliseconds / 6048e5;
case 'day' : return days + milliseconds / 864e5;
@@ -2913,7 +3999,7 @@
};
}
- var duration_get__milliseconds = makeGetter('milliseconds');
+ var milliseconds = makeGetter('milliseconds');
var seconds = makeGetter('seconds');
var minutes = makeGetter('minutes');
var hours = makeGetter('hours');
@@ -2949,15 +4035,15 @@
var years = round(duration.as('y'));
var a = seconds < thresholds.s && ['s', seconds] ||
- minutes === 1 && ['m'] ||
+ minutes <= 1 && ['m'] ||
minutes < thresholds.m && ['mm', minutes] ||
- hours === 1 && ['h'] ||
+ hours <= 1 && ['h'] ||
hours < thresholds.h && ['hh', hours] ||
- days === 1 && ['d'] ||
+ days <= 1 && ['d'] ||
days < thresholds.d && ['dd', days] ||
- months === 1 && ['M'] ||
+ months <= 1 && ['M'] ||
months < thresholds.M && ['MM', months] ||
- years === 1 && ['y'] || ['yy', years];
+ years <= 1 && ['y'] || ['yy', years];
a[2] = withoutSuffix;
a[3] = +posNegDuration > 0;
@@ -2965,6 +4051,18 @@
return substituteTimeAgo.apply(null, a);
}
+ // This function allows you to set the rounding function for relative time strings
+ function duration_humanize__getSetRelativeTimeRounding (roundingFunction) {
+ if (roundingFunction === undefined) {
+ return round;
+ }
+ if (typeof(roundingFunction) === 'function') {
+ round = roundingFunction;
+ return true;
+ }
+ return false;
+ }
+
// This function allows you to set a threshold for relative time strings
function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) {
if (thresholds[threshold] === undefined) {
@@ -2991,13 +4089,36 @@
var iso_string__abs = Math.abs;
function iso_string__toISOString() {
+ // for ISO strings we do not use the normal bubbling rules:
+ // * milliseconds bubble up until they become hours
+ // * days do not bubble at all
+ // * months bubble up until they become years
+ // This is because there is no context-free conversion between hours and days
+ // (think of clock changes)
+ // and also not between days and months (28-31 days per month)
+ var seconds = iso_string__abs(this._milliseconds) / 1000;
+ var days = iso_string__abs(this._days);
+ var months = iso_string__abs(this._months);
+ var minutes, hours, years;
+
+ // 3600 seconds -> 60 minutes -> 1 hour
+ minutes = absFloor(seconds / 60);
+ hours = absFloor(minutes / 60);
+ seconds %= 60;
+ minutes %= 60;
+
+ // 12 months -> 1 year
+ years = absFloor(months / 12);
+ months %= 12;
+
+
// inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
- var Y = iso_string__abs(this.years());
- var M = iso_string__abs(this.months());
- var D = iso_string__abs(this.days());
- var h = iso_string__abs(this.hours());
- var m = iso_string__abs(this.minutes());
- var s = iso_string__abs(this.seconds() + this.milliseconds() / 1000);
+ var Y = years;
+ var M = months;
+ var D = days;
+ var h = hours;
+ var m = minutes;
+ var s = seconds;
var total = this.asSeconds();
if (!total) {
@@ -3034,7 +4155,7 @@
duration_prototype__proto.valueOf = duration_as__valueOf;
duration_prototype__proto._bubble = bubble;
duration_prototype__proto.get = duration_get__get;
- duration_prototype__proto.milliseconds = duration_get__milliseconds;
+ duration_prototype__proto.milliseconds = milliseconds;
duration_prototype__proto.seconds = seconds;
duration_prototype__proto.minutes = minutes;
duration_prototype__proto.hours = hours;
@@ -3055,6 +4176,8 @@
// Side effect imports
+ // FORMATTING
+
addFormatToken('X', 0, 0, 'unix');
addFormatToken('x', 0, 0, 'valueOf');
@@ -3073,19 +4196,15 @@
;
- //! moment.js
- //! version : 2.10.3
- //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
- //! license : MIT
- //! momentjs.com
- utils_hooks__hooks.version = '2.10.3';
+ utils_hooks__hooks.version = '2.15.0';
setHookCallback(local__createLocal);
utils_hooks__hooks.fn = momentPrototype;
utils_hooks__hooks.min = min;
utils_hooks__hooks.max = max;
+ utils_hooks__hooks.now = now;
utils_hooks__hooks.utc = create_utc__createUTC;
utils_hooks__hooks.unix = moment_moment__createUnix;
utils_hooks__hooks.months = lists__listMonths;
@@ -3101,19 +4220,21 @@
utils_hooks__hooks.monthsShort = lists__listMonthsShort;
utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin;
utils_hooks__hooks.defineLocale = defineLocale;
+ utils_hooks__hooks.updateLocale = updateLocale;
+ utils_hooks__hooks.locales = locale_locales__listLocales;
utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort;
utils_hooks__hooks.normalizeUnits = normalizeUnits;
+ utils_hooks__hooks.relativeTimeRounding = duration_humanize__getSetRelativeTimeRounding;
utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold;
+ utils_hooks__hooks.calendarFormat = getCalendarFormat;
+ utils_hooks__hooks.prototype = momentPrototype;
- var _moment__default = utils_hooks__hooks;
+ var moment__default = utils_hooks__hooks;
- //! moment.js locale configuration
- //! locale : afrikaans (af)
- //! author : Werner Mollentze : https://github.com/wernerm
- var af = _moment__default.defineLocale('af', {
+ var af = moment__default.defineLocale('af', {
months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),
- monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
+ monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),
weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
@@ -3130,11 +4251,11 @@
},
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
},
calendar : {
sameDay : '[Vandag om] LT',
@@ -3169,24 +4290,129 @@
}
});
- //! moment.js locale configuration
- //! locale : Moroccan Arabic (ar-ma)
- //! author : ElFadili Yassine : https://github.com/ElFadiliY
- //! author : Abdel Said : https://github.com/abdelsaid
- var ar_ma = _moment__default.defineLocale('ar-ma', {
+ var ar_ly__symbolMap = {
+ '1': '1',
+ '2': '2',
+ '3': '3',
+ '4': '4',
+ '5': '5',
+ '6': '6',
+ '7': '7',
+ '8': '8',
+ '9': '9',
+ '0': '0'
+ }, ar_ly__pluralForm = function (n) {
+ return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
+ }, ar_ly__plurals = {
+ s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
+ m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
+ h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
+ d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
+ M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
+ y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
+ }, ar_ly__pluralize = function (u) {
+ return function (number, withoutSuffix, string, isFuture) {
+ var f = ar_ly__pluralForm(number),
+ str = ar_ly__plurals[u][ar_ly__pluralForm(number)];
+ if (f === 2) {
+ str = str[withoutSuffix ? 0 : 1];
+ }
+ return str.replace(/%d/i, number);
+ };
+ }, ar_ly__months = [
+ 'يناير',
+ 'فبراير',
+ 'مارس',
+ 'أبريل',
+ 'مايو',
+ 'يونيو',
+ 'يوليو',
+ 'أغسطس',
+ 'سبتمبر',
+ 'أكتوبر',
+ 'نوفمبر',
+ 'ديسمبر'
+ ];
+
+ var ar_ly = moment__default.defineLocale('ar-ly', {
+ months : ar_ly__months,
+ monthsShort : ar_ly__months,
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'D/\u200FM/\u200FYYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ص|م/,
+ isPM : function (input) {
+ return 'م' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ص';
+ } else {
+ return 'م';
+ }
+ },
+ calendar : {
+ sameDay: '[اليوم عند الساعة] LT',
+ nextDay: '[غدًا عند الساعة] LT',
+ nextWeek: 'dddd [عند الساعة] LT',
+ lastDay: '[أمس عند الساعة] LT',
+ lastWeek: 'dddd [عند الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'بعد %s',
+ past : 'منذ %s',
+ s : ar_ly__pluralize('s'),
+ m : ar_ly__pluralize('m'),
+ mm : ar_ly__pluralize('m'),
+ h : ar_ly__pluralize('h'),
+ hh : ar_ly__pluralize('h'),
+ d : ar_ly__pluralize('d'),
+ dd : ar_ly__pluralize('d'),
+ M : ar_ly__pluralize('M'),
+ MM : ar_ly__pluralize('M'),
+ y : ar_ly__pluralize('y'),
+ yy : ar_ly__pluralize('y')
+ },
+ preparse: function (string) {
+ return string.replace(/\u200f/g, '').replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return ar_ly__symbolMap[match];
+ }).replace(/,/g, '،');
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+ });
+
+
+ var ar_ma = moment__default.defineLocale('ar-ma', {
months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[اليوم على الساعة] LT',
@@ -3217,9 +4443,6 @@
}
});
- //! moment.js locale configuration
- //! locale : Arabic Saudi Arabia (ar-sa)
- //! author : Suhail Alkowaileet : https://github.com/xsoh
var ar_sa__symbolMap = {
'1': '١',
@@ -3245,19 +4468,20 @@
'٠': '0'
};
- var ar_sa = _moment__default.defineLocale('ar-sa', {
+ var ar_sa = moment__default.defineLocale('ar-sa', {
months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
meridiemParse: /ص|م/,
isPM : function (input) {
@@ -3309,22 +4533,21 @@
}
});
- //! moment.js locale configuration
- //! locale : Tunisian Arabic (ar-tn)
- var ar_tn = _moment__default.defineLocale('ar-tn', {
+ var ar_tn = moment__default.defineLocale('ar-tn', {
months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
longDateFormat: {
LT: 'HH:mm',
- LTS: 'LT:ss',
+ LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
- LLL: 'D MMMM YYYY LT',
- LLLL: 'dddd D MMMM YYYY LT'
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd D MMMM YYYY HH:mm'
},
calendar: {
sameDay: '[اليوم على الساعة] LT',
@@ -3355,11 +4578,6 @@
}
});
- //! moment.js locale configuration
- //! Locale: Arabic (ar)
- //! Author: Abdel Said: https://github.com/abdelsaid
- //! Changes in months, weekdays: Ahmed Elkhatib
- //! Native plural forms: forabi https://github.com/forabi
var ar__symbolMap = {
'1': '١',
@@ -3383,19 +4601,19 @@
'٨': '8',
'٩': '9',
'٠': '0'
- }, pluralForm = function (n) {
+ }, ar__pluralForm = function (n) {
return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
- }, plurals = {
+ }, ar__plurals = {
s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
- }, pluralize = function (u) {
+ }, ar__pluralize = function (u) {
return function (number, withoutSuffix, string, isFuture) {
- var f = pluralForm(number),
- str = plurals[u][pluralForm(number)];
+ var f = ar__pluralForm(number),
+ str = ar__plurals[u][ar__pluralForm(number)];
if (f === 2) {
str = str[withoutSuffix ? 0 : 1];
}
@@ -3416,19 +4634,20 @@
'كانون الأول ديسمبر'
];
- var ar = _moment__default.defineLocale('ar', {
+ var ar = moment__default.defineLocale('ar', {
months : ar__months,
monthsShort : ar__months,
weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
LTS : 'HH:mm:ss',
L : 'D/\u200FM/\u200FYYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
meridiemParse: /ص|م/,
isPM : function (input) {
@@ -3452,17 +4671,17 @@
relativeTime : {
future : 'بعد %s',
past : 'منذ %s',
- s : pluralize('s'),
- m : pluralize('m'),
- mm : pluralize('m'),
- h : pluralize('h'),
- hh : pluralize('h'),
- d : pluralize('d'),
- dd : pluralize('d'),
- M : pluralize('M'),
- MM : pluralize('M'),
- y : pluralize('y'),
- yy : pluralize('y')
+ s : ar__pluralize('s'),
+ m : ar__pluralize('m'),
+ mm : ar__pluralize('m'),
+ h : ar__pluralize('h'),
+ hh : ar__pluralize('h'),
+ d : ar__pluralize('d'),
+ dd : ar__pluralize('d'),
+ M : ar__pluralize('M'),
+ MM : ar__pluralize('M'),
+ y : ar__pluralize('y'),
+ yy : ar__pluralize('y')
},
preparse: function (string) {
return string.replace(/\u200f/g, '').replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
@@ -3480,9 +4699,6 @@
}
});
- //! moment.js locale configuration
- //! locale : azerbaijani (az)
- //! author : topchiyev : https://github.com/topchiyev
var az__suffixes = {
1: '-inci',
@@ -3505,19 +4721,20 @@
90: '-ıncı'
};
- var az = _moment__default.defineLocale('az', {
+ var az = moment__default.defineLocale('az', {
months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),
monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),
weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
},
calendar : {
sameDay : '[bugün saat] LT',
@@ -3573,11 +4790,6 @@
}
});
- //! moment.js locale configuration
- //! locale : belarusian (be)
- //! author : Dmitry Demidov : https://github.com/demidov91
- //! author: Praleska: http://praleska.pro/
- //! Author : Menelion Elensúle : https://github.com/Oire
function be__plural(word, num) {
var forms = word.split('_');
@@ -3601,40 +4813,27 @@
return number + ' ' + be__plural(format[key], +number);
}
}
- function be__monthsCaseReplace(m, format) {
- var months = {
- 'nominative': 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_'),
- 'accusative': 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_')
- },
- nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
- 'accusative' :
- 'nominative';
- return months[nounCase][m.month()];
- }
- function be__weekdaysCaseReplace(m, format) {
- var weekdays = {
- 'nominative': 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
- 'accusative': 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_')
- },
- nounCase = (/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/).test(format) ?
- 'accusative' :
- 'nominative';
- return weekdays[nounCase][m.day()];
- }
- var be = _moment__default.defineLocale('be', {
- months : be__monthsCaseReplace,
+ var be = moment__default.defineLocale('be', {
+ months : {
+ format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),
+ standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')
+ },
monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),
- weekdays : be__weekdaysCaseReplace,
+ weekdays : {
+ format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),
+ standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
+ isFormat: /\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/
+ },
weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY г.',
- LLL : 'D MMMM YYYY г., LT',
- LLLL : 'dddd, D MMMM YYYY г., LT'
+ LLL : 'D MMMM YYYY г., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY г., HH:mm'
},
calendar : {
sameDay: '[Сёння ў] LT',
@@ -3645,15 +4844,15 @@
},
lastWeek: function () {
switch (this.day()) {
- case 0:
- case 3:
- case 5:
- case 6:
- return '[У мінулую] dddd [ў] LT';
- case 1:
- case 2:
- case 4:
- return '[У мінулы] dddd [ў] LT';
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return '[У мінулую] dddd [ў] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[У мінулы] dddd [ў] LT';
}
},
sameElse: 'L'
@@ -3691,16 +4890,16 @@
ordinalParse: /\d{1,2}-(і|ы|га)/,
ordinal: function (number, period) {
switch (period) {
- case 'M':
- case 'd':
- case 'DDD':
- case 'w':
- case 'W':
- return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';
- case 'D':
- return number + '-га';
- default:
- return number;
+ case 'M':
+ case 'd':
+ case 'DDD':
+ case 'w':
+ case 'W':
+ return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';
+ case 'D':
+ return number + '-га';
+ default:
+ return number;
}
},
week : {
@@ -3709,11 +4908,8 @@
}
});
- //! moment.js locale configuration
- //! locale : bulgarian (bg)
- //! author : Krasen Borisov : https://github.com/kraz
- var bg = _moment__default.defineLocale('bg', {
+ var bg = moment__default.defineLocale('bg', {
months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),
monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),
@@ -3721,11 +4917,11 @@
weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'D.MM.YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd, D MMMM YYYY H:mm'
},
calendar : {
sameDay : '[Днес в] LT',
@@ -3734,15 +4930,15 @@
lastDay : '[Вчера в] LT',
lastWeek : function () {
switch (this.day()) {
- case 0:
- case 3:
- case 6:
- return '[В изминалата] dddd [в] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[В изминалия] dddd [в] LT';
+ case 0:
+ case 3:
+ case 6:
+ return '[В изминалата] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[В изминалия] dddd [в] LT';
}
},
sameElse : 'L'
@@ -3788,9 +4984,6 @@
}
});
- //! moment.js locale configuration
- //! locale : Bengali (bn)
- //! author : Kaushik Gandhi : https://github.com/kaushikgandhi
var bn__symbolMap = {
'1': '১',
@@ -3817,19 +5010,19 @@
'০': '0'
};
- var bn = _moment__default.defineLocale('bn', {
- months : 'জানুয়ারী_ফেবুয়ারী_মার্চ_এপ্রিল_মে_জুন_জুলাই_অগাস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
- monthsShort : 'জানু_ফেব_মার্চ_এপর_মে_জুন_জুল_অগ_সেপ্ট_অক্টো_নভ_ডিসেম্'.split('_'),
- weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পত্তিবার_শুক্রুবার_শনিবার'.split('_'),
- weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পত্তি_শুক্রু_শনি'.split('_'),
- weekdaysMin : 'রব_সম_মঙ্গ_বু_ব্রিহ_শু_শনি'.split('_'),
+ var bn = moment__default.defineLocale('bn', {
+ months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
+ monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),
+ weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),
+ weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
+ weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),
longDateFormat : {
LT : 'A h:mm সময়',
LTS : 'A h:mm:ss সময়',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY, LT',
- LLLL : 'dddd, D MMMM YYYY, LT'
+ LLL : 'D MMMM YYYY, A h:mm সময়',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'
},
calendar : {
sameDay : '[আজ] LT',
@@ -3842,7 +5035,7 @@
relativeTime : {
future : '%s পরে',
past : '%s আগে',
- s : 'কএক সেকেন্ড',
+ s : 'কয়েক সেকেন্ড',
m : 'এক মিনিট',
mm : '%d মিনিট',
h : 'এক ঘন্টা',
@@ -3864,22 +5057,28 @@
return bn__symbolMap[match];
});
},
- meridiemParse: /রাত|শকাল|দুপুর|বিকেল|রাত/,
- isPM: function (input) {
- return /^(দুপুর|বিকেল|রাত)$/.test(input);
+ meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'রাত' && hour >= 4) ||
+ (meridiem === 'দুপুর' && hour < 5) ||
+ meridiem === 'বিকাল') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
},
- //Bengali is a vast language its spoken
- //in different forms in various parts of the world.
- //I have just generalized with most common one used
meridiem : function (hour, minute, isLower) {
if (hour < 4) {
return 'রাত';
} else if (hour < 10) {
- return 'শকাল';
+ return 'সকাল';
} else if (hour < 17) {
return 'দুপুর';
} else if (hour < 20) {
- return 'বিকেল';
+ return 'বিকাল';
} else {
return 'রাত';
}
@@ -3890,9 +5089,6 @@
}
});
- //! moment.js locale configuration
- //! locale : tibetan (bo)
- //! author : Thupten N. Chakrishar : https://github.com/vajradog
var bo__symbolMap = {
'1': '༡',
@@ -3919,7 +5115,7 @@
'༠': '0'
};
- var bo = _moment__default.defineLocale('bo', {
+ var bo = moment__default.defineLocale('bo', {
months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),
@@ -3927,11 +5123,11 @@
weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
longDateFormat : {
LT : 'A h:mm',
- LTS : 'LT:ss',
+ LTS : 'A h:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY, LT',
- LLLL : 'dddd, D MMMM YYYY, LT'
+ LLL : 'D MMMM YYYY, A h:mm',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm'
},
calendar : {
sameDay : '[དི་རིང] LT',
@@ -3967,8 +5163,17 @@
});
},
meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,
- isPM: function (input) {
- return /^(ཉིན་གུང|དགོང་དག|མཚན་མོ)$/.test(input);
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'མཚན་མོ' && hour >= 4) ||
+ (meridiem === 'ཉིན་གུང' && hour < 5) ||
+ meridiem === 'དགོང་དག') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
},
meridiem : function (hour, minute, isLower) {
if (hour < 4) {
@@ -3989,9 +5194,6 @@
}
});
- //! moment.js locale configuration
- //! locale : breton (br)
- //! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
function relativeTimeWithMutation(number, withoutSuffix, key) {
var format = {
@@ -4003,14 +5205,14 @@
}
function specialMutationForYears(number) {
switch (lastNumber(number)) {
- case 1:
- case 3:
- case 4:
- case 5:
- case 9:
- return number + ' bloaz';
- default:
- return number + ' vloaz';
+ case 1:
+ case 3:
+ case 4:
+ case 5:
+ case 9:
+ return number + ' bloaz';
+ default:
+ return number + ' vloaz';
}
}
function lastNumber(number) {
@@ -4037,19 +5239,20 @@
return mutationTable[text.charAt(0)] + text.substring(1);
}
- var br = _moment__default.defineLocale('br', {
+ var br = moment__default.defineLocale('br', {
months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),
monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'),
weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'h[e]mm A',
LTS : 'h[e]mm:ss A',
L : 'DD/MM/YYYY',
LL : 'D [a viz] MMMM YYYY',
- LLL : 'D [a viz] MMMM YYYY LT',
- LLLL : 'dddd, D [a viz] MMMM YYYY LT'
+ LLL : 'D [a viz] MMMM YYYY h[e]mm A',
+ LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'
},
calendar : {
sameDay : '[Hiziv da] LT',
@@ -4085,109 +5288,107 @@
}
});
- //! moment.js locale configuration
- //! locale : bosnian (bs)
- //! author : Nedim Cholich : https://github.com/frontyard
- //! based on (hr) translation by Bojan Marković
function bs__translate(number, withoutSuffix, key) {
var result = number + ' ';
switch (key) {
- case 'm':
- return withoutSuffix ? 'jedna minuta' : 'jedne minute';
- case 'mm':
- if (number === 1) {
- result += 'minuta';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'minute';
- } else {
- result += 'minuta';
- }
- return result;
- case 'h':
- return withoutSuffix ? 'jedan sat' : 'jednog sata';
- case 'hh':
- if (number === 1) {
- result += 'sat';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'sata';
- } else {
- result += 'sati';
- }
- return result;
- case 'dd':
- if (number === 1) {
- result += 'dan';
- } else {
- result += 'dana';
- }
- return result;
- case 'MM':
- if (number === 1) {
- result += 'mjesec';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'mjeseca';
- } else {
- result += 'mjeseci';
- }
- return result;
- case 'yy':
- if (number === 1) {
- result += 'godina';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'godine';
- } else {
- result += 'godina';
- }
- return result;
+ case 'm':
+ return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+ case 'mm':
+ if (number === 1) {
+ result += 'minuta';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'minute';
+ } else {
+ result += 'minuta';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'jedan sat' : 'jednog sata';
+ case 'hh':
+ if (number === 1) {
+ result += 'sat';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'sata';
+ } else {
+ result += 'sati';
+ }
+ return result;
+ case 'dd':
+ if (number === 1) {
+ result += 'dan';
+ } else {
+ result += 'dana';
+ }
+ return result;
+ case 'MM':
+ if (number === 1) {
+ result += 'mjesec';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'mjeseca';
+ } else {
+ result += 'mjeseci';
+ }
+ return result;
+ case 'yy':
+ if (number === 1) {
+ result += 'godina';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'godine';
+ } else {
+ result += 'godina';
+ }
+ return result;
}
}
- var bs = _moment__default.defineLocale('bs', {
+ var bs = moment__default.defineLocale('bs', {
months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),
monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
- L : 'DD. MM. YYYY',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd, D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
},
calendar : {
sameDay : '[danas u] LT',
nextDay : '[sutra u] LT',
nextWeek : function () {
switch (this.day()) {
- case 0:
- return '[u] [nedjelju] [u] LT';
- case 3:
- return '[u] [srijedu] [u] LT';
- case 6:
- return '[u] [subotu] [u] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[u] dddd [u] LT';
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
}
},
lastDay : '[jučer u] LT',
lastWeek : function () {
switch (this.day()) {
- case 0:
- case 3:
- return '[prošlu] dddd [u] LT';
- case 6:
- return '[prošle] [subote] [u] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[prošli] dddd [u] LT';
+ case 0:
+ case 3:
+ return '[prošlu] dddd [u] LT';
+ case 6:
+ return '[prošle] [subote] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prošli] dddd [u] LT';
}
},
sameElse : 'L'
@@ -4215,23 +5416,22 @@
}
});
- //! moment.js locale configuration
- //! locale : catalan (ca)
- //! author : Juan G. Hurtado : https://github.com/juanghurtado
- var ca = _moment__default.defineLocale('ca', {
+ var ca = moment__default.defineLocale('ca', {
months : 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),
monthsShort : 'gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.'.split('_'),
+ monthsParseExact : true,
weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),
weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd D MMMM YYYY H:mm'
},
calendar : {
sameDay : function () {
@@ -4283,9 +5483,6 @@
}
});
- //! moment.js locale configuration
- //! locale : czech (cs)
- //! author : petrbela : https://github.com/petrbela
var cs__months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),
cs__monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');
@@ -4295,57 +5492,57 @@
function cs__translate(number, withoutSuffix, key, isFuture) {
var result = number + ' ';
switch (key) {
- case 's': // a few seconds / in a few seconds / a few seconds ago
- return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';
- case 'm': // a minute / in a minute / a minute ago
- return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');
- case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
- if (withoutSuffix || isFuture) {
- return result + (cs__plural(number) ? 'minuty' : 'minut');
- } else {
- return result + 'minutami';
- }
- break;
- case 'h': // an hour / in an hour / an hour ago
- return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
- case 'hh': // 9 hours / in 9 hours / 9 hours ago
- if (withoutSuffix || isFuture) {
- return result + (cs__plural(number) ? 'hodiny' : 'hodin');
- } else {
- return result + 'hodinami';
- }
- break;
- case 'd': // a day / in a day / a day ago
- return (withoutSuffix || isFuture) ? 'den' : 'dnem';
- case 'dd': // 9 days / in 9 days / 9 days ago
- if (withoutSuffix || isFuture) {
- return result + (cs__plural(number) ? 'dny' : 'dní');
- } else {
- return result + 'dny';
- }
- break;
- case 'M': // a month / in a month / a month ago
- return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';
- case 'MM': // 9 months / in 9 months / 9 months ago
- if (withoutSuffix || isFuture) {
- return result + (cs__plural(number) ? 'měsíce' : 'měsíců');
- } else {
- return result + 'měsíci';
- }
- break;
- case 'y': // a year / in a year / a year ago
- return (withoutSuffix || isFuture) ? 'rok' : 'rokem';
- case 'yy': // 9 years / in 9 years / 9 years ago
- if (withoutSuffix || isFuture) {
- return result + (cs__plural(number) ? 'roky' : 'let');
- } else {
- return result + 'lety';
- }
- break;
+ case 's': // a few seconds / in a few seconds / a few seconds ago
+ return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';
+ case 'm': // a minute / in a minute / a minute ago
+ return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');
+ case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+ if (withoutSuffix || isFuture) {
+ return result + (cs__plural(number) ? 'minuty' : 'minut');
+ } else {
+ return result + 'minutami';
+ }
+ break;
+ case 'h': // an hour / in an hour / an hour ago
+ return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
+ case 'hh': // 9 hours / in 9 hours / 9 hours ago
+ if (withoutSuffix || isFuture) {
+ return result + (cs__plural(number) ? 'hodiny' : 'hodin');
+ } else {
+ return result + 'hodinami';
+ }
+ break;
+ case 'd': // a day / in a day / a day ago
+ return (withoutSuffix || isFuture) ? 'den' : 'dnem';
+ case 'dd': // 9 days / in 9 days / 9 days ago
+ if (withoutSuffix || isFuture) {
+ return result + (cs__plural(number) ? 'dny' : 'dní');
+ } else {
+ return result + 'dny';
+ }
+ break;
+ case 'M': // a month / in a month / a month ago
+ return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';
+ case 'MM': // 9 months / in 9 months / 9 months ago
+ if (withoutSuffix || isFuture) {
+ return result + (cs__plural(number) ? 'měsíce' : 'měsíců');
+ } else {
+ return result + 'měsíci';
+ }
+ break;
+ case 'y': // a year / in a year / a year ago
+ return (withoutSuffix || isFuture) ? 'rok' : 'rokem';
+ case 'yy': // 9 years / in 9 years / 9 years ago
+ if (withoutSuffix || isFuture) {
+ return result + (cs__plural(number) ? 'roky' : 'let');
+ } else {
+ return result + 'lety';
+ }
+ break;
}
}
- var cs = _moment__default.defineLocale('cs', {
+ var cs = moment__default.defineLocale('cs', {
months : cs__months,
monthsShort : cs__monthsShort,
monthsParse : (function (months, monthsShort) {
@@ -4356,52 +5553,67 @@
}
return _monthsParse;
}(cs__months, cs__monthsShort)),
+ shortMonthsParse : (function (monthsShort) {
+ var i, _shortMonthsParse = [];
+ for (i = 0; i < 12; i++) {
+ _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i');
+ }
+ return _shortMonthsParse;
+ }(cs__monthsShort)),
+ longMonthsParse : (function (months) {
+ var i, _longMonthsParse = [];
+ for (i = 0; i < 12; i++) {
+ _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i');
+ }
+ return _longMonthsParse;
+ }(cs__months)),
weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),
weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),
longDateFormat : {
LT: 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd D. MMMM YYYY H:mm',
+ l : 'D. M. YYYY'
},
calendar : {
sameDay: '[dnes v] LT',
nextDay: '[zítra v] LT',
nextWeek: function () {
switch (this.day()) {
- case 0:
- return '[v neděli v] LT';
- case 1:
- case 2:
- return '[v] dddd [v] LT';
- case 3:
- return '[ve středu v] LT';
- case 4:
- return '[ve čtvrtek v] LT';
- case 5:
- return '[v pátek v] LT';
- case 6:
- return '[v sobotu v] LT';
+ case 0:
+ return '[v neděli v] LT';
+ case 1:
+ case 2:
+ return '[v] dddd [v] LT';
+ case 3:
+ return '[ve středu v] LT';
+ case 4:
+ return '[ve čtvrtek v] LT';
+ case 5:
+ return '[v pátek v] LT';
+ case 6:
+ return '[v sobotu v] LT';
}
},
lastDay: '[včera v] LT',
lastWeek: function () {
switch (this.day()) {
- case 0:
- return '[minulou neděli v] LT';
- case 1:
- case 2:
- return '[minulé] dddd [v] LT';
- case 3:
- return '[minulou středu v] LT';
- case 4:
- case 5:
- return '[minulý] dddd [v] LT';
- case 6:
- return '[minulou sobotu v] LT';
+ case 0:
+ return '[minulou neděli v] LT';
+ case 1:
+ case 2:
+ return '[minulé] dddd [v] LT';
+ case 3:
+ return '[minulou středu v] LT';
+ case 4:
+ case 5:
+ return '[minulý] dddd [v] LT';
+ case 6:
+ return '[minulou sobotu v] LT';
}
},
sameElse: 'L'
@@ -4429,11 +5641,8 @@
}
});
- //! moment.js locale configuration
- //! locale : chuvash (cv)
- //! author : Anatoly Mironov : https://github.com/mirontoli
- var cv = _moment__default.defineLocale('cv', {
+ var cv = moment__default.defineLocale('cv', {
months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),
monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),
@@ -4441,11 +5650,11 @@
weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD-MM-YYYY',
LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
- LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], LT',
- LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], LT'
+ LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
+ LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'
},
calendar : {
sameDay: '[Паян] LT [сехетре]',
@@ -4481,24 +5690,22 @@
}
});
- //! moment.js locale configuration
- //! locale : Welsh (cy)
- //! author : Robert Allen
- var cy = _moment__default.defineLocale('cy', {
+ var cy = moment__default.defineLocale('cy', {
months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),
monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),
weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),
weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
+ weekdaysParseExact : true,
// time formats are the same as en-gb
longDateFormat: {
LT: 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
- LLL: 'D MMMM YYYY LT',
- LLLL: 'dddd, D MMMM YYYY LT'
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd, D MMMM YYYY HH:mm'
},
calendar: {
sameDay: '[Heddiw am] LT',
@@ -4549,11 +5756,8 @@
}
});
- //! moment.js locale configuration
- //! locale : danish (da)
- //! author : Ulrik Nielsen : https://github.com/mrbase
- var da = _moment__default.defineLocale('da', {
+ var da = moment__default.defineLocale('da', {
months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),
monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
@@ -4561,11 +5765,11 @@
weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd [d.] D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd [d.] D. MMMM YYYY HH:mm'
},
calendar : {
sameDay : '[I dag kl.] LT',
@@ -4598,11 +5802,6 @@
}
});
- //! moment.js locale configuration
- //! locale : austrian german (de-at)
- //! author : lluchs : https://github.com/lluchs
- //! author: Menelion Elensúle: https://github.com/Oire
- //! author : Martin Groller : https://github.com/MadMG
function de_at__processRelativeTime(number, withoutSuffix, key, isFuture) {
var format = {
@@ -4618,26 +5817,28 @@
return withoutSuffix ? format[key][0] : format[key][1];
}
- var de_at = _moment__default.defineLocale('de-at', {
+ var de_at = moment__default.defineLocale('de-at', {
months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd, D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd, D. MMMM YYYY HH:mm'
},
calendar : {
- sameDay: '[Heute um] LT [Uhr]',
+ sameDay: '[heute um] LT [Uhr]',
sameElse: 'L',
- nextDay: '[Morgen um] LT [Uhr]',
+ nextDay: '[morgen um] LT [Uhr]',
nextWeek: 'dddd [um] LT [Uhr]',
- lastDay: '[Gestern um] LT [Uhr]',
+ lastDay: '[gestern um] LT [Uhr]',
lastWeek: '[letzten] dddd [um] LT [Uhr]'
},
relativeTime : {
@@ -4663,10 +5864,6 @@
}
});
- //! moment.js locale configuration
- //! locale : german (de)
- //! author : lluchs : https://github.com/lluchs
- //! author: Menelion Elensúle: https://github.com/Oire
function de__processRelativeTime(number, withoutSuffix, key, isFuture) {
var format = {
@@ -4682,26 +5879,28 @@
return withoutSuffix ? format[key][0] : format[key][1];
}
- var de = _moment__default.defineLocale('de', {
+ var de = moment__default.defineLocale('de', {
months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd, D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd, D. MMMM YYYY HH:mm'
},
calendar : {
- sameDay: '[Heute um] LT [Uhr]',
+ sameDay: '[heute um] LT [Uhr]',
sameElse: 'L',
- nextDay: '[Morgen um] LT [Uhr]',
+ nextDay: '[morgen um] LT [Uhr]',
nextWeek: 'dddd [um] LT [Uhr]',
- lastDay: '[Gestern um] LT [Uhr]',
+ lastDay: '[gestern um] LT [Uhr]',
lastWeek: '[letzten] dddd [um] LT [Uhr]'
},
relativeTime : {
@@ -4727,11 +5926,93 @@
}
});
- //! moment.js locale configuration
- //! locale : modern greek (el)
- //! author : Aggelos Karalias : https://github.com/mehiel
- var el = _moment__default.defineLocale('el', {
+ var dv__months = [
+ 'ޖެނުއަރީ',
+ 'ފެބްރުއަރީ',
+ 'މާރިޗު',
+ 'އޭޕްރީލު',
+ 'މޭ',
+ 'ޖޫން',
+ 'ޖުލައި',
+ 'އޯގަސްޓު',
+ 'ސެޕްޓެމްބަރު',
+ 'އޮކްޓޯބަރު',
+ 'ނޮވެމްބަރު',
+ 'ޑިސެމްބަރު'
+ ], dv__weekdays = [
+ 'އާދިއްތަ',
+ 'ހޯމަ',
+ 'އަންގާރަ',
+ 'ބުދަ',
+ 'ބުރާސްފަތި',
+ 'ހުކުރު',
+ 'ހޮނިހިރު'
+ ];
+
+ var dv = moment__default.defineLocale('dv', {
+ months : dv__months,
+ monthsShort : dv__months,
+ weekdays : dv__weekdays,
+ weekdaysShort : dv__weekdays,
+ weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),
+ longDateFormat : {
+
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'D/M/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /މކ|މފ/,
+ isPM : function (input) {
+ return 'މފ' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'މކ';
+ } else {
+ return 'މފ';
+ }
+ },
+ calendar : {
+ sameDay : '[މިއަދު] LT',
+ nextDay : '[މާދަމާ] LT',
+ nextWeek : 'dddd LT',
+ lastDay : '[އިއްޔެ] LT',
+ lastWeek : '[ފާއިތުވި] dddd LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ތެރޭގައި %s',
+ past : 'ކުރިން %s',
+ s : 'ސިކުންތުކޮޅެއް',
+ m : 'މިނިޓެއް',
+ mm : 'މިނިޓު %d',
+ h : 'ގަޑިއިރެއް',
+ hh : 'ގަޑިއިރު %d',
+ d : 'ދުވަހެއް',
+ dd : 'ދުވަސް %d',
+ M : 'މަހެއް',
+ MM : 'މަސް %d',
+ y : 'އަހަރެއް',
+ yy : 'އަހަރު %d'
+ },
+ preparse: function (string) {
+ return string.replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/,/g, '،');
+ },
+ week : {
+ dow : 7, // Sunday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+ });
+
+
+ var el = moment__default.defineLocale('el', {
monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),
monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),
months : function (momentToFormat, format) {
@@ -4761,8 +6042,8 @@
LTS : 'h:mm:ss A',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
},
calendarEl : {
sameDay : '[Σήμερα {}] LT',
@@ -4782,7 +6063,7 @@
calendar : function (key, mom) {
var output = this._calendarEl[key],
hours = mom && mom.hours();
- if (typeof output === 'function') {
+ if (isFunction(output)) {
output = output.apply(mom);
}
return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));
@@ -4810,10 +6091,8 @@
}
});
- //! moment.js locale configuration
- //! locale : australian english (en-au)
- var en_au = _moment__default.defineLocale('en-au', {
+ var en_au = moment__default.defineLocale('en-au', {
months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
@@ -4824,8 +6103,8 @@
LTS : 'h:mm:ss A',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
},
calendar : {
sameDay : '[Today at] LT',
@@ -4865,11 +6144,8 @@
}
});
- //! moment.js locale configuration
- //! locale : canadian english (en-ca)
- //! author : Jonathan Abourbih : https://github.com/jonbca
- var en_ca = _moment__default.defineLocale('en-ca', {
+ var en_ca = moment__default.defineLocale('en-ca', {
months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
@@ -4879,9 +6155,9 @@
LT : 'h:mm A',
LTS : 'h:mm:ss A',
L : 'YYYY-MM-DD',
- LL : 'D MMMM, YYYY',
- LLL : 'D MMMM, YYYY LT',
- LLLL : 'dddd, D MMMM, YYYY LT'
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY h:mm A',
+ LLLL : 'dddd, MMMM D, YYYY h:mm A'
},
calendar : {
sameDay : '[Today at] LT',
@@ -4917,11 +6193,8 @@
}
});
- //! moment.js locale configuration
- //! locale : great britain english (en-gb)
- //! author : Chris Gedrim : https://github.com/chrisgedrim
- var en_gb = _moment__default.defineLocale('en-gb', {
+ var en_gb = moment__default.defineLocale('en-gb', {
months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
@@ -4932,8 +6205,8 @@
LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
},
calendar : {
sameDay : '[Today at] LT',
@@ -4973,13 +6246,114 @@
}
});
- //! moment.js locale configuration
- //! locale : esperanto (eo)
- //! author : Colin Dean : https://github.com/colindean
- //! komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko.
- //! Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni!
- var eo = _moment__default.defineLocale('eo', {
+ var en_ie = moment__default.defineLocale('en-ie', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD-MM-YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ var en_nz = moment__default.defineLocale('en-nz', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ var eo = moment__default.defineLocale('eo', {
months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),
monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),
weekdays : 'Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato'.split('_'),
@@ -4987,11 +6361,11 @@
weekdaysMin : 'Di_Lu_Ma_Me_Ĵa_Ve_Sa'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'YYYY-MM-DD',
LL : 'D[-an de] MMMM, YYYY',
- LLL : 'D[-an de] MMMM, YYYY LT',
- LLLL : 'dddd, [la] D[-an de] MMMM, YYYY LT'
+ LLL : 'D[-an de] MMMM, YYYY HH:mm',
+ LLLL : 'dddd, [la] D[-an de] MMMM, YYYY HH:mm'
},
meridiemParse: /[ap]\.t\.m/i,
isPM: function (input) {
@@ -5035,32 +6409,98 @@
}
});
- //! moment.js locale configuration
- //! locale : spanish (es)
- //! author : Julio Napurí : https://github.com/julionc
- var monthsShortDot = 'Ene._Feb._Mar._Abr._May._Jun._Jul._Ago._Sep._Oct._Nov._Dic.'.split('_'),
- es__monthsShort = 'Ene_Feb_Mar_Abr_May_Jun_Jul_Ago_Sep_Oct_Nov_Dic'.split('_');
+ var es_do__monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
+ es_do__monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
- var es = _moment__default.defineLocale('es', {
- months : 'Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre'.split('_'),
+ var es_do = moment__default.defineLocale('es-do', {
+ months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return es_do__monthsShort[m.month()];
+ } else {
+ return es_do__monthsShortDot[m.month()];
+ }
+ },
+ monthsParseExact : true,
+ weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY h:mm A',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextDay : function () {
+ return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastDay : function () {
+ return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastWeek : function () {
+ return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'en %s',
+ past : 'hace %s',
+ s : 'unos segundos',
+ m : 'un minuto',
+ mm : '%d minutos',
+ h : 'una hora',
+ hh : '%d horas',
+ d : 'un día',
+ dd : '%d días',
+ M : 'un mes',
+ MM : '%d meses',
+ y : 'un año',
+ yy : '%d años'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ var es__monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
+ es__monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
+
+ var es = moment__default.defineLocale('es', {
+ months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
monthsShort : function (m, format) {
if (/-MMM-/.test(format)) {
return es__monthsShort[m.month()];
} else {
- return monthsShortDot[m.month()];
+ return es__monthsShortDot[m.month()];
}
},
- weekdays : 'Domingo_Lunes_Martes_Miércoles_Jueves_Viernes_Sábado'.split('_'),
- weekdaysShort : 'Dom._Lun._Mar._Mié._Jue._Vie._Sáb.'.split('_'),
- weekdaysMin : 'Do_Lu_Ma_Mi_Ju_Vi_Sá'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D [de] MMMM [de] YYYY',
- LLL : 'D [de] MMMM [de] YYYY LT',
- LLLL : 'dddd, D [de] MMMM [de] YYYY LT'
+ LLL : 'D [de] MMMM [de] YYYY H:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
},
calendar : {
sameDay : function () {
@@ -5103,10 +6543,6 @@
}
});
- //! moment.js locale configuration
- //! locale : estonian (et)
- //! author : Henry Kehlmann : https://github.com/madhenry
- //! improvements : Illimar Tambek : https://github.com/ragulka
function et__processRelativeTime(number, withoutSuffix, key, isFuture) {
var format = {
@@ -5127,7 +6563,7 @@
return isFuture ? format[key][0] : format[key][1];
}
- var et = _moment__default.defineLocale('et', {
+ var et = moment__default.defineLocale('et', {
months : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),
monthsShort : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),
weekdays : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),
@@ -5135,11 +6571,11 @@
weekdaysMin : 'P_E_T_K_N_R_L'.split('_'),
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd, D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
},
calendar : {
sameDay : '[Täna,] LT',
@@ -5172,27 +6608,26 @@
}
});
- //! moment.js locale configuration
- //! locale : euskara (eu)
- //! author : Eneko Illarramendi : https://github.com/eillarra
- var eu = _moment__default.defineLocale('eu', {
+ var eu = moment__default.defineLocale('eu', {
months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),
monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),
+ monthsParseExact : true,
weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),
weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),
weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'YYYY-MM-DD',
LL : 'YYYY[ko] MMMM[ren] D[a]',
- LLL : 'YYYY[ko] MMMM[ren] D[a] LT',
- LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] LT',
+ LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',
+ LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
l : 'YYYY-M-D',
ll : 'YYYY[ko] MMM D[a]',
- lll : 'YYYY[ko] MMM D[a] LT',
- llll : 'ddd, YYYY[ko] MMM D[a] LT'
+ lll : 'YYYY[ko] MMM D[a] HH:mm',
+ llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'
},
calendar : {
sameDay : '[gaur] LT[etan]',
@@ -5225,9 +6660,6 @@
}
});
- //! moment.js locale configuration
- //! locale : Persian (fa)
- //! author : Ebrahim Byagowi : https://github.com/ebraminio
var fa__symbolMap = {
'1': '۱',
@@ -5253,19 +6685,20 @@
'۰': '0'
};
- var fa = _moment__default.defineLocale('fa', {
+ var fa = moment__default.defineLocale('fa', {
months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
},
meridiemParse: /قبل از ظهر|بعد از ظهر/,
isPM: function (input) {
@@ -5319,9 +6752,6 @@
}
});
- //! moment.js locale configuration
- //! locale : finnish (fi)
- //! author : Tarmo Aidantausta : https://github.com/bleadof
var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),
numbersFuture = [
@@ -5331,33 +6761,33 @@
function fi__translate(number, withoutSuffix, key, isFuture) {
var result = '';
switch (key) {
- case 's':
- return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
- case 'm':
- return isFuture ? 'minuutin' : 'minuutti';
- case 'mm':
- result = isFuture ? 'minuutin' : 'minuuttia';
- break;
- case 'h':
- return isFuture ? 'tunnin' : 'tunti';
- case 'hh':
- result = isFuture ? 'tunnin' : 'tuntia';
- break;
- case 'd':
- return isFuture ? 'päivän' : 'päivä';
- case 'dd':
- result = isFuture ? 'päivän' : 'päivää';
- break;
- case 'M':
- return isFuture ? 'kuukauden' : 'kuukausi';
- case 'MM':
- result = isFuture ? 'kuukauden' : 'kuukautta';
- break;
- case 'y':
- return isFuture ? 'vuoden' : 'vuosi';
- case 'yy':
- result = isFuture ? 'vuoden' : 'vuotta';
- break;
+ case 's':
+ return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
+ case 'm':
+ return isFuture ? 'minuutin' : 'minuutti';
+ case 'mm':
+ result = isFuture ? 'minuutin' : 'minuuttia';
+ break;
+ case 'h':
+ return isFuture ? 'tunnin' : 'tunti';
+ case 'hh':
+ result = isFuture ? 'tunnin' : 'tuntia';
+ break;
+ case 'd':
+ return isFuture ? 'päivän' : 'päivä';
+ case 'dd':
+ result = isFuture ? 'päivän' : 'päivää';
+ break;
+ case 'M':
+ return isFuture ? 'kuukauden' : 'kuukausi';
+ case 'MM':
+ result = isFuture ? 'kuukauden' : 'kuukautta';
+ break;
+ case 'y':
+ return isFuture ? 'vuoden' : 'vuosi';
+ case 'yy':
+ result = isFuture ? 'vuoden' : 'vuotta';
+ break;
}
result = verbalNumber(number, isFuture) + ' ' + result;
return result;
@@ -5366,7 +6796,7 @@
return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;
}
- var fi = _moment__default.defineLocale('fi', {
+ var fi = moment__default.defineLocale('fi', {
months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),
monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),
weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),
@@ -5377,12 +6807,12 @@
LTS : 'HH.mm.ss',
L : 'DD.MM.YYYY',
LL : 'Do MMMM[ta] YYYY',
- LLL : 'Do MMMM[ta] YYYY, [klo] LT',
- LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] LT',
+ LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',
+ LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
l : 'D.M.YYYY',
ll : 'Do MMM YYYY',
- lll : 'Do MMM YYYY, [klo] LT',
- llll : 'ddd, Do MMM YYYY, [klo] LT'
+ lll : 'Do MMM YYYY, [klo] HH.mm',
+ llll : 'ddd, Do MMM YYYY, [klo] HH.mm'
},
calendar : {
sameDay : '[tänään] [klo] LT',
@@ -5415,11 +6845,8 @@
}
});
- //! moment.js locale configuration
- //! locale : faroese (fo)
- //! author : Ragnar Johannesen : https://github.com/ragnar123
- var fo = _moment__default.defineLocale('fo', {
+ var fo = moment__default.defineLocale('fo', {
months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),
@@ -5427,11 +6854,11 @@
weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D. MMMM, YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D. MMMM, YYYY HH:mm'
},
calendar : {
sameDay : '[Í dag kl.] LT',
@@ -5464,23 +6891,22 @@
}
});
- //! moment.js locale configuration
- //! locale : canadian french (fr-ca)
- //! author : Jonathan Abourbih : https://github.com/jonbca
- var fr_ca = _moment__default.defineLocale('fr-ca', {
+ var fr_ca = moment__default.defineLocale('fr-ca', {
months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'YYYY-MM-DD',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[Aujourd\'hui à] LT',
@@ -5505,29 +6931,78 @@
y : 'un an',
yy : '%d ans'
},
- ordinalParse: /\d{1,2}(er|)/,
+ ordinalParse: /\d{1,2}(er|e)/,
ordinal : function (number) {
- return number + (number === 1 ? 'er' : '');
+ return number + (number === 1 ? 'er' : 'e');
}
});
- //! moment.js locale configuration
- //! locale : french (fr)
- //! author : John Fischer : https://github.com/jfroffice
- var fr = _moment__default.defineLocale('fr', {
+ var fr_ch = moment__default.defineLocale('fr-ch', {
months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Aujourd\'hui à] LT',
+ nextDay: '[Demain à] LT',
+ nextWeek: 'dddd [à] LT',
+ lastDay: '[Hier à] LT',
+ lastWeek: 'dddd [dernier à] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dans %s',
+ past : 'il y a %s',
+ s : 'quelques secondes',
+ m : 'une minute',
+ mm : '%d minutes',
+ h : 'une heure',
+ hh : '%d heures',
+ d : 'un jour',
+ dd : '%d jours',
+ M : 'un mois',
+ MM : '%d mois',
+ y : 'un an',
+ yy : '%d ans'
+ },
+ ordinalParse: /\d{1,2}(er|e)/,
+ ordinal : function (number) {
+ return number + (number === 1 ? 'er' : 'e');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ var fr = moment__default.defineLocale('fr', {
+ months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
+ monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+ weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[Aujourd\'hui à] LT',
@@ -5562,14 +7037,11 @@
}
});
- //! moment.js locale configuration
- //! locale : frisian (fy)
- //! author : Robin van der Vliet : https://github.com/robin0van0der0v
var fy__monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),
fy__monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');
- var fy = _moment__default.defineLocale('fy', {
+ var fy = moment__default.defineLocale('fy', {
months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),
monthsShort : function (m, format) {
if (/-MMM-/.test(format)) {
@@ -5578,16 +7050,18 @@
return fy__monthsShortWithDots[m.month()];
}
},
+ monthsParseExact : true,
weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),
weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),
weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD-MM-YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[hjoed om] LT',
@@ -5622,23 +7096,84 @@
}
});
- //! moment.js locale configuration
- //! locale : galician (gl)
- //! author : Juan G. Hurtado : https://github.com/juanghurtado
- var gl = _moment__default.defineLocale('gl', {
- months : 'Xaneiro_Febreiro_Marzo_Abril_Maio_Xuño_Xullo_Agosto_Setembro_Outubro_Novembro_Decembro'.split('_'),
- monthsShort : 'Xan._Feb._Mar._Abr._Mai._Xuñ._Xul._Ago._Set._Out._Nov._Dec.'.split('_'),
- weekdays : 'Domingo_Luns_Martes_Mércores_Xoves_Venres_Sábado'.split('_'),
- weekdaysShort : 'Dom._Lun._Mar._Mér._Xov._Ven._Sáb.'.split('_'),
- weekdaysMin : 'Do_Lu_Ma_Mé_Xo_Ve_Sá'.split('_'),
+ var gd__months = [
+ 'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'
+ ];
+
+ var gd__monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];
+
+ var gd__weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];
+
+ var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];
+
+ var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];
+
+ var gd = moment__default.defineLocale('gd', {
+ months : gd__months,
+ monthsShort : gd__monthsShort,
+ monthsParseExact : true,
+ weekdays : gd__weekdays,
+ weekdaysShort : weekdaysShort,
+ weekdaysMin : weekdaysMin,
longDateFormat : {
- LT : 'H:mm',
- LTS : 'LT:ss',
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[An-diugh aig] LT',
+ nextDay : '[A-màireach aig] LT',
+ nextWeek : 'dddd [aig] LT',
+ lastDay : '[An-dè aig] LT',
+ lastWeek : 'dddd [seo chaidh] [aig] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ann an %s',
+ past : 'bho chionn %s',
+ s : 'beagan diogan',
+ m : 'mionaid',
+ mm : '%d mionaidean',
+ h : 'uair',
+ hh : '%d uairean',
+ d : 'latha',
+ dd : '%d latha',
+ M : 'mìos',
+ MM : '%d mìosan',
+ y : 'bliadhna',
+ yy : '%d bliadhna'
+ },
+ ordinalParse : /\d{1,2}(d|na|mh)/,
+ ordinal : function (number) {
+ var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ var gl = moment__default.defineLocale('gl', {
+ months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),
+ monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY H:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
},
calendar : {
sameDay : function () {
@@ -5660,8 +7195,8 @@
},
relativeTime : {
future : function (str) {
- if (str === 'uns segundos') {
- return 'nuns segundos';
+ if (str.indexOf('un') === 0) {
+ return 'n' + str;
}
return 'en ' + str;
},
@@ -5682,17 +7217,12 @@
ordinal : '%dº',
week : {
dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
}
});
- //! moment.js locale configuration
- //! locale : Hebrew (he)
- //! author : Tomer Cohen : https://github.com/tomer
- //! author : Moshe Simantov : https://github.com/DevelopmentIL
- //! author : Tal Ater : https://github.com/TalAter
- var he = _moment__default.defineLocale('he', {
+ var he = moment__default.defineLocale('he', {
months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),
monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),
weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
@@ -5700,15 +7230,15 @@
weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D [ב]MMMM YYYY',
- LLL : 'D [ב]MMMM YYYY LT',
- LLLL : 'dddd, D [ב]MMMM YYYY LT',
+ LLL : 'D [ב]MMMM YYYY HH:mm',
+ LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',
l : 'D/M/YYYY',
ll : 'D MMM YYYY',
- lll : 'D MMM YYYY LT',
- llll : 'ddd, D MMM YYYY LT'
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd, D MMM YYYY HH:mm'
},
calendar : {
sameDay : '[היום ב־]LT',
@@ -5754,12 +7284,26 @@
}
return number + ' שנים';
}
+ },
+ meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,
+ isPM : function (input) {
+ return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 5) {
+ return 'לפנות בוקר';
+ } else if (hour < 10) {
+ return 'בבוקר';
+ } else if (hour < 12) {
+ return isLower ? 'לפנה"צ' : 'לפני הצהריים';
+ } else if (hour < 18) {
+ return isLower ? 'אחה"צ' : 'אחרי הצהריים';
+ } else {
+ return 'בערב';
+ }
}
});
- //! moment.js locale configuration
- //! locale : hindi (hi)
- //! author : Mayank Singhal : https://github.com/mayanksinghal
var hi__symbolMap = {
'1': '१',
@@ -5786,9 +7330,10 @@
'०': '0'
};
- var hi = _moment__default.defineLocale('hi', {
+ var hi = moment__default.defineLocale('hi', {
months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),
monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),
+ monthsParseExact: true,
weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),
weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
@@ -5797,8 +7342,8 @@
LTS : 'A h:mm:ss बजे',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY, LT',
- LLLL : 'dddd, D MMMM YYYY, LT'
+ LLL : 'D MMMM YYYY, A h:mm बजे',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'
},
calendar : {
sameDay : '[आज] LT',
@@ -5869,108 +7414,110 @@
}
});
- //! moment.js locale configuration
- //! locale : hrvatski (hr)
- //! author : Bojan Marković : https://github.com/bmarkovic
function hr__translate(number, withoutSuffix, key) {
var result = number + ' ';
switch (key) {
- case 'm':
- return withoutSuffix ? 'jedna minuta' : 'jedne minute';
- case 'mm':
- if (number === 1) {
- result += 'minuta';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'minute';
- } else {
- result += 'minuta';
- }
- return result;
- case 'h':
- return withoutSuffix ? 'jedan sat' : 'jednog sata';
- case 'hh':
- if (number === 1) {
- result += 'sat';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'sata';
- } else {
- result += 'sati';
- }
- return result;
- case 'dd':
- if (number === 1) {
- result += 'dan';
- } else {
- result += 'dana';
- }
- return result;
- case 'MM':
- if (number === 1) {
- result += 'mjesec';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'mjeseca';
- } else {
- result += 'mjeseci';
- }
- return result;
- case 'yy':
- if (number === 1) {
- result += 'godina';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'godine';
- } else {
- result += 'godina';
- }
- return result;
+ case 'm':
+ return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+ case 'mm':
+ if (number === 1) {
+ result += 'minuta';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'minute';
+ } else {
+ result += 'minuta';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'jedan sat' : 'jednog sata';
+ case 'hh':
+ if (number === 1) {
+ result += 'sat';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'sata';
+ } else {
+ result += 'sati';
+ }
+ return result;
+ case 'dd':
+ if (number === 1) {
+ result += 'dan';
+ } else {
+ result += 'dana';
+ }
+ return result;
+ case 'MM':
+ if (number === 1) {
+ result += 'mjesec';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'mjeseca';
+ } else {
+ result += 'mjeseci';
+ }
+ return result;
+ case 'yy':
+ if (number === 1) {
+ result += 'godina';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'godine';
+ } else {
+ result += 'godina';
+ }
+ return result;
}
}
- var hr = _moment__default.defineLocale('hr', {
- months : 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_'),
+ var hr = moment__default.defineLocale('hr', {
+ months : {
+ format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),
+ standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')
+ },
monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),
+ monthsParseExact: true,
weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
- L : 'DD. MM. YYYY',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd, D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
},
calendar : {
sameDay : '[danas u] LT',
nextDay : '[sutra u] LT',
nextWeek : function () {
switch (this.day()) {
- case 0:
- return '[u] [nedjelju] [u] LT';
- case 3:
- return '[u] [srijedu] [u] LT';
- case 6:
- return '[u] [subotu] [u] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[u] dddd [u] LT';
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
}
},
lastDay : '[jučer u] LT',
lastWeek : function () {
switch (this.day()) {
- case 0:
- case 3:
- return '[prošlu] dddd [u] LT';
- case 6:
- return '[prošle] [subote] [u] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[prošli] dddd [u] LT';
+ case 0:
+ case 3:
+ return '[prošlu] dddd [u] LT';
+ case 6:
+ return '[prošle] [subote] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prošli] dddd [u] LT';
}
},
sameElse : 'L'
@@ -5998,37 +7545,34 @@
}
});
- //! moment.js locale configuration
- //! locale : hungarian (hu)
- //! author : Adam Brunner : https://github.com/adambrunner
var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');
function hu__translate(number, withoutSuffix, key, isFuture) {
var num = number,
suffix;
switch (key) {
- case 's':
- return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';
- case 'm':
- return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
- case 'mm':
- return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
- case 'h':
- return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
- case 'hh':
- return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
- case 'd':
- return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
- case 'dd':
- return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
- case 'M':
- return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
- case 'MM':
- return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
- case 'y':
- return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
- case 'yy':
- return num + (isFuture || withoutSuffix ? ' év' : ' éve');
+ case 's':
+ return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';
+ case 'm':
+ return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
+ case 'mm':
+ return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
+ case 'h':
+ return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
+ case 'hh':
+ return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
+ case 'd':
+ return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
+ case 'dd':
+ return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
+ case 'M':
+ return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+ case 'MM':
+ return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+ case 'y':
+ return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
+ case 'yy':
+ return num + (isFuture || withoutSuffix ? ' év' : ' éve');
}
return '';
}
@@ -6036,7 +7580,7 @@
return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';
}
- var hu = _moment__default.defineLocale('hu', {
+ var hu = moment__default.defineLocale('hu', {
months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),
monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),
weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),
@@ -6044,11 +7588,11 @@
weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'YYYY.MM.DD.',
LL : 'YYYY. MMMM D.',
- LLL : 'YYYY. MMMM D., LT',
- LLLL : 'YYYY. MMMM D., dddd LT'
+ LLL : 'YYYY. MMMM D. H:mm',
+ LLLL : 'YYYY. MMMM D., dddd H:mm'
},
meridiemParse: /de|du/i,
isPM: function (input) {
@@ -6096,42 +7640,23 @@
}
});
- //! moment.js locale configuration
- //! locale : Armenian (hy-am)
- //! author : Armendarabyan : https://github.com/armendarabyan
- function hy_am__monthsCaseReplace(m, format) {
- var months = {
- 'nominative': 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_'),
- 'accusative': 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_')
+ var hy_am = moment__default.defineLocale('hy-am', {
+ months : {
+ format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),
+ standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')
},
- nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
- 'accusative' :
- 'nominative';
- return months[nounCase][m.month()];
- }
- function hy_am__monthsShortCaseReplace(m, format) {
- var monthsShort = 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_');
- return monthsShort[m.month()];
- }
- function hy_am__weekdaysCaseReplace(m, format) {
- var weekdays = 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_');
- return weekdays[m.day()];
- }
-
- var hy_am = _moment__default.defineLocale('hy-am', {
- months : hy_am__monthsCaseReplace,
- monthsShort : hy_am__monthsShortCaseReplace,
- weekdays : hy_am__weekdaysCaseReplace,
+ monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
+ weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),
weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY թ.',
- LLL : 'D MMMM YYYY թ., LT',
- LLLL : 'dddd, D MMMM YYYY թ., LT'
+ LLL : 'D MMMM YYYY թ., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY թ., HH:mm'
},
calendar : {
sameDay: '[այսօր] LT',
@@ -6178,16 +7703,16 @@
ordinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/,
ordinal: function (number, period) {
switch (period) {
- case 'DDD':
- case 'w':
- case 'W':
- case 'DDDo':
- if (number === 1) {
- return number + '-ին';
- }
- return number + '-րդ';
- default:
- return number;
+ case 'DDD':
+ case 'w':
+ case 'W':
+ case 'DDDo':
+ if (number === 1) {
+ return number + '-ին';
+ }
+ return number + '-րդ';
+ default:
+ return number;
}
},
week : {
@@ -6196,12 +7721,8 @@
}
});
- //! moment.js locale configuration
- //! locale : Bahasa Indonesia (id)
- //! author : Mohammad Satrio Utomo : https://github.com/tyok
- //! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
- var id = _moment__default.defineLocale('id', {
+ var id = moment__default.defineLocale('id', {
months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),
monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'),
weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
@@ -6209,11 +7730,11 @@
weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
longDateFormat : {
LT : 'HH.mm',
- LTS : 'LT.ss',
+ LTS : 'HH.mm.ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY [pukul] LT',
- LLLL : 'dddd, D MMMM YYYY [pukul] LT'
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
},
meridiemParse: /pagi|siang|sore|malam/,
meridiemHour : function (hour, meridiem) {
@@ -6268,9 +7789,6 @@
}
});
- //! moment.js locale configuration
- //! locale : icelandic (is)
- //! author : Hinrik Örn Sigurðsson : https://github.com/hinrik
function is__plural(n) {
if (n % 100 === 11) {
@@ -6283,63 +7801,63 @@
function is__translate(number, withoutSuffix, key, isFuture) {
var result = number + ' ';
switch (key) {
- case 's':
- return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';
- case 'm':
- return withoutSuffix ? 'mínúta' : 'mínútu';
- case 'mm':
- if (is__plural(number)) {
- return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');
- } else if (withoutSuffix) {
- return result + 'mínúta';
- }
- return result + 'mínútu';
- case 'hh':
- if (is__plural(number)) {
- return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
- }
- return result + 'klukkustund';
- case 'd':
- if (withoutSuffix) {
- return 'dagur';
- }
- return isFuture ? 'dag' : 'degi';
- case 'dd':
- if (is__plural(number)) {
+ case 's':
+ return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';
+ case 'm':
+ return withoutSuffix ? 'mínúta' : 'mínútu';
+ case 'mm':
+ if (is__plural(number)) {
+ return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');
+ } else if (withoutSuffix) {
+ return result + 'mínúta';
+ }
+ return result + 'mínútu';
+ case 'hh':
+ if (is__plural(number)) {
+ return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
+ }
+ return result + 'klukkustund';
+ case 'd':
if (withoutSuffix) {
- return result + 'dagar';
+ return 'dagur';
+ }
+ return isFuture ? 'dag' : 'degi';
+ case 'dd':
+ if (is__plural(number)) {
+ if (withoutSuffix) {
+ return result + 'dagar';
+ }
+ return result + (isFuture ? 'daga' : 'dögum');
+ } else if (withoutSuffix) {
+ return result + 'dagur';
}
- return result + (isFuture ? 'daga' : 'dögum');
- } else if (withoutSuffix) {
- return result + 'dagur';
- }
- return result + (isFuture ? 'dag' : 'degi');
- case 'M':
- if (withoutSuffix) {
- return 'mánuður';
- }
- return isFuture ? 'mánuð' : 'mánuði';
- case 'MM':
- if (is__plural(number)) {
+ return result + (isFuture ? 'dag' : 'degi');
+ case 'M':
if (withoutSuffix) {
- return result + 'mánuðir';
+ return 'mánuður';
}
- return result + (isFuture ? 'mánuði' : 'mánuðum');
- } else if (withoutSuffix) {
- return result + 'mánuður';
- }
- return result + (isFuture ? 'mánuð' : 'mánuði');
- case 'y':
- return withoutSuffix || isFuture ? 'ár' : 'ári';
- case 'yy':
- if (is__plural(number)) {
- return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
- }
- return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
+ return isFuture ? 'mánuð' : 'mánuði';
+ case 'MM':
+ if (is__plural(number)) {
+ if (withoutSuffix) {
+ return result + 'mánuðir';
+ }
+ return result + (isFuture ? 'mánuði' : 'mánuðum');
+ } else if (withoutSuffix) {
+ return result + 'mánuður';
+ }
+ return result + (isFuture ? 'mánuð' : 'mánuði');
+ case 'y':
+ return withoutSuffix || isFuture ? 'ár' : 'ári';
+ case 'yy':
+ if (is__plural(number)) {
+ return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
+ }
+ return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
}
}
- var is = _moment__default.defineLocale('is', {
+ var is = moment__default.defineLocale('is', {
months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),
monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),
weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),
@@ -6347,11 +7865,11 @@
weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
- L : 'DD/MM/YYYY',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY [kl.] LT',
- LLLL : 'dddd, D. MMMM YYYY [kl.] LT'
+ LLL : 'D. MMMM YYYY [kl.] H:mm',
+ LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'
},
calendar : {
sameDay : '[í dag kl.] LT',
@@ -6384,24 +7902,20 @@
}
});
- //! moment.js locale configuration
- //! locale : italian (it)
- //! author : Lorenzo : https://github.com/aliem
- //! author: Mattia Larentis: https://github.com/nostalgiaz
- var it = _moment__default.defineLocale('it', {
+ var it = moment__default.defineLocale('it', {
months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),
monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
weekdays : 'Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato'.split('_'),
weekdaysShort : 'Dom_Lun_Mar_Mer_Gio_Ven_Sab'.split('_'),
- weekdaysMin : 'D_L_Ma_Me_G_V_S'.split('_'),
+ weekdaysMin : 'Do_Lu_Ma_Me_Gi_Ve_Sa'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[Oggi alle] LT',
@@ -6443,11 +7957,8 @@
}
});
- //! moment.js locale configuration
- //! locale : japanese (ja)
- //! author : LI Long : https://github.com/baryon
- var ja = _moment__default.defineLocale('ja', {
+ var ja = moment__default.defineLocale('ja', {
months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
@@ -6455,11 +7966,11 @@
weekdaysMin : '日_月_火_水_木_金_土'.split('_'),
longDateFormat : {
LT : 'Ah時m分',
- LTS : 'LTs秒',
+ LTS : 'Ah時m分s秒',
L : 'YYYY/MM/DD',
LL : 'YYYY年M月D日',
- LLL : 'YYYY年M月D日LT',
- LLLL : 'YYYY年M月D日LT dddd'
+ LLL : 'YYYY年M月D日Ah時m分',
+ LLLL : 'YYYY年M月D日Ah時m分 dddd'
},
meridiemParse: /午前|午後/i,
isPM : function (input) {
@@ -6480,6 +7991,17 @@
lastWeek : '[前週]dddd LT',
sameElse : 'L'
},
+ ordinalParse : /\d{1,2}日/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd':
+ case 'D':
+ case 'DDD':
+ return number + '日';
+ default:
+ return number;
+ }
+ },
relativeTime : {
future : '%s後',
past : '%s前',
@@ -6497,12 +8019,8 @@
}
});
- //! moment.js locale configuration
- //! locale : Boso Jowo (jv)
- //! author : Rony Lantip : https://github.com/lantip
- //! reference: http://jv.wikipedia.org/wiki/Basa_Jawa
- var jv = _moment__default.defineLocale('jv', {
+ var jv = moment__default.defineLocale('jv', {
months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),
monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
@@ -6510,11 +8028,11 @@
weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
longDateFormat : {
LT : 'HH.mm',
- LTS : 'LT.ss',
+ LTS : 'HH.mm.ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY [pukul] LT',
- LLLL : 'dddd, D MMMM YYYY [pukul] LT'
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
},
meridiemParse: /enjing|siyang|sonten|ndalu/,
meridiemHour : function (hour, meridiem) {
@@ -6569,35 +8087,18 @@
}
});
- //! moment.js locale configuration
- //! locale : Georgian (ka)
- //! author : Irakli Janiashvili : https://github.com/irakli-janiashvili
- function ka__monthsCaseReplace(m, format) {
- var months = {
- 'nominative': 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
- 'accusative': 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')
- },
- nounCase = (/D[oD] *MMMM?/).test(format) ?
- 'accusative' :
- 'nominative';
- return months[nounCase][m.month()];
- }
- function ka__weekdaysCaseReplace(m, format) {
- var weekdays = {
- 'nominative': 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
- 'accusative': 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_')
+ var ka = moment__default.defineLocale('ka', {
+ months : {
+ standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
+ format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')
},
- nounCase = (/(წინა|შემდეგ)/).test(format) ?
- 'accusative' :
- 'nominative';
- return weekdays[nounCase][m.day()];
- }
-
- var ka = _moment__default.defineLocale('ka', {
- months : ka__monthsCaseReplace,
monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
- weekdays : ka__weekdaysCaseReplace,
+ weekdays : {
+ standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
+ format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),
+ isFormat: /(წინა|შემდეგ)/
+ },
weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
longDateFormat : {
@@ -6605,8 +8106,8 @@
LTS : 'h:mm:ss A',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
},
calendar : {
sameDay : '[დღეს] LT[-ზე]',
@@ -6661,26 +8162,96 @@
}
});
- //! moment.js locale configuration
- //! locale : khmer (km)
- //! author : Kruy Vanna : https://github.com/kruyvanna
- var km = _moment__default.defineLocale('km', {
- months: 'មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
- monthsShort: 'មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
+ var kk__suffixes = {
+ 0: '-ші',
+ 1: '-ші',
+ 2: '-ші',
+ 3: '-ші',
+ 4: '-ші',
+ 5: '-ші',
+ 6: '-шы',
+ 7: '-ші',
+ 8: '-ші',
+ 9: '-шы',
+ 10: '-шы',
+ 20: '-шы',
+ 30: '-шы',
+ 40: '-шы',
+ 50: '-ші',
+ 60: '-шы',
+ 70: '-ші',
+ 80: '-ші',
+ 90: '-шы',
+ 100: '-ші'
+ };
+
+ var kk = moment__default.defineLocale('kk', {
+ months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),
+ monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),
+ weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),
+ weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),
+ weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Бүгін сағат] LT',
+ nextDay : '[Ертең сағат] LT',
+ nextWeek : 'dddd [сағат] LT',
+ lastDay : '[Кеше сағат] LT',
+ lastWeek : '[Өткен аптаның] dddd [сағат] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ішінде',
+ past : '%s бұрын',
+ s : 'бірнеше секунд',
+ m : 'бір минут',
+ mm : '%d минут',
+ h : 'бір сағат',
+ hh : '%d сағат',
+ d : 'бір күн',
+ dd : '%d күн',
+ M : 'бір ай',
+ MM : '%d ай',
+ y : 'бір жыл',
+ yy : '%d жыл'
+ },
+ ordinalParse: /\d{1,2}-(ші|шы)/,
+ ordinal : function (number) {
+ var a = number % 10,
+ b = number >= 100 ? 100 : null;
+ return number + (kk__suffixes[number] || kk__suffixes[a] || kk__suffixes[b]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+ });
+
+
+ var km = moment__default.defineLocale('km', {
+ months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
+ monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
longDateFormat: {
LT: 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
- LLL: 'D MMMM YYYY LT',
- LLLL: 'dddd, D MMMM YYYY LT'
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd, D MMMM YYYY HH:mm'
},
calendar: {
- sameDay: '[ថ្ងៃនៈ ម៉ោង] LT',
+ sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',
nextDay: '[ស្អែក ម៉ោង] LT',
nextWeek: 'dddd [ម៉ោង] LT',
lastDay: '[ម្សិលមិញ ម៉ោង] LT',
@@ -6708,15 +8279,8 @@
}
});
- //! moment.js locale configuration
- //! locale : korean (ko)
- //!
- //! authors
- //!
- //! - Kyungwook, Park : https://github.com/kyungw00k
- //! - Jeeeyul Lee <jeeeyul@gmail.com>
- var ko = _moment__default.defineLocale('ko', {
+ var ko = moment__default.defineLocale('ko', {
months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
@@ -6727,8 +8291,8 @@
LTS : 'A h시 m분 s초',
L : 'YYYY.MM.DD',
LL : 'YYYY년 MMMM D일',
- LLL : 'YYYY년 MMMM D일 LT',
- LLLL : 'YYYY년 MMMM D일 dddd LT'
+ LLL : 'YYYY년 MMMM D일 A h시 m분',
+ LLLL : 'YYYY년 MMMM D일 dddd A h시 m분'
},
calendar : {
sameDay : '오늘 LT',
@@ -6741,17 +8305,17 @@
relativeTime : {
future : '%s 후',
past : '%s 전',
- s : '몇초',
+ s : '몇 초',
ss : '%d초',
m : '일분',
mm : '%d분',
- h : '한시간',
+ h : '한 시간',
hh : '%d시간',
d : '하루',
dd : '%d일',
- M : '한달',
+ M : '한 달',
MM : '%d달',
- y : '일년',
+ y : '일 년',
yy : '%d년'
},
ordinalParse : /\d{1,2}일/,
@@ -6765,9 +8329,80 @@
}
});
- //! moment.js locale configuration
- //! locale : Luxembourgish (lb)
- //! author : mweimerskirch : https://github.com/mweimerskirch, David Raison : https://github.com/kwisatz
+
+
+ var ky__suffixes = {
+ 0: '-чү',
+ 1: '-чи',
+ 2: '-чи',
+ 3: '-чү',
+ 4: '-чү',
+ 5: '-чи',
+ 6: '-чы',
+ 7: '-чи',
+ 8: '-чи',
+ 9: '-чу',
+ 10: '-чу',
+ 20: '-чы',
+ 30: '-чу',
+ 40: '-чы',
+ 50: '-чү',
+ 60: '-чы',
+ 70: '-чи',
+ 80: '-чи',
+ 90: '-чу',
+ 100: '-чү'
+ };
+
+ var ky = moment__default.defineLocale('ky', {
+ months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
+ monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
+ weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),
+ weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),
+ weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Бүгүн саат] LT',
+ nextDay : '[Эртең саат] LT',
+ nextWeek : 'dddd [саат] LT',
+ lastDay : '[Кече саат] LT',
+ lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ичинде',
+ past : '%s мурун',
+ s : 'бирнече секунд',
+ m : 'бир мүнөт',
+ mm : '%d мүнөт',
+ h : 'бир саат',
+ hh : '%d саат',
+ d : 'бир күн',
+ dd : '%d күн',
+ M : 'бир ай',
+ MM : '%d ай',
+ y : 'бир жыл',
+ yy : '%d жыл'
+ },
+ ordinalParse: /\d{1,2}-(чи|чы|чү|чу)/,
+ ordinal : function (number) {
+ var a = number % 10,
+ b = number >= 100 ? 100 : null;
+ return number + (ky__suffixes[number] || ky__suffixes[a] || ky__suffixes[b]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+ });
+
function lb__processRelativeTime(number, withoutSuffix, key, isFuture) {
var format = {
@@ -6834,19 +8469,21 @@
}
}
- var lb = _moment__default.defineLocale('lb', {
+ var lb = moment__default.defineLocale('lb', {
months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),
weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
longDateFormat: {
LT: 'H:mm [Auer]',
LTS: 'H:mm:ss [Auer]',
L: 'DD.MM.YYYY',
LL: 'D. MMMM YYYY',
- LLL: 'D. MMMM YYYY LT',
- LLLL: 'dddd, D. MMMM YYYY LT'
+ LLL: 'D. MMMM YYYY H:mm [Auer]',
+ LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'
},
calendar: {
sameDay: '[Haut um] LT',
@@ -6888,9 +8525,62 @@
}
});
- //! moment.js locale configuration
- //! locale : Lithuanian (lt)
- //! author : Mindaugas Mozūras : https://github.com/mmozuras
+
+ var lo = moment__default.defineLocale('lo', {
+ months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
+ monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
+ weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
+ weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
+ weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'ວັນdddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,
+ isPM: function (input) {
+ return input === 'ຕອນແລງ';
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ຕອນເຊົ້າ';
+ } else {
+ return 'ຕອນແລງ';
+ }
+ },
+ calendar : {
+ sameDay : '[ມື້ນີ້ເວລາ] LT',
+ nextDay : '[ມື້ອື່ນເວລາ] LT',
+ nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',
+ lastDay : '[ມື້ວານນີ້ເວລາ] LT',
+ lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ອີກ %s',
+ past : '%sຜ່ານມາ',
+ s : 'ບໍ່ເທົ່າໃດວິນາທີ',
+ m : '1 ນາທີ',
+ mm : '%d ນາທີ',
+ h : '1 ຊົ່ວໂມງ',
+ hh : '%d ຊົ່ວໂມງ',
+ d : '1 ມື້',
+ dd : '%d ມື້',
+ M : '1 ເດືອນ',
+ MM : '%d ເດືອນ',
+ y : '1 ປີ',
+ yy : '%d ປີ'
+ },
+ ordinalParse: /(ທີ່)\d{1,2}/,
+ ordinal : function (number) {
+ return 'ທີ່' + number;
+ }
+ });
+
var lt__units = {
'm' : 'minutė_minutės_minutę',
@@ -6903,8 +8593,7 @@
'MM': 'mėnesiai_mėnesių_mėnesius',
'y' : 'metai_metų_metus',
'yy': 'metai_metų_metus'
- },
- weekDays = 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_');
+ };
function translateSeconds(number, withoutSuffix, key, isFuture) {
if (withoutSuffix) {
return 'kelios sekundės';
@@ -6935,29 +8624,32 @@
}
}
}
- function relativeWeekDay(moment, format) {
- var nominative = format.indexOf('dddd HH:mm') === -1,
- weekDay = weekDays[moment.day()];
- return nominative ? weekDay : weekDay.substring(0, weekDay.length - 2) + 'į';
- }
-
- var lt = _moment__default.defineLocale('lt', {
- months : 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),
+ var lt = moment__default.defineLocale('lt', {
+ months : {
+ format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),
+ standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),
+ isFormat: /D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?|MMMM?(\[[^\[\]]*\]|\s+)+D[oD]?/
+ },
monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
- weekdays : relativeWeekDay,
+ weekdays : {
+ format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),
+ standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),
+ isFormat: /dddd HH:mm/
+ },
weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'YYYY-MM-DD',
LL : 'YYYY [m.] MMMM D [d.]',
- LLL : 'YYYY [m.] MMMM D [d.], LT [val.]',
- LLLL : 'YYYY [m.] MMMM D [d.], dddd, LT [val.]',
+ LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
+ LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
l : 'YYYY-MM-DD',
ll : 'YYYY [m.] MMMM D [d.]',
- lll : 'YYYY [m.] MMMM D [d.], LT [val.]',
- llll : 'YYYY [m.] MMMM D [d.], ddd, LT [val.]'
+ lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
+ llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'
},
calendar : {
sameDay : '[Šiandien] LT',
@@ -6992,10 +8684,6 @@
}
});
- //! moment.js locale configuration
- //! locale : latvian (lv)
- //! author : Kristaps Karlsons : https://github.com/skakri
- //! author : Jānis Elmeris : https://github.com/JanisE
var lv__units = {
'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),
@@ -7015,11 +8703,11 @@
function lv__format(forms, number, withoutSuffix) {
if (withoutSuffix) {
// E.g. "21 minūte", "3 minūtes".
- return number % 10 === 1 && number !== 11 ? forms[2] : forms[3];
+ return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
} else {
// E.g. "21 minūtes" as in "pēc 21 minūtes".
// E.g. "3 minūtēm" as in "pēc 3 minūtēm".
- return number % 10 === 1 && number !== 11 ? forms[0] : forms[1];
+ return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
}
}
function lv__relativeTimeWithPlural(number, withoutSuffix, key) {
@@ -7032,19 +8720,20 @@
return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';
}
- var lv = _moment__default.defineLocale('lv', {
+ var lv = moment__default.defineLocale('lv', {
months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),
monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),
weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),
weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),
weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY.',
LL : 'YYYY. [gada] D. MMMM',
- LLL : 'YYYY. [gada] D. MMMM, LT',
- LLLL : 'YYYY. [gada] D. MMMM, dddd, LT'
+ LLL : 'YYYY. [gada] D. MMMM, HH:mm',
+ LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'
},
calendar : {
sameDay : '[Šodien pulksten] LT',
@@ -7077,9 +8766,6 @@
}
});
- //! moment.js locale configuration
- //! locale : Montenegrin (me)
- //! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac
var me__translator = {
words: { //Different grammatical cases
@@ -7104,19 +8790,21 @@
}
};
- var me = _moment__default.defineLocale('me', {
- months: ['januar', 'februar', 'mart', 'april', 'maj', 'jun', 'jul', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar'],
- monthsShort: ['jan.', 'feb.', 'mar.', 'apr.', 'maj', 'jun', 'jul', 'avg.', 'sep.', 'okt.', 'nov.', 'dec.'],
- weekdays: ['nedjelja', 'ponedjeljak', 'utorak', 'srijeda', 'četvrtak', 'petak', 'subota'],
- weekdaysShort: ['ned.', 'pon.', 'uto.', 'sri.', 'čet.', 'pet.', 'sub.'],
- weekdaysMin: ['ne', 'po', 'ut', 'sr', 'če', 'pe', 'su'],
+ var me = moment__default.defineLocale('me', {
+ months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
+ monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact : true,
+ weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+ weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
longDateFormat: {
LT: 'H:mm',
- LTS : 'LT:ss',
- L: 'DD. MM. YYYY',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
LL: 'D. MMMM YYYY',
- LLL: 'D. MMMM YYYY LT',
- LLLL: 'dddd, D. MMMM YYYY LT'
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
},
calendar: {
sameDay: '[danas u] LT',
@@ -7124,17 +8812,17 @@
nextWeek: function () {
switch (this.day()) {
- case 0:
- return '[u] [nedjelju] [u] LT';
- case 3:
- return '[u] [srijedu] [u] LT';
- case 6:
- return '[u] [subotu] [u] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[u] dddd [u] LT';
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
}
},
lastDay : '[juče u] LT',
@@ -7175,11 +8863,58 @@
}
});
- //! moment.js locale configuration
- //! locale : macedonian (mk)
- //! author : Borislav Mickov : https://github.com/B0k0
- var mk = _moment__default.defineLocale('mk', {
+ var mi = moment__default.defineLocale('mi', {
+ months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),
+ monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),
+ monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
+ weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),
+ weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
+ weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY [i] HH:mm',
+ LLLL: 'dddd, D MMMM YYYY [i] HH:mm'
+ },
+ calendar: {
+ sameDay: '[i teie mahana, i] LT',
+ nextDay: '[apopo i] LT',
+ nextWeek: 'dddd [i] LT',
+ lastDay: '[inanahi i] LT',
+ lastWeek: 'dddd [whakamutunga i] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'i roto i %s',
+ past: '%s i mua',
+ s: 'te hēkona ruarua',
+ m: 'he meneti',
+ mm: '%d meneti',
+ h: 'te haora',
+ hh: '%d haora',
+ d: 'he ra',
+ dd: '%d ra',
+ M: 'he marama',
+ MM: '%d marama',
+ y: 'he tau',
+ yy: '%d tau'
+ },
+ ordinalParse: /\d{1,2}º/,
+ ordinal: '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ var mk = moment__default.defineLocale('mk', {
months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),
monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),
weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),
@@ -7187,28 +8922,28 @@
weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'D.MM.YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd, D MMMM YYYY H:mm'
},
calendar : {
sameDay : '[Денес во] LT',
nextDay : '[Утре во] LT',
- nextWeek : 'dddd [во] LT',
+ nextWeek : '[Во] dddd [во] LT',
lastDay : '[Вчера во] LT',
lastWeek : function () {
switch (this.day()) {
- case 0:
- case 3:
- case 6:
- return '[Во изминатата] dddd [во] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[Во изминатиот] dddd [во] LT';
+ case 0:
+ case 3:
+ case 6:
+ return '[Изминатата] dddd [во] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[Изминатиот] dddd [во] LT';
}
},
sameElse : 'L'
@@ -7254,13 +8989,11 @@
}
});
- //! moment.js locale configuration
- //! locale : malayalam (ml)
- //! author : Floyd Pink : https://github.com/floydpink
- var ml = _moment__default.defineLocale('ml', {
+ var ml = moment__default.defineLocale('ml', {
months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),
monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),
+ monthsParseExact : true,
weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),
weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),
weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
@@ -7269,8 +9002,8 @@
LTS : 'A h:mm:ss -നു',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY, LT',
- LLLL : 'dddd, D MMMM YYYY, LT'
+ LLL : 'D MMMM YYYY, A h:mm -നു',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'
},
calendar : {
sameDay : '[ഇന്ന്] LT',
@@ -7296,8 +9029,17 @@
yy : '%d വർഷം'
},
meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,
- isPM : function (input) {
- return /^(ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി)$/.test(input);
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'രാത്രി' && hour >= 4) ||
+ meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||
+ meridiem === 'വൈകുന്നേരം') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
},
meridiem : function (hour, minute, isLower) {
if (hour < 4) {
@@ -7314,9 +9056,6 @@
}
});
- //! moment.js locale configuration
- //! locale : Marathi (mr)
- //! author : Harshad Kale : https://github.com/kalehv
var mr__symbolMap = {
'1': '१',
@@ -7343,9 +9082,46 @@
'०': '0'
};
- var mr = _moment__default.defineLocale('mr', {
+ function relativeTimeMr(number, withoutSuffix, string, isFuture)
+ {
+ var output = '';
+ if (withoutSuffix) {
+ switch (string) {
+ case 's': output = 'काही सेकंद'; break;
+ case 'm': output = 'एक मिनिट'; break;
+ case 'mm': output = '%d मिनिटे'; break;
+ case 'h': output = 'एक तास'; break;
+ case 'hh': output = '%d तास'; break;
+ case 'd': output = 'एक दिवस'; break;
+ case 'dd': output = '%d दिवस'; break;
+ case 'M': output = 'एक महिना'; break;
+ case 'MM': output = '%d महिने'; break;
+ case 'y': output = 'एक वर्ष'; break;
+ case 'yy': output = '%d वर्षे'; break;
+ }
+ }
+ else {
+ switch (string) {
+ case 's': output = 'काही सेकंदां'; break;
+ case 'm': output = 'एका मिनिटा'; break;
+ case 'mm': output = '%d मिनिटां'; break;
+ case 'h': output = 'एका तासा'; break;
+ case 'hh': output = '%d तासां'; break;
+ case 'd': output = 'एका दिवसा'; break;
+ case 'dd': output = '%d दिवसां'; break;
+ case 'M': output = 'एका महिन्या'; break;
+ case 'MM': output = '%d महिन्यां'; break;
+ case 'y': output = 'एका वर्षा'; break;
+ case 'yy': output = '%d वर्षां'; break;
+ }
+ }
+ return output.replace(/%d/i, number);
+ }
+
+ var mr = moment__default.defineLocale('mr', {
months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),
monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),
+ monthsParseExact : true,
weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),
weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
@@ -7354,8 +9130,8 @@
LTS : 'A h:mm:ss वाजता',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY, LT',
- LLLL : 'dddd, D MMMM YYYY, LT'
+ LLL : 'D MMMM YYYY, A h:mm वाजता',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'
},
calendar : {
sameDay : '[आज] LT',
@@ -7366,19 +9142,19 @@
sameElse : 'L'
},
relativeTime : {
- future : '%s नंतर',
- past : '%s पूर्वी',
- s : 'सेकंद',
- m: 'एक मिनिट',
- mm: '%d मिनिटे',
- h : 'एक तास',
- hh : '%d तास',
- d : 'एक दिवस',
- dd : '%d दिवस',
- M : 'एक महिना',
- MM : '%d महिने',
- y : 'एक वर्ष',
- yy : '%d वर्षे'
+ future: '%sमध्ये',
+ past: '%sपूर्वी',
+ s: relativeTimeMr,
+ m: relativeTimeMr,
+ mm: relativeTimeMr,
+ h: relativeTimeMr,
+ hh: relativeTimeMr,
+ d: relativeTimeMr,
+ dd: relativeTimeMr,
+ M: relativeTimeMr,
+ MM: relativeTimeMr,
+ y: relativeTimeMr,
+ yy: relativeTimeMr
},
preparse: function (string) {
return string.replace(/[१२३४५६७८९०]/g, function (match) {
@@ -7424,11 +9200,76 @@
}
});
- //! moment.js locale configuration
- //! locale : Bahasa Malaysia (ms-MY)
- //! author : Weldan Jamili : https://github.com/weldan
- var ms_my = _moment__default.defineLocale('ms-my', {
+ var ms_my = moment__default.defineLocale('ms-my', {
+ months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
+ monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
+ weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
+ weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
+ weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /pagi|tengahari|petang|malam/,
+ meridiemHour: function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'pagi') {
+ return hour;
+ } else if (meridiem === 'tengahari') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'petang' || meridiem === 'malam') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'pagi';
+ } else if (hours < 15) {
+ return 'tengahari';
+ } else if (hours < 19) {
+ return 'petang';
+ } else {
+ return 'malam';
+ }
+ },
+ calendar : {
+ sameDay : '[Hari ini pukul] LT',
+ nextDay : '[Esok pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kelmarin pukul] LT',
+ lastWeek : 'dddd [lepas pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'dalam %s',
+ past : '%s yang lepas',
+ s : 'beberapa saat',
+ m : 'seminit',
+ mm : '%d minit',
+ h : 'sejam',
+ hh : '%d jam',
+ d : 'sehari',
+ dd : '%d hari',
+ M : 'sebulan',
+ MM : '%d bulan',
+ y : 'setahun',
+ yy : '%d tahun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+ });
+
+
+ var locale_ms = moment__default.defineLocale('ms', {
months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
@@ -7436,11 +9277,11 @@
weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
longDateFormat : {
LT : 'HH.mm',
- LTS : 'LT.ss',
+ LTS : 'HH.mm.ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY [pukul] LT',
- LLLL : 'dddd, D MMMM YYYY [pukul] LT'
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
},
meridiemParse: /pagi|tengahari|petang|malam/,
meridiemHour: function (hour, meridiem) {
@@ -7495,9 +9336,6 @@
}
});
- //! moment.js locale configuration
- //! locale : Burmese (my)
- //! author : Squar team, mysquar.com
var my__symbolMap = {
'1': '၁',
@@ -7523,7 +9361,7 @@
'၀': '0'
};
- var my = _moment__default.defineLocale('my', {
+ var my = moment__default.defineLocale('my', {
months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),
monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),
weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),
@@ -7535,8 +9373,8 @@
LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
- LLL: 'D MMMM YYYY LT',
- LLLL: 'dddd D MMMM YYYY LT'
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd D MMMM YYYY HH:mm'
},
calendar: {
sameDay: '[ယနေ.] LT [မှာ]',
@@ -7577,24 +9415,22 @@
}
});
- //! moment.js locale configuration
- //! locale : norwegian bokmål (nb)
- //! authors : Espen Hovlandsdal : https://github.com/rexxars
- //! Sigurd Gartmann : https://github.com/sigurdga
- var nb = _moment__default.defineLocale('nb', {
+ var nb = moment__default.defineLocale('nb', {
months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
- monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
+ monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),
+ monthsParseExact : true,
weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
- weekdaysShort : 'søn_man_tirs_ons_tors_fre_lør'.split('_'),
+ weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),
weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
- LT : 'H.mm',
- LTS : 'LT.ss',
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY [kl.] LT',
- LLLL : 'dddd D. MMMM YYYY [kl.] LT'
+ LLL : 'D. MMMM YYYY [kl.] HH:mm',
+ LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
},
calendar : {
sameDay: '[i dag kl.] LT',
@@ -7606,7 +9442,7 @@
},
relativeTime : {
future : 'om %s',
- past : 'for %s siden',
+ past : '%s siden',
s : 'noen sekunder',
m : 'ett minutt',
mm : '%d minutter',
@@ -7627,9 +9463,6 @@
}
});
- //! moment.js locale configuration
- //! locale : nepali/nepalese
- //! author : suvash : https://github.com/suvash
var ne__symbolMap = {
'1': '१',
@@ -7656,19 +9489,21 @@
'०': '0'
};
- var ne = _moment__default.defineLocale('ne', {
+ var ne = moment__default.defineLocale('ne', {
months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),
monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),
+ monthsParseExact : true,
weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),
weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
- weekdaysMin : 'आइ._सो._मङ्_बु._बि._शु._श.'.split('_'),
+ weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'Aको h:mm बजे',
LTS : 'Aको h:mm:ss बजे',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY, LT',
- LLLL : 'dddd, D MMMM YYYY, LT'
+ LLL : 'D MMMM YYYY, Aको h:mm बजे',
+ LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'
},
preparse: function (string) {
return string.replace(/[१२३४५६७८९०]/g, function (match) {
@@ -7680,39 +9515,37 @@
return ne__symbolMap[match];
});
},
- meridiemParse: /राती|बिहान|दिउँसो|बेलुका|साँझ|राती/,
+ meridiemParse: /राति|बिहान|दिउँसो|साँझ/,
meridiemHour : function (hour, meridiem) {
if (hour === 12) {
hour = 0;
}
- if (meridiem === 'राती') {
- return hour < 3 ? hour : hour + 12;
+ if (meridiem === 'राति') {
+ return hour < 4 ? hour : hour + 12;
} else if (meridiem === 'बिहान') {
return hour;
} else if (meridiem === 'दिउँसो') {
return hour >= 10 ? hour : hour + 12;
- } else if (meridiem === 'बेलुका' || meridiem === 'साँझ') {
+ } else if (meridiem === 'साँझ') {
return hour + 12;
}
},
meridiem : function (hour, minute, isLower) {
if (hour < 3) {
- return 'राती';
- } else if (hour < 10) {
+ return 'राति';
+ } else if (hour < 12) {
return 'बिहान';
- } else if (hour < 15) {
+ } else if (hour < 16) {
return 'दिउँसो';
- } else if (hour < 18) {
- return 'बेलुका';
} else if (hour < 20) {
return 'साँझ';
} else {
- return 'राती';
+ return 'राति';
}
},
calendar : {
sameDay : '[आज] LT',
- nextDay : '[भोली] LT',
+ nextDay : '[भोलि] LT',
nextWeek : '[आउँदो] dddd[,] LT',
lastDay : '[हिजो] LT',
lastWeek : '[गएको] dddd[,] LT',
@@ -7720,8 +9553,8 @@
},
relativeTime : {
future : '%sमा',
- past : '%s अगाडी',
- s : 'केही समय',
+ past : '%s अगाडि',
+ s : 'केही क्षण',
m : 'एक मिनेट',
mm : '%d मिनेट',
h : 'एक घण्टा',
@@ -7734,19 +9567,19 @@
yy : '%d बर्ष'
},
week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
}
});
- //! moment.js locale configuration
- //! locale : dutch (nl)
- //! author : Joris Röling : https://github.com/jjupiter
var nl__monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),
nl__monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
- var nl = _moment__default.defineLocale('nl', {
+ var nl__monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];
+ var nl__monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
+
+ var nl = moment__default.defineLocale('nl', {
months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
monthsShort : function (m, format) {
if (/-MMM-/.test(format)) {
@@ -7755,16 +9588,27 @@
return nl__monthsShortWithDots[m.month()];
}
},
+
+ monthsRegex: nl__monthsRegex,
+ monthsShortRegex: nl__monthsRegex,
+ monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,
+ monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
+
+ monthsParse : nl__monthsParse,
+ longMonthsParse : nl__monthsParse,
+ shortMonthsParse : nl__monthsParse,
+
weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD-MM-YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[vandaag om] LT',
@@ -7799,11 +9643,8 @@
}
});
- //! moment.js locale configuration
- //! locale : norwegian nynorsk (nn)
- //! author : https://github.com/mechuwind
- var nn = _moment__default.defineLocale('nn', {
+ var nn = moment__default.defineLocale('nn', {
months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
@@ -7811,11 +9652,11 @@
weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
- LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY [kl.] H:mm',
+ LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
},
calendar : {
sameDay: '[I dag klokka] LT',
@@ -7827,7 +9668,7 @@
},
relativeTime : {
future : 'om %s',
- past : 'for %s sidan',
+ past : '%s sidan',
s : 'nokre sekund',
m : 'eit minutt',
mm : '%d minutt',
@@ -7848,9 +9689,116 @@
}
});
- //! moment.js locale configuration
- //! locale : polish (pl)
- //! author : Rafal Hirsz : https://github.com/evoL
+
+ var pa_in__symbolMap = {
+ '1': '੧',
+ '2': '੨',
+ '3': '੩',
+ '4': '੪',
+ '5': '੫',
+ '6': '੬',
+ '7': '੭',
+ '8': '੮',
+ '9': '੯',
+ '0': '੦'
+ },
+ pa_in__numberMap = {
+ '੧': '1',
+ '੨': '2',
+ '੩': '3',
+ '੪': '4',
+ '੫': '5',
+ '੬': '6',
+ '੭': '7',
+ '੮': '8',
+ '੯': '9',
+ '੦': '0'
+ };
+
+ var pa_in = moment__default.defineLocale('pa-in', {
+ // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi.
+ months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
+ monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
+ weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),
+ weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
+ weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm ਵਜੇ',
+ LTS : 'A h:mm:ss ਵਜੇ',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'
+ },
+ calendar : {
+ sameDay : '[ਅਜ] LT',
+ nextDay : '[ਕਲ] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[ਕਲ] LT',
+ lastWeek : '[ਪਿਛਲੇ] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ਵਿੱਚ',
+ past : '%s ਪਿਛਲੇ',
+ s : 'ਕੁਝ ਸਕਿੰਟ',
+ m : 'ਇਕ ਮਿੰਟ',
+ mm : '%d ਮਿੰਟ',
+ h : 'ਇੱਕ ਘੰਟਾ',
+ hh : '%d ਘੰਟੇ',
+ d : 'ਇੱਕ ਦਿਨ',
+ dd : '%d ਦਿਨ',
+ M : 'ਇੱਕ ਮਹੀਨਾ',
+ MM : '%d ਮਹੀਨੇ',
+ y : 'ਇੱਕ ਸਾਲ',
+ yy : '%d ਸਾਲ'
+ },
+ preparse: function (string) {
+ return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {
+ return pa_in__numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return pa_in__symbolMap[match];
+ });
+ },
+ // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
+ // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
+ meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'ਰਾਤ') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'ਸਵੇਰ') {
+ return hour;
+ } else if (meridiem === 'ਦੁਪਹਿਰ') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'ਸ਼ਾਮ') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ਰਾਤ';
+ } else if (hour < 10) {
+ return 'ਸਵੇਰ';
+ } else if (hour < 17) {
+ return 'ਦੁਪਹਿਰ';
+ } else if (hour < 20) {
+ return 'ਸ਼ਾਮ';
+ } else {
+ return 'ਰਾਤ';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+ });
+
var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),
monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');
@@ -7860,22 +9808,22 @@
function pl__translate(number, withoutSuffix, key) {
var result = number + ' ';
switch (key) {
- case 'm':
- return withoutSuffix ? 'minuta' : 'minutę';
- case 'mm':
- return result + (pl__plural(number) ? 'minuty' : 'minut');
- case 'h':
- return withoutSuffix ? 'godzina' : 'godzinę';
- case 'hh':
- return result + (pl__plural(number) ? 'godziny' : 'godzin');
- case 'MM':
- return result + (pl__plural(number) ? 'miesiące' : 'miesięcy');
- case 'yy':
- return result + (pl__plural(number) ? 'lata' : 'lat');
- }
- }
-
- var pl = _moment__default.defineLocale('pl', {
+ case 'm':
+ return withoutSuffix ? 'minuta' : 'minutę';
+ case 'mm':
+ return result + (pl__plural(number) ? 'minuty' : 'minut');
+ case 'h':
+ return withoutSuffix ? 'godzina' : 'godzinę';
+ case 'hh':
+ return result + (pl__plural(number) ? 'godziny' : 'godzin');
+ case 'MM':
+ return result + (pl__plural(number) ? 'miesiące' : 'miesięcy');
+ case 'yy':
+ return result + (pl__plural(number) ? 'lata' : 'lat');
+ }
+ }
+
+ var pl = moment__default.defineLocale('pl', {
months : function (momentToFormat, format) {
if (format === '') {
// Hack: if format empty we know this is used to generate
@@ -7891,14 +9839,14 @@
monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),
weekdaysShort : 'nie_pon_wt_śr_czw_pt_sb'.split('_'),
- weekdaysMin : 'N_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
+ weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[Dziś o] LT',
@@ -7907,14 +9855,14 @@
lastDay: '[Wczoraj o] LT',
lastWeek: function () {
switch (this.day()) {
- case 0:
- return '[W zeszłą niedzielę o] LT';
- case 3:
- return '[W zeszłą środę o] LT';
- case 6:
- return '[W zeszłą sobotę o] LT';
- default:
- return '[W zeszły] dddd [o] LT';
+ case 0:
+ return '[W zeszłą niedzielę o] LT';
+ case 3:
+ return '[W zeszłą środę o] LT';
+ case 6:
+ return '[W zeszłą sobotę o] LT';
+ default:
+ return '[W zeszły] dddd [o] LT';
}
},
sameElse: 'L'
@@ -7942,23 +9890,21 @@
}
});
- //! moment.js locale configuration
- //! locale : brazilian portuguese (pt-br)
- //! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
- var pt_br = _moment__default.defineLocale('pt-br', {
+ var pt_br = moment__default.defineLocale('pt-br', {
months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
- weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'),
+ weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),
weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D [de] MMMM [de] YYYY',
- LLL : 'D [de] MMMM [de] YYYY [às] LT',
- LLLL : 'dddd, D [de] MMMM [de] YYYY [às] LT'
+ LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'
},
calendar : {
sameDay: '[Hoje às] LT',
@@ -7975,7 +9921,7 @@
relativeTime : {
future : 'em %s',
past : '%s atrás',
- s : 'segundos',
+ s : 'poucos segundos',
m : 'um minuto',
mm : '%d minutos',
h : 'uma hora',
@@ -7991,23 +9937,21 @@
ordinal : '%dº'
});
- //! moment.js locale configuration
- //! locale : portuguese (pt)
- //! author : Jefferson : https://github.com/jalex79
- var pt = _moment__default.defineLocale('pt', {
+ var pt = moment__default.defineLocale('pt', {
months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'),
weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D [de] MMMM [de] YYYY',
- LLL : 'D [de] MMMM [de] YYYY LT',
- LLLL : 'dddd, D [de] MMMM [de] YYYY LT'
+ LLL : 'D [de] MMMM [de] YYYY HH:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'
},
calendar : {
sameDay: '[Hoje às] LT',
@@ -8044,10 +9988,6 @@
}
});
- //! moment.js locale configuration
- //! locale : romanian (ro)
- //! author : Vlad Gurdiga : https://github.com/gurdiga
- //! author : Valentin Agachi : https://github.com/avaly
function ro__relativeTimeWithPlural(number, withoutSuffix, key) {
var format = {
@@ -8064,15 +10004,16 @@
return number + separator + format[key];
}
- var ro = _moment__default.defineLocale('ro', {
+ var ro = moment__default.defineLocale('ro', {
months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),
monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),
+ monthsParseExact: true,
weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY H:mm',
@@ -8107,10 +10048,6 @@
}
});
- //! moment.js locale configuration
- //! locale : russian (ru)
- //! author : Viktorminator : https://github.com/Viktorminator
- //! Author : Menelion Elensúle : https://github.com/Oire
function ru__plural(word, num) {
var forms = word.split('_');
@@ -8131,72 +10068,90 @@
return number + ' ' + ru__plural(format[key], +number);
}
}
- function ru__monthsCaseReplace(m, format) {
- var months = {
- 'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
- 'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_')
+ var ru__monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];
+
+ // http://new.gramota.ru/spravka/rules/139-prop : § 103
+ // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
+ // CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
+ var ru = moment__default.defineLocale('ru', {
+ months : {
+ format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),
+ standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')
},
- nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
- 'accusative' :
- 'nominative';
- return months[nounCase][m.month()];
- }
- function ru__monthsShortCaseReplace(m, format) {
- var monthsShort = {
- 'nominative': 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
- 'accusative': 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_')
+ monthsShort : {
+ // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ?
+ format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),
+ standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')
},
- nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
- 'accusative' :
- 'nominative';
- return monthsShort[nounCase][m.month()];
- }
- function ru__weekdaysCaseReplace(m, format) {
- var weekdays = {
- 'nominative': 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
- 'accusative': 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_')
+ weekdays : {
+ standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
+ format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),
+ isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/
},
- nounCase = (/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/).test(format) ?
- 'accusative' :
- 'nominative';
- return weekdays[nounCase][m.day()];
- }
-
- var ru = _moment__default.defineLocale('ru', {
- months : ru__monthsCaseReplace,
- monthsShort : ru__monthsShortCaseReplace,
- weekdays : ru__weekdaysCaseReplace,
weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
- monthsParse : [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[й|я]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i],
+ monthsParse : ru__monthsParse,
+ longMonthsParse : ru__monthsParse,
+ shortMonthsParse : ru__monthsParse,
+
+ // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
+ monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+
+ // копия предыдущего
+ monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+
+ // полные названия с падежами
+ monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
+
+ // Выражение, которое соотвествует только сокращённым формам
+ monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY г.',
- LLL : 'D MMMM YYYY г., LT',
- LLLL : 'dddd, D MMMM YYYY г., LT'
+ LLL : 'D MMMM YYYY г., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY г., HH:mm'
},
calendar : {
sameDay: '[Сегодня в] LT',
nextDay: '[Завтра в] LT',
lastDay: '[Вчера в] LT',
- nextWeek: function () {
- return this.day() === 2 ? '[Во] dddd [в] LT' : '[В] dddd [в] LT';
+ nextWeek: function (now) {
+ if (now.week() !== this.week()) {
+ switch (this.day()) {
+ case 0:
+ return '[В следующее] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[В следующий] dddd [в] LT';
+ case 3:
+ case 5:
+ case 6:
+ return '[В следующую] dddd [в] LT';
+ }
+ } else {
+ if (this.day() === 2) {
+ return '[Во] dddd [в] LT';
+ } else {
+ return '[В] dddd [в] LT';
+ }
+ }
},
lastWeek: function (now) {
if (now.week() !== this.week()) {
switch (this.day()) {
- case 0:
- return '[В прошлое] dddd [в] LT';
- case 1:
- case 2:
- case 4:
- return '[В прошлый] dddd [в] LT';
- case 3:
- case 5:
- case 6:
- return '[В прошлую] dddd [в] LT';
+ case 0:
+ return '[В прошлое] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[В прошлый] dddd [в] LT';
+ case 3:
+ case 5:
+ case 6:
+ return '[В прошлую] dddd [в] LT';
}
} else {
if (this.day() === 2) {
@@ -8241,17 +10196,17 @@
ordinalParse: /\d{1,2}-(й|го|я)/,
ordinal: function (number, period) {
switch (period) {
- case 'M':
- case 'd':
- case 'DDD':
- return number + '-й';
- case 'D':
- return number + '-го';
- case 'w':
- case 'W':
- return number + '-я';
- default:
- return number;
+ case 'M':
+ case 'd':
+ case 'DDD':
+ return number + '-й';
+ case 'D':
+ return number + '-го';
+ case 'w':
+ case 'W':
+ return number + '-я';
+ default:
+ return number;
}
},
week : {
@@ -8260,23 +10215,69 @@
}
});
- //! moment.js locale configuration
- //! locale : Sinhalese (si)
- //! author : Sampath Sitinamaluwa : https://github.com/sampathsris
- var si = _moment__default.defineLocale('si', {
+
+ var se = moment__default.defineLocale('se', {
+ months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),
+ monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),
+ weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),
+ weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),
+ weekdaysMin : 's_v_m_g_d_b_L'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'MMMM D. [b.] YYYY',
+ LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',
+ LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'
+ },
+ calendar : {
+ sameDay: '[otne ti] LT',
+ nextDay: '[ihttin ti] LT',
+ nextWeek: 'dddd [ti] LT',
+ lastDay: '[ikte ti] LT',
+ lastWeek: '[ovddit] dddd [ti] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : '%s geažes',
+ past : 'maŋit %s',
+ s : 'moadde sekunddat',
+ m : 'okta minuhta',
+ mm : '%d minuhtat',
+ h : 'okta diimmu',
+ hh : '%d diimmut',
+ d : 'okta beaivi',
+ dd : '%d beaivvit',
+ M : 'okta mánnu',
+ MM : '%d mánut',
+ y : 'okta jahki',
+ yy : '%d jagit'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ /*jshint -W100*/
+ var si = moment__default.defineLocale('si', {
months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),
monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),
weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),
weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),
weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'a h:mm',
LTS : 'a h:mm:ss',
L : 'YYYY/MM/DD',
LL : 'YYYY MMMM D',
- LLL : 'YYYY MMMM D, LT',
- LLLL : 'YYYY MMMM D [වැනි] dddd, LTS'
+ LLL : 'YYYY MMMM D, a h:mm',
+ LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'
},
calendar : {
sameDay : '[අද] LT[ට]',
@@ -8305,6 +10306,10 @@
ordinal : function (number) {
return number + ' වැනි';
},
+ meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,
+ isPM : function (input) {
+ return input === 'ප.ව.' || input === 'පස් වරු';
+ },
meridiem : function (hours, minutes, isLower) {
if (hours > 11) {
return isLower ? 'ප.ව.' : 'පස් වරු';
@@ -8314,10 +10319,6 @@
}
});
- //! moment.js locale configuration
- //! locale : slovak (sk)
- //! author : Martin Minka : https://github.com/k2s
- //! based on work of petrbela : https://github.com/petrbela
var sk__months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),
sk__monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');
@@ -8327,113 +10328,105 @@
function sk__translate(number, withoutSuffix, key, isFuture) {
var result = number + ' ';
switch (key) {
- case 's': // a few seconds / in a few seconds / a few seconds ago
- return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';
- case 'm': // a minute / in a minute / a minute ago
- return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');
- case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
- if (withoutSuffix || isFuture) {
- return result + (sk__plural(number) ? 'minúty' : 'minút');
- } else {
- return result + 'minútami';
- }
- break;
- case 'h': // an hour / in an hour / an hour ago
- return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
- case 'hh': // 9 hours / in 9 hours / 9 hours ago
- if (withoutSuffix || isFuture) {
- return result + (sk__plural(number) ? 'hodiny' : 'hodín');
- } else {
- return result + 'hodinami';
- }
- break;
- case 'd': // a day / in a day / a day ago
- return (withoutSuffix || isFuture) ? 'deň' : 'dňom';
- case 'dd': // 9 days / in 9 days / 9 days ago
- if (withoutSuffix || isFuture) {
- return result + (sk__plural(number) ? 'dni' : 'dní');
- } else {
- return result + 'dňami';
- }
- break;
- case 'M': // a month / in a month / a month ago
- return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';
- case 'MM': // 9 months / in 9 months / 9 months ago
- if (withoutSuffix || isFuture) {
- return result + (sk__plural(number) ? 'mesiace' : 'mesiacov');
- } else {
- return result + 'mesiacmi';
- }
- break;
- case 'y': // a year / in a year / a year ago
- return (withoutSuffix || isFuture) ? 'rok' : 'rokom';
- case 'yy': // 9 years / in 9 years / 9 years ago
- if (withoutSuffix || isFuture) {
- return result + (sk__plural(number) ? 'roky' : 'rokov');
- } else {
- return result + 'rokmi';
- }
- break;
+ case 's': // a few seconds / in a few seconds / a few seconds ago
+ return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';
+ case 'm': // a minute / in a minute / a minute ago
+ return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');
+ case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+ if (withoutSuffix || isFuture) {
+ return result + (sk__plural(number) ? 'minúty' : 'minút');
+ } else {
+ return result + 'minútami';
+ }
+ break;
+ case 'h': // an hour / in an hour / an hour ago
+ return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
+ case 'hh': // 9 hours / in 9 hours / 9 hours ago
+ if (withoutSuffix || isFuture) {
+ return result + (sk__plural(number) ? 'hodiny' : 'hodín');
+ } else {
+ return result + 'hodinami';
+ }
+ break;
+ case 'd': // a day / in a day / a day ago
+ return (withoutSuffix || isFuture) ? 'deň' : 'dňom';
+ case 'dd': // 9 days / in 9 days / 9 days ago
+ if (withoutSuffix || isFuture) {
+ return result + (sk__plural(number) ? 'dni' : 'dní');
+ } else {
+ return result + 'dňami';
+ }
+ break;
+ case 'M': // a month / in a month / a month ago
+ return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';
+ case 'MM': // 9 months / in 9 months / 9 months ago
+ if (withoutSuffix || isFuture) {
+ return result + (sk__plural(number) ? 'mesiace' : 'mesiacov');
+ } else {
+ return result + 'mesiacmi';
+ }
+ break;
+ case 'y': // a year / in a year / a year ago
+ return (withoutSuffix || isFuture) ? 'rok' : 'rokom';
+ case 'yy': // 9 years / in 9 years / 9 years ago
+ if (withoutSuffix || isFuture) {
+ return result + (sk__plural(number) ? 'roky' : 'rokov');
+ } else {
+ return result + 'rokmi';
+ }
+ break;
}
}
- var sk = _moment__default.defineLocale('sk', {
+ var sk = moment__default.defineLocale('sk', {
months : sk__months,
monthsShort : sk__monthsShort,
- monthsParse : (function (months, monthsShort) {
- var i, _monthsParse = [];
- for (i = 0; i < 12; i++) {
- // use custom parser to solve problem with July (červenec)
- _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');
- }
- return _monthsParse;
- }(sk__months, sk__monthsShort)),
weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),
weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),
weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),
longDateFormat : {
LT: 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd D. MMMM YYYY H:mm'
},
calendar : {
sameDay: '[dnes o] LT',
nextDay: '[zajtra o] LT',
nextWeek: function () {
switch (this.day()) {
- case 0:
- return '[v nedeľu o] LT';
- case 1:
- case 2:
- return '[v] dddd [o] LT';
- case 3:
- return '[v stredu o] LT';
- case 4:
- return '[vo štvrtok o] LT';
- case 5:
- return '[v piatok o] LT';
- case 6:
- return '[v sobotu o] LT';
+ case 0:
+ return '[v nedeľu o] LT';
+ case 1:
+ case 2:
+ return '[v] dddd [o] LT';
+ case 3:
+ return '[v stredu o] LT';
+ case 4:
+ return '[vo štvrtok o] LT';
+ case 5:
+ return '[v piatok o] LT';
+ case 6:
+ return '[v sobotu o] LT';
}
},
lastDay: '[včera o] LT',
lastWeek: function () {
switch (this.day()) {
- case 0:
- return '[minulú nedeľu o] LT';
- case 1:
- case 2:
- return '[minulý] dddd [o] LT';
- case 3:
- return '[minulú stredu o] LT';
- case 4:
- case 5:
- return '[minulý] dddd [o] LT';
- case 6:
- return '[minulú sobotu o] LT';
+ case 0:
+ return '[minulú nedeľu o] LT';
+ case 1:
+ case 2:
+ return '[minulý] dddd [o] LT';
+ case 3:
+ return '[minulú stredu o] LT';
+ case 4:
+ case 5:
+ return '[minulý] dddd [o] LT';
+ case 6:
+ return '[minulú sobotu o] LT';
}
},
sameElse: 'L'
@@ -8461,94 +10454,93 @@
}
});
- //! moment.js locale configuration
- //! locale : slovenian (sl)
- //! author : Robert Sedovšek : https://github.com/sedovsek
function sl__processRelativeTime(number, withoutSuffix, key, isFuture) {
var result = number + ' ';
switch (key) {
- case 's':
- return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';
- case 'm':
- return withoutSuffix ? 'ena minuta' : 'eno minuto';
- case 'mm':
- if (number === 1) {
- result += withoutSuffix ? 'minuta' : 'minuto';
- } else if (number === 2) {
- result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
- } else if (number < 5) {
- result += withoutSuffix || isFuture ? 'minute' : 'minutami';
- } else {
- result += withoutSuffix || isFuture ? 'minut' : 'minutami';
- }
- return result;
- case 'h':
- return withoutSuffix ? 'ena ura' : 'eno uro';
- case 'hh':
- if (number === 1) {
- result += withoutSuffix ? 'ura' : 'uro';
- } else if (number === 2) {
- result += withoutSuffix || isFuture ? 'uri' : 'urama';
- } else if (number < 5) {
- result += withoutSuffix || isFuture ? 'ure' : 'urami';
- } else {
- result += withoutSuffix || isFuture ? 'ur' : 'urami';
- }
- return result;
- case 'd':
- return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
- case 'dd':
- if (number === 1) {
- result += withoutSuffix || isFuture ? 'dan' : 'dnem';
- } else if (number === 2) {
- result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
- } else {
- result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
- }
- return result;
- case 'M':
- return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
- case 'MM':
- if (number === 1) {
- result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
- } else if (number === 2) {
- result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
- } else if (number < 5) {
- result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
- } else {
- result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
- }
- return result;
- case 'y':
- return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
- case 'yy':
- if (number === 1) {
- result += withoutSuffix || isFuture ? 'leto' : 'letom';
- } else if (number === 2) {
- result += withoutSuffix || isFuture ? 'leti' : 'letoma';
- } else if (number < 5) {
- result += withoutSuffix || isFuture ? 'leta' : 'leti';
- } else {
- result += withoutSuffix || isFuture ? 'let' : 'leti';
- }
- return result;
+ case 's':
+ return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';
+ case 'm':
+ return withoutSuffix ? 'ena minuta' : 'eno minuto';
+ case 'mm':
+ if (number === 1) {
+ result += withoutSuffix ? 'minuta' : 'minuto';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'minute' : 'minutami';
+ } else {
+ result += withoutSuffix || isFuture ? 'minut' : 'minutami';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'ena ura' : 'eno uro';
+ case 'hh':
+ if (number === 1) {
+ result += withoutSuffix ? 'ura' : 'uro';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'uri' : 'urama';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'ure' : 'urami';
+ } else {
+ result += withoutSuffix || isFuture ? 'ur' : 'urami';
+ }
+ return result;
+ case 'd':
+ return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
+ case 'dd':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'dan' : 'dnem';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
+ } else {
+ result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
+ }
+ return result;
+ case 'M':
+ return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
+ case 'MM':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
+ } else {
+ result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
+ }
+ return result;
+ case 'y':
+ return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
+ case 'yy':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'leto' : 'letom';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'leti' : 'letoma';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'leta' : 'leti';
+ } else {
+ result += withoutSuffix || isFuture ? 'let' : 'leti';
+ }
+ return result;
}
}
- var sl = _moment__default.defineLocale('sl', {
+ var sl = moment__default.defineLocale('sl', {
months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),
monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
- L : 'DD. MM. YYYY',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd, D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
},
calendar : {
sameDay : '[danes ob] LT',
@@ -8556,33 +10548,33 @@
nextWeek : function () {
switch (this.day()) {
- case 0:
- return '[v] [nedeljo] [ob] LT';
- case 3:
- return '[v] [sredo] [ob] LT';
- case 6:
- return '[v] [soboto] [ob] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[v] dddd [ob] LT';
+ case 0:
+ return '[v] [nedeljo] [ob] LT';
+ case 3:
+ return '[v] [sredo] [ob] LT';
+ case 6:
+ return '[v] [soboto] [ob] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[v] dddd [ob] LT';
}
},
lastDay : '[včeraj ob] LT',
lastWeek : function () {
switch (this.day()) {
- case 0:
- return '[prejšnjo] [nedeljo] [ob] LT';
- case 3:
- return '[prejšnjo] [sredo] [ob] LT';
- case 6:
- return '[prejšnjo] [soboto] [ob] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[prejšnji] dddd [ob] LT';
+ case 0:
+ return '[prejšnjo] [nedeljo] [ob] LT';
+ case 3:
+ return '[prejšnjo] [sredo] [ob] LT';
+ case 6:
+ return '[prejšnjo] [soboto] [ob] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prejšnji] dddd [ob] LT';
}
},
sameElse : 'L'
@@ -8610,18 +10602,14 @@
}
});
- //! moment.js locale configuration
- //! locale : Albanian (sq)
- //! author : Flakërim Ismani : https://github.com/flakerimi
- //! author: Menelion Elensúle: https://github.com/Oire (tests)
- //! author : Oerd Cukalla : https://github.com/oerd (fixes)
- var sq = _moment__default.defineLocale('sq', {
+ var sq = moment__default.defineLocale('sq', {
months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),
monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),
weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),
weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),
+ weekdaysParseExact : true,
meridiemParse: /PD|MD/,
isPM: function (input) {
return input.charAt(0) === 'M';
@@ -8631,11 +10619,11 @@
},
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
},
calendar : {
sameDay : '[Sot në] LT',
@@ -8668,9 +10656,6 @@
}
});
- //! moment.js locale configuration
- //! locale : Serbian-cyrillic (sr-cyrl)
- //! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
var sr_cyrl__translator = {
words: { //Different grammatical cases
@@ -8695,36 +10680,38 @@
}
};
- var sr_cyrl = _moment__default.defineLocale('sr-cyrl', {
- months: ['јануар', 'фебруар', 'март', 'април', 'мај', 'јун', 'јул', 'август', 'септембар', 'октобар', 'новембар', 'децембар'],
- monthsShort: ['јан.', 'феб.', 'мар.', 'апр.', 'мај', 'јун', 'јул', 'авг.', 'сеп.', 'окт.', 'нов.', 'дец.'],
- weekdays: ['недеља', 'понедељак', 'уторак', 'среда', 'четвртак', 'петак', 'субота'],
- weekdaysShort: ['нед.', 'пон.', 'уто.', 'сре.', 'чет.', 'пет.', 'суб.'],
- weekdaysMin: ['не', 'по', 'ут', 'ср', 'че', 'пе', 'су'],
+ var sr_cyrl = moment__default.defineLocale('sr-cyrl', {
+ months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),
+ monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),
+ monthsParseExact: true,
+ weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),
+ weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),
+ weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),
+ weekdaysParseExact : true,
longDateFormat: {
LT: 'H:mm',
- LTS : 'LT:ss',
- L: 'DD. MM. YYYY',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
LL: 'D. MMMM YYYY',
- LLL: 'D. MMMM YYYY LT',
- LLLL: 'dddd, D. MMMM YYYY LT'
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
},
calendar: {
sameDay: '[данас у] LT',
nextDay: '[сутра у] LT',
nextWeek: function () {
switch (this.day()) {
- case 0:
- return '[у] [недељу] [у] LT';
- case 3:
- return '[у] [среду] [у] LT';
- case 6:
- return '[у] [суботу] [у] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[у] dddd [у] LT';
+ case 0:
+ return '[у] [недељу] [у] LT';
+ case 3:
+ return '[у] [среду] [у] LT';
+ case 6:
+ return '[у] [суботу] [у] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[у] dddd [у] LT';
}
},
lastDay : '[јуче у] LT',
@@ -8765,9 +10752,6 @@
}
});
- //! moment.js locale configuration
- //! locale : Serbian-latin (sr)
- //! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
var sr__translator = {
words: { //Different grammatical cases
@@ -8792,36 +10776,38 @@
}
};
- var sr = _moment__default.defineLocale('sr', {
- months: ['januar', 'februar', 'mart', 'april', 'maj', 'jun', 'jul', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar'],
- monthsShort: ['jan.', 'feb.', 'mar.', 'apr.', 'maj', 'jun', 'jul', 'avg.', 'sep.', 'okt.', 'nov.', 'dec.'],
- weekdays: ['nedelja', 'ponedeljak', 'utorak', 'sreda', 'četvrtak', 'petak', 'subota'],
- weekdaysShort: ['ned.', 'pon.', 'uto.', 'sre.', 'čet.', 'pet.', 'sub.'],
- weekdaysMin: ['ne', 'po', 'ut', 'sr', 'če', 'pe', 'su'],
+ var sr = moment__default.defineLocale('sr', {
+ months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
+ monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),
+ weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
longDateFormat: {
LT: 'H:mm',
- LTS : 'LT:ss',
- L: 'DD. MM. YYYY',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
LL: 'D. MMMM YYYY',
- LLL: 'D. MMMM YYYY LT',
- LLLL: 'dddd, D. MMMM YYYY LT'
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
},
calendar: {
sameDay: '[danas u] LT',
nextDay: '[sutra u] LT',
nextWeek: function () {
switch (this.day()) {
- case 0:
- return '[u] [nedelju] [u] LT';
- case 3:
- return '[u] [sredu] [u] LT';
- case 6:
- return '[u] [subotu] [u] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[u] dddd [u] LT';
+ case 0:
+ return '[u] [nedelju] [u] LT';
+ case 3:
+ return '[u] [sredu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
}
},
lastDay : '[juče u] LT',
@@ -8862,11 +10848,83 @@
}
});
- //! moment.js locale configuration
- //! locale : swedish (sv)
- //! author : Jens Alm : https://github.com/ulmus
- var sv = _moment__default.defineLocale('sv', {
+
+ var ss = moment__default.defineLocale('ss', {
+ months : "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'),
+ monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
+ weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),
+ weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
+ weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Namuhla nga] LT',
+ nextDay : '[Kusasa nga] LT',
+ nextWeek : 'dddd [nga] LT',
+ lastDay : '[Itolo nga] LT',
+ lastWeek : 'dddd [leliphelile] [nga] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'nga %s',
+ past : 'wenteka nga %s',
+ s : 'emizuzwana lomcane',
+ m : 'umzuzu',
+ mm : '%d emizuzu',
+ h : 'lihora',
+ hh : '%d emahora',
+ d : 'lilanga',
+ dd : '%d emalanga',
+ M : 'inyanga',
+ MM : '%d tinyanga',
+ y : 'umnyaka',
+ yy : '%d iminyaka'
+ },
+ meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'ekuseni';
+ } else if (hours < 15) {
+ return 'emini';
+ } else if (hours < 19) {
+ return 'entsambama';
+ } else {
+ return 'ebusuku';
+ }
+ },
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'ekuseni') {
+ return hour;
+ } else if (meridiem === 'emini') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
+ if (hour === 0) {
+ return 0;
+ }
+ return hour + 12;
+ }
+ },
+ ordinalParse: /\d{1,2}/,
+ ordinal : '%d',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ var sv = moment__default.defineLocale('sv', {
months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),
monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
@@ -8874,11 +10932,13 @@
weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'YYYY-MM-DD',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY [kl.] HH:mm',
+ LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd D MMM YYYY HH:mm'
},
calendar : {
sameDay: '[Idag] LT',
@@ -8918,11 +10978,77 @@
}
});
- //! moment.js locale configuration
- //! locale : tamil (ta)
- //! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
- var ta = _moment__default.defineLocale('ta', {
+ var sw = moment__default.defineLocale('sw', {
+ months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),
+ monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
+ weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),
+ weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
+ weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[leo saa] LT',
+ nextDay : '[kesho saa] LT',
+ nextWeek : '[wiki ijayo] dddd [saat] LT',
+ lastDay : '[jana] LT',
+ lastWeek : '[wiki iliyopita] dddd [saat] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s baadaye',
+ past : 'tokea %s',
+ s : 'hivi punde',
+ m : 'dakika moja',
+ mm : 'dakika %d',
+ h : 'saa limoja',
+ hh : 'masaa %d',
+ d : 'siku moja',
+ dd : 'masiku %d',
+ M : 'mwezi mmoja',
+ MM : 'miezi %d',
+ y : 'mwaka mmoja',
+ yy : 'miaka %d'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+ });
+
+
+ var ta__symbolMap = {
+ '1': '௧',
+ '2': '௨',
+ '3': '௩',
+ '4': '௪',
+ '5': '௫',
+ '6': '௬',
+ '7': '௭',
+ '8': '௮',
+ '9': '௯',
+ '0': '௦'
+ }, ta__numberMap = {
+ '௧': '1',
+ '௨': '2',
+ '௩': '3',
+ '௪': '4',
+ '௫': '5',
+ '௬': '6',
+ '௭': '7',
+ '௮': '8',
+ '௯': '9',
+ '௦': '0'
+ };
+
+ var ta = moment__default.defineLocale('ta', {
months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),
@@ -8930,11 +11056,11 @@
weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY, LT',
- LLLL : 'dddd, D MMMM YYYY, LT'
+ LLL : 'D MMMM YYYY, HH:mm',
+ LLLL : 'dddd, D MMMM YYYY, HH:mm'
},
calendar : {
sameDay : '[இன்று] LT',
@@ -8963,6 +11089,16 @@
ordinal : function (number) {
return number + 'வது';
},
+ preparse: function (string) {
+ return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
+ return ta__numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return ta__symbolMap[match];
+ });
+ },
// refer http://ta.wikipedia.org/s/1er1
meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,
meridiem : function (hour, minute, isLower) {
@@ -9002,23 +11138,97 @@
}
});
- //! moment.js locale configuration
- //! locale : thai (th)
- //! author : Kridsada Thanabulpong : https://github.com/sirn
- var th = _moment__default.defineLocale('th', {
+ var te = moment__default.defineLocale('te', {
+ months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),
+ monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),
+ weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),
+ weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm',
+ LTS : 'A h:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm'
+ },
+ calendar : {
+ sameDay : '[నేడు] LT',
+ nextDay : '[రేపు] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[నిన్న] LT',
+ lastWeek : '[గత] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s లో',
+ past : '%s క్రితం',
+ s : 'కొన్ని క్షణాలు',
+ m : 'ఒక నిమిషం',
+ mm : '%d నిమిషాలు',
+ h : 'ఒక గంట',
+ hh : '%d గంటలు',
+ d : 'ఒక రోజు',
+ dd : '%d రోజులు',
+ M : 'ఒక నెల',
+ MM : '%d నెలలు',
+ y : 'ఒక సంవత్సరం',
+ yy : '%d సంవత్సరాలు'
+ },
+ ordinalParse : /\d{1,2}వ/,
+ ordinal : '%dవ',
+ meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'రాత్రి') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'ఉదయం') {
+ return hour;
+ } else if (meridiem === 'మధ్యాహ్నం') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'సాయంత్రం') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'రాత్రి';
+ } else if (hour < 10) {
+ return 'ఉదయం';
+ } else if (hour < 17) {
+ return 'మధ్యాహ్నం';
+ } else if (hour < 20) {
+ return 'సాయంత్రం';
+ } else {
+ return 'రాత్రి';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+ });
+
+
+ var th = moment__default.defineLocale('th', {
months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),
- monthsShort : 'มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา'.split('_'),
+ monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),
+ monthsParseExact: true,
weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference
weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
- LT : 'H นาฬิกา m นาที',
- LTS : 'LT s วินาที',
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
L : 'YYYY/MM/DD',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY เวลา LT',
- LLLL : 'วันddddที่ D MMMM YYYY เวลา LT'
+ LLL : 'D MMMM YYYY เวลา H:mm',
+ LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'
},
meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,
isPM: function (input) {
@@ -9056,11 +11266,8 @@
}
});
- //! moment.js locale configuration
- //! locale : Tagalog/Filipino (tl-ph)
- //! author : Dan Hagman
- var tl_ph = _moment__default.defineLocale('tl-ph', {
+ var tl_ph = moment__default.defineLocale('tl-ph', {
months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),
monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),
@@ -9068,11 +11275,11 @@
weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'MM/D/YYYY',
LL : 'MMMM D, YYYY',
- LLL : 'MMMM D, YYYY LT',
- LLLL : 'dddd, MMMM DD, YYYY LT'
+ LLL : 'MMMM D, YYYY HH:mm',
+ LLLL : 'dddd, MMMM DD, YYYY HH:mm'
},
calendar : {
sameDay: '[Ngayon sa] LT',
@@ -9107,10 +11314,112 @@
}
});
- //! moment.js locale configuration
- //! locale : turkish (tr)
- //! authors : Erhan Gundogan : https://github.com/erhangundogan,
- //! Burak Yiğit Kaya: https://github.com/BYK
+
+ var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');
+
+ function translateFuture(output) {
+ var time = output;
+ time = (output.indexOf('jaj') !== -1) ?
+ time.slice(0, -3) + 'leS' :
+ (output.indexOf('jar') !== -1) ?
+ time.slice(0, -3) + 'waQ' :
+ (output.indexOf('DIS') !== -1) ?
+ time.slice(0, -3) + 'nem' :
+ time + ' pIq';
+ return time;
+ }
+
+ function translatePast(output) {
+ var time = output;
+ time = (output.indexOf('jaj') !== -1) ?
+ time.slice(0, -3) + 'Hu’' :
+ (output.indexOf('jar') !== -1) ?
+ time.slice(0, -3) + 'wen' :
+ (output.indexOf('DIS') !== -1) ?
+ time.slice(0, -3) + 'ben' :
+ time + ' ret';
+ return time;
+ }
+
+ function tlh__translate(number, withoutSuffix, string, isFuture) {
+ var numberNoun = numberAsNoun(number);
+ switch (string) {
+ case 'mm':
+ return numberNoun + ' tup';
+ case 'hh':
+ return numberNoun + ' rep';
+ case 'dd':
+ return numberNoun + ' jaj';
+ case 'MM':
+ return numberNoun + ' jar';
+ case 'yy':
+ return numberNoun + ' DIS';
+ }
+ }
+
+ function numberAsNoun(number) {
+ var hundred = Math.floor((number % 1000) / 100),
+ ten = Math.floor((number % 100) / 10),
+ one = number % 10,
+ word = '';
+ if (hundred > 0) {
+ word += numbersNouns[hundred] + 'vatlh';
+ }
+ if (ten > 0) {
+ word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';
+ }
+ if (one > 0) {
+ word += ((word !== '') ? ' ' : '') + numbersNouns[one];
+ }
+ return (word === '') ? 'pagh' : word;
+ }
+
+ var tlh = moment__default.defineLocale('tlh', {
+ months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),
+ monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[DaHjaj] LT',
+ nextDay: '[wa’leS] LT',
+ nextWeek: 'LLL',
+ lastDay: '[wa’Hu’] LT',
+ lastWeek: 'LLL',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : translateFuture,
+ past : translatePast,
+ s : 'puS lup',
+ m : 'wa’ tup',
+ mm : tlh__translate,
+ h : 'wa’ rep',
+ hh : tlh__translate,
+ d : 'wa’ jaj',
+ dd : tlh__translate,
+ M : 'wa’ jar',
+ MM : tlh__translate,
+ y : 'wa’ DIS',
+ yy : tlh__translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
var tr__suffixes = {
1: '\'inci',
@@ -9133,7 +11442,7 @@
90: '\'ıncı'
};
- var tr = _moment__default.defineLocale('tr', {
+ var tr = moment__default.defineLocale('tr', {
months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),
monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),
weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),
@@ -9141,11 +11450,11 @@
weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
},
calendar : {
sameDay : '[bugün saat] LT',
@@ -9186,11 +11495,84 @@
}
});
- //! moment.js locale configuration
- //! locale : Morocco Central Atlas Tamaziɣt in Latin (tzm-latn)
- //! author : Abdel Said : https://github.com/abdelsaid
- var tzm_latn = _moment__default.defineLocale('tzm-latn', {
+ // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
+ // This is currently too difficult (maybe even impossible) to add.
+ var tzl = moment__default.defineLocale('tzl', {
+ months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
+ weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),
+ weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),
+ weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM [dallas] YYYY',
+ LLL : 'D. MMMM [dallas] YYYY HH.mm',
+ LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'
+ },
+ meridiemParse: /d\'o|d\'a/i,
+ isPM : function (input) {
+ return 'd\'o' === input.toLowerCase();
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'd\'o' : 'D\'O';
+ } else {
+ return isLower ? 'd\'a' : 'D\'A';
+ }
+ },
+ calendar : {
+ sameDay : '[oxhi à] LT',
+ nextDay : '[demà à] LT',
+ nextWeek : 'dddd [à] LT',
+ lastDay : '[ieiri à] LT',
+ lastWeek : '[sür el] dddd [lasteu à] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'osprei %s',
+ past : 'ja%s',
+ s : tzl__processRelativeTime,
+ m : tzl__processRelativeTime,
+ mm : tzl__processRelativeTime,
+ h : tzl__processRelativeTime,
+ hh : tzl__processRelativeTime,
+ d : tzl__processRelativeTime,
+ dd : tzl__processRelativeTime,
+ M : tzl__processRelativeTime,
+ MM : tzl__processRelativeTime,
+ y : tzl__processRelativeTime,
+ yy : tzl__processRelativeTime
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+ function tzl__processRelativeTime(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 's': ['viensas secunds', '\'iensas secunds'],
+ 'm': ['\'n míut', '\'iens míut'],
+ 'mm': [number + ' míuts', '' + number + ' míuts'],
+ 'h': ['\'n þora', '\'iensa þora'],
+ 'hh': [number + ' þoras', '' + number + ' þoras'],
+ 'd': ['\'n ziua', '\'iensa ziua'],
+ 'dd': [number + ' ziuas', '' + number + ' ziuas'],
+ 'M': ['\'n mes', '\'iens mes'],
+ 'MM': [number + ' mesen', '' + number + ' mesen'],
+ 'y': ['\'n ar', '\'iens ar'],
+ 'yy': [number + ' ars', '' + number + ' ars']
+ };
+ return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);
+ }
+
+
+ var tzm_latn = moment__default.defineLocale('tzm-latn', {
months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
@@ -9198,11 +11580,11 @@
weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[asdkh g] LT',
@@ -9233,11 +11615,8 @@
}
});
- //! moment.js locale configuration
- //! locale : Morocco Central Atlas Tamaziɣt (tzm)
- //! author : Abdel Said : https://github.com/abdelsaid
- var tzm = _moment__default.defineLocale('tzm', {
+ var tzm = moment__default.defineLocale('tzm', {
months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
@@ -9245,11 +11624,11 @@
weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS: 'LT:ss',
+ LTS: 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',
@@ -9280,10 +11659,6 @@
}
});
- //! moment.js locale configuration
- //! locale : ukrainian (uk)
- //! author : zemlanin : https://github.com/zemlanin
- //! Author : Menelion Elensúle : https://github.com/Oire
function uk__plural(word, num) {
var forms = word.split('_');
@@ -9291,8 +11666,8 @@
}
function uk__relativeTimeWithPlural(number, withoutSuffix, key) {
var format = {
- 'mm': 'хвилина_хвилини_хвилин',
- 'hh': 'година_години_годин',
+ 'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',
+ 'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',
'dd': 'день_дні_днів',
'MM': 'місяць_місяці_місяців',
'yy': 'рік_роки_років'
@@ -9307,17 +11682,7 @@
return number + ' ' + uk__plural(format[key], +number);
}
}
- function uk__monthsCaseReplace(m, format) {
- var months = {
- 'nominative': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_'),
- 'accusative': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_')
- },
- nounCase = (/D[oD]? *MMMM?/).test(format) ?
- 'accusative' :
- 'nominative';
- return months[nounCase][m.month()];
- }
- function uk__weekdaysCaseReplace(m, format) {
+ function weekdaysCaseReplace(m, format) {
var weekdays = {
'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),
'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),
@@ -9336,19 +11701,22 @@
};
}
- var uk = _moment__default.defineLocale('uk', {
- months : uk__monthsCaseReplace,
+ var uk = moment__default.defineLocale('uk', {
+ months : {
+ 'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),
+ 'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')
+ },
monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),
- weekdays : uk__weekdaysCaseReplace,
+ weekdays : weekdaysCaseReplace,
weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY р.',
- LLL : 'D MMMM YYYY р., LT',
- LLLL : 'dddd, D MMMM YYYY р., LT'
+ LLL : 'D MMMM YYYY р., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY р., HH:mm'
},
calendar : {
sameDay: processHoursFunction('[Сьогодні '),
@@ -9357,15 +11725,15 @@
nextWeek: processHoursFunction('[У] dddd ['),
lastWeek: function () {
switch (this.day()) {
- case 0:
- case 3:
- case 5:
- case 6:
- return processHoursFunction('[Минулої] dddd [').call(this);
- case 1:
- case 2:
- case 4:
- return processHoursFunction('[Минулого] dddd [').call(this);
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return processHoursFunction('[Минулої] dddd [').call(this);
+ case 1:
+ case 2:
+ case 4:
+ return processHoursFunction('[Минулого] dddd [').call(this);
}
},
sameElse: 'L'
@@ -9404,16 +11772,16 @@
ordinalParse: /\d{1,2}-(й|го)/,
ordinal: function (number, period) {
switch (period) {
- case 'M':
- case 'd':
- case 'DDD':
- case 'w':
- case 'W':
- return number + '-й';
- case 'D':
- return number + '-го';
- default:
- return number;
+ case 'M':
+ case 'd':
+ case 'DDD':
+ case 'w':
+ case 'W':
+ return number + '-й';
+ case 'D':
+ return number + '-го';
+ default:
+ return number;
}
},
week : {
@@ -9422,23 +11790,20 @@
}
});
- //! moment.js locale configuration
- //! locale : uzbek (uz)
- //! author : Sardor Muminov : https://github.com/muminoff
- var uz = _moment__default.defineLocale('uz', {
- months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
+ var uz = moment__default.defineLocale('uz', {
+ months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),
monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),
weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),
weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'D MMMM YYYY, dddd LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'D MMMM YYYY, dddd HH:mm'
},
calendar : {
sameDay : '[Бугун соат] LT [да]',
@@ -9469,27 +11834,37 @@
}
});
- //! moment.js locale configuration
- //! locale : vietnamese (vi)
- //! author : Bang Nguyen : https://github.com/bangnk
- var vi = _moment__default.defineLocale('vi', {
+ var vi = moment__default.defineLocale('vi', {
months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),
monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),
+ monthsParseExact : true,
weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),
weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
+ weekdaysParseExact : true,
+ meridiemParse: /sa|ch/i,
+ isPM : function (input) {
+ return /^ch$/i.test(input);
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 12) {
+ return isLower ? 'sa' : 'SA';
+ } else {
+ return isLower ? 'ch' : 'CH';
+ }
+ },
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM [năm] YYYY',
- LLL : 'D MMMM [năm] YYYY LT',
- LLLL : 'dddd, D MMMM [năm] YYYY LT',
+ LLL : 'D MMMM [năm] YYYY HH:mm',
+ LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',
l : 'DD/M/YYYY',
ll : 'D MMM YYYY',
- lll : 'D MMM YYYY LT',
- llll : 'ddd, D MMM YYYY LT'
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd, D MMM YYYY HH:mm'
},
calendar : {
sameDay: '[Hôm nay lúc] LT',
@@ -9524,12 +11899,62 @@
}
});
- //! moment.js locale configuration
- //! locale : chinese (zh-cn)
- //! author : suupic : https://github.com/suupic
- //! author : Zeno Zeng : https://github.com/zenozeng
- var zh_cn = _moment__default.defineLocale('zh-cn', {
+ var x_pseudo = moment__default.defineLocale('x-pseudo', {
+ months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),
+ monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),
+ weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),
+ weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[T~ódá~ý át] LT',
+ nextDay : '[T~ómó~rró~w át] LT',
+ nextWeek : 'dddd [át] LT',
+ lastDay : '[Ý~ést~érdá~ý át] LT',
+ lastWeek : '[L~ást] dddd [át] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'í~ñ %s',
+ past : '%s á~gó',
+ s : 'á ~féw ~sécó~ñds',
+ m : 'á ~míñ~úté',
+ mm : '%d m~íñú~tés',
+ h : 'á~ñ hó~úr',
+ hh : '%d h~óúrs',
+ d : 'á ~dáý',
+ dd : '%d d~áýs',
+ M : 'á ~móñ~th',
+ MM : '%d m~óñt~hs',
+ y : 'á ~ýéár',
+ yy : '%d ý~éárs'
+ },
+ ordinalParse: /\d{1,2}(th|st|nd|rd)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ var zh_cn = moment__default.defineLocale('zh-cn', {
months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
@@ -9540,12 +11965,12 @@
LTS : 'Ah点m分s秒',
L : 'YYYY-MM-DD',
LL : 'YYYY年MMMD日',
- LLL : 'YYYY年MMMD日LT',
- LLLL : 'YYYY年MMMD日ddddLT',
+ LLL : 'YYYY年MMMD日Ah点mm分',
+ LLLL : 'YYYY年MMMD日ddddAh点mm分',
l : 'YYYY-MM-DD',
ll : 'YYYY年MMMD日',
- lll : 'YYYY年MMMD日LT',
- llll : 'YYYY年MMMD日ddddLT'
+ lll : 'YYYY年MMMD日Ah点mm分',
+ llll : 'YYYY年MMMD日ddddAh点mm分'
},
meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
meridiemHour: function (hour, meridiem) {
@@ -9590,13 +12015,13 @@
},
nextWeek : function () {
var startOfWeek, prefix;
- startOfWeek = _moment__default().startOf('week');
- prefix = this.unix() - startOfWeek.unix() >= 7 * 24 * 3600 ? '[下]' : '[本]';
+ startOfWeek = moment__default().startOf('week');
+ prefix = this.diff(startOfWeek, 'days') >= 7 ? '[下]' : '[本]';
return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
},
lastWeek : function () {
var startOfWeek, prefix;
- startOfWeek = _moment__default().startOf('week');
+ startOfWeek = moment__default().startOf('week');
prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]';
return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
},
@@ -9605,17 +12030,17 @@
ordinalParse: /\d{1,2}(日|月|周)/,
ordinal : function (number, period) {
switch (period) {
- case 'd':
- case 'D':
- case 'DDD':
- return number + '日';
- case 'M':
- return number + '月';
- case 'w':
- case 'W':
- return number + '周';
- default:
- return number;
+ case 'd':
+ case 'D':
+ case 'DDD':
+ return number + '日';
+ case 'M':
+ return number + '月';
+ case 'w':
+ case 'W':
+ return number + '周';
+ default:
+ return number;
}
},
relativeTime : {
@@ -9640,11 +12065,8 @@
}
});
- //! moment.js locale configuration
- //! locale : traditional chinese (zh-tw)
- //! author : Ben : https://github.com/ben-lin
- var zh_tw = _moment__default.defineLocale('zh-tw', {
+ var zh_hk = moment__default.defineLocale('zh-hk', {
months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
@@ -9655,19 +12077,19 @@
LTS : 'Ah點m分s秒',
L : 'YYYY年MMMD日',
LL : 'YYYY年MMMD日',
- LLL : 'YYYY年MMMD日LT',
- LLLL : 'YYYY年MMMD日ddddLT',
+ LLL : 'YYYY年MMMD日Ah點mm分',
+ LLLL : 'YYYY年MMMD日ddddAh點mm分',
l : 'YYYY年MMMD日',
ll : 'YYYY年MMMD日',
- lll : 'YYYY年MMMD日LT',
- llll : 'YYYY年MMMD日ddddLT'
+ lll : 'YYYY年MMMD日Ah點mm分',
+ llll : 'YYYY年MMMD日ddddAh點mm分'
},
- meridiemParse: /早上|上午|中午|下午|晚上/,
+ meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
meridiemHour : function (hour, meridiem) {
if (hour === 12) {
hour = 0;
}
- if (meridiem === '早上' || meridiem === '上午') {
+ if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
return hour;
} else if (meridiem === '中午') {
return hour >= 11 ? hour : hour + 12;
@@ -9677,7 +12099,9 @@
},
meridiem : function (hour, minute, isLower) {
var hm = hour * 100 + minute;
- if (hm < 900) {
+ if (hm < 600) {
+ return '凌晨';
+ } else if (hm < 900) {
return '早上';
} else if (hm < 1130) {
return '上午';
@@ -9700,37 +12124,127 @@
ordinalParse: /\d{1,2}(日|月|週)/,
ordinal : function (number, period) {
switch (period) {
- case 'd' :
- case 'D' :
- case 'DDD' :
- return number + '日';
- case 'M' :
- return number + '月';
- case 'w' :
- case 'W' :
- return number + '週';
- default :
- return number;
+ case 'd' :
+ case 'D' :
+ case 'DDD' :
+ return number + '日';
+ case 'M' :
+ return number + '月';
+ case 'w' :
+ case 'W' :
+ return number + '週';
+ default :
+ return number;
}
},
relativeTime : {
future : '%s內',
past : '%s前',
s : '幾秒',
- m : '一分鐘',
- mm : '%d分鐘',
- h : '一小時',
- hh : '%d小時',
- d : '一天',
- dd : '%d天',
- M : '一個月',
- MM : '%d個月',
- y : '一年',
- yy : '%d年'
+ m : '1 分鐘',
+ mm : '%d 分鐘',
+ h : '1 小時',
+ hh : '%d 小時',
+ d : '1 天',
+ dd : '%d 天',
+ M : '1 個月',
+ MM : '%d 個月',
+ y : '1 年',
+ yy : '%d 年'
+ }
+ });
+
+
+ var zh_tw = moment__default.defineLocale('zh-tw', {
+ months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
+ monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+ weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),
+ weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
+ longDateFormat : {
+ LT : 'Ah點mm分',
+ LTS : 'Ah點m分s秒',
+ L : 'YYYY年MMMD日',
+ LL : 'YYYY年MMMD日',
+ LLL : 'YYYY年MMMD日Ah點mm分',
+ LLLL : 'YYYY年MMMD日ddddAh點mm分',
+ l : 'YYYY年MMMD日',
+ ll : 'YYYY年MMMD日',
+ lll : 'YYYY年MMMD日Ah點mm分',
+ llll : 'YYYY年MMMD日ddddAh點mm分'
+ },
+ meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+ return hour;
+ } else if (meridiem === '中午') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === '下午' || meridiem === '晚上') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ var hm = hour * 100 + minute;
+ if (hm < 600) {
+ return '凌晨';
+ } else if (hm < 900) {
+ return '早上';
+ } else if (hm < 1130) {
+ return '上午';
+ } else if (hm < 1230) {
+ return '中午';
+ } else if (hm < 1800) {
+ return '下午';
+ } else {
+ return '晚上';
+ }
+ },
+ calendar : {
+ sameDay : '[今天]LT',
+ nextDay : '[明天]LT',
+ nextWeek : '[下]ddddLT',
+ lastDay : '[昨天]LT',
+ lastWeek : '[上]ddddLT',
+ sameElse : 'L'
+ },
+ ordinalParse: /\d{1,2}(日|月|週)/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd' :
+ case 'D' :
+ case 'DDD' :
+ return number + '日';
+ case 'M' :
+ return number + '月';
+ case 'w' :
+ case 'W' :
+ return number + '週';
+ default :
+ return number;
+ }
+ },
+ relativeTime : {
+ future : '%s內',
+ past : '%s前',
+ s : '幾秒',
+ m : '1 分鐘',
+ mm : '%d 分鐘',
+ h : '1 小時',
+ hh : '%d 小時',
+ d : '1 天',
+ dd : '%d 天',
+ M : '1 個月',
+ MM : '%d 個月',
+ y : '1 年',
+ yy : '%d 年'
}
});
- var moment_with_locales = _moment__default;
+ var moment_with_locales = moment__default;
+ moment_with_locales.locale('en');
return moment_with_locales;
diff --git a/lib/composer/composer/ClassLoader.php b/lib/composer/composer/ClassLoader.php
index ff6ecfb822f..ac67d302a18 100644
--- a/lib/composer/composer/ClassLoader.php
+++ b/lib/composer/composer/ClassLoader.php
@@ -53,8 +53,8 @@ class ClassLoader
private $useIncludePath = false;
private $classMap = array();
-
private $classMapAuthoritative = false;
+ private $missingClasses = array();
public function getPrefixes()
{
@@ -322,20 +322,20 @@ class ClassLoader
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
- if ($this->classMapAuthoritative) {
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
return false;
}
$file = $this->findFileWithExtension($class, '.php');
// Search for Hack files if we are running on HHVM
- if ($file === null && defined('HHVM_VERSION')) {
+ if (false === $file && defined('HHVM_VERSION')) {
$file = $this->findFileWithExtension($class, '.hh');
}
- if ($file === null) {
+ if (false === $file) {
// Remember that this class does not exist.
- return $this->classMap[$class] = false;
+ $this->missingClasses[$class] = true;
}
return $file;
@@ -399,6 +399,8 @@ class ClassLoader
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
return $file;
}
+
+ return false;
}
}
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index 94170933e5e..2dbb0075f7e 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -598,6 +598,7 @@ return array(
'OC\\OCS\\Result' => $baseDir . '/lib/private/OCS/Result.php',
'OC\\Preview' => $baseDir . '/lib/private/Preview.php',
'OC\\PreviewManager' => $baseDir . '/lib/private/PreviewManager.php',
+ 'OC\\PreviewNotAvailableException' => $baseDir . '/lib/private/PreviewNotAvailableException.php',
'OC\\Preview\\BMP' => $baseDir . '/lib/private/Preview/BMP.php',
'OC\\Preview\\Bitmap' => $baseDir . '/lib/private/Preview/Bitmap.php',
'OC\\Preview\\Font' => $baseDir . '/lib/private/Preview/Font.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index c7e833c02fd..3e39b83fdd7 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -628,6 +628,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\OCS\\Result' => __DIR__ . '/../../..' . '/lib/private/OCS/Result.php',
'OC\\Preview' => __DIR__ . '/../../..' . '/lib/private/Preview.php',
'OC\\PreviewManager' => __DIR__ . '/../../..' . '/lib/private/PreviewManager.php',
+ 'OC\\PreviewNotAvailableException' => __DIR__ . '/../../..' . '/lib/private/PreviewNotAvailableException.php',
'OC\\Preview\\BMP' => __DIR__ . '/../../..' . '/lib/private/Preview/BMP.php',
'OC\\Preview\\Bitmap' => __DIR__ . '/../../..' . '/lib/private/Preview/Bitmap.php',
'OC\\Preview\\Font' => __DIR__ . '/../../..' . '/lib/private/Preview/Font.php',
diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js
index 4eeea52f279..48d1828ec28 100644
--- a/lib/l10n/fr.js
+++ b/lib/l10n/fr.js
@@ -55,6 +55,7 @@ OC.L10N.register(
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Paramètres serveur",
+ "Sharing" : "Partage",
"Encryption" : "Chiffrement",
"Logging" : "Connexion",
"Additional settings" : "Paramètres supplémentaires",
diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json
index b57c4f217fc..03d57754fc9 100644
--- a/lib/l10n/fr.json
+++ b/lib/l10n/fr.json
@@ -53,6 +53,7 @@
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Paramètres serveur",
+ "Sharing" : "Partage",
"Encryption" : "Chiffrement",
"Logging" : "Connexion",
"Additional settings" : "Paramètres supplémentaires",
diff --git a/lib/l10n/hu_HU.js b/lib/l10n/hu_HU.js
index 48f9c9eb4f2..0f5d14d75ed 100644
--- a/lib/l10n/hu_HU.js
+++ b/lib/l10n/hu_HU.js
@@ -106,13 +106,17 @@ OC.L10N.register(
"Could not find category \"%s\"" : "Ez a kategória nem található: \"%s\"",
"Apps" : "Alkalmazások",
"A valid username must be provided" : "Érvényes felhasználónevet kell megadnia",
+ "Username contains whitespace at the beginning or at the end" : "A felhasználónév szóközt tartalmaz az elején vagy a végén",
"A valid password must be provided" : "Érvényes jelszót kell megadnia",
"The username is already being used" : "Ez a bejelentkezési név már foglalt",
+ "User disabled" : "Felhasználó letiltva",
+ "Help" : "Súgó",
"Personal" : "Személyes",
"Users" : "Felhasználók",
"Admin" : "Adminisztrátor",
"Recommended" : "Ajánlott",
"No app name specified" : "Nincs az alkalmazás név megadva.",
+ "a safe home for all your data" : "egy biztonságos hely az adataidnak",
"File is currently busy, please try again later" : "A fájl jelenleg elfoglalt, kérjük próbáld újra később!",
"Can't read file" : "Nem olvasható a fájl",
"Application is not enabled" : "Az alkalmazás nincs engedélyezve",
diff --git a/lib/l10n/hu_HU.json b/lib/l10n/hu_HU.json
index e50dfce778d..06e327ab051 100644
--- a/lib/l10n/hu_HU.json
+++ b/lib/l10n/hu_HU.json
@@ -104,13 +104,17 @@
"Could not find category \"%s\"" : "Ez a kategória nem található: \"%s\"",
"Apps" : "Alkalmazások",
"A valid username must be provided" : "Érvényes felhasználónevet kell megadnia",
+ "Username contains whitespace at the beginning or at the end" : "A felhasználónév szóközt tartalmaz az elején vagy a végén",
"A valid password must be provided" : "Érvényes jelszót kell megadnia",
"The username is already being used" : "Ez a bejelentkezési név már foglalt",
+ "User disabled" : "Felhasználó letiltva",
+ "Help" : "Súgó",
"Personal" : "Személyes",
"Users" : "Felhasználók",
"Admin" : "Adminisztrátor",
"Recommended" : "Ajánlott",
"No app name specified" : "Nincs az alkalmazás név megadva.",
+ "a safe home for all your data" : "egy biztonságos hely az adataidnak",
"File is currently busy, please try again later" : "A fájl jelenleg elfoglalt, kérjük próbáld újra később!",
"Can't read file" : "Nem olvasható a fájl",
"Application is not enabled" : "Az alkalmazás nincs engedélyezve",
diff --git a/lib/private/AppFramework/Routing/RouteConfig.php b/lib/private/AppFramework/Routing/RouteConfig.php
index e94f2e50c1d..70208725f46 100644
--- a/lib/private/AppFramework/Routing/RouteConfig.php
+++ b/lib/private/AppFramework/Routing/RouteConfig.php
@@ -36,14 +36,25 @@ use OCP\Route\IRouter;
* @package OC\AppFramework\routing
*/
class RouteConfig {
+ /** @var DIContainer */
private $container;
+
+ /** @var IRouter */
private $router;
+
+ /** @var array */
private $routes;
+
+ /** @var string */
private $appName;
+ /** @var string[] */
+ private $controllerNameCache = [];
+
/**
* @param \OC\AppFramework\DependencyInjection\DIContainer $container
* @param \OCP\Route\IRouter $router
+ * @param array $routes
* @internal param $appName
*/
public function __construct(DIContainer $container, IRouter $router, $routes) {
@@ -234,7 +245,10 @@ class RouteConfig {
*/
private function buildControllerName($controller)
{
- return $this->underScoreToCamelCase(ucfirst($controller)) . 'Controller';
+ if (!isset($this->controllerNameCache[$controller])) {
+ $this->controllerNameCache[$controller] = $this->underScoreToCamelCase(ucfirst($controller)) . 'Controller';
+ }
+ return $this->controllerNameCache[$controller];
}
/**
diff --git a/lib/private/Files/Config/CachedMountInfo.php b/lib/private/Files/Config/CachedMountInfo.php
index f68949f8d55..74812b3ed8c 100644
--- a/lib/private/Files/Config/CachedMountInfo.php
+++ b/lib/private/Files/Config/CachedMountInfo.php
@@ -98,7 +98,7 @@ class CachedMountInfo implements ICachedMountInfo {
// TODO injection etc
Filesystem::initMountPoints($this->getUser()->getUID());
$userNode = \OC::$server->getUserFolder($this->getUser()->getUID());
- $nodes = $userNode->getById($this->getRootId());
+ $nodes = $userNode->getParent()->getById($this->getRootId());
if (count($nodes) > 0) {
return $nodes[0];
} else {
diff --git a/lib/private/IntegrityCheck/Checker.php b/lib/private/IntegrityCheck/Checker.php
index 1db20772b4e..102fe42a99d 100644
--- a/lib/private/IntegrityCheck/Checker.php
+++ b/lib/private/IntegrityCheck/Checker.php
@@ -195,7 +195,7 @@ class Checker {
copy($this->environmentHelper->getServerRoot() . '/.htaccess', $tmpFolder . '/.htaccess');
copy($this->environmentHelper->getServerRoot() . '/.user.ini', $tmpFolder . '/.user.ini');
\OC_Files::setUploadLimit(
- \OCP\Util::computerFileSize('513MB'),
+ \OCP\Util::computerFileSize('511MB'),
[
'.htaccess' => $tmpFolder . '/.htaccess',
'.user.ini' => $tmpFolder . '/.user.ini',
diff --git a/lib/private/Preview.php b/lib/private/Preview.php
index 67838a8d4a3..ccaec738caf 100644
--- a/lib/private/Preview.php
+++ b/lib/private/Preview.php
@@ -131,7 +131,7 @@ class Preview {
$this->setFile($file);
$this->setMaxX((int)$maxX);
$this->setMaxY((int)$maxY);
- $this->setScalingUp($scalingUp);
+ $this->setScalingup($scalingUp);
$this->preview = null;
@@ -791,6 +791,7 @@ class Preview {
* @param null|string $mimeTypeForHeaders the media type to use when sending back the reply
*
* @throws NotFoundException
+ * @throws PreviewNotAvailableException
*/
public function showPreview($mimeTypeForHeaders = null) {
// Check if file is valid
@@ -1172,6 +1173,7 @@ class Preview {
/**
* Defines the media icon, for the media type of the original file, as the preview
+ * @throws PreviewNotAvailableException
*/
private function getMimeIcon() {
$image = new \OC_Image();
@@ -1181,6 +1183,10 @@ class Preview {
} else {
$mimeIconServerPath = str_replace(\OC::$WEBROOT, \OC::$SERVERROOT, $mimeIconWebPath);
}
+ // we can't load SVGs into an image
+ if (substr($mimeIconWebPath, -4) === '.svg') {
+ throw new PreviewNotAvailableException('SVG mimetype cannot be rendered');
+ }
$image->loadFromFile($mimeIconServerPath);
$this->preview = $image;
diff --git a/lib/private/PreviewNotAvailableException.php b/lib/private/PreviewNotAvailableException.php
new file mode 100644
index 00000000000..7d92e860629
--- /dev/null
+++ b/lib/private/PreviewNotAvailableException.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de>
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ *
+ * @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 <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC;
+
+class PreviewNotAvailableException extends \Exception {
+}
diff --git a/lib/private/Setup.php b/lib/private/Setup.php
index 3b3a57c3e96..4c72fbc9623 100644
--- a/lib/private/Setup.php
+++ b/lib/private/Setup.php
@@ -410,6 +410,7 @@ class Setup {
/**
* Append the correct ErrorDocument path for Apache hosts
+ * @return bool True when success, False otherwise
*/
public static function updateHtaccess() {
$config = \OC::$server->getConfig();
@@ -418,7 +419,7 @@ class Setup {
if(\OC::$CLI) {
$webRoot = $config->getSystemValue('overwrite.cli.url', '');
if($webRoot === '') {
- return;
+ return false;
}
$webRoot = parse_url($webRoot, PHP_URL_PATH);
$webRoot = rtrim($webRoot, '/');
@@ -472,9 +473,10 @@ class Setup {
if ($content !== '') {
//suppress errors in case we don't have permissions for it
- @file_put_contents($setupHelper->pathToHtaccess(), $htaccessContent.$content . "\n");
+ return (bool) @file_put_contents($setupHelper->pathToHtaccess(), $htaccessContent.$content . "\n");
}
+ return false;
}
public static function protectDataDirectory() {
diff --git a/settings/l10n/de.js b/settings/l10n/de.js
index 59b0bcb0a26..532e7d2ca6d 100644
--- a/settings/l10n/de.js
+++ b/settings/l10n/de.js
@@ -46,6 +46,7 @@ OC.L10N.register(
"Add trusted domain" : "Vertrauenswürdige Domain hinzufügen",
"Migration in progress. Please wait until the migration is finished" : "Migration läuft. Bitte warte, bis die Migrationabgeschlossen ist",
"Migration started …" : "Migration begonnen…",
+ "Not saved" : "Nicht gespeichert",
"Sending..." : "Senden…",
"Official" : "Offiziell",
"Approved" : "Geprüft",
@@ -217,6 +218,8 @@ OC.L10N.register(
"Exclude groups from sharing" : "Gruppen von Freigaben ausschließen",
"These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog erlauben. Wenn dies deaktiviert ist, muss der vollständige Benutzername eingegeben werden.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite. (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.",
"Tips & tricks" : "Tipps & Tricks",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.",
diff --git a/settings/l10n/de.json b/settings/l10n/de.json
index 155d29c1e05..8a60e77793f 100644
--- a/settings/l10n/de.json
+++ b/settings/l10n/de.json
@@ -44,6 +44,7 @@
"Add trusted domain" : "Vertrauenswürdige Domain hinzufügen",
"Migration in progress. Please wait until the migration is finished" : "Migration läuft. Bitte warte, bis die Migrationabgeschlossen ist",
"Migration started …" : "Migration begonnen…",
+ "Not saved" : "Nicht gespeichert",
"Sending..." : "Senden…",
"Official" : "Offiziell",
"Approved" : "Geprüft",
@@ -215,6 +216,8 @@
"Exclude groups from sharing" : "Gruppen von Freigaben ausschließen",
"These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog erlauben. Wenn dies deaktiviert ist, muss der vollständige Benutzername eingegeben werden.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite. (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.",
"Tips & tricks" : "Tipps & Tricks",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.",
diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js
index f2ee2209197..766bbb7ae74 100644
--- a/settings/l10n/de_DE.js
+++ b/settings/l10n/de_DE.js
@@ -46,6 +46,7 @@ OC.L10N.register(
"Add trusted domain" : "Vertrauenswürdige Domain hinzufügen",
"Migration in progress. Please wait until the migration is finished" : "Migration in Arbeit. Bitte warten Sie, bis die Migration beendet ist",
"Migration started …" : "Migration begonnen…",
+ "Not saved" : "Nicht gespeichert",
"Sending..." : "Wird gesendet…",
"Official" : "Offiziell",
"Approved" : "Geprüft",
@@ -217,6 +218,8 @@ OC.L10N.register(
"Exclude groups from sharing" : "Gruppen von Freigaben ausschließen",
"These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog erlauben. Wenn dies deaktiviert ist, muss der vollständige Benutzername eingegeben werden.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite. (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.",
"Tips & tricks" : "Tipps & Tricks",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.",
diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json
index 8dd7c3dbc5e..62345ef9c6e 100644
--- a/settings/l10n/de_DE.json
+++ b/settings/l10n/de_DE.json
@@ -44,6 +44,7 @@
"Add trusted domain" : "Vertrauenswürdige Domain hinzufügen",
"Migration in progress. Please wait until the migration is finished" : "Migration in Arbeit. Bitte warten Sie, bis die Migration beendet ist",
"Migration started …" : "Migration begonnen…",
+ "Not saved" : "Nicht gespeichert",
"Sending..." : "Wird gesendet…",
"Official" : "Offiziell",
"Approved" : "Geprüft",
@@ -215,6 +216,8 @@
"Exclude groups from sharing" : "Gruppen von Freigaben ausschließen",
"These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog erlauben. Wenn dies deaktiviert ist, muss der vollständige Benutzername eingegeben werden.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite. (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.",
"Tips & tricks" : "Tipps & Tricks",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.",
diff --git a/settings/l10n/el.js b/settings/l10n/el.js
index 958f0035dfc..fbf10565970 100644
--- a/settings/l10n/el.js
+++ b/settings/l10n/el.js
@@ -201,6 +201,8 @@ OC.L10N.register(
"Documentation:" : "Τεκμηρίωση:",
"User documentation" : "Τεκμηρίωση Χρήστη",
"Admin documentation" : "Τεκμηρίωση Διαχειριστή",
+ "Visit website" : "Επισκεφθείτε την ιστοσελίδα",
+ "Report a bug" : "Αναφέρετε σφάλμα",
"Show description …" : "Εμφάνιση περιγραφής",
"Hide description …" : "Απόκρυψη περιγραφής",
"This app has an update available." : "Αυτή η εφαρμογή έχει διαθέσιμη ενημέρωση.",
@@ -232,6 +234,7 @@ OC.L10N.register(
"No display name set" : "Δεν ορίστηκε όνομα",
"Email" : "Ηλεκτρονικό ταχυδρομείο",
"Your email address" : "Η διεύθυνση ηλ. ταχυδρομείου σας",
+ "For password recovery and notifications" : "Η ανάκτηση του συνθηματικού και οι ειδοποιήσεις",
"No email address set" : "Δεν ορίστηκε διεύθυνση email",
"You are member of the following groups:" : "Είστε μέλος των ακόλουθων ομάδων:",
"Password" : "Συνθηματικό",
@@ -246,11 +249,14 @@ OC.L10N.register(
"iOS app" : "Εφαρμογή iOS",
"Show First Run Wizard again" : "Προβολή Οδηγού Πρώτης Εκτέλεσης ξανά",
"Device" : "Συσκευή",
+ "Last activity" : "Τελευταία δραστηριότητα",
"Name" : "Όνομα",
"App name" : "Όνομα εφαρμογής",
"Create new app password" : "Δημιουργία νέου συνθηματικού εφαρμογής",
"Username" : "Όνομα χρήστη",
"Done" : "Ολοκληρώθηκε",
+ "Follow us on Google Plus!" : "Ακολουθήστε μας στο Google Plus!",
+ "Subscribe to our twitter channel!" : "Εγγραφείτε στο κανάλι μας στο twitter!",
"Show storage location" : "Εμφάνιση τοποθεσίας αποθήκευσης",
"Show last log in" : "Εμφάνιση τελευταίας εισόδου",
"Show user backend" : "Εμφάνιση χρήστη συστήματος υποστήριξης",
@@ -266,11 +272,17 @@ OC.L10N.register(
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Παρακαλώ εισάγετε επιτρεπόμενα μερίδια αποθηκευτικού χώρου (π.χ. \"512 MB\" ή \"12 GB\")",
"Other" : "Άλλο",
"Quota" : "Σύνολο Χώρου",
+ "Storage location" : "Τοποθεσία αποθηκευτικού χώρου",
+ "User backend" : "Σύστημα υποστήριξης χρήστη",
"Last login" : "Τελευταία είσοδος",
"change full name" : "αλλαγή πλήρους ονόματος",
"set new password" : "επιλογή νέου κωδικού",
"change email address" : "αλλαγή διεύθυνσης ηλ. αλληλογραφίας",
"Default" : "Προκαθορισμένο",
+ "add group" : "προσθήκη ομάδας",
+ "Add Group" : "Προσθήκη ομάδας",
+ "Full Name" : "Πλήρες όνομα",
+ "Last Login" : "Τελευταία είσοδος",
"APCu" : "APCu",
"Redis" : "Redis",
"External Storage" : "Εξωτερικό Αποθηκευτικό Μέσο",
diff --git a/settings/l10n/el.json b/settings/l10n/el.json
index 7301782cdb9..3aa684615e7 100644
--- a/settings/l10n/el.json
+++ b/settings/l10n/el.json
@@ -199,6 +199,8 @@
"Documentation:" : "Τεκμηρίωση:",
"User documentation" : "Τεκμηρίωση Χρήστη",
"Admin documentation" : "Τεκμηρίωση Διαχειριστή",
+ "Visit website" : "Επισκεφθείτε την ιστοσελίδα",
+ "Report a bug" : "Αναφέρετε σφάλμα",
"Show description …" : "Εμφάνιση περιγραφής",
"Hide description …" : "Απόκρυψη περιγραφής",
"This app has an update available." : "Αυτή η εφαρμογή έχει διαθέσιμη ενημέρωση.",
@@ -230,6 +232,7 @@
"No display name set" : "Δεν ορίστηκε όνομα",
"Email" : "Ηλεκτρονικό ταχυδρομείο",
"Your email address" : "Η διεύθυνση ηλ. ταχυδρομείου σας",
+ "For password recovery and notifications" : "Η ανάκτηση του συνθηματικού και οι ειδοποιήσεις",
"No email address set" : "Δεν ορίστηκε διεύθυνση email",
"You are member of the following groups:" : "Είστε μέλος των ακόλουθων ομάδων:",
"Password" : "Συνθηματικό",
@@ -244,11 +247,14 @@
"iOS app" : "Εφαρμογή iOS",
"Show First Run Wizard again" : "Προβολή Οδηγού Πρώτης Εκτέλεσης ξανά",
"Device" : "Συσκευή",
+ "Last activity" : "Τελευταία δραστηριότητα",
"Name" : "Όνομα",
"App name" : "Όνομα εφαρμογής",
"Create new app password" : "Δημιουργία νέου συνθηματικού εφαρμογής",
"Username" : "Όνομα χρήστη",
"Done" : "Ολοκληρώθηκε",
+ "Follow us on Google Plus!" : "Ακολουθήστε μας στο Google Plus!",
+ "Subscribe to our twitter channel!" : "Εγγραφείτε στο κανάλι μας στο twitter!",
"Show storage location" : "Εμφάνιση τοποθεσίας αποθήκευσης",
"Show last log in" : "Εμφάνιση τελευταίας εισόδου",
"Show user backend" : "Εμφάνιση χρήστη συστήματος υποστήριξης",
@@ -264,11 +270,17 @@
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Παρακαλώ εισάγετε επιτρεπόμενα μερίδια αποθηκευτικού χώρου (π.χ. \"512 MB\" ή \"12 GB\")",
"Other" : "Άλλο",
"Quota" : "Σύνολο Χώρου",
+ "Storage location" : "Τοποθεσία αποθηκευτικού χώρου",
+ "User backend" : "Σύστημα υποστήριξης χρήστη",
"Last login" : "Τελευταία είσοδος",
"change full name" : "αλλαγή πλήρους ονόματος",
"set new password" : "επιλογή νέου κωδικού",
"change email address" : "αλλαγή διεύθυνσης ηλ. αλληλογραφίας",
"Default" : "Προκαθορισμένο",
+ "add group" : "προσθήκη ομάδας",
+ "Add Group" : "Προσθήκη ομάδας",
+ "Full Name" : "Πλήρες όνομα",
+ "Last Login" : "Τελευταία είσοδος",
"APCu" : "APCu",
"Redis" : "Redis",
"External Storage" : "Εξωτερικό Αποθηκευτικό Μέσο",
diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js
index 4d1cc1892c8..d4c44cb5a1d 100644
--- a/settings/l10n/fr.js
+++ b/settings/l10n/fr.js
@@ -46,6 +46,7 @@ OC.L10N.register(
"Add trusted domain" : "Ajouter un domaine de confiance",
"Migration in progress. Please wait until the migration is finished" : "Migration en cours. Veuillez attendre que celle-ci se termine",
"Migration started …" : "Migration démarrée...",
+ "Not saved" : "Non sauvegardé",
"Sending..." : "Envoi en cours...",
"Official" : "Officielle",
"Approved" : "Approuvée",
@@ -75,7 +76,7 @@ OC.L10N.register(
"The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "L'application a été activée mais doit être mise à jour. Vous allez être redirigé vers la page des mises à jour dans 5 secondes.",
"App update" : "Mise à jour",
"No apps found for {query}" : "Aucune application trouvée pour {query}",
- "Disconnect" : "Déconnection",
+ "Disconnect" : "Déconnexion",
"Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
@@ -217,6 +218,8 @@ OC.L10N.register(
"Exclude groups from sharing" : "Empêcher certains groupes de partager",
"These groups will still be able to receive shares, but not to initiate them." : "Ces groupes ne pourront plus initier de partage, mais ils pourront toujours rejoindre les partages faits par d'autres. ",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Activer l'autocomplétion des noms d'utilisateurs dans la fenêtre de partage. Si cette option est désactivée, les noms complets doivent être indiqués.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement. (Visible seulement quand la liste des fichiers est masquée.)",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Ce texte sera visible sur la page publique de téléversement quand la liste des fichiers est masquée.",
"Tips & tricks" : "Trucs et astuces",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite est actuellement utilisé comme gestionnaire de base de données. Pour des installations plus volumineuses, nous vous conseillons d'utiliser un autre gestionnaire de base de données.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "L'utilisation de SQLite est particulièrement déconseillée si vous utilisez le client de bureau pour synchroniser vos données.",
@@ -286,7 +289,7 @@ OC.L10N.register(
"Desktop client" : "Client de bureau",
"Android app" : "Application Android",
"iOS app" : "Application iOS",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez supporter le projet\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a>\n⇥⇥ou\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">promouvoir</a> !",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez supporter le projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a>\nou\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">promouvoir</a> !",
"Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion",
"Web, desktop and mobile clients currently logged in to your account." : "Clients web, desktop et mobiles actuellement connectés sur votre compte.",
"Device" : "Périphérique",
@@ -330,7 +333,7 @@ OC.L10N.register(
"change email address" : "changer l'adresse e-mail",
"Default" : "Défaut",
"add group" : "ajouter groupe",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez supporter le projet\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\n⇥⇥<or></or>\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">partager</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez supporter le projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\n<or></or>\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">partager</a>!",
"Add Group" : "Ajouter groupe",
"Default Quota" : "Quota par défaut",
"Full Name" : "Nom complet",
@@ -352,7 +355,7 @@ OC.L10N.register(
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Pour migrer vers une autre base de données utiliser la ligne de commande: 'occ db:convert-type', ou regardez la <a target=\"_blank\" href=\"%s\">documentation</a>",
"This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Cette application n'a pas de version maximum Nextcloud exigée. Ce sera considéré comme une erreur dans Nextcloud 11 et supérieur.",
"This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Cette application n'a pas de version maximum Nextcloud exigée. Ce sera considéré comme une erreur dans Nextcloud 11 et supérieur.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Si vous voulez supporter le projet\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\n⇥⇥ou\n⇥⇥<a href=\"https://help.nextcloud.com/\"\n⇥⇥<a href=\"https://help.nextcloud.com/\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">aider les autres utilisateurs</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Si vous voulez supporter le projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\nou\n<a href=\"https://help.nextcloud.com/\"\n<a href=\"https://help.nextcloud.com/\"\ntarget=\"_blank\" rel=\"noreferrer\">aider les autres utilisateurs</a>!",
"Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Développé par la {communityopen}communauté Nextcloud{linkclose}, le {githubopen}code source{linkclose} est sous licence {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
},
"nplurals=2; plural=(n > 1);");
diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json
index d25cfb591ef..0d9dd3c0822 100644
--- a/settings/l10n/fr.json
+++ b/settings/l10n/fr.json
@@ -44,6 +44,7 @@
"Add trusted domain" : "Ajouter un domaine de confiance",
"Migration in progress. Please wait until the migration is finished" : "Migration en cours. Veuillez attendre que celle-ci se termine",
"Migration started …" : "Migration démarrée...",
+ "Not saved" : "Non sauvegardé",
"Sending..." : "Envoi en cours...",
"Official" : "Officielle",
"Approved" : "Approuvée",
@@ -73,7 +74,7 @@
"The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "L'application a été activée mais doit être mise à jour. Vous allez être redirigé vers la page des mises à jour dans 5 secondes.",
"App update" : "Mise à jour",
"No apps found for {query}" : "Aucune application trouvée pour {query}",
- "Disconnect" : "Déconnection",
+ "Disconnect" : "Déconnexion",
"Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
@@ -215,6 +216,8 @@
"Exclude groups from sharing" : "Empêcher certains groupes de partager",
"These groups will still be able to receive shares, but not to initiate them." : "Ces groupes ne pourront plus initier de partage, mais ils pourront toujours rejoindre les partages faits par d'autres. ",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Activer l'autocomplétion des noms d'utilisateurs dans la fenêtre de partage. Si cette option est désactivée, les noms complets doivent être indiqués.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement. (Visible seulement quand la liste des fichiers est masquée.)",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Ce texte sera visible sur la page publique de téléversement quand la liste des fichiers est masquée.",
"Tips & tricks" : "Trucs et astuces",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite est actuellement utilisé comme gestionnaire de base de données. Pour des installations plus volumineuses, nous vous conseillons d'utiliser un autre gestionnaire de base de données.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "L'utilisation de SQLite est particulièrement déconseillée si vous utilisez le client de bureau pour synchroniser vos données.",
@@ -284,7 +287,7 @@
"Desktop client" : "Client de bureau",
"Android app" : "Application Android",
"iOS app" : "Application iOS",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez supporter le projet\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a>\n⇥⇥ou\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">promouvoir</a> !",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez supporter le projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a>\nou\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">promouvoir</a> !",
"Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion",
"Web, desktop and mobile clients currently logged in to your account." : "Clients web, desktop et mobiles actuellement connectés sur votre compte.",
"Device" : "Périphérique",
@@ -328,7 +331,7 @@
"change email address" : "changer l'adresse e-mail",
"Default" : "Défaut",
"add group" : "ajouter groupe",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez supporter le projet\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\n⇥⇥<or></or>\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">partager</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez supporter le projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\n<or></or>\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">partager</a>!",
"Add Group" : "Ajouter groupe",
"Default Quota" : "Quota par défaut",
"Full Name" : "Nom complet",
@@ -350,7 +353,7 @@
"To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Pour migrer vers une autre base de données utiliser la ligne de commande: 'occ db:convert-type', ou regardez la <a target=\"_blank\" href=\"%s\">documentation</a>",
"This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Cette application n'a pas de version maximum Nextcloud exigée. Ce sera considéré comme une erreur dans Nextcloud 11 et supérieur.",
"This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Cette application n'a pas de version maximum Nextcloud exigée. Ce sera considéré comme une erreur dans Nextcloud 11 et supérieur.",
- "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Si vous voulez supporter le projet\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\n⇥⇥ou\n⇥⇥<a href=\"https://help.nextcloud.com/\"\n⇥⇥<a href=\"https://help.nextcloud.com/\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">aider les autres utilisateurs</a>!",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Si vous voulez supporter le projet\n<a href=\"https://nextcloud.com/contribute\"\ntarget=\"_blank\" rel=\"noreferrer\">rejoindre le dévellopement</a>\nou\n<a href=\"https://help.nextcloud.com/\"\n<a href=\"https://help.nextcloud.com/\"\ntarget=\"_blank\" rel=\"noreferrer\">aider les autres utilisateurs</a>!",
"Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Développé par la {communityopen}communauté Nextcloud{linkclose}, le {githubopen}code source{linkclose} est sous licence {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js
index e3468bfc970..547914f15f2 100644
--- a/settings/l10n/hu_HU.js
+++ b/settings/l10n/hu_HU.js
@@ -15,7 +15,7 @@ OC.L10N.register(
"Federated Cloud Sharing" : "Megosztás Egyesített Felhőben",
"cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL elavult %s verziót (%s) használ. Kérjük, frissítse az operációs rendszerét, vagy egyes funkciók (mint például a %s) megbízhatatlanul fognak működni.",
"A problem occurred, please check your log files (Error: %s)" : "Probléma történt, kérjük nézd meg a naplófájlokat (Hiba: %s).",
- "Migration Completed" : "Migráció kész!",
+ "Migration Completed" : "Migráció befejezve",
"Group already exists." : "A csoport már létezik.",
"Unable to add group." : "Nem lehet létrehozni a csoportot.",
"Unable to delete group." : "Nem lehet törölni a csoportot.",
@@ -46,6 +46,7 @@ OC.L10N.register(
"Add trusted domain" : "Megbízható tartomány hozzáadása",
"Migration in progress. Please wait until the migration is finished" : "Migráció folyamatban. Kérjük várj, míg a migráció befejeződik.",
"Migration started …" : "Migráció elindítva ...",
+ "Not saved" : "Nincs mentve",
"Sending..." : "Küldés...",
"Official" : "Hivatalos",
"Approved" : "Jóváhagyott",
@@ -129,8 +130,6 @@ OC.L10N.register(
"Sync clients" : "Szinkronizáló kliensek",
"None" : "Egyik sem",
"Login" : "Login",
- "Plain" : "Plain",
- "NT LAN Manager" : "NT LAN Manager",
"SSL" : "SSL",
"TLS" : "TLS",
"Email server" : "E-mail szerver",
@@ -181,6 +180,7 @@ OC.L10N.register(
"The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Csak olvasható beállítófájl engedélyezve. Ez meggátolja a beállítások módosítását a webes felületről. Továbbá, a fájlt kézzel kell írhatóvá tenni minden frissítés alkalmával.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Úgy tűnik, hogy a PHP úgy van beállítva, hogy eltávolítja programok belsejében elhelyezett szövegblokkokat. Emiatt a rendszer több alapvető fontosságú eleme működésképtelen lesz.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ezt valószínűleg egy gyorsítótár ill. kódgyorsító, mint pl, a Zend, OPcache vagy eAccelererator okozza.",
+ "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Az adatbázis nem tud \"READ COMMITTED\" tranzakció elkülönítési szinttel futni. Ez problémákat okozhat több egyidejű esemény végrehajtásakor.",
"%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s %2$s verziója van telepítve, de a stabilitási és teljesítményi okok miatt javasoljuk az újabb, %1$s verzióra való frissítést.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "A 'fileinfo' PHP modul hiányzik. Erősen javasolt ennek a modulnak a telepítése, mert ezzel lényegesen jobb a MIME-típusok felismerése.",
"Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Tranzakcionális fájl lezárás tiltva van, ez problémákat okozhat versenyhelyzetben. Engedélyezze a 'filelocking.enabled' beállítást a config.php -ben, hogy elkerülje ezeket a problémákat. Nézze meg a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentációt ↗</a> bővebb információért.",
@@ -189,6 +189,7 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Feltétlenül javasoljuk, hogy telepítse a szükséges csomagokat ahhoz, hogy a rendszere támogassa a következő lokalizációk valamelyikét: %s",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Ha a telepítése nem a webkiszolgáló gyökerében van, és a rendszer cron szolgáltatását használja, akkor problémák lehetnek az URL-ek képzésével. Ezek elkerülése érdekében állítsa be a config.php-ban az \"overwrite.cli.url\" paramétert a telepítés által használt webútvonalra. (Javasolt beállítás: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Az ütemezett feladat (cronjob) nem futott le parancssorból. A következő hibák tűntek fel:",
+ "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"%s\">log</a>." : "Kérjük, ellenőrizd a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">telepítési dokumentációt ↗</a> és a <a href=\"%s\">naplót</a>, hogy tartalmaz-e bármilyen hibát vagy figyelmeztetést.",
"All checks passed." : "Minden ellenőrzés sikeres.",
"Cron" : "Ütemezett feladatok",
"Last cron job execution: %s." : "Az utolsó cron feladat ekkor futott le: %s.",
@@ -284,9 +285,11 @@ OC.L10N.register(
"Desktop client" : "Asztali kliens",
"Android app" : "Android alkalmazás",
"iOS app" : "IOS alkalmazás",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ha támogatni szeretnéd a projektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztéshez</a>\n\t\tvagy\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">hírdesd</a>!",
"Show First Run Wizard again" : "Nézzük meg újra az első bejelentkezéskori segítséget!",
"Device" : "Eszköz",
"Last activity" : "Utolsó tevékenység",
+ "Passcodes that give an app or device permissions to access your account." : "A számkódok jogosultságot adnak egy alkalmazás vagy eszköz részére a fiókod hozzáféréséhez.",
"Name" : "Név",
"App name" : "Alkalmazás név",
"Create new app password" : "Új alkalmazás jelszó létrehozása",
@@ -316,25 +319,34 @@ OC.L10N.register(
"Group admin for" : "Csoport Adminisztrátor itt",
"Quota" : "Kvóta",
"Storage location" : "A háttértár helye",
+ "User backend" : "Felhasználói háttér",
"Last login" : "Utolsó bejelentkezés",
"change full name" : "a teljes név megváltoztatása",
"set new password" : "új jelszó beállítása",
"change email address" : "e-mail cím megváltoztatása",
"Default" : "Alapértelmezett",
"add group" : "csoport hozzáadása",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ha támogatni szeretnéd a projektet\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztőkhöz</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">terjeszd</a>!",
"Add Group" : "csoport hozzáadása",
"Default Quota" : "Alapértelmezett kvóta",
"Full Name" : "Teljes név",
"Group Admin for" : "Csoport Adminisztrátor itt",
"Storage Location" : "A háttértár helye",
+ "User Backend" : "Felhasználói háttér",
"Last Login" : "Utolsó bejelentkezés",
"APCu" : "APCu",
"Redis" : "Redis",
"External Storage" : "Külső tárolási szolgáltatások becsatolása",
"Updates" : "Frissítések",
"No apps found for \"{query}\"" : "\"{query}\" keresésre nincs találat",
+ "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Kérjük, ellenőrizd a <a target=\"_blank\" href=\"%s\">telepítési dokumentációt ↗</a> a PHP konfigurációs beállításaival kapcsolatban, főleg ha PHP-FPM-et használsz.",
"Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel.",
"Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience.",
+ "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Tranzakcionális fájl lezárás tiltva van, ez problémákat okozhat versenyhelyzetben. Engedélyezze a 'filelocking.enabled' beállítást a config.php -ben, hogy elkerüld ezeket a problémákat. Nézd meg a <a target=\"_blank\" href=\"%s\">dokumentációt ↗</a> bővebb információért.",
+ "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Kérjük, ellenőrizd a <a target=\"_blank\" href=\"%s\">telepítési dokumentációt ↗</a> és a <a href=\"#log-section\">naplót</a>, hogy tartalmaz-e bármilyen hibát vagy figyelmeztetést.",
+ "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "A titkosítás önmagában nem garantálja a rendszer biztonságát. Kérlek olvassa el a Nextcloud dokumentációt, hogy további információkat szerezhess a titkosítási applikáció működéséről, és a támogatott lehetőségekről.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Más adatbázisról való áttéréshez használd ezt a parancssort: 'occ db:convert-type', vagy nézd meg a <a target=\"_blank\" href=\"%s\">dokumentációt ↗</a>.",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Ha támogatni szeretnéd a projektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztéshez</a>\n\t\tvagy\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">segítsd a többi felhasználót</a>!",
"Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Fejlesztve a {communityopen}Nextcloud közösség{linkclose} által, a {githubopen}forráskód{linkclose} az {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} licensz alá tartozik."
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json
index 6d3f3bdcaec..9e45f466f55 100644
--- a/settings/l10n/hu_HU.json
+++ b/settings/l10n/hu_HU.json
@@ -13,7 +13,7 @@
"Federated Cloud Sharing" : "Megosztás Egyesített Felhőben",
"cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL elavult %s verziót (%s) használ. Kérjük, frissítse az operációs rendszerét, vagy egyes funkciók (mint például a %s) megbízhatatlanul fognak működni.",
"A problem occurred, please check your log files (Error: %s)" : "Probléma történt, kérjük nézd meg a naplófájlokat (Hiba: %s).",
- "Migration Completed" : "Migráció kész!",
+ "Migration Completed" : "Migráció befejezve",
"Group already exists." : "A csoport már létezik.",
"Unable to add group." : "Nem lehet létrehozni a csoportot.",
"Unable to delete group." : "Nem lehet törölni a csoportot.",
@@ -44,6 +44,7 @@
"Add trusted domain" : "Megbízható tartomány hozzáadása",
"Migration in progress. Please wait until the migration is finished" : "Migráció folyamatban. Kérjük várj, míg a migráció befejeződik.",
"Migration started …" : "Migráció elindítva ...",
+ "Not saved" : "Nincs mentve",
"Sending..." : "Küldés...",
"Official" : "Hivatalos",
"Approved" : "Jóváhagyott",
@@ -127,8 +128,6 @@
"Sync clients" : "Szinkronizáló kliensek",
"None" : "Egyik sem",
"Login" : "Login",
- "Plain" : "Plain",
- "NT LAN Manager" : "NT LAN Manager",
"SSL" : "SSL",
"TLS" : "TLS",
"Email server" : "E-mail szerver",
@@ -179,6 +178,7 @@
"The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Csak olvasható beállítófájl engedélyezve. Ez meggátolja a beállítások módosítását a webes felületről. Továbbá, a fájlt kézzel kell írhatóvá tenni minden frissítés alkalmával.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Úgy tűnik, hogy a PHP úgy van beállítva, hogy eltávolítja programok belsejében elhelyezett szövegblokkokat. Emiatt a rendszer több alapvető fontosságú eleme működésképtelen lesz.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ezt valószínűleg egy gyorsítótár ill. kódgyorsító, mint pl, a Zend, OPcache vagy eAccelererator okozza.",
+ "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Az adatbázis nem tud \"READ COMMITTED\" tranzakció elkülönítési szinttel futni. Ez problémákat okozhat több egyidejű esemény végrehajtásakor.",
"%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s %2$s verziója van telepítve, de a stabilitási és teljesítményi okok miatt javasoljuk az újabb, %1$s verzióra való frissítést.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "A 'fileinfo' PHP modul hiányzik. Erősen javasolt ennek a modulnak a telepítése, mert ezzel lényegesen jobb a MIME-típusok felismerése.",
"Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Tranzakcionális fájl lezárás tiltva van, ez problémákat okozhat versenyhelyzetben. Engedélyezze a 'filelocking.enabled' beállítást a config.php -ben, hogy elkerülje ezeket a problémákat. Nézze meg a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentációt ↗</a> bővebb információért.",
@@ -187,6 +187,7 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Feltétlenül javasoljuk, hogy telepítse a szükséges csomagokat ahhoz, hogy a rendszere támogassa a következő lokalizációk valamelyikét: %s",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Ha a telepítése nem a webkiszolgáló gyökerében van, és a rendszer cron szolgáltatását használja, akkor problémák lehetnek az URL-ek képzésével. Ezek elkerülése érdekében állítsa be a config.php-ban az \"overwrite.cli.url\" paramétert a telepítés által használt webútvonalra. (Javasolt beállítás: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Az ütemezett feladat (cronjob) nem futott le parancssorból. A következő hibák tűntek fel:",
+ "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"%s\">log</a>." : "Kérjük, ellenőrizd a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">telepítési dokumentációt ↗</a> és a <a href=\"%s\">naplót</a>, hogy tartalmaz-e bármilyen hibát vagy figyelmeztetést.",
"All checks passed." : "Minden ellenőrzés sikeres.",
"Cron" : "Ütemezett feladatok",
"Last cron job execution: %s." : "Az utolsó cron feladat ekkor futott le: %s.",
@@ -282,9 +283,11 @@
"Desktop client" : "Asztali kliens",
"Android app" : "Android alkalmazás",
"iOS app" : "IOS alkalmazás",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ha támogatni szeretnéd a projektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztéshez</a>\n\t\tvagy\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">hírdesd</a>!",
"Show First Run Wizard again" : "Nézzük meg újra az első bejelentkezéskori segítséget!",
"Device" : "Eszköz",
"Last activity" : "Utolsó tevékenység",
+ "Passcodes that give an app or device permissions to access your account." : "A számkódok jogosultságot adnak egy alkalmazás vagy eszköz részére a fiókod hozzáféréséhez.",
"Name" : "Név",
"App name" : "Alkalmazás név",
"Create new app password" : "Új alkalmazás jelszó létrehozása",
@@ -314,25 +317,34 @@
"Group admin for" : "Csoport Adminisztrátor itt",
"Quota" : "Kvóta",
"Storage location" : "A háttértár helye",
+ "User backend" : "Felhasználói háttér",
"Last login" : "Utolsó bejelentkezés",
"change full name" : "a teljes név megváltoztatása",
"set new password" : "új jelszó beállítása",
"change email address" : "e-mail cím megváltoztatása",
"Default" : "Alapértelmezett",
"add group" : "csoport hozzáadása",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ha támogatni szeretnéd a projektet\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztőkhöz</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">terjeszd</a>!",
"Add Group" : "csoport hozzáadása",
"Default Quota" : "Alapértelmezett kvóta",
"Full Name" : "Teljes név",
"Group Admin for" : "Csoport Adminisztrátor itt",
"Storage Location" : "A háttértár helye",
+ "User Backend" : "Felhasználói háttér",
"Last Login" : "Utolsó bejelentkezés",
"APCu" : "APCu",
"Redis" : "Redis",
"External Storage" : "Külső tárolási szolgáltatások becsatolása",
"Updates" : "Frissítések",
"No apps found for \"{query}\"" : "\"{query}\" keresésre nincs találat",
+ "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Kérjük, ellenőrizd a <a target=\"_blank\" href=\"%s\">telepítési dokumentációt ↗</a> a PHP konfigurációs beállításaival kapcsolatban, főleg ha PHP-FPM-et használsz.",
"Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel.",
"Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience.",
+ "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Tranzakcionális fájl lezárás tiltva van, ez problémákat okozhat versenyhelyzetben. Engedélyezze a 'filelocking.enabled' beállítást a config.php -ben, hogy elkerüld ezeket a problémákat. Nézd meg a <a target=\"_blank\" href=\"%s\">dokumentációt ↗</a> bővebb információért.",
+ "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Kérjük, ellenőrizd a <a target=\"_blank\" href=\"%s\">telepítési dokumentációt ↗</a> és a <a href=\"#log-section\">naplót</a>, hogy tartalmaz-e bármilyen hibát vagy figyelmeztetést.",
+ "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "A titkosítás önmagában nem garantálja a rendszer biztonságát. Kérlek olvassa el a Nextcloud dokumentációt, hogy további információkat szerezhess a titkosítási applikáció működéséről, és a támogatott lehetőségekről.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Más adatbázisról való áttéréshez használd ezt a parancssort: 'occ db:convert-type', vagy nézd meg a <a target=\"_blank\" href=\"%s\">dokumentációt ↗</a>.",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Ha támogatni szeretnéd a projektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztéshez</a>\n\t\tvagy\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">segítsd a többi felhasználót</a>!",
"Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Fejlesztve a {communityopen}Nextcloud közösség{linkclose} által, a {githubopen}forráskód{linkclose} az {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} licensz alá tartozik."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/is.js b/settings/l10n/is.js
index aab43c850dc..edfed591b5d 100644
--- a/settings/l10n/is.js
+++ b/settings/l10n/is.js
@@ -46,6 +46,7 @@ OC.L10N.register(
"Add trusted domain" : "Bæta við treystu léni",
"Migration in progress. Please wait until the migration is finished" : "Yfirfærsla er í gangi. Dokaðu við þar til henni er lokið",
"Migration started …" : "Yfirfærsla hafin...",
+ "Not saved" : "Ekki vistað",
"Sending..." : "Sendi...",
"Official" : "Opinbert",
"Approved" : "Samþykkt",
diff --git a/settings/l10n/is.json b/settings/l10n/is.json
index 008f2fb7348..7d33421e8e2 100644
--- a/settings/l10n/is.json
+++ b/settings/l10n/is.json
@@ -44,6 +44,7 @@
"Add trusted domain" : "Bæta við treystu léni",
"Migration in progress. Please wait until the migration is finished" : "Yfirfærsla er í gangi. Dokaðu við þar til henni er lokið",
"Migration started …" : "Yfirfærsla hafin...",
+ "Not saved" : "Ekki vistað",
"Sending..." : "Sendi...",
"Official" : "Opinbert",
"Approved" : "Samþykkt",
diff --git a/settings/l10n/it.js b/settings/l10n/it.js
index 1f35db1f727..84ae4d05b08 100644
--- a/settings/l10n/it.js
+++ b/settings/l10n/it.js
@@ -46,6 +46,7 @@ OC.L10N.register(
"Add trusted domain" : "Aggiungi dominio attendibile",
"Migration in progress. Please wait until the migration is finished" : "Migrazione in corso. Attendi fino al completamento della migrazione",
"Migration started …" : "Migrazione avviata...",
+ "Not saved" : "Non salvato",
"Sending..." : "Invio in corso...",
"Official" : "Ufficiale",
"Approved" : "Approvata",
@@ -217,6 +218,8 @@ OC.L10N.register(
"Exclude groups from sharing" : "Escludi gruppi dalla condivisione",
"These groups will still be able to receive shares, but not to initiate them." : "Questi gruppi saranno in grado di ricevere condivisioni, ma non iniziarle.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Consenti il completamento del nome utente nella finestra di condivisione. Se è disabilitata, è necessario digitare il nome utente completo.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Mostra il testo di liberatoria sulla pagina di caricamento del collegamento pubblico. (Mostrato solo quando l'elenco dei file nascosto)",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Questo testo sarà mostrato sulla pagina di caricamento del collegamento pubblico quando l'elenco dei file è nascosto.",
"Tips & tricks" : "Suggerimenti e trucchi",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite è utilizzato come database. Per installazioni più grandi consigliamo di passare a un motore di database diverso.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "In particolar modo, quando si utilizza il client desktop per la sincronizzazione dei file, l'uso di SQLite è sconsigliato.",
diff --git a/settings/l10n/it.json b/settings/l10n/it.json
index 78ef1bbbc8c..397274990ab 100644
--- a/settings/l10n/it.json
+++ b/settings/l10n/it.json
@@ -44,6 +44,7 @@
"Add trusted domain" : "Aggiungi dominio attendibile",
"Migration in progress. Please wait until the migration is finished" : "Migrazione in corso. Attendi fino al completamento della migrazione",
"Migration started …" : "Migrazione avviata...",
+ "Not saved" : "Non salvato",
"Sending..." : "Invio in corso...",
"Official" : "Ufficiale",
"Approved" : "Approvata",
@@ -215,6 +216,8 @@
"Exclude groups from sharing" : "Escludi gruppi dalla condivisione",
"These groups will still be able to receive shares, but not to initiate them." : "Questi gruppi saranno in grado di ricevere condivisioni, ma non iniziarle.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Consenti il completamento del nome utente nella finestra di condivisione. Se è disabilitata, è necessario digitare il nome utente completo.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Mostra il testo di liberatoria sulla pagina di caricamento del collegamento pubblico. (Mostrato solo quando l'elenco dei file nascosto)",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Questo testo sarà mostrato sulla pagina di caricamento del collegamento pubblico quando l'elenco dei file è nascosto.",
"Tips & tricks" : "Suggerimenti e trucchi",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite è utilizzato come database. Per installazioni più grandi consigliamo di passare a un motore di database diverso.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "In particolar modo, quando si utilizza il client desktop per la sincronizzazione dei file, l'uso di SQLite è sconsigliato.",
diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js
index dca660a9cca..7f4df7337eb 100644
--- a/settings/l10n/nl.js
+++ b/settings/l10n/nl.js
@@ -46,6 +46,7 @@ OC.L10N.register(
"Add trusted domain" : "Vertrouwd domein toevoegen",
"Migration in progress. Please wait until the migration is finished" : "Migratie bezig. Wacht tot het proces klaar is.",
"Migration started …" : "Migratie gestart...",
+ "Not saved" : "Niet opgeslagen",
"Sending..." : "Versturen...",
"Official" : "Officieel",
"Approved" : "Goedgekeurd",
@@ -217,6 +218,8 @@ OC.L10N.register(
"Exclude groups from sharing" : "Sluit groepen uit van delen",
"These groups will still be able to receive shares, but not to initiate them." : "Deze groepen kunnen gedeelde mappen bestanden ontvangen, maar kunnen ze niet starten.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Sta auto-aanvullen van gebruikersnaam toe in de Delen-dialoog. Als dit is uitgeschakeld, moet de gebruikersnaam volledig worden ingevuld.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Tonen disclaimer op de openbare link uploadpagina (alleen tonen als het bestandsoverzicht verborgen is).",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Deze tekst wordt getoond op de openbare link uploadpagina als het bestandsoverzicht is verborgen.",
"Tips & tricks" : "Tips & trucs",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wordt gebruikt als database. Voor grotere installaties adviseren we om te schakelen naar een andere database engine.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Vooral wanneer de desktop client wordt gebruik voor bestandssynchronisatie wordt gebruik van sqlite afgeraden.",
diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json
index 8a26862260f..3f5327fa0d6 100644
--- a/settings/l10n/nl.json
+++ b/settings/l10n/nl.json
@@ -44,6 +44,7 @@
"Add trusted domain" : "Vertrouwd domein toevoegen",
"Migration in progress. Please wait until the migration is finished" : "Migratie bezig. Wacht tot het proces klaar is.",
"Migration started …" : "Migratie gestart...",
+ "Not saved" : "Niet opgeslagen",
"Sending..." : "Versturen...",
"Official" : "Officieel",
"Approved" : "Goedgekeurd",
@@ -215,6 +216,8 @@
"Exclude groups from sharing" : "Sluit groepen uit van delen",
"These groups will still be able to receive shares, but not to initiate them." : "Deze groepen kunnen gedeelde mappen bestanden ontvangen, maar kunnen ze niet starten.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Sta auto-aanvullen van gebruikersnaam toe in de Delen-dialoog. Als dit is uitgeschakeld, moet de gebruikersnaam volledig worden ingevuld.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Tonen disclaimer op de openbare link uploadpagina (alleen tonen als het bestandsoverzicht verborgen is).",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Deze tekst wordt getoond op de openbare link uploadpagina als het bestandsoverzicht is verborgen.",
"Tips & tricks" : "Tips & trucs",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wordt gebruikt als database. Voor grotere installaties adviseren we om te schakelen naar een andere database engine.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Vooral wanneer de desktop client wordt gebruik voor bestandssynchronisatie wordt gebruik van sqlite afgeraden.",
diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js
index 5ba30582802..1eda84a85b0 100644
--- a/settings/l10n/ru.js
+++ b/settings/l10n/ru.js
@@ -46,6 +46,7 @@ OC.L10N.register(
"Add trusted domain" : "Добавить доверенный домен",
"Migration in progress. Please wait until the migration is finished" : "Миграция в процессе. Пожалуйста, подождите завершения миграции",
"Migration started …" : "Начата миграция ...",
+ "Not saved" : "Не сохранено",
"Sending..." : "Отправляется ...",
"Official" : "Официальное",
"Approved" : "Подтвержденное",
diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json
index 1944fa3cadc..7be6c02f182 100644
--- a/settings/l10n/ru.json
+++ b/settings/l10n/ru.json
@@ -44,6 +44,7 @@
"Add trusted domain" : "Добавить доверенный домен",
"Migration in progress. Please wait until the migration is finished" : "Миграция в процессе. Пожалуйста, подождите завершения миграции",
"Migration started …" : "Начата миграция ...",
+ "Not saved" : "Не сохранено",
"Sending..." : "Отправляется ...",
"Official" : "Официальное",
"Approved" : "Подтвержденное",
diff --git a/tests/Settings/Controller/UsersControllerTest.php b/tests/Settings/Controller/UsersControllerTest.php
index 244d1f744d3..e036e299e00 100644
--- a/tests/Settings/Controller/UsersControllerTest.php
+++ b/tests/Settings/Controller/UsersControllerTest.php
@@ -13,6 +13,9 @@ namespace Tests\Settings\Controller;
use \OC\Settings\Application;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
+use OCP\IAvatar;
+use OCP\IAvatarManager;
+use OCP\IUser;
/**
* @group DB
@@ -60,11 +63,11 @@ class UsersControllerTest extends \Test\TestCase {
/*
* Set default avtar behaviour for whole testsuite
*/
- $this->container['OCP\\IAvatarManager'] = $this->getMock('OCP\IAvatarManager');
+ $this->container['OCP\\IAvatarManager'] = $this->createMock(IAvatarManager::class);
- $avatarExists = $this->getMock('OCP\IAvatar');
+ $avatarExists = $this->createMock(IAvatar::class);
$avatarExists->method('exists')->willReturn(true);
- $avatarNotExists = $this->getMock('OCP\IAvatar');
+ $avatarNotExists = $this->createMock(IAvatar::class);
$avatarNotExists->method('exists')->willReturn(false);
$this->container['OCP\\IAvatarManager']
->method('getAvatar')
@@ -1861,7 +1864,7 @@ class UsersControllerTest extends \Test\TestCase {
}
public function testSetDisplayNameNull() {
- $user = $this->getMock('\OCP\IUser');
+ $user = $this->createMock(IUser::class);
$user->method('getUID')->willReturn('userName');
$this->container['UserSession']
@@ -1885,33 +1888,33 @@ class UsersControllerTest extends \Test\TestCase {
public function dataSetDisplayName() {
$data = [];
- $user1 = $this->getMock('\OCP\IUser');
+ $user1 = $this->createMock(IUser::class);
$user1->method('getUID')->willReturn('user1');
$user1->method('canChangeDisplayName')->willReturn(true);
$data[] = [$user1, $user1, false, false, true];
- $user1 = $this->getMock('\OCP\IUser');
+ $user1 = $this->createMock(IUser::class);
$user1->method('getUID')->willReturn('user1');
$user1->method('canChangeDisplayName')->willReturn(false);
$data[] = [$user1, $user1, false, false, false];
- $user1 = $this->getMock('\OCP\IUser');
+ $user1 = $this->createMock(IUser::class);
$user1->method('getUID')->willReturn('user1');
- $user2 = $this->getMock('\OCP\IUser');
+ $user2 = $this->createMock(IUser::class);
$user2->method('getUID')->willReturn('user2');
$user2->method('canChangeDisplayName')->willReturn(true);
$data[] = [$user1, $user2, false, false, false];
- $user1 = $this->getMock('\OCP\IUser');
+ $user1 = $this->createMock(IUser::class);
$user1->method('getUID')->willReturn('user1');
- $user2 = $this->getMock('\OCP\IUser');
+ $user2 = $this->createMock(IUser::class);
$user2->method('getUID')->willReturn('user2');
$user2->method('canChangeDisplayName')->willReturn(true);
$data[] = [$user1, $user2, true, false, true];
- $user1 = $this->getMock('\OCP\IUser');
+ $user1 = $this->createMock(IUser::class);
$user1->method('getUID')->willReturn('user1');
- $user2 = $this->getMock('\OCP\IUser');
+ $user2 = $this->createMock(IUser::class);
$user2->method('getUID')->willReturn('user2');
$user2->method('canChangeDisplayName')->willReturn(true);
$data[] = [$user1, $user2, false, true, true];
@@ -1981,7 +1984,7 @@ class UsersControllerTest extends \Test\TestCase {
}
public function testSetDisplayNameFails() {
- $user = $this->getMock('\OCP\IUser');
+ $user = $this->createMock(IUser::class);
$user->method('canChangeDisplayname')->willReturn(true);
$user->method('getUID')->willReturn('user');
$user->expects($this->once())
diff --git a/tests/lib/AppTest.php b/tests/lib/AppTest.php
index 64311f6e4ae..ac4fb913beb 100644
--- a/tests/lib/AppTest.php
+++ b/tests/lib/AppTest.php
@@ -8,6 +8,7 @@
*/
namespace Test;
+use OC\AppConfig;
use OCP\IAppConfig;
/**
@@ -476,13 +477,11 @@ class AppTest extends \Test\TestCase {
private function setupAppConfigMock() {
- $appConfig = $this->getMock(
- '\OC\AppConfig',
- array('getValues'),
- array(\OC::$server->getDatabaseConnection()),
- '',
- false
- );
+ $appConfig = $this->getMockBuilder(AppConfig::class)
+ ->setMethods(['getValues'])
+ ->setConstructorArgs([\OC::$server->getDatabaseConnection()])
+ ->disableOriginalConstructor()
+ ->getMock();
$this->registerAppConfig($appConfig);
return $appConfig;
diff --git a/tests/lib/BackgroundJob/JobListTest.php b/tests/lib/BackgroundJob/JobListTest.php
index b8dcb735a26..78299e81546 100644
--- a/tests/lib/BackgroundJob/JobListTest.php
+++ b/tests/lib/BackgroundJob/JobListTest.php
@@ -8,8 +8,10 @@
namespace Test\BackgroundJob;
+use OCP\AppFramework\Utility\ITimeFactory;
use OCP\BackgroundJob\IJob;
use OCP\DB\QueryBuilder\IQueryBuilder;
+use OCP\IConfig;
use Test\TestCase;
/**
@@ -36,8 +38,8 @@ class JobListTest extends TestCase {
$this->connection = \OC::$server->getDatabaseConnection();
$this->clearJobsList();
- $this->config = $this->getMock('OCP\IConfig');
- $this->timeFactory = $this->getMock('OCP\AppFramework\Utility\ITimeFactory');
+ $this->config = $this->createMock(IConfig::class);
+ $this->timeFactory = $this->createMock(ITimeFactory::class);
$this->instance = new \OC\BackgroundJob\JobList(
$this->connection,
$this->config,
diff --git a/tests/lib/Cache/FileCacheTest.php b/tests/lib/Cache/FileCacheTest.php
index d2725bf9033..a90fc6678e9 100644
--- a/tests/lib/Cache/FileCacheTest.php
+++ b/tests/lib/Cache/FileCacheTest.php
@@ -21,6 +21,7 @@
*/
namespace Test\Cache;
+use OC\Files\Storage\Local;
/**
* Class FileCacheTest
@@ -102,11 +103,10 @@ class FileCacheTest extends TestCache {
}
private function setupMockStorage() {
- $mockStorage = $this->getMock(
- '\OC\Files\Storage\Local',
- ['filemtime', 'unlink'],
- [['datadir' => \OC::$server->getTempManager()->getTemporaryFolder()]]
- );
+ $mockStorage = $this->getMockBuilder(Local::class)
+ ->setMethods(['filemtime', 'unlink'])
+ ->setConstructorArgs([['datadir' => \OC::$server->getTempManager()->getTemporaryFolder()]])
+ ->getMock();
\OC\Files\Filesystem::mount($mockStorage, array(), '/test/cache');
diff --git a/tests/lib/Comments/ManagerTest.php b/tests/lib/Comments/ManagerTest.php
index 90a8399eb2b..730d82d9d0d 100644
--- a/tests/lib/Comments/ManagerTest.php
+++ b/tests/lib/Comments/ManagerTest.php
@@ -3,6 +3,7 @@
namespace Test\Comments;
use OCP\Comments\ICommentsManager;
+use OCP\IUser;
use Test\TestCase;
/**
@@ -561,7 +562,7 @@ class ManagerTest extends TestCase {
}
public function testSetMarkRead() {
- $user = $this->getMock('\OCP\IUser');
+ $user = $this->createMock(IUser::class);
$user->expects($this->any())
->method('getUID')
->will($this->returnValue('alice'));
@@ -577,7 +578,7 @@ class ManagerTest extends TestCase {
}
public function testSetMarkReadUpdate() {
- $user = $this->getMock('\OCP\IUser');
+ $user = $this->createMock(IUser::class);
$user->expects($this->any())
->method('getUID')
->will($this->returnValue('alice'));
@@ -596,7 +597,7 @@ class ManagerTest extends TestCase {
}
public function testReadMarkDeleteUser() {
- $user = $this->getMock('\OCP\IUser');
+ $user = $this->createMock(IUser::class);
$user->expects($this->any())
->method('getUID')
->will($this->returnValue('alice'));
@@ -613,7 +614,7 @@ class ManagerTest extends TestCase {
}
public function testReadMarkDeleteObject() {
- $user = $this->getMock('\OCP\IUser');
+ $user = $this->createMock(IUser::class);
$user->expects($this->any())
->method('getUID')
->will($this->returnValue('alice'));
diff --git a/tests/lib/Encryption/DecryptAllTest.php b/tests/lib/Encryption/DecryptAllTest.php
index ed86b743c3b..7859a65ff6d 100644
--- a/tests/lib/Encryption/DecryptAllTest.php
+++ b/tests/lib/Encryption/DecryptAllTest.php
@@ -29,6 +29,7 @@ use OC\Encryption\Manager;
use OC\Files\FileInfo;
use OC\Files\View;
use OCP\IUserManager;
+use Symfony\Component\Console\Formatter\OutputFormatterInterface;
use Test\TestCase;
/**
@@ -78,7 +79,7 @@ class DecryptAllTest extends TestCase {
->disableOriginalConstructor()->getMock();
$this->outputInterface->expects($this->any())->method('getFormatter')
- ->willReturn($this->getMock('\Symfony\Component\Console\Formatter\OutputFormatterInterface'));
+ ->willReturn($this->createMock(OutputFormatterInterface::class));
$this->instance = new DecryptAll($this->encryptionManager, $this->userManager, $this->view);
diff --git a/tests/lib/Files/Cache/CacheTest.php b/tests/lib/Files/Cache/CacheTest.php
index bfc3c1be7b8..4a2581fbc54 100644
--- a/tests/lib/Files/Cache/CacheTest.php
+++ b/tests/lib/Files/Cache/CacheTest.php
@@ -10,6 +10,7 @@ namespace Test\Files\Cache;
use Doctrine\DBAL\Platforms\MySqlPlatform;
+use OC\Files\Cache\Cache;
class LongId extends \OC\Files\Storage\Temporary {
public function getId() {
@@ -500,7 +501,10 @@ class CacheTest extends \Test\TestCase {
/**
* @var \OC\Files\Cache\Cache | \PHPUnit_Framework_MockObject_MockObject $cacheMock
*/
- $cacheMock = $this->getMock('\OC\Files\Cache\Cache', array('normalize'), array($this->storage), '', true);
+ $cacheMock = $this->getMockBuilder(Cache::class)
+ ->setMethods(['normalize'])
+ ->setConstructorArgs([$this->storage])
+ ->getMock();
$cacheMock->expects($this->any())
->method('normalize')
diff --git a/tests/lib/Files/Config/UserMountCacheTest.php b/tests/lib/Files/Config/UserMountCacheTest.php
index b9e09687c95..85bc4146a2d 100644
--- a/tests/lib/Files/Config/UserMountCacheTest.php
+++ b/tests/lib/Files/Config/UserMountCacheTest.php
@@ -47,7 +47,7 @@ class UserMountCacheTest extends TestCase {
$userBackend->createUser('u1', '');
$userBackend->createUser('u2', '');
$this->userManager->registerBackend($userBackend);
- $this->cache = new \OC\Files\Config\UserMountCache($this->connection, $this->userManager, $this->getMock('\OC\Log'));
+ $this->cache = new \OC\Files\Config\UserMountCache($this->connection, $this->userManager, $this->createMock(Log::class));
}
public function tearDown() {
diff --git a/tests/lib/Files/Node/FolderTest.php b/tests/lib/Files/Node/FolderTest.php
index 18acfcae1fa..17cb2f2caa2 100644
--- a/tests/lib/Files/Node/FolderTest.php
+++ b/tests/lib/Files/Node/FolderTest.php
@@ -10,13 +10,17 @@ namespace Test\Files\Node;
use OC\Files\Cache\Cache;
use OC\Files\FileInfo;
+use OC\Files\Mount\Manager;
use OC\Files\Mount\MountPoint;
use OC\Files\Node\Node;
+use OC\Files\Node\Root;
use OC\Files\Storage\Temporary;
use OC\Files\Storage\Wrapper\Jail;
+use OCP\Files\Mount\IMountPoint;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
use OC\Files\View;
+use OCP\Files\Storage;
/**
* Class FolderTest
@@ -34,7 +38,7 @@ class FolderTest extends \Test\TestCase {
}
protected function getMockStorage() {
- $storage = $this->getMock('\OCP\Files\Storage');
+ $storage = $this->createMock(Storage::class);
$storage->expects($this->any())
->method('getId')
->will($this->returnValue('home::someuser'));
@@ -46,12 +50,14 @@ class FolderTest extends \Test\TestCase {
}
public function testDelete() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)
+ ->setConstructorArgs([$manager, $view, $this->user])
+ ->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
@@ -99,11 +105,11 @@ class FolderTest extends \Test\TestCase {
/**
* @var \OC\Files\Mount\Manager $manager
*/
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
+ $view = $this->createMock(View::class);
$root = new \OC\Files\Node\Root($manager, $view, $this->user);
$root->listen('\OC\Files', 'preDelete', $preListener);
$root->listen('\OC\Files', 'postDelete', $postListener);
@@ -131,12 +137,12 @@ class FolderTest extends \Test\TestCase {
* @expectedException \OCP\Files\NotPermittedException
*/
public function testDeleteNotPermitted() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setConstructorArgs([$manager, $view, $this->user])->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
@@ -151,12 +157,14 @@ class FolderTest extends \Test\TestCase {
}
public function testGetDirectoryContent() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)
+ ->setConstructorArgs([$manager, $view, $this->user])
+ ->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
@@ -181,12 +189,12 @@ class FolderTest extends \Test\TestCase {
}
public function testGet() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setConstructorArgs([$manager, $view, $this->user])->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
@@ -200,12 +208,12 @@ class FolderTest extends \Test\TestCase {
}
public function testNodeExists() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setConstructorArgs([$manager, $view, $this->user])->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
@@ -222,12 +230,12 @@ class FolderTest extends \Test\TestCase {
}
public function testNodeExistsNotExists() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setConstructorArgs([$manager, $view, $this->user])->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
@@ -242,12 +250,12 @@ class FolderTest extends \Test\TestCase {
}
public function testNewFolder() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setConstructorArgs([$manager, $view, $this->user])->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
@@ -272,12 +280,12 @@ class FolderTest extends \Test\TestCase {
* @expectedException \OCP\Files\NotPermittedException
*/
public function testNewFolderNotPermitted() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setConstructorArgs([$manager, $view, $this->user])->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
@@ -292,12 +300,12 @@ class FolderTest extends \Test\TestCase {
}
public function testNewFile() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setConstructorArgs([$manager, $view, $this->user])->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
@@ -322,12 +330,12 @@ class FolderTest extends \Test\TestCase {
* @expectedException \OCP\Files\NotPermittedException
*/
public function testNewFileNotPermitted() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setConstructorArgs([$manager, $view, $this->user])->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
@@ -342,12 +350,12 @@ class FolderTest extends \Test\TestCase {
}
public function testGetFreeSpace() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setConstructorArgs([$manager, $view, $this->user])->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
@@ -362,23 +370,23 @@ class FolderTest extends \Test\TestCase {
}
public function testSearch() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setConstructorArgs([$manager, $view, $this->user])->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
- $storage = $this->getMock('\OC\Files\Storage\Storage');
- $cache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
+ $storage = $this->createMock(Storage::class);
+ $cache = $this->getMockBuilder(Cache::class)->setConstructorArgs([''])->getMock();
$storage->expects($this->once())
->method('getCache')
->will($this->returnValue($cache));
- $mount = $this->getMock('\OCP\Files\Mount\IMountPoint');
+ $mount = $this->createMock(IMountPoint::class);
$mount->expects($this->once())
->method('getStorage')
->will($this->returnValue($storage));
@@ -410,19 +418,19 @@ class FolderTest extends \Test\TestCase {
}
public function testSearchInRoot() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array('getUser', 'getMountsIn', 'getMount'), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setMethods(['getUser', 'getMountsIn', 'getMount'])->setConstructorArgs([$manager, $view, $this->user])->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
- $storage = $this->getMock('\OC\Files\Storage\Storage');
- $cache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
+ $storage = $this->createMock(Storage::class);
+ $cache = $this->getMockBuilder(Cache::class)->setConstructorArgs([''])->getMock();
- $mount = $this->getMock('\OCP\Files\Mount\IMountPoint');
+ $mount = $this->createMock(IMountPoint::class);
$mount->expects($this->once())
->method('getStorage')
->will($this->returnValue($storage));
@@ -458,19 +466,19 @@ class FolderTest extends \Test\TestCase {
}
public function testSearchInStorageRoot() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setConstructorArgs([$manager, $view, $this->user])->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
- $storage = $this->getMock('\OC\Files\Storage\Storage');
- $cache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
+ $storage = $this->createMock(Storage::class);
+ $cache = $this->getMockBuilder(Cache::class)->setConstructorArgs([''])->getMock();
- $mount = $this->getMock('\OCP\Files\Mount\IMountPoint');
+ $mount = $this->createMock(IMountPoint::class);
$mount->expects($this->once())
->method('getStorage')
->will($this->returnValue($storage));
@@ -506,19 +514,19 @@ class FolderTest extends \Test\TestCase {
}
public function testSearchByTag() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setConstructorArgs([$manager, $view, $this->user])->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
- $storage = $this->getMock('\OC\Files\Storage\Storage');
- $cache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
+ $storage = $this->createMock(Storage::class);
+ $cache = $this->getMockBuilder(Cache::class)->setConstructorArgs([''])->getMock();
- $mount = $this->getMock('\OCP\Files\Mount\IMountPoint');
+ $mount = $this->createMock(IMountPoint::class);
$mount->expects($this->once())
->method('getStorage')
->will($this->returnValue($storage));
@@ -554,22 +562,22 @@ class FolderTest extends \Test\TestCase {
}
public function testSearchSubStorages() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array(), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setConstructorArgs([$manager, $view, $this->user])->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
- $storage = $this->getMock('\OC\Files\Storage\Storage');
- $cache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
- $subCache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
- $subStorage = $this->getMock('\OC\Files\Storage\Storage');
- $subMount = $this->getMock('\OC\Files\Mount\MountPoint', array(), array(null, ''));
+ $storage = $this->createMock(Storage::class);
+ $cache = $this->getMockBuilder(Cache::class)->setConstructorArgs([''])->getMock();
+ $subCache = $this->getMockBuilder(Cache::class)->setConstructorArgs([''])->getMock();
+ $subStorage = $this->createMock(Storage::class);
+ $subMount = $this->getMockBuilder(MountPoint::class)->setConstructorArgs([null, ''])->getMock();
- $mount = $this->getMock('\OCP\Files\Mount\IMountPoint');
+ $mount = $this->createMock(IMountPoint::class);
$mount->expects($this->once())
->method('getStorage')
->will($this->returnValue($storage));
@@ -634,18 +642,18 @@ class FolderTest extends \Test\TestCase {
}
public function testGetById() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array('getUser', 'getMountsIn', 'getMount'), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setMethods(['getUser', 'getMountsIn', 'getMount'])->setConstructorArgs([$manager, $view, $this->user])->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
- $storage = $this->getMock('\OC\Files\Storage\Storage');
+ $storage = $this->createMock(\OC\Files\Storage\Storage::class);
$mount = new MountPoint($storage, '/bar');
- $cache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
+ $cache = $this->getMockBuilder(Cache::class)->setConstructorArgs([''])->getMock();
$view->expects($this->once())
->method('getFileInfo')
@@ -677,18 +685,18 @@ class FolderTest extends \Test\TestCase {
}
public function testGetByIdOutsideFolder() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array('getUser', 'getMountsIn', 'getMount'), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setMethods(['getUser', 'getMountsIn', 'getMount'])->setConstructorArgs([$manager, $view, $this->user])->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
- $storage = $this->getMock('\OC\Files\Storage\Storage');
+ $storage = $this->createMock(\OC\Files\Storage\Storage::class);
$mount = new MountPoint($storage, '/bar');
- $cache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
+ $cache = $this->getMockBuilder(Cache::class)->setConstructorArgs([''])->getMock();
$storage->expects($this->once())
->method('getCache')
@@ -715,19 +723,19 @@ class FolderTest extends \Test\TestCase {
}
public function testGetByIdMultipleStorages() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array('getUser', 'getMountsIn', 'getMount'), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setMethods(['getUser', 'getMountsIn', 'getMount'])->setConstructorArgs([$manager, $view, $this->user])->getMock();
$root->expects($this->any())
->method('getUser')
->will($this->returnValue($this->user));
- $storage = $this->getMock('\OC\Files\Storage\Storage');
+ $storage = $this->createMock(\OC\Files\Storage\Storage::class);
$mount1 = new MountPoint($storage, '/bar');
$mount2 = new MountPoint($storage, '/bar/foo/asd');
- $cache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
+ $cache = $this->getMockBuilder(Cache::class)->setConstructorArgs([''])->getMock();
$view->expects($this->any())
->method('getFileInfo')
@@ -772,13 +780,13 @@ class FolderTest extends \Test\TestCase {
* @dataProvider uniqueNameProvider
*/
public function testGetUniqueName($name, $existingFiles, $expected) {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
$folderPath = '/bar/foo';
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
- $root = $this->getMock('\OC\Files\Node\Root', array('getUser', 'getMountsIn', 'getMount'), array($manager, $view, $this->user));
+ $view = $this->createMock(View::class);
+ $root = $this->getMockBuilder(Root::class)->setMethods(['getUser', 'getMountsIn', 'getMount'])->setConstructorArgs([$manager, $view, $this->user])->getMock();
$view->expects($this->any())
->method('file_exists')
@@ -796,14 +804,14 @@ class FolderTest extends \Test\TestCase {
}
public function testRecent() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
$folderPath = '/bar/foo';
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
+ $view = $this->createMock(View::class);
/** @var \PHPUnit_Framework_MockObject_MockObject|\OC\Files\Node\Root $root */
- $root = $this->getMock('\OC\Files\Node\Root', array('getUser', 'getMountsIn', 'getMount'), array($manager, $view, $this->user));
+ $root = $this->getMockBuilder(Root::class)->setMethods(['getUser', 'getMountsIn', 'getMount'])->setConstructorArgs([$manager, $view, $this->user])->getMock();
/** @var \PHPUnit_Framework_MockObject_MockObject|\OC\Files\FileInfo $folderInfo */
$folderInfo = $this->getMockBuilder('\OC\Files\FileInfo')
->disableOriginalConstructor()->getMock();
@@ -854,14 +862,14 @@ class FolderTest extends \Test\TestCase {
}
public function testRecentFolder() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
$folderPath = '/bar/foo';
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
+ $view = $this->createMock(View::class);
/** @var \PHPUnit_Framework_MockObject_MockObject|\OC\Files\Node\Root $root */
- $root = $this->getMock('\OC\Files\Node\Root', array('getUser', 'getMountsIn', 'getMount'), array($manager, $view, $this->user));
+ $root = $this->getMockBuilder(Root::class)->setMethods(['getUser', 'getMountsIn', 'getMount'])->setConstructorArgs([$manager, $view, $this->user])->getMock();
/** @var \PHPUnit_Framework_MockObject_MockObject|\OC\Files\FileInfo $folderInfo */
$folderInfo = $this->getMockBuilder('\OC\Files\FileInfo')
->disableOriginalConstructor()->getMock();
@@ -910,14 +918,14 @@ class FolderTest extends \Test\TestCase {
}
public function testRecentJail() {
- $manager = $this->getMock('\OC\Files\Mount\Manager');
+ $manager = $this->createMock(Manager::class);
$folderPath = '/bar/foo';
/**
* @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view
*/
- $view = $this->getMock('\OC\Files\View');
+ $view = $this->createMock(View::class);
/** @var \PHPUnit_Framework_MockObject_MockObject|\OC\Files\Node\Root $root */
- $root = $this->getMock('\OC\Files\Node\Root', array('getUser', 'getMountsIn', 'getMount'), array($manager, $view, $this->user));
+ $root = $this->getMockBuilder(Root::class)->setMethods(['getUser', 'getMountsIn', 'getMount'])->setConstructorArgs([$manager, $view, $this->user])->getMock();
/** @var \PHPUnit_Framework_MockObject_MockObject|\OC\Files\FileInfo $folderInfo */
$folderInfo = $this->getMockBuilder('\OC\Files\FileInfo')
->disableOriginalConstructor()->getMock();
diff --git a/tests/lib/Files/Storage/Wrapper/QuotaTest.php b/tests/lib/Files/Storage/Wrapper/QuotaTest.php
index 2e9f68b3c56..ee01d0c3f26 100644
--- a/tests/lib/Files/Storage/Wrapper/QuotaTest.php
+++ b/tests/lib/Files/Storage/Wrapper/QuotaTest.php
@@ -10,6 +10,7 @@ namespace Test\Files\Storage\Wrapper;
//ensure the constants are loaded
use OC\Files\Cache\CacheEntry;
+use OC\Files\Storage\Local;
\OC::$loader->load('\OC\Files\Filesystem');
@@ -75,11 +76,10 @@ class QuotaTest extends \Test\Files\Storage\Storage {
}
public function testFreeSpaceWithUnknownDiskSpace() {
- $storage = $this->getMock(
- '\OC\Files\Storage\Local',
- array('free_space'),
- array(array('datadir' => $this->tmpDir))
- );
+ $storage = $this->getMockBuilder(Local::class)
+ ->setMethods(['free_space'])
+ ->setConstructorArgs([['datadir' => $this->tmpDir]])
+ ->getMock();
$storage->expects($this->any())
->method('free_space')
->will($this->returnValue(-2));
@@ -132,10 +132,10 @@ class QuotaTest extends \Test\Files\Storage\Storage {
}
public function testReturnFalseWhenFopenFailed() {
- $failStorage = $this->getMock(
- '\OC\Files\Storage\Local',
- array('fopen'),
- array(array('datadir' => $this->tmpDir)));
+ $failStorage = $this->getMockBuilder(Local::class)
+ ->setMethods(['fopen'])
+ ->setConstructorArgs([['datadir' => $this->tmpDir]])
+ ->getMock();
$failStorage->expects($this->any())
->method('fopen')
->will($this->returnValue(false));
diff --git a/tests/lib/Files/Utils/ScannerTest.php b/tests/lib/Files/Utils/ScannerTest.php
index 0c8e41c24c7..7895331d615 100644
--- a/tests/lib/Files/Utils/ScannerTest.php
+++ b/tests/lib/Files/Utils/ScannerTest.php
@@ -11,6 +11,7 @@ namespace Test\Files\Utils;
use OC\Files\Filesystem;
use OC\Files\Mount\MountPoint;
use OC\Files\Storage\Temporary;
+use OCP\Files\Config\IMountProvider;
use OCP\Files\Storage\IStorageFactory;
use OCP\IUser;
@@ -107,7 +108,7 @@ class ScannerTest extends \Test\TestCase {
$uid = $this->getUniqueID();
$this->userBackend->createUser($uid, 'test');
- $mountProvider = $this->getMock('\OCP\Files\Config\IMountProvider');
+ $mountProvider = $this->createMock(IMountProvider::class);
$storage = new Temporary(array());
$mount = new MountPoint($storage, '/' . $uid . '/files/foo');
diff --git a/tests/lib/Files/ViewTest.php b/tests/lib/Files/ViewTest.php
index 72a91614100..b0233116ed5 100644
--- a/tests/lib/Files/ViewTest.php
+++ b/tests/lib/Files/ViewTest.php
@@ -12,8 +12,10 @@ use OC\Files\Cache\Watcher;
use OC\Files\Storage\Common;
use OC\Files\Mount\MountPoint;
use OC\Files\Storage\Temporary;
+use OCP\Files\Config\IMountProvider;
use OCP\Files\FileInfo;
use OCP\Lock\ILockingProvider;
+use Test\TestMoveableMountPoint;
class TemporaryNoTouch extends \OC\Files\Storage\Temporary {
public function touch($path, $mtime = null) {
@@ -1529,14 +1531,13 @@ class ViewTest extends \Test\TestCase {
->setMethods([])
->getMock();
- $mounts[] = $this->getMock(
- '\Test\TestMoveableMountPoint',
- ['moveMount'],
- [$storage, $mountPoint]
- );
+ $mounts[] = $this->getMockBuilder(TestMoveableMountPoint::class)
+ ->setMethods(['moveMount'])
+ ->setConstructorArgs([$storage, $mountPoint])
+ ->getMock();
}
- $mountProvider = $this->getMock('\OCP\Files\Config\IMountProvider');
+ $mountProvider = $this->createMock(IMountProvider::class);
$mountProvider->expects($this->any())
->method('getMountsForUser')
->will($this->returnValue($mounts));
diff --git a/tests/lib/FilesTest.php b/tests/lib/FilesTest.php
index 496312708bc..1d26984ee72 100644
--- a/tests/lib/FilesTest.php
+++ b/tests/lib/FilesTest.php
@@ -24,7 +24,7 @@ namespace Test;
class FilesTest extends \Test\TestCase {
- const UPLOAD_LIMIT_DEFAULT_STR = '513M';
+ const UPLOAD_LIMIT_DEFAULT_STR = '511M';
const UPLOAD_LIMIT_SETTING_STR = '2M';
const UPLOAD_LIMIT_SETTING_BYTES = 2097152;
diff --git a/tests/lib/HelperStorageTest.php b/tests/lib/HelperStorageTest.php
index e841dbfce18..e27d5eca21d 100644
--- a/tests/lib/HelperStorageTest.php
+++ b/tests/lib/HelperStorageTest.php
@@ -7,6 +7,7 @@
*/
namespace Test;
+use OC\Files\Storage\Temporary;
/**
* Test the storage functions of OC_Helper
@@ -62,12 +63,10 @@ class HelperStorageTest extends \Test\TestCase {
* @return \OC\Files\Storage\Storage
*/
private function getStorageMock($freeSpace = 12) {
- $this->storageMock = $this->getMock(
- '\OC\Files\Storage\Temporary',
- array('free_space'),
- array('')
- );
-
+ $this->storageMock = $this->getMockBuilder(Temporary::class)
+ ->setMethods(['free_space'])
+ ->setConstructorArgs([''])
+ ->getMock();
$this->storageMock->expects($this->once())
->method('free_space')
diff --git a/tests/lib/IntegrityCheck/CheckerTest.php b/tests/lib/IntegrityCheck/CheckerTest.php
index 5823ac0f25c..0e6bd52a5df 100644
--- a/tests/lib/IntegrityCheck/CheckerTest.php
+++ b/tests/lib/IntegrityCheck/CheckerTest.php
@@ -546,11 +546,11 @@ class CheckerTest extends TestCase {
public function testWriteCoreSignatureWithValidModifiedHtaccessAndUserIni() {
$expectedSignatureFileData = '{
"hashes": {
- ".htaccess": "ef34c5f35fffb6e8e3008c2118617b53243cfc5ac2513edba9ebd383169862bc16e4f889316ad65788d6b172fe14713af90908c19838c4ba13b4146e12c7ac62",
- ".user.ini": "0a557e3cdca4c2e3675deed761d79d109011dcdebbd9c7f6429f1d3476938ec95729543d7384651d1d0c48e26c5024cc5f517445920915a704ea748bdb903c5f",
+ ".htaccess": "9a37a508ad4cc3a7ff668e3cd63177891e5601143fa18bb605346020d5f3cd7979748beab956554aca43ae59ff146755cfe83de0f93a3a7bb328b1395b2ccf2f",
+ ".user.ini": "467d4f028c447895716a2b7859ed6e569f8ee34b87b51d73dab2e6a9ca4fbe63172c7be3e365ae864a60408286afcce852dd38ee544b61685ed4ee5e021fecb0",
"subfolder\/.htaccess": "2c57b1e25050e11dc3ae975832f378c452159f7b69f818e47eeeafadd6ba568517461dcb4d843b90b906cd7c89d161bc1b89dff8e3ae0eb6f5088508c47befd1"
},
- "signature": "d6pqYc0pj5hihZK4Pi\/rM9XguY1xK9LEch+jUcxZWwhzOPL4qVHx5LN4FAhEOnr5ZjuhK\/umVEUjieamF4z8tP\/4nnnu2LmRuPMmj6+1tBEwbsKoeg7NiYfYL5h+VSdBePpIZDmjk0tjEpsMtCPhUPAY5vOSSDJ3Xef4KQIpeL6RKIctDcVdO26QWPLFpCo9NK3j91KHuXTcjbAsATDo+oXQzi0CaomBqL6Ft1SU\/Bdes6usgeVWd6mGygZ6zUCLqB4hSi6335xIkkUO1c3NekWksiqTWqdmVIpsTEsIpapx+nE0UFBGc7ZF2rnamg5813g67M5V\/UwhBRcHobMFWfbp73QDUsHcuLCOhamgYh7hbVIlDP7LS2V3kIRLgMLBVwLnvb8LAbaGUsdYGtbfmrhcMK\/jkpGCv0pqUCc4I+1QuVexNEQrdqafwYRnQUsmdFSFaCASYVvgxPrY5jA+y1HwNX5HEc5mMzVORNPhZXUcxWBRUQxUESY5j473DInMQUhq7SLVNAaglxDR1a9M5tQO8engvIJ5eTImLITm0qdefmEvFrxQ0BrrGmPNFYUysrHeNGDhMkGX+JIONj+T4Ht3Z7dr7cfufYDHRaummsTGgRx6206zRSqavsBWL\/Cbzrfu1HhiRagncVcoL40EommJt8lobaKHs3GZ8k861Wo=",
+ "signature": "HBUFy5NYoAX7nmHInD5N3RXTjzx6Ks5x3AJ4nPMLn5JyxEz5DGKA/kuUpcR2witPfeuLykFVAgv81e0BWXWW98iNHyNq/Gz707WC2qlAk9CME9xl0wayBI00LJ4FElEhxY505OpUz9KDpGDVz0egKNeiB7EAD7dvH4Aw5ffPwU03m2i/Qn5ixnSOW9Z+QRGr7a9qSxIdJa6tykJGwb9BPrmQamLgw3EJebD0rDpHEQID+RBgX+TPArn4zQoYaWooBoTH44JAjw0IpC/6rl29CfczIsNlQo+GJY6dkHQRQSDqSLV4t/qU70I7jUmq+ZWyGBPJXZ6u+SiNOuJl79jOeLKgoNSRrBL0/XuxSMsmszLEwD+RbLRG71/O7DcOQIdIo5jJ/fWm/ljnxIi61TZTBVZoHUM3Jc5MGHaT36yn8TUo0Zic9zFDE7INHuAs6qIOyRS6xkJAaiFMbFSgl3N3UgIGCRvh9l1Vcw5811jbaXnAxOpwJMPHv0ieviwhwO3QZbHfasxCJ4E70Y80N8VQhrruL+qy9I7NrqD19ObkC29MYmWrT+bl48/6IEbzhVXU3o/RMEPIRhgW5rc9OidnfJg4lPZVd1ZHKNWpVLAO0FgpsAl4dLblOIDwscOdQvgDDYyF+0stWxLiPC/MXBf546y7C/HlBYDxsW60EpO0cyw=",
"certificate": "-----BEGIN CERTIFICATE-----\r\nMIIEvjCCAqagAwIBAgIUc\/0FxYrsgSs9rDxp03EJmbjN0NwwDQYJKoZIhvcNAQEF\r\nBQAwIzEhMB8GA1UECgwYb3duQ2xvdWQgQ29kZSBTaWduaW5nIENBMB4XDTE1MTEw\r\nMzIxMDMzM1oXDTE2MTEwMzIxMDMzM1owDzENMAsGA1UEAwwEY29yZTCCAiIwDQYJ\r\nKoZIhvcNAQEBBQADggIPADCCAgoCggIBALb6EgHpkAqZbO5vRO8XSh7G7XGWHw5s\r\niOf4RwPXR6SE9bWZEm\/b72SfWk\/\/J6AbrD8WiOzBuT\/ODy6k5T1arEdHO+Pux0W1\r\nMxYJJI4kH74KKgMpC0SB0Rt+8WrMqV1r3hhJ46df6Xr\/xolP3oD+eLbShPcblhdS\r\nVtkZEkoev8Sh6L2wDCeHDyPxzvj1w2dTdGVO9Kztn0xIlyfEBakqvBWtcxyi3Ln0\r\nklnxlMx3tPDUE4kqvpia9qNiB1AN2PV93eNr5\/2riAzIssMFSCarWCx0AKYb54+d\r\nxLpcYFyqPJ0ydBCkF78DD45RCZet6PNYkdzgbqlUWEGGomkuDoJbBg4wzgzO0D77\r\nH87KFhYW8tKFFvF1V3AHl\/sFQ9tDHaxM9Y0pZ2jPp\/ccdiqnmdkBxBDqsiRvHvVB\r\nCn6qpb4vWGFC7vHOBfYspmEL1zLlKXZv3ezMZEZw7O9ZvUP3VO\/wAtd2vUW8UFiq\r\ns2v1QnNLN6jNh51obcwmrBvWhJy9vQIdtIjQbDxqWTHh1zUSrw9wrlklCBZ\/zrM0\r\ni8nfCFwTxWRxp3H9KoECzO\/zS5R5KIS7s3\/wq\/w9T2Ie4rcecgXwDizwnn0C\/aKc\r\nbDIjujpL1s9HO05pcD\/V3wKcPZ1izymBkmMyIbL52iRVN5FTVHeZdXPpFuq+CTQJ\r\nQ238lC+A\/KOVAgMBAAEwDQYJKoZIhvcNAQEFBQADggIBAGoKTnh8RfJV4sQItVC2\r\nAvfJagkrIqZ3iiQTUBQGTKBsTnAqE1H7QgUSV9vSd+8rgvHkyZsRjmtyR1e3A6Ji\r\noNCXUbExC\/0iCPUqdHZIVb+Lc\/vWuv4ByFMybGPydgtLoEUX2ZrKFWmcgZFDUSRd\r\n9Uj26vtUhCC4bU4jgu6hIrR9IuxOBLQUxGTRZyAcXvj7obqRAEZwFAKQgFpfpqTb\r\nH+kjcbZSaAlLVSF7vBc1syyI8RGYbqpwvtREqJtl5IEIwe6huEqJ3zPnlP2th\/55\r\ncf3Fovj6JJgbb9XFxrdnsOsDOu\/tpnaRWlvv5ib4+SzG5wWFT5UUEo4Wg2STQiiX\r\nuVSRQxK1LE1yg84bs3NZk9FSQh4B8vZVuRr5FaJsZZkwlFlhRO\/\/+TJtXRbyNgsf\r\noMRZGi8DLGU2SGEAHcRH\/QZHq\/XDUWVzdxrSBYcy7GSpT7UDVzGv1rEJUrn5veP1\r\n0KmauAqtiIaYRm4f6YBsn0INcZxzIPZ0p8qFtVZBPeHhvQtvOt0iXI\/XUxEWOa2F\r\nK2EqhErgMK\/N07U1JJJay5tYZRtvkGq46oP\/5kQG8hYST0MDK6VihJoPpvCmAm4E\r\npEYKQ96x6A4EH9Y9mZlYozH\/eqmxPbTK8n89\/p7Ydun4rI+B2iiLnY8REWWy6+UQ\r\nV204fGUkJqW5CrKy3P3XvY9X\r\n-----END CERTIFICATE-----"
}';
$this->environmentHelper
@@ -657,11 +657,11 @@ class CheckerTest extends TestCase {
->will($this->returnValue(\OC::$SERVERROOT . '/tests/data/integritycheck/htaccessWithValidModifiedContent'));
$signatureDataFile = '{
"hashes": {
- ".htaccess": "ef34c5f35fffb6e8e3008c2118617b53243cfc5ac2513edba9ebd383169862bc16e4f889316ad65788d6b172fe14713af90908c19838c4ba13b4146e12c7ac62",
- ".user.ini": "0a557e3cdca4c2e3675deed761d79d109011dcdebbd9c7f6429f1d3476938ec95729543d7384651d1d0c48e26c5024cc5f517445920915a704ea748bdb903c5f",
+ ".htaccess": "9a37a508ad4cc3a7ff668e3cd63177891e5601143fa18bb605346020d5f3cd7979748beab956554aca43ae59ff146755cfe83de0f93a3a7bb328b1395b2ccf2f",
+ ".user.ini": "467d4f028c447895716a2b7859ed6e569f8ee34b87b51d73dab2e6a9ca4fbe63172c7be3e365ae864a60408286afcce852dd38ee544b61685ed4ee5e021fecb0",
"subfolder\/.htaccess": "2c57b1e25050e11dc3ae975832f378c452159f7b69f818e47eeeafadd6ba568517461dcb4d843b90b906cd7c89d161bc1b89dff8e3ae0eb6f5088508c47befd1"
},
- "signature": "d6pqYc0pj5hihZK4Pi\/rM9XguY1xK9LEch+jUcxZWwhzOPL4qVHx5LN4FAhEOnr5ZjuhK\/umVEUjieamF4z8tP\/4nnnu2LmRuPMmj6+1tBEwbsKoeg7NiYfYL5h+VSdBePpIZDmjk0tjEpsMtCPhUPAY5vOSSDJ3Xef4KQIpeL6RKIctDcVdO26QWPLFpCo9NK3j91KHuXTcjbAsATDo+oXQzi0CaomBqL6Ft1SU\/Bdes6usgeVWd6mGygZ6zUCLqB4hSi6335xIkkUO1c3NekWksiqTWqdmVIpsTEsIpapx+nE0UFBGc7ZF2rnamg5813g67M5V\/UwhBRcHobMFWfbp73QDUsHcuLCOhamgYh7hbVIlDP7LS2V3kIRLgMLBVwLnvb8LAbaGUsdYGtbfmrhcMK\/jkpGCv0pqUCc4I+1QuVexNEQrdqafwYRnQUsmdFSFaCASYVvgxPrY5jA+y1HwNX5HEc5mMzVORNPhZXUcxWBRUQxUESY5j473DInMQUhq7SLVNAaglxDR1a9M5tQO8engvIJ5eTImLITm0qdefmEvFrxQ0BrrGmPNFYUysrHeNGDhMkGX+JIONj+T4Ht3Z7dr7cfufYDHRaummsTGgRx6206zRSqavsBWL\/Cbzrfu1HhiRagncVcoL40EommJt8lobaKHs3GZ8k861Wo=",
+ "signature": "HBUFy5NYoAX7nmHInD5N3RXTjzx6Ks5x3AJ4nPMLn5JyxEz5DGKA/kuUpcR2witPfeuLykFVAgv81e0BWXWW98iNHyNq/Gz707WC2qlAk9CME9xl0wayBI00LJ4FElEhxY505OpUz9KDpGDVz0egKNeiB7EAD7dvH4Aw5ffPwU03m2i/Qn5ixnSOW9Z+QRGr7a9qSxIdJa6tykJGwb9BPrmQamLgw3EJebD0rDpHEQID+RBgX+TPArn4zQoYaWooBoTH44JAjw0IpC/6rl29CfczIsNlQo+GJY6dkHQRQSDqSLV4t/qU70I7jUmq+ZWyGBPJXZ6u+SiNOuJl79jOeLKgoNSRrBL0/XuxSMsmszLEwD+RbLRG71/O7DcOQIdIo5jJ/fWm/ljnxIi61TZTBVZoHUM3Jc5MGHaT36yn8TUo0Zic9zFDE7INHuAs6qIOyRS6xkJAaiFMbFSgl3N3UgIGCRvh9l1Vcw5811jbaXnAxOpwJMPHv0ieviwhwO3QZbHfasxCJ4E70Y80N8VQhrruL+qy9I7NrqD19ObkC29MYmWrT+bl48/6IEbzhVXU3o/RMEPIRhgW5rc9OidnfJg4lPZVd1ZHKNWpVLAO0FgpsAl4dLblOIDwscOdQvgDDYyF+0stWxLiPC/MXBf546y7C/HlBYDxsW60EpO0cyw=",
"certificate": "-----BEGIN CERTIFICATE-----\r\nMIIEvjCCAqagAwIBAgIUc\/0FxYrsgSs9rDxp03EJmbjN0NwwDQYJKoZIhvcNAQEF\r\nBQAwIzEhMB8GA1UECgwYb3duQ2xvdWQgQ29kZSBTaWduaW5nIENBMB4XDTE1MTEw\r\nMzIxMDMzM1oXDTE2MTEwMzIxMDMzM1owDzENMAsGA1UEAwwEY29yZTCCAiIwDQYJ\r\nKoZIhvcNAQEBBQADggIPADCCAgoCggIBALb6EgHpkAqZbO5vRO8XSh7G7XGWHw5s\r\niOf4RwPXR6SE9bWZEm\/b72SfWk\/\/J6AbrD8WiOzBuT\/ODy6k5T1arEdHO+Pux0W1\r\nMxYJJI4kH74KKgMpC0SB0Rt+8WrMqV1r3hhJ46df6Xr\/xolP3oD+eLbShPcblhdS\r\nVtkZEkoev8Sh6L2wDCeHDyPxzvj1w2dTdGVO9Kztn0xIlyfEBakqvBWtcxyi3Ln0\r\nklnxlMx3tPDUE4kqvpia9qNiB1AN2PV93eNr5\/2riAzIssMFSCarWCx0AKYb54+d\r\nxLpcYFyqPJ0ydBCkF78DD45RCZet6PNYkdzgbqlUWEGGomkuDoJbBg4wzgzO0D77\r\nH87KFhYW8tKFFvF1V3AHl\/sFQ9tDHaxM9Y0pZ2jPp\/ccdiqnmdkBxBDqsiRvHvVB\r\nCn6qpb4vWGFC7vHOBfYspmEL1zLlKXZv3ezMZEZw7O9ZvUP3VO\/wAtd2vUW8UFiq\r\ns2v1QnNLN6jNh51obcwmrBvWhJy9vQIdtIjQbDxqWTHh1zUSrw9wrlklCBZ\/zrM0\r\ni8nfCFwTxWRxp3H9KoECzO\/zS5R5KIS7s3\/wq\/w9T2Ie4rcecgXwDizwnn0C\/aKc\r\nbDIjujpL1s9HO05pcD\/V3wKcPZ1izymBkmMyIbL52iRVN5FTVHeZdXPpFuq+CTQJ\r\nQ238lC+A\/KOVAgMBAAEwDQYJKoZIhvcNAQEFBQADggIBAGoKTnh8RfJV4sQItVC2\r\nAvfJagkrIqZ3iiQTUBQGTKBsTnAqE1H7QgUSV9vSd+8rgvHkyZsRjmtyR1e3A6Ji\r\noNCXUbExC\/0iCPUqdHZIVb+Lc\/vWuv4ByFMybGPydgtLoEUX2ZrKFWmcgZFDUSRd\r\n9Uj26vtUhCC4bU4jgu6hIrR9IuxOBLQUxGTRZyAcXvj7obqRAEZwFAKQgFpfpqTb\r\nH+kjcbZSaAlLVSF7vBc1syyI8RGYbqpwvtREqJtl5IEIwe6huEqJ3zPnlP2th\/55\r\ncf3Fovj6JJgbb9XFxrdnsOsDOu\/tpnaRWlvv5ib4+SzG5wWFT5UUEo4Wg2STQiiX\r\nuVSRQxK1LE1yg84bs3NZk9FSQh4B8vZVuRr5FaJsZZkwlFlhRO\/\/+TJtXRbyNgsf\r\noMRZGi8DLGU2SGEAHcRH\/QZHq\/XDUWVzdxrSBYcy7GSpT7UDVzGv1rEJUrn5veP1\r\n0KmauAqtiIaYRm4f6YBsn0INcZxzIPZ0p8qFtVZBPeHhvQtvOt0iXI\/XUxEWOa2F\r\nK2EqhErgMK\/N07U1JJJay5tYZRtvkGq46oP\/5kQG8hYST0MDK6VihJoPpvCmAm4E\r\npEYKQ96x6A4EH9Y9mZlYozH\/eqmxPbTK8n89\/p7Ydun4rI+B2iiLnY8REWWy6+UQ\r\nV204fGUkJqW5CrKy3P3XvY9X\r\n-----END CERTIFICATE-----"
}';
$this->fileAccessHelper
diff --git a/tests/lib/Lock/DBLockingProviderTest.php b/tests/lib/Lock/DBLockingProviderTest.php
index a7c3f463155..fb27f9957af 100644
--- a/tests/lib/Lock/DBLockingProviderTest.php
+++ b/tests/lib/Lock/DBLockingProviderTest.php
@@ -21,6 +21,7 @@
namespace Test\Lock;
+use OCP\AppFramework\Utility\ITimeFactory;
use OCP\Lock\ILockingProvider;
/**
@@ -50,7 +51,7 @@ class DBLockingProviderTest extends LockingProvider {
public function setUp() {
$this->currentTime = time();
- $this->timeFactory = $this->getMock('\OCP\AppFramework\Utility\ITimeFactory');
+ $this->timeFactory = $this->createMock(ITimeFactory::class);
$this->timeFactory->expects($this->any())
->method('getTime')
->will($this->returnCallback(function () {
diff --git a/tests/lib/PreviewTest.php b/tests/lib/PreviewTest.php
index cd228801815..2d6f53e2ce8 100644
--- a/tests/lib/PreviewTest.php
+++ b/tests/lib/PreviewTest.php
@@ -23,8 +23,10 @@
namespace Test;
use OC\Files\FileInfo;
+use OC\Files\Filesystem;
use OC\Files\Storage\Temporary;
use OC\Files\View;
+use OC\Preview;
use Test\Traits\MountProviderTrait;
use Test\Traits\UserTrait;
@@ -41,7 +43,7 @@ class PreviewTest extends TestCase {
const TEST_PREVIEW_USER1 = "test-preview-user1";
- /** @var \OC\Files\View */
+ /** @var View */
private $rootView;
/**
* Note that using 756 with an image with a ratio of 1.6 brings interesting rounding issues
@@ -77,10 +79,10 @@ class PreviewTest extends TestCase {
$this->createUser(self::TEST_PREVIEW_USER1, self::TEST_PREVIEW_USER1);
$this->loginAsUser(self::TEST_PREVIEW_USER1);
- $storage = new \OC\Files\Storage\Temporary([]);
- \OC\Files\Filesystem::mount($storage, [], '/' . self::TEST_PREVIEW_USER1 . '/');
+ $storage = new Temporary([]);
+ Filesystem::mount($storage, [], '/' . self::TEST_PREVIEW_USER1 . '/');
- $this->rootView = new \OC\Files\View('');
+ $this->rootView = new View('');
$this->rootView->mkdir('/' . self::TEST_PREVIEW_USER1);
$this->rootView->mkdir('/' . self::TEST_PREVIEW_USER1 . '/files');
@@ -133,7 +135,7 @@ class PreviewTest extends TestCase {
$x = 50;
$y = 50;
- $preview = new \OC\Preview(self::TEST_PREVIEW_USER1, 'files/', 'test.txt', $x, $y);
+ $preview = new Preview(self::TEST_PREVIEW_USER1, 'files/', 'test.txt', $x, $y);
$preview->getPreview();
$fileInfo = $this->rootView->getFileInfo($sampleFile);
@@ -164,14 +166,14 @@ class PreviewTest extends TestCase {
$x = 50;
$y = 50;
- $preview = new \OC\Preview(self::TEST_PREVIEW_USER1, 'files/', 'test.txt', $x, $y);
+ $preview = new Preview(self::TEST_PREVIEW_USER1, 'files/', 'test.txt', $x, $y);
$preview->getPreview();
$fileInfo = $this->rootView->getFileInfo($sampleFile);
/** @var int $fileId */
$fileId = $fileInfo['fileid'];
- $thumbCacheFolder = '/' . self::TEST_PREVIEW_USER1 . '/' . \OC\Preview::THUMBNAILS_FOLDER .
+ $thumbCacheFolder = '/' . self::TEST_PREVIEW_USER1 . '/' . Preview::THUMBNAILS_FOLDER .
'/' . $fileId . '/';
$this->assertSame(true, $this->rootView->is_dir($thumbCacheFolder), "$thumbCacheFolder \n");
@@ -203,7 +205,7 @@ class PreviewTest extends TestCase {
$sample = '/' . self::TEST_PREVIEW_USER1 . '/files/test.' . $extension;
$this->rootView->file_put_contents($sample, $data);
- $preview = new \OC\Preview(
+ $preview = new Preview(
self::TEST_PREVIEW_USER1, 'files/', 'test.' . $extension, $x,
$y
);
@@ -233,7 +235,7 @@ class PreviewTest extends TestCase {
$this->rootView->file_put_contents($imgPath, $imgData);
$preview =
- new \OC\Preview(self::TEST_PREVIEW_USER1, 'files/', 'testimage.odt', $width, $height);
+ new Preview(self::TEST_PREVIEW_USER1, 'files/', 'testimage.odt', $width, $height);
$preview->getPreview();
$image = $preview->getPreview();
@@ -310,8 +312,6 @@ class PreviewTest extends TestCase {
public function testCreateMaxAndNormalPreviewsAtFirstRequest(
$sampleId, $widthAdjustment, $heightAdjustment, $keepAspect = false, $scalingUp = false
) {
- //$this->markTestSkipped('Not testing this at this time');
-
// Get the right sample for the experiment
$this->getSample($sampleId);
$sampleWidth = $this->sampleWidth;
@@ -328,7 +328,7 @@ class PreviewTest extends TestCase {
$preview = $this->createPreview($previewWidth, $previewHeight);
// There should be no cached thumbnails
- $thumbnailFolder = '/' . self::TEST_PREVIEW_USER1 . '/' . \OC\Preview::THUMBNAILS_FOLDER .
+ $thumbnailFolder = '/' . self::TEST_PREVIEW_USER1 . '/' . Preview::THUMBNAILS_FOLDER .
'/' . $sampleFileId;
$this->assertSame(false, $this->rootView->is_dir($thumbnailFolder));
@@ -562,10 +562,10 @@ class PreviewTest extends TestCase {
* @param int $width
* @param int $height
*
- * @return \OC\Preview
+ * @return Preview
*/
private function createPreview($width, $height) {
- $preview = new \OC\Preview(
+ $preview = new Preview(
self::TEST_PREVIEW_USER1, 'files/', $this->sampleFilename, $width,
$height
);
@@ -581,7 +581,7 @@ class PreviewTest extends TestCase {
/**
* Creates the Max preview which will be used in the rest of the test
*
- * @return \OC\Preview
+ * @return Preview
*/
private function createMaxPreview() {
$this->keepAspect = true;
@@ -741,7 +741,7 @@ class PreviewTest extends TestCase {
$userPath = '/' . self::TEST_PREVIEW_USER1 . '/';
}
- return $userPath . \OC\Preview::THUMBNAILS_FOLDER . '/' . $fileId
+ return $userPath . Preview::THUMBNAILS_FOLDER . '/' . $fileId
. '/' . $width . '-' . $height . $postfix . '.png';
}
@@ -891,7 +891,7 @@ class PreviewTest extends TestCase {
$originalHeight = 1050;
$originalAspectRation = $originalWidth / $originalHeight;
- $preview = new \OC\Preview(
+ $preview = new Preview(
self::TEST_PREVIEW_USER1, 'files/', 'testimage.jpg',
150,
150
@@ -911,13 +911,13 @@ class PreviewTest extends TestCase {
$originalHeight = 1050;
$originalAspectRation = $originalWidth / $originalHeight;
- $preview = new \OC\Preview(
+ $preview = new Preview(
self::TEST_PREVIEW_USER1, 'files/', 'testimage.jpg',
150,
150
);
$preview->setKeepAspect(true);
- $preview->setMode(\OC\Preview::MODE_COVER);
+ $preview->setMode(Preview::MODE_COVER);
$image = $preview->getPreview();
$aspectRatio = $image->width() / $image->height();
@@ -929,7 +929,7 @@ class PreviewTest extends TestCase {
public function testSetFileWithInfo() {
$info = new FileInfo('/foo', null, '/foo', ['mimetype' => 'foo/bar'], null);
- $preview = new \OC\Preview();
+ $preview = new Preview();
$preview->setFile('/foo', $info);
$this->assertEquals($info, $this->invokePrivate($preview, 'getFileInfo'));
}
@@ -945,7 +945,7 @@ class PreviewTest extends TestCase {
\OC_Util::tearDownFS();
\OC_Util::setupFS($userId);
- $preview = new \OC\Preview($userId, 'files');
+ $preview = new Preview($userId, 'files');
$view = new View('/' . $userId . '/files');
$view->file_put_contents('test.png', file_get_contents($sourceFile));
$info = $view->getFileInfo('test.png');
diff --git a/tests/lib/Repair/RepairUnmergedSharesTest.php b/tests/lib/Repair/RepairUnmergedSharesTest.php
index 7b9d2579389..2834cfe94b8 100644
--- a/tests/lib/Repair/RepairUnmergedSharesTest.php
+++ b/tests/lib/Repair/RepairUnmergedSharesTest.php
@@ -24,6 +24,7 @@ namespace Test\Repair;
use OC\Repair\RepairUnmergedShares;
use OC\Share\Constants;
+use OCP\IUser;
use OCP\Migration\IOutput;
use OCP\Migration\IRepairStep;
use Test\TestCase;
@@ -69,8 +70,8 @@ class RepairUnmergedSharesTest extends TestCase {
$this->connection = \OC::$server->getDatabaseConnection();
$this->deleteAllShares();
- $this->userManager = $this->getMock('\OCP\IUserManager');
- $this->groupManager = $this->getMock('\OCP\IGroupManager');
+ $this->userManager = $this->createMock(IUserManager::class);
+ $this->groupManager = $this->createMock(IGroupManager::class);
// used to generate incremental stimes
$this->lastShareTime = time();
@@ -487,12 +488,12 @@ class RepairUnmergedSharesTest extends TestCase {
* @dataProvider sharesDataProvider
*/
public function testMergeGroupShares($shares, $expectedShares) {
- $user1 = $this->getMock('\OCP\IUser');
+ $user1 = $this->createMock(IUser::class);
$user1->expects($this->any())
->method('getUID')
->will($this->returnValue('user1'));
- $user2 = $this->getMock('\OCP\IUser');
+ $user2 = $this->createMock(IUser::class);
$user2->expects($this->any())
->method('getUID')
->will($this->returnValue('user2'));
diff --git a/tests/lib/Security/CertificateManagerTest.php b/tests/lib/Security/CertificateManagerTest.php
index 3abd3392e6c..92a063d47c7 100644
--- a/tests/lib/Security/CertificateManagerTest.php
+++ b/tests/lib/Security/CertificateManagerTest.php
@@ -9,6 +9,7 @@
namespace Test\Security;
use \OC\Security\CertificateManager;
+use OCP\IConfig;
/**
* Class CertificateManagerTest
@@ -38,7 +39,7 @@ class CertificateManagerTest extends \Test\TestCase {
\OC\Files\Filesystem::tearDown();
\OC_Util::setupFS($this->username);
- $config = $this->getMock('OCP\IConfig');
+ $config = $this->createMock(IConfig::class);
$config->expects($this->any())->method('getSystemValue')
->with('installed', false)->willReturn(true);
@@ -138,7 +139,7 @@ class CertificateManagerTest extends \Test\TestCase {
$view = $this->getMockBuilder('OC\Files\View')
->disableOriginalConstructor()->getMock();
- $config = $this->getMock('OCP\IConfig');
+ $config = $this->createMock(IConfig::class);
/** @var CertificateManager | \PHPUnit_Framework_MockObject_MockObject $certificateManager */
$certificateManager = $this->getMockBuilder('OC\Security\CertificateManager')
diff --git a/tests/lib/Share20/ManagerTest.php b/tests/lib/Share20/ManagerTest.php
index 16ad1b07f89..72ba4da6e5d 100644
--- a/tests/lib/Share20/ManagerTest.php
+++ b/tests/lib/Share20/ManagerTest.php
@@ -2413,7 +2413,7 @@ class ManagerTest extends \Test\TestCase {
$tomorrow->setTime(0,0,0);
$tomorrow->add(new \DateInterval('P1D'));
- $file = $this->getMock('OCP\Files\File', [], [], 'File');
+ $file = $this->createMock(File::class);
$file->method('getId')->willReturn(100);
$share = $this->manager->newShare();
diff --git a/tests/lib/TagsTest.php b/tests/lib/TagsTest.php
index 2662c209d2c..add28a19061 100644
--- a/tests/lib/TagsTest.php
+++ b/tests/lib/TagsTest.php
@@ -21,6 +21,7 @@
*/
namespace Test;
+use OCP\IUserSession;
/**
* Class TagsTest
@@ -49,7 +50,7 @@ class TagsTest extends \Test\TestCase {
\OC::$server->getUserManager()->createUser($userId, 'pass');
\OC_User::setUserId($userId);
$this->user = new \OC\User\User($userId, null);
- $this->userSession = $this->getMock('\OCP\IUserSession');
+ $this->userSession = $this->createMock(IUserSession::class);
$this->userSession
->expects($this->any())
->method('getUser')
@@ -70,7 +71,7 @@ class TagsTest extends \Test\TestCase {
}
public function testTagManagerWithoutUserReturnsNull() {
- $this->userSession = $this->getMock('\OCP\IUserSession');
+ $this->userSession = $this->createMock(IUserSession::class);
$this->userSession
->expects($this->any())
->method('getUser')
@@ -294,7 +295,7 @@ class TagsTest extends \Test\TestCase {
$otherUserId = $this->getUniqueID('user2_');
\OC::$server->getUserManager()->createUser($otherUserId, 'pass');
\OC_User::setUserId($otherUserId);
- $otherUserSession = $this->getMock('\OCP\IUserSession');
+ $otherUserSession = $this->createMock(IUserSession::class);
$otherUserSession
->expects($this->any())
->method('getUser')
diff --git a/tests/lib/TestCase.php b/tests/lib/TestCase.php
index f5d65679c90..0389ef5d46b 100644
--- a/tests/lib/TestCase.php
+++ b/tests/lib/TestCase.php
@@ -48,6 +48,24 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
protected $services = [];
/**
+ * Wrapper to be forward compatible to phpunit 5.4+
+ *
+ * @param string $originalClassName
+ * @return \PHPUnit_Framework_MockObject_MockObject
+ */
+ protected function createMock($originalClassName) {
+ if (is_callable('parent::createMock')) {
+ return parent::createMock($originalClassName);
+ }
+
+ return $this->getMockBuilder($originalClassName)
+ ->disableOriginalConstructor()
+ ->disableOriginalClone()
+ ->disableArgumentCloning()
+ ->getMock();
+ }
+
+ /**
* @param string $name
* @param mixed $newService
* @return bool
diff --git a/tests/lib/UrlGeneratorTest.php b/tests/lib/UrlGeneratorTest.php
index 7186c8fad80..c8d5b8ece2c 100644
--- a/tests/lib/UrlGeneratorTest.php
+++ b/tests/lib/UrlGeneratorTest.php
@@ -7,6 +7,8 @@
*/
namespace Test;
+use OCP\ICacheFactory;
+use OCP\IConfig;
/**
* Class UrlGeneratorTest
@@ -22,8 +24,8 @@ class UrlGeneratorTest extends \Test\TestCase {
*/
public function testLinkToDocRoot($app, $file, $args, $expectedResult) {
\OC::$WEBROOT = '';
- $config = $this->getMock('\OCP\IConfig');
- $cacheFactory = $this->getMock('\OCP\ICacheFactory');
+ $config = $this->createMock(IConfig::class);
+ $cacheFactory = $this->createMock(ICacheFactory::class);
$urlGenerator = new \OC\URLGenerator($config, $cacheFactory);
$result = $urlGenerator->linkTo($app, $file, $args);
@@ -37,8 +39,8 @@ class UrlGeneratorTest extends \Test\TestCase {
*/
public function testLinkToSubDir($app, $file, $args, $expectedResult) {
\OC::$WEBROOT = '/owncloud';
- $config = $this->getMock('\OCP\IConfig');
- $cacheFactory = $this->getMock('\OCP\ICacheFactory');
+ $config = $this->createMock(IConfig::class);
+ $cacheFactory = $this->createMock(ICacheFactory::class);
$urlGenerator = new \OC\URLGenerator($config, $cacheFactory);
$result = $urlGenerator->linkTo($app, $file, $args);
@@ -50,8 +52,8 @@ class UrlGeneratorTest extends \Test\TestCase {
*/
public function testLinkToRouteAbsolute($route, $expected) {
\OC::$WEBROOT = '/owncloud';
- $config = $this->getMock('\OCP\IConfig');
- $cacheFactory = $this->getMock('\OCP\ICacheFactory');
+ $config = $this->createMock(IConfig::class);
+ $cacheFactory = $this->createMock(ICacheFactory::class);
$urlGenerator = new \OC\URLGenerator($config, $cacheFactory);
$result = $urlGenerator->linkToRouteAbsolute($route);
$this->assertEquals($expected, $result);
@@ -89,8 +91,8 @@ class UrlGeneratorTest extends \Test\TestCase {
function testGetAbsoluteURLDocRoot($url, $expectedResult) {
\OC::$WEBROOT = '';
- $config = $this->getMock('\OCP\IConfig');
- $cacheFactory = $this->getMock('\OCP\ICacheFactory');
+ $config = $this->createMock(IConfig::class);
+ $cacheFactory = $this->createMock(ICacheFactory::class);
$urlGenerator = new \OC\URLGenerator($config, $cacheFactory);
$result = $urlGenerator->getAbsoluteURL($url);
@@ -105,8 +107,8 @@ class UrlGeneratorTest extends \Test\TestCase {
function testGetAbsoluteURLSubDir($url, $expectedResult) {
\OC::$WEBROOT = '/owncloud';
- $config = $this->getMock('\OCP\IConfig');
- $cacheFactory = $this->getMock('\OCP\ICacheFactory');
+ $config = $this->createMock(IConfig::class);
+ $cacheFactory = $this->createMock(ICacheFactory::class);
$urlGenerator = new \OC\URLGenerator($config, $cacheFactory);
$result = $urlGenerator->getAbsoluteURL($url);
diff --git a/tests/lib/User/DatabaseTest.php b/tests/lib/User/DatabaseTest.php
index 16275f3b6c5..d7e4b9256cb 100644
--- a/tests/lib/User/DatabaseTest.php
+++ b/tests/lib/User/DatabaseTest.php
@@ -45,7 +45,7 @@ class DatabaseTest extends Backend {
protected function setUp() {
parent::setUp();
- $this->eventDispatcher = $this->getMock('Symfony\Component\EventDispatcher\EventDispatcher');
+ $this->eventDispatcher = $this->createMock(EventDispatcher::class);
$this->backend=new \OC\User\Database($this->eventDispatcher);
}
diff --git a/tests/lib/User/ManagerTest.php b/tests/lib/User/ManagerTest.php
index f1b520ee0cf..f6318ff353b 100644
--- a/tests/lib/User/ManagerTest.php
+++ b/tests/lib/User/ManagerTest.php
@@ -8,6 +8,7 @@
*/
namespace Test\User;
+use OC\User\Database;
/**
* Class ManagerTest
@@ -18,11 +19,11 @@ namespace Test\User;
*/
class ManagerTest extends \Test\TestCase {
public function testGetBackends() {
- $userDummyBackend = $this->getMock('\Test\Util\User\Dummy');
+ $userDummyBackend = $this->createMock(\Test\Util\User\Dummy::class);
$manager = new \OC\User\Manager();
$manager->registerBackend($userDummyBackend);
$this->assertEquals([$userDummyBackend], $manager->getBackends());
- $dummyDatabaseBackend = $this->getMock('\OC_User_Database');
+ $dummyDatabaseBackend = $this->createMock(Database::class);
$manager->registerBackend($dummyDatabaseBackend);
$this->assertEquals([$userDummyBackend, $dummyDatabaseBackend], $manager->getBackends());
}
@@ -32,7 +33,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
->method('userExists')
->with($this->equalTo('foo'))
@@ -48,7 +49,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
->method('userExists')
->with($this->equalTo('foo'))
@@ -70,7 +71,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend1
*/
- $backend1 = $this->getMock('\Test\Util\User\Dummy');
+ $backend1 = $this->createMock(\Test\Util\User\Dummy::class);
$backend1->expects($this->once())
->method('userExists')
->with($this->equalTo('foo'))
@@ -79,7 +80,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend2
*/
- $backend2 = $this->getMock('\Test\Util\User\Dummy');
+ $backend2 = $this->createMock(\Test\Util\User\Dummy::class);
$backend2->expects($this->once())
->method('userExists')
->with($this->equalTo('foo'))
@@ -96,7 +97,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend1
*/
- $backend1 = $this->getMock('\Test\Util\User\Dummy');
+ $backend1 = $this->createMock(\Test\Util\User\Dummy::class);
$backend1->expects($this->once())
->method('userExists')
->with($this->equalTo('foo'))
@@ -105,7 +106,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend2
*/
- $backend2 = $this->getMock('\Test\Util\User\Dummy');
+ $backend2 = $this->createMock(\Test\Util\User\Dummy::class);
$backend2->expects($this->never())
->method('userExists');
@@ -120,7 +121,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
->method('checkPassword')
->with($this->equalTo('foo'), $this->equalTo('bar'))
@@ -147,7 +148,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->never())
->method('checkPassword');
@@ -165,7 +166,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
->method('userExists')
->with($this->equalTo('foo'))
@@ -181,7 +182,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
->method('userExists')
->with($this->equalTo('foo'))
@@ -197,7 +198,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
->method('getUsers')
->with($this->equalTo('fo'))
@@ -216,7 +217,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend1
*/
- $backend1 = $this->getMock('\Test\Util\User\Dummy');
+ $backend1 = $this->createMock(\Test\Util\User\Dummy::class);
$backend1->expects($this->once())
->method('getUsers')
->with($this->equalTo('fo'), $this->equalTo(3), $this->equalTo(1))
@@ -225,7 +226,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend2
*/
- $backend2 = $this->getMock('\Test\Util\User\Dummy');
+ $backend2 = $this->createMock(\Test\Util\User\Dummy::class);
$backend2->expects($this->once())
->method('getUsers')
->with($this->equalTo('fo'), $this->equalTo(3), $this->equalTo(1))
@@ -246,7 +247,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->any())
->method('implementsActions')
->will($this->returnValue(true));
@@ -274,7 +275,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->any())
->method('implementsActions')
->will($this->returnValue(true));
@@ -297,7 +298,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->any())
->method('implementsActions')
->will($this->returnValue(false));
@@ -329,7 +330,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend1
*/
- $backend1 = $this->getMock('\Test\Util\User\Dummy');
+ $backend1 = $this->createMock(\Test\Util\User\Dummy::class);
$backend1->expects($this->any())
->method('implementsActions')
->will($this->returnValue(true));
@@ -345,7 +346,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend2
*/
- $backend2 = $this->getMock('\Test\Util\User\Dummy');
+ $backend2 = $this->createMock(\Test\Util\User\Dummy::class);
$backend2->expects($this->any())
->method('implementsActions')
->will($this->returnValue(true));
@@ -377,7 +378,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
->method('countUsers')
->will($this->returnValue(7));
@@ -406,7 +407,7 @@ class ManagerTest extends \Test\TestCase {
/**
* @var \Test\Util\User\Dummy | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend1 = $this->getMock('\Test\Util\User\Dummy');
+ $backend1 = $this->createMock(\Test\Util\User\Dummy::class);
$backend1->expects($this->once())
->method('countUsers')
->will($this->returnValue(7));
@@ -419,7 +420,7 @@ class ManagerTest extends \Test\TestCase {
->method('getBackendName')
->will($this->returnValue('Mock_Test_Util_User_Dummy'));
- $backend2 = $this->getMock('\Test\Util\User\Dummy');
+ $backend2 = $this->createMock(\Test\Util\User\Dummy::class);
$backend2->expects($this->once())
->method('countUsers')
->will($this->returnValue(16));
diff --git a/tests/lib/User/SessionTest.php b/tests/lib/User/SessionTest.php
index 4b8067117b1..2cd6b9b3bed 100644
--- a/tests/lib/User/SessionTest.php
+++ b/tests/lib/User/SessionTest.php
@@ -9,9 +9,20 @@
namespace Test\User;
+use OC\Authentication\Token\IProvider;
+use OC\Authentication\Token\IToken;
use OC\Security\Bruteforce\Throttler;
use OC\Session\Memory;
+use OC\User\Manager;
+use OC\User\Session;
use OC\User\User;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\IConfig;
+use OCP\IRequest;
+use OCP\ISession;
+use OCP\IUser;
+use OCP\IUserManager;
+use OCP\Security\ISecureRandom;
/**
* @group DB
@@ -30,14 +41,13 @@ class SessionTest extends \Test\TestCase {
protected function setUp() {
parent::setUp();
- $this->timeFactory = $this->getMock('\OCP\AppFramework\Utility\ITimeFactory');
+ $this->timeFactory = $this->createMock(ITimeFactory::class);
$this->timeFactory->expects($this->any())
->method('getTime')
->will($this->returnValue(10000));
- $this->tokenProvider = $this->getMock('\OC\Authentication\Token\IProvider');
- $this->config = $this->getMock('\OCP\IConfig');
- $this->throttler = $this->getMockBuilder('\OC\Security\Bruteforce\Throttler')
- ->disableOriginalConstructor()->getMock();
+ $this->tokenProvider = $this->createMock(IProvider::class);
+ $this->config = $this->createMock(IConfig::class);
+ $this->throttler = $this->createMock(Throttler::class);
}
public function testGetUser() {
@@ -45,11 +55,11 @@ class SessionTest extends \Test\TestCase {
$token->setLoginName('User123');
$token->setLastCheck(200);
- $expectedUser = $this->getMock('\OCP\IUser');
+ $expectedUser = $this->createMock(IUser::class);
$expectedUser->expects($this->any())
->method('getUID')
->will($this->returnValue('user123'));
- $session = $this->getMock('\OC\Session\Memory', array(), array(''));
+ $session = $this->getMockBuilder(Memory::class)->setConstructorArgs([''])->getMock();
$session->expects($this->at(0))
->method('get')
->with('user_id')
@@ -108,7 +118,7 @@ class SessionTest extends \Test\TestCase {
* @dataProvider isLoggedInData
*/
public function testIsLoggedIn($isLoggedIn) {
- $session = $this->getMock('\OC\Session\Memory', array(), array(''));
+ $session = $this->getMockBuilder(Memory::class)->setConstructorArgs([''])->getMock();
$manager = $this->getMockBuilder('\OC\User\Manager')
->disableOriginalConstructor()
@@ -128,16 +138,16 @@ class SessionTest extends \Test\TestCase {
}
public function testSetUser() {
- $session = $this->getMock('\OC\Session\Memory', array(), array(''));
+ $session = $this->getMockBuilder(Memory::class)->setConstructorArgs([''])->getMock();
$session->expects($this->once())
->method('set')
->with('user_id', 'foo');
- $manager = $this->getMock('\OC\User\Manager');
+ $manager = $this->createMock(Manager::class);
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $user = $this->getMock('\OC\User\User', array(), array('foo', $backend));
+ $user = $this->getMockBuilder(User::class)->setConstructorArgs(['foo', $backend])->getMock();
$user->expects($this->once())
->method('getUID')
->will($this->returnValue('foo'));
@@ -147,7 +157,7 @@ class SessionTest extends \Test\TestCase {
}
public function testLoginValidPasswordEnabled() {
- $session = $this->getMock('\OC\Session\Memory', array(), array(''));
+ $session = $this->getMockBuilder(Memory::class)->setConstructorArgs([''])->getMock();
$session->expects($this->once())
->method('regenerateId');
$this->tokenProvider->expects($this->once())
@@ -178,11 +188,11 @@ class SessionTest extends \Test\TestCase {
unset($managerMethods[$i]);
}
}
- $manager = $this->getMock('\OC\User\Manager', $managerMethods, array());
+ $manager = $this->getMockBuilder(Manager::class)->setMethods($managerMethods)->getMock();
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $user = $this->getMock('\OC\User\User', array(), array('foo', $backend));
+ $user = $this->getMockBuilder(User::class)->setConstructorArgs(['foo', $backend])->getMock();
$user->expects($this->any())
->method('isEnabled')
->will($this->returnValue(true));
@@ -213,7 +223,7 @@ class SessionTest extends \Test\TestCase {
* @expectedException \OC\User\LoginException
*/
public function testLoginValidPasswordDisabled() {
- $session = $this->getMock('\OC\Session\Memory', array(), array(''));
+ $session = $this->getMockBuilder(Memory::class)->setConstructorArgs([''])->getMock();
$session->expects($this->never())
->method('set');
$session->expects($this->once())
@@ -233,11 +243,11 @@ class SessionTest extends \Test\TestCase {
unset($managerMethods[$i]);
}
}
- $manager = $this->getMock('\OC\User\Manager', $managerMethods, array());
+ $manager = $this->getMockBuilder(Manager::class)->setMethods($managerMethods)->getMock();
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $user = $this->getMock('\OC\User\User', array(), array('foo', $backend));
+ $user = $this->getMockBuilder(User::class)->setConstructorArgs(['foo', $backend])->getMock();
$user->expects($this->any())
->method('isEnabled')
->will($this->returnValue(false));
@@ -254,7 +264,7 @@ class SessionTest extends \Test\TestCase {
}
public function testLoginInvalidPassword() {
- $session = $this->getMock('\OC\Session\Memory', array(), array(''));
+ $session = $this->getMockBuilder(Memory::class)->setConstructorArgs([''])->getMock();
$managerMethods = get_class_methods('\OC\User\Manager');
//keep following methods intact in order to ensure hooks are
//working
@@ -265,11 +275,11 @@ class SessionTest extends \Test\TestCase {
unset($managerMethods[$i]);
}
}
- $manager = $this->getMock('\OC\User\Manager', $managerMethods, array());
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $manager = $this->getMockBuilder(Manager::class)->setMethods($managerMethods)->getMock();
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$userSession = new \OC\User\Session($manager, $session, $this->timeFactory, $this->tokenProvider, $this->config);
- $user = $this->getMock('\OC\User\User', array(), array('foo', $backend));
+ $user = $this->getMockBuilder(User::class)->setConstructorArgs(['foo', $backend])->getMock();
$session->expects($this->never())
->method('set');
@@ -294,9 +304,9 @@ class SessionTest extends \Test\TestCase {
}
public function testLoginNonExisting() {
- $session = $this->getMock('\OC\Session\Memory', array(), array(''));
- $manager = $this->getMock('\OC\User\Manager');
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $session = $this->getMockBuilder(Memory::class)->setConstructorArgs([''])->getMock();
+ $manager = $this->createMock(Manager::class);
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$userSession = new \OC\User\Session($manager, $session, $this->timeFactory, $this->tokenProvider, $this->config);
$session->expects($this->never())
@@ -321,9 +331,9 @@ class SessionTest extends \Test\TestCase {
* when generating the token on the browser.
*/
public function testLoginWithDifferentTokenLoginName() {
- $session = $this->getMock('\OC\Session\Memory', array(), array(''));
- $manager = $this->getMock('\OC\User\Manager');
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $session = $this->getMockBuilder(Memory::class)->setConstructorArgs([''])->getMock();
+ $manager = $this->createMock(Manager::class);
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$userSession = new \OC\User\Session($manager, $session, $this->timeFactory, $this->tokenProvider, $this->config);
$username = 'user123';
$token = new \OC\Authentication\Token\DefaultToken();
@@ -353,8 +363,8 @@ class SessionTest extends \Test\TestCase {
$manager = $this->getMockBuilder('\OC\User\Manager')
->disableOriginalConstructor()
->getMock();
- $session = $this->getMock('\OCP\ISession');
- $request = $this->getMock('\OCP\IRequest');
+ $session = $this->createMock(ISession::class);
+ $request = $this->createMock(IRequest::class);
/** @var \OC\User\Session $userSession */
$userSession = $this->getMockBuilder('\OC\User\Session')
@@ -391,8 +401,8 @@ class SessionTest extends \Test\TestCase {
$manager = $this->getMockBuilder('\OC\User\Manager')
->disableOriginalConstructor()
->getMock();
- $session = $this->getMock('\OCP\ISession');
- $request = $this->getMock('\OCP\IRequest');
+ $session = $this->createMock(ISession::class);
+ $request = $this->createMock(IRequest::class);
/** @var \OC\User\Session $userSession */
$userSession = $this->getMockBuilder('\OC\User\Session')
@@ -435,8 +445,8 @@ class SessionTest extends \Test\TestCase {
$manager = $this->getMockBuilder('\OC\User\Manager')
->disableOriginalConstructor()
->getMock();
- $session = $this->getMock('\OCP\ISession');
- $request = $this->getMock('\OCP\IRequest');
+ $session = $this->createMock(ISession::class);
+ $request = $this->createMock(IRequest::class);
/** @var \OC\User\Session $userSession */
$userSession = $this->getMockBuilder('\OC\User\Session')
@@ -476,7 +486,7 @@ class SessionTest extends \Test\TestCase {
}
public function testRememberLoginValidToken() {
- $session = $this->getMock('\OC\Session\Memory', array(), array(''));
+ $session = $this->getMockBuilder(Memory::class)->setConstructorArgs([''])->getMock();
$session->expects($this->exactly(1))
->method('set')
->with($this->callback(function ($key) {
@@ -500,11 +510,11 @@ class SessionTest extends \Test\TestCase {
unset($managerMethods[$i]);
}
}
- $manager = $this->getMock('\OC\User\Manager', $managerMethods, array());
+ $manager = $this->getMockBuilder(Manager::class)->setMethods($managerMethods)->getMock();
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $user = $this->getMock('\OC\User\User', array(), array('foo', $backend));
+ $user = $this->getMockBuilder(User::class)->setConstructorArgs(['foo', $backend])->getMock();
$user->expects($this->any())
->method('getUID')
@@ -521,12 +531,12 @@ class SessionTest extends \Test\TestCase {
$token = 'goodToken';
\OC::$server->getConfig()->setUserValue('foo', 'login_token', $token, time());
- $userSession = $this->getMock(
- '\OC\User\Session',
+ $userSession = $this->getMockBuilder(Session::class)
//override, otherwise tests will fail because of setcookie()
- array('setMagicInCookie'),
+ ->setMethods(['setMagicInCookie'])
//there are passed as parameters to the constructor
- array($manager, $session, $this->timeFactory, $this->tokenProvider, $this->config));
+ ->setConstructorArgs([$manager, $session, $this->timeFactory, $this->tokenProvider, $this->config])
+ ->getMock();
$granted = $userSession->loginWithCookie('foo', $token);
@@ -534,7 +544,7 @@ class SessionTest extends \Test\TestCase {
}
public function testRememberLoginInvalidToken() {
- $session = $this->getMock('\OC\Session\Memory', array(), array(''));
+ $session = $this->getMockBuilder(Memory::class)->setConstructorArgs([''])->getMock();
$session->expects($this->never())
->method('set');
$session->expects($this->once())
@@ -550,11 +560,11 @@ class SessionTest extends \Test\TestCase {
unset($managerMethods[$i]);
}
}
- $manager = $this->getMock('\OC\User\Manager', $managerMethods, array());
+ $manager = $this->getMockBuilder(Manager::class)->setMethods($managerMethods)->getMock();
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $user = $this->getMock('\OC\User\User', array(), array('foo', $backend));
+ $user = $this->getMockBuilder(User::class)->setConstructorArgs(['foo', $backend])->getMock();
$user->expects($this->any())
->method('getUID')
@@ -578,7 +588,7 @@ class SessionTest extends \Test\TestCase {
}
public function testRememberLoginInvalidUser() {
- $session = $this->getMock('\OC\Session\Memory', array(), array(''));
+ $session = $this->getMockBuilder(Memory::class)->setConstructorArgs([''])->getMock();
$session->expects($this->never())
->method('set');
$session->expects($this->once())
@@ -594,11 +604,11 @@ class SessionTest extends \Test\TestCase {
unset($managerMethods[$i]);
}
}
- $manager = $this->getMock('\OC\User\Manager', $managerMethods, array());
+ $manager = $this->getMockBuilder(Manager::class)->setMethods($managerMethods)->getMock();
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $user = $this->getMock('\OC\User\User', array(), array('foo', $backend));
+ $user = $this->getMockBuilder(User::class)->setConstructorArgs(['foo', $backend])->getMock();
$user->expects($this->never())
->method('getUID');
@@ -656,16 +666,14 @@ class SessionTest extends \Test\TestCase {
}
public function testCreateSessionToken() {
- $manager = $this->getMockBuilder('\OC\User\Manager')
- ->disableOriginalConstructor()
- ->getMock();
- $session = $this->getMock('\OCP\ISession');
- $token = $this->getMock('\OC\Authentication\Token\IToken');
- $user = $this->getMock('\OCP\IUser');
+ $manager = $this->createMock(Manager::class);
+ $session = $this->createMock(ISession::class);
+ $token = $this->createMock(IToken::class);
+ $user = $this->createMock(IUser::class);
$userSession = new \OC\User\Session($manager, $session, $this->timeFactory, $this->tokenProvider, $this->config);
- $random = $this->getMock('\OCP\Security\ISecureRandom');
- $config = $this->getMock('\OCP\IConfig');
+ $random = $this->createMock(ISecureRandom::class);
+ $config = $this->createMock(IConfig::class);
$csrf = $this->getMockBuilder('\OC\Security\CSRF\CsrfTokenManager')
->disableOriginalConstructor()
->getMock();
@@ -703,13 +711,13 @@ class SessionTest extends \Test\TestCase {
$manager = $this->getMockBuilder('\OC\User\Manager')
->disableOriginalConstructor()
->getMock();
- $session = $this->getMock('\OCP\ISession');
- $token = $this->getMock('\OC\Authentication\Token\IToken');
- $user = $this->getMock('\OCP\IUser');
+ $session = $this->createMock(ISession::class);
+ $token = $this->createMock(IToken::class);
+ $user = $this->createMock(IUser::class);
$userSession = new \OC\User\Session($manager, $session, $this->timeFactory, $this->tokenProvider, $this->config);
- $random = $this->getMock('\OCP\Security\ISecureRandom');
- $config = $this->getMock('\OCP\IConfig');
+ $random = $this->createMock(ISecureRandom::class);
+ $config = $this->createMock(IConfig::class);
$csrf = $this->getMockBuilder('\OC\Security\CSRF\CsrfTokenManager')
->disableOriginalConstructor()
->getMock();
@@ -752,9 +760,9 @@ class SessionTest extends \Test\TestCase {
$manager = $this->getMockBuilder('\OC\User\Manager')
->disableOriginalConstructor()
->getMock();
- $session = $this->getMock('\OCP\ISession');
+ $session = $this->createMock(ISession::class);
$userSession = new \OC\User\Session($manager, $session, $this->timeFactory, $this->tokenProvider, $this->config);
- $request = $this->getMock('\OCP\IRequest');
+ $request = $this->createMock(IRequest::class);
$uid = 'user123';
$loginName = 'User123';
@@ -780,12 +788,12 @@ class SessionTest extends \Test\TestCase {
$token->setLoginName('fritz');
$token->setUid('fritz0');
$token->setLastCheck(100); // Needs check
- $user = $this->getMock('\OCP\IUser');
+ $user = $this->createMock(IUser::class);
$userSession = $this->getMockBuilder('\OC\User\Session')
->setMethods(['logout'])
->setConstructorArgs([$manager, $session, $this->timeFactory, $this->tokenProvider, $this->config])
->getMock();
- $request = $this->getMock('\OCP\IRequest');
+ $request = $this->createMock(IRequest::class);
$request->expects($this->once())
->method('getHeader')
@@ -807,16 +815,16 @@ class SessionTest extends \Test\TestCase {
}
public function testValidateSessionDisabledUser() {
- $userManager = $this->getMock('\OCP\IUserManager');
- $session = $this->getMock('\OCP\ISession');
- $timeFactory = $this->getMock('\OCP\AppFramework\Utility\ITimeFactory');
- $tokenProvider = $this->getMock('\OC\Authentication\Token\IProvider');
+ $userManager = $this->createMock(IUserManager::class);
+ $session = $this->createMock(ISession::class);
+ $timeFactory = $this->createMock(ITimeFactory::class);
+ $tokenProvider = $this->createMock(IProvider::class);
$userSession = $this->getMockBuilder('\OC\User\Session')
->setConstructorArgs([$userManager, $session, $timeFactory, $tokenProvider, $this->config])
->setMethods(['logout'])
->getMock();
- $user = $this->getMock('\OCP\IUser');
+ $user = $this->createMock(IUser::class);
$token = new \OC\Authentication\Token\DefaultToken();
$token->setLoginName('susan');
$token->setLastCheck(20);
@@ -854,16 +862,16 @@ class SessionTest extends \Test\TestCase {
}
public function testValidateSessionNoPassword() {
- $userManager = $this->getMock('\OCP\IUserManager');
- $session = $this->getMock('\OCP\ISession');
- $timeFactory = $this->getMock('\OCP\AppFramework\Utility\ITimeFactory');
- $tokenProvider = $this->getMock('\OC\Authentication\Token\IProvider');
+ $userManager = $this->createMock(IUserManager::class);
+ $session = $this->createMock(ISession::class);
+ $timeFactory = $this->createMock(ITimeFactory::class);
+ $tokenProvider = $this->createMock(IProvider::class);
$userSession = $this->getMockBuilder('\OC\User\Session')
->setConstructorArgs([$userManager, $session, $timeFactory, $tokenProvider, $this->config])
->setMethods(['logout'])
->getMock();
- $user = $this->getMock('\OCP\IUser');
+ $user = $this->createMock(IUser::class);
$token = new \OC\Authentication\Token\DefaultToken();
$token->setLastCheck(20);
@@ -892,10 +900,10 @@ class SessionTest extends \Test\TestCase {
}
public function testUpdateSessionTokenPassword() {
- $userManager = $this->getMock('\OCP\IUserManager');
- $session = $this->getMock('\OCP\ISession');
- $timeFactory = $this->getMock('\OCP\AppFramework\Utility\ITimeFactory');
- $tokenProvider = $this->getMock('\OC\Authentication\Token\IProvider');
+ $userManager = $this->createMock(IUserManager::class);
+ $session = $this->createMock(ISession::class);
+ $timeFactory = $this->createMock(ITimeFactory::class);
+ $tokenProvider = $this->createMock(IProvider::class);
$userSession = new \OC\User\Session($userManager, $session, $timeFactory, $tokenProvider, $this->config);
$password = '123456';
@@ -917,10 +925,10 @@ class SessionTest extends \Test\TestCase {
}
public function testUpdateSessionTokenPasswordNoSessionAvailable() {
- $userManager = $this->getMock('\OCP\IUserManager');
- $session = $this->getMock('\OCP\ISession');
- $timeFactory = $this->getMock('\OCP\AppFramework\Utility\ITimeFactory');
- $tokenProvider = $this->getMock('\OC\Authentication\Token\IProvider');
+ $userManager = $this->createMock(IUserManager::class);
+ $session = $this->createMock(ISession::class);
+ $timeFactory = $this->createMock(ITimeFactory::class);
+ $tokenProvider = $this->createMock(IProvider::class);
$userSession = new \OC\User\Session($userManager, $session, $timeFactory, $tokenProvider, $this->config);
$session->expects($this->once())
@@ -931,10 +939,10 @@ class SessionTest extends \Test\TestCase {
}
public function testUpdateSessionTokenPasswordInvalidTokenException() {
- $userManager = $this->getMock('\OCP\IUserManager');
- $session = $this->getMock('\OCP\ISession');
- $timeFactory = $this->getMock('\OCP\AppFramework\Utility\ITimeFactory');
- $tokenProvider = $this->getMock('\OC\Authentication\Token\IProvider');
+ $userManager = $this->createMock(IUserManager::class);
+ $session = $this->createMock(ISession::class);
+ $timeFactory = $this->createMock(ITimeFactory::class);
+ $tokenProvider = $this->createMock(IProvider::class);
$userSession = new \OC\User\Session($userManager, $session, $timeFactory, $tokenProvider, $this->config);
$password = '123456';
diff --git a/tests/lib/User/UserTest.php b/tests/lib/User/UserTest.php
index a49bddde9eb..69f75d07762 100644
--- a/tests/lib/User/UserTest.php
+++ b/tests/lib/User/UserTest.php
@@ -10,6 +10,7 @@
namespace Test\User;
use OC\Hooks\PublicEmitter;
+use OC\User\Database;
/**
* Class UserTest
@@ -23,7 +24,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\OC\User\Backend');
+ $backend = $this->createMock(\OC\User\Backend::class);
$backend->expects($this->once())
->method('getDisplayName')
->with($this->equalTo('foo'))
@@ -45,7 +46,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\OC\User\Backend');
+ $backend = $this->createMock(\OC\User\Backend::class);
$backend->expects($this->once())
->method('getDisplayName')
->with($this->equalTo('foo'))
@@ -64,7 +65,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\OC\User\Backend');
+ $backend = $this->createMock(\OC\User\Backend::class);
$backend->expects($this->never())
->method('getDisplayName');
@@ -81,7 +82,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
->method('setPassword')
->with($this->equalTo('foo'), $this->equalTo('bar'));
@@ -104,7 +105,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->never())
->method('setPassword');
@@ -120,7 +121,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('Test\User\AvatarUserDummy');
+ $backend = $this->createMock(AvatarUserDummy::class);
$backend->expects($this->once())
->method('canChangeAvatar')
->with($this->equalTo('foo'))
@@ -144,7 +145,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('Test\User\AvatarUserDummy');
+ $backend = $this->createMock(AvatarUserDummy::class);
$backend->expects($this->once())
->method('canChangeAvatar')
->with($this->equalTo('foo'))
@@ -168,7 +169,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('Test\User\AvatarUserDummy');
+ $backend = $this->createMock(AvatarUserDummy::class);
$backend->expects($this->never())
->method('canChangeAvatar');
@@ -186,7 +187,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
->method('deleteUser')
->with($this->equalTo('foo'));
@@ -199,7 +200,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
->method('getHome')
->with($this->equalTo('foo'))
@@ -230,7 +231,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->never())
->method('getHome');
@@ -257,7 +258,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->any())
->method('implementsActions')
@@ -277,7 +278,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->any())
->method('implementsActions')
@@ -291,7 +292,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->any())
->method('implementsActions')
@@ -311,7 +312,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->any())
->method('implementsActions')
@@ -325,7 +326,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\OC\User\Database');
+ $backend = $this->createMock(Database::class);
$backend->expects($this->any())
->method('implementsActions')
@@ -354,7 +355,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\OC\User\Database');
+ $backend = $this->createMock(Database::class);
$backend->expects($this->any())
->method('implementsActions')
@@ -375,7 +376,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\OC\User\Database');
+ $backend = $this->createMock(Database::class);
$backend->expects($this->any())
->method('implementsActions')
@@ -398,7 +399,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
->method('setPassword');
@@ -439,7 +440,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once())
->method('deleteUser');
@@ -464,7 +465,7 @@ class UserTest extends \Test\TestCase {
/**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
- $backend = $this->getMock('\Test\Util\User\Dummy');
+ $backend = $this->createMock(\Test\Util\User\Dummy::class);
$urlGenerator = $this->getMockBuilder('\OC\URLGenerator')
->setMethods(['getAbsoluteURL'])
->disableOriginalConstructor()->getMock();
diff --git a/tests/lib/UtilTest.php b/tests/lib/UtilTest.php
index 33c15565b92..619963a2abf 100644
--- a/tests/lib/UtilTest.php
+++ b/tests/lib/UtilTest.php
@@ -9,7 +9,14 @@
namespace Test;
use OC_Util;
+use OCP\App\IAppManager;
+/**
+ * Class UtilTest
+ *
+ * @package Test
+ * @group DB
+ */
class UtilTest extends \Test\TestCase {
public function testGetVersion() {
$version = \OCP\Util::getVersion();
@@ -300,7 +307,7 @@ class UtilTest extends \Test\TestCase {
$oldWebRoot = \OC::$WEBROOT;
\OC::$WEBROOT = '';
- $appManager = $this->getMock('\OCP\App\IAppManager');
+ $appManager = $this->createMock(IAppManager::class);
$appManager->expects($this->any())
->method('isEnabledForUser')
->will($this->returnCallback(function($appId) use ($enabledApps){
diff --git a/tests/phpunit.xml.dist b/tests/phpunit.xml.dist
deleted file mode 100644
index d3a5897dfaf..00000000000
--- a/tests/phpunit.xml.dist
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<phpunit bootstrap="bootstrap.php">
- <testsuite name='ownCloud'>
- <directory suffix='.php'>lib/</directory>
- <directory suffix='.php'>Settings/</directory>
- <directory suffix='.php'>Core/</directory>
- <file>apps.php</file>
- </testsuite>
- <!-- filters for code coverage -->
- <filter>
- <!-- whitelist processUncoveredFilesFromWhitelist="true" -->
- <whitelist>
- <directory suffix=".php">..</directory>
- <exclude>
- <directory suffix=".php">../3rdparty</directory>
- <directory suffix=".php">../apps/files/l10n</directory>
- <directory suffix=".php">../apps/files_external/l10n</directory>
- <directory suffix=".php">../apps/files_external/3rdparty</directory>
- <directory suffix=".php">../apps/files_versions/l10n</directory>
- <directory suffix=".php">../apps/encryption/l10n</directory>
- <directory suffix=".php">../apps/files_sharing/l10n</directory>
- <directory suffix=".php">../apps/files_trashbin/l10n</directory>
- <directory suffix=".php">../apps/user_ldap/l10n</directory>
- <directory suffix=".php">../apps/user_webdavauth/l10n</directory>
- <directory suffix=".php">../apps/provisioning_api/tests</directory>
- <directory suffix=".php">../lib/l10n</directory>
- <directory suffix=".php">../core/l10n</directory>
- <directory suffix=".php">../settings/l10n</directory>
- <directory suffix=".php">../tests</directory>
- </exclude>
- </whitelist>
- </filter>
- <listeners>
- <listener class="StartSessionListener" file="startsessionlistener.php" />
- </listeners>
-</phpunit>