diff options
254 files changed, 1984 insertions, 533 deletions
diff --git a/.github/workflows/smb-kerberos.yml b/.github/workflows/smb-kerberos.yml new file mode 100644 index 00000000000..2875a7f4fbd --- /dev/null +++ b/.github/workflows/smb-kerberos.yml @@ -0,0 +1,78 @@ +name: Samba Kerberos SSO +on: + push: + branches: + - master + - stable* + paths: + - 'apps/files_external/**' + pull_request: + paths: + - 'apps/files_external/**' + +jobs: + smb-kerberos-tests: + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + php-versions: ['7.4', '8.0'] + + name: php${{ matrix.php-versions }}-${{ matrix.ftpd }} + + steps: + - name: Checkout server + uses: actions/checkout@v2 + with: + submodules: true + - name: Pull images + run: | + docker pull icewind1991/samba-krb-test-dc + docker pull icewind1991/samba-krb-test-apache + docker pull icewind1991/samba-krb-test-client + - name: Setup AD-DC + run: | + mkdir data + sudo chown -R 33 data apps config + apps/files_external/tests/setup-krb.sh + - name: Set up Nextcloud + run: | + docker exec --user 33 apache ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password + docker exec --user 33 apache ./occ config:system:set trusted_domains 1 --value 'httpd.domain.test' + + # setup user_saml + docker exec --user 33 apache ./occ app:enable user_saml --force + docker exec --user 33 apache ./occ config:app:set user_saml type --value 'environment-variable' + docker exec --user 33 apache ./occ config:app:set user_saml general-uid_mapping --value REMOTE_USER + + # setup external storage + docker exec --user 33 apache ./occ app:enable files_external --force + docker exec --user 33 apache ./occ files_external:create smb smb smb::kerberosapache + docker exec --user 33 apache ./occ files_external:config 1 host krb.domain.test + docker exec --user 33 apache ./occ files_external:config 1 share netlogon + docker exec --user 33 apache ./occ files_external:list + - name: Test SSO + run: | + mkdir cookies + chmod 0777 cookies + + DC_IP=$(docker inspect dc --format '{{.NetworkSettings.IPAddress}}') + docker run --rm --name client -v $PWD/cookies:/cookies -v /tmp/shared:/shared --dns $DC_IP --hostname client.domain.test icewind1991/samba-krb-test-client \ + curl -c /cookies/jar -s --negotiate -u testuser@DOMAIN.TEST: --delegation always http://httpd.domain.test/index.php/apps/user_saml/saml/login + CONTENT=$(docker run --rm --name client -v $PWD/cookies:/cookies -v /tmp/shared:/shared --dns $DC_IP --hostname client.domain.test icewind1991/samba-krb-test-client \ + curl -b /cookies/jar -s --negotiate -u testuser@DOMAIN.TEST: --delegation always http://httpd.domain.test/remote.php/webdav/smb/test.txt) + echo $CONTENT + CONTENT=$(echo $CONTENT | tr -d '[:space:]') + [[ $CONTENT == "testfile" ]] + + + smb-kerberos-summary: + runs-on: ubuntu-latest + needs: smb-kerberos-tests + + if: always() + + steps: + - name: Summary status + run: if ${{ needs.smb-kerberos-tests.result != 'success' }}; then exit 1; fi diff --git a/apps/accessibility/l10n/vi.js b/apps/accessibility/l10n/vi.js index 07bfe5c3a66..8ab40b7f9b2 100644 --- a/apps/accessibility/l10n/vi.js +++ b/apps/accessibility/l10n/vi.js @@ -13,7 +13,7 @@ OC.L10N.register( "Accessibility" : "Khả năng tiếp cận", "Accessibility options for nextcloud" : "Tùy chọn truy cập cho nextcloud", "Provides multiple accessibilities options to ease your use of Nextcloud" : "Cung cấp nhiều tùy chọn truy cập để dễ dàng sử dụng Nextcloud", - "Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Truy cập đa dạng là rất quan trọng với chúng tôi. Chúng tôi tuân theo các tiêu chuẩn mạng và kiểm tra để khiến mọi thứ đều có thể sử dụng được ngay cả khi không có chuột, và hỗ trợ những phần mềm hỗ trợ như đọc màn hình. Chúng tôi hướng đến sự tương thích với Nguyên Tắc Truy Cập Cho Nội Dung Mạng 2.1 ở cấp độ AA, với chế độ tương phản cao là AAA", + "Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Sự truy cập đa dạng là rất quan trọng với chúng tôi. Chúng tôi tuân theo các tiêu chuẩn mạng và kiểm tra để khiến mọi thứ đều có thể sử dụng được ngay cả khi không có chuột, và hỗ trợ những phần mềm hỗ trợ như đọc màn hình. Chúng tôi hướng đến sự tương thích với {guidelines}Nguyên Tắc Truy Cập Cho Nội Dung Mạng{linkend} 2.1 ở cấp độ AA, với chế độ tương phản cao là AAA", "If you find any issues, don’t hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Nếu bạn tìm được bất cứ vấn đề gì, đừng ngần ngại để báo cáo chúng trên hệ thống theo dõi vấn đề của chúng tôi." }, "nplurals=1; plural=0;"); diff --git a/apps/accessibility/l10n/vi.json b/apps/accessibility/l10n/vi.json index 257abfd0ffa..22be124bbaf 100644 --- a/apps/accessibility/l10n/vi.json +++ b/apps/accessibility/l10n/vi.json @@ -11,7 +11,7 @@ "Accessibility" : "Khả năng tiếp cận", "Accessibility options for nextcloud" : "Tùy chọn truy cập cho nextcloud", "Provides multiple accessibilities options to ease your use of Nextcloud" : "Cung cấp nhiều tùy chọn truy cập để dễ dàng sử dụng Nextcloud", - "Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Truy cập đa dạng là rất quan trọng với chúng tôi. Chúng tôi tuân theo các tiêu chuẩn mạng và kiểm tra để khiến mọi thứ đều có thể sử dụng được ngay cả khi không có chuột, và hỗ trợ những phần mềm hỗ trợ như đọc màn hình. Chúng tôi hướng đến sự tương thích với Nguyên Tắc Truy Cập Cho Nội Dung Mạng 2.1 ở cấp độ AA, với chế độ tương phản cao là AAA", + "Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Sự truy cập đa dạng là rất quan trọng với chúng tôi. Chúng tôi tuân theo các tiêu chuẩn mạng và kiểm tra để khiến mọi thứ đều có thể sử dụng được ngay cả khi không có chuột, và hỗ trợ những phần mềm hỗ trợ như đọc màn hình. Chúng tôi hướng đến sự tương thích với {guidelines}Nguyên Tắc Truy Cập Cho Nội Dung Mạng{linkend} 2.1 ở cấp độ AA, với chế độ tương phản cao là AAA", "If you find any issues, don’t hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Nếu bạn tìm được bất cứ vấn đề gì, đừng ngần ngại để báo cáo chúng trên hệ thống theo dõi vấn đề của chúng tôi." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/comments/l10n/ru.js b/apps/comments/l10n/ru.js index 0cefe5ad015..cfa4bce1e9c 100644 --- a/apps/comments/l10n/ru.js +++ b/apps/comments/l10n/ru.js @@ -10,6 +10,8 @@ OC.L10N.register( "%1$s commented on %2$s" : "%1$s прокомментировано на %2$s", "{author} commented on {file}" : "{author} прокомментировал {file}", "<strong>Comments</strong> for files" : "<strong>Комментарии</strong> к файлам", + "You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "Вы были упомянуты на \"{file}\", в комментарии пользователя, который с тех пор был удалён", + "{user} mentioned you in a comment on \"{file}\"" : "{user} упомянул вас в комментарии к \"{file}\".", "Files app plugin to add comments to files" : "Модуль приложения «Файлы», позволяющий комментировать файлы", "Edit comment" : "Редактировать комментарий", "Delete comment" : "Удалить комментарий", diff --git a/apps/comments/l10n/ru.json b/apps/comments/l10n/ru.json index f9aae036d97..1f3edfd067b 100644 --- a/apps/comments/l10n/ru.json +++ b/apps/comments/l10n/ru.json @@ -8,6 +8,8 @@ "%1$s commented on %2$s" : "%1$s прокомментировано на %2$s", "{author} commented on {file}" : "{author} прокомментировал {file}", "<strong>Comments</strong> for files" : "<strong>Комментарии</strong> к файлам", + "You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "Вы были упомянуты на \"{file}\", в комментарии пользователя, который с тех пор был удалён", + "{user} mentioned you in a comment on \"{file}\"" : "{user} упомянул вас в комментарии к \"{file}\".", "Files app plugin to add comments to files" : "Модуль приложения «Файлы», позволяющий комментировать файлы", "Edit comment" : "Редактировать комментарий", "Delete comment" : "Удалить комментарий", diff --git a/apps/comments/l10n/vi.js b/apps/comments/l10n/vi.js index 4b03d1a6057..72a5c90832a 100644 --- a/apps/comments/l10n/vi.js +++ b/apps/comments/l10n/vi.js @@ -10,6 +10,8 @@ OC.L10N.register( "%1$s commented on %2$s" : "%1$s đã bình luận về%2$s", "{author} commented on {file}" : "{author} đã bình luận về tệp tin {file}", "<strong>Comments</strong> for files" : "<strong>bình luận</strong> đối với các tệp tin", + "You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "Bạn đã được nhắc tới trên \"{file}\", trong một bình luận bởi một người dùng đã bị xoá", + "{user} mentioned you in a comment on \"{file}\"" : "{user} đã nhắc tới bạn trong một bình luận trên \"{file}\"", "Files app plugin to add comments to files" : "Plugin ứng dụng Tệp để thêm bình luận vào tệp", "Edit comment" : "Sửa bình luận", "Delete comment" : "Xóa bình luận", @@ -26,7 +28,7 @@ OC.L10N.register( "Comment deleted" : "Đã xóa bình luận", "An error occurred while trying to delete the comment" : "Đã xảy ra lỗi khi cố gắng xóa bình luận", "An error occurred while trying to create the comment" : "Đã xảy ra lỗi khi cố gắng tạo bình luận", - "You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Bạn đã được nhắc đến ở “{file}”, trong một bình luận bởi một người dùng mà họ đã bị xóa từ đó trở đi", + "You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Bạn đã được nhắc đến ở “{file}”, trong một bình luận bởi một người dùng mà họ đã bị xóa ", "{user} mentioned you in a comment on “{file}”" : "{user} đề cập tới bạn trong một bình luận về “{file}”", "New comment …" : "Tạo bình luận mới", "Post" : "Đăng", @@ -35,7 +37,7 @@ OC.L10N.register( "More comments …" : "Xem thêm các bình luận...", "Save" : "Lưu", "Allowed characters {count} of {max}" : "Số ký tự được còn lại là {count} trong tổng số {max}", - "Error occurred while retrieving comment with ID {id}" : "Xảy ra lỗi khi trích xuất bình của ID{id}", + "Error occurred while retrieving comment with ID {id}" : "Xảy ra lỗi khi trích xuất bình luận của ID{id}", "Error occurred while updating comment with id {id}" : "Có lỗi xảy ra khi cập nhật bình luận có id {id}", "Error occurred while posting comment" : "Có lỗi xảy ra khi đăng bình luận" }, diff --git a/apps/comments/l10n/vi.json b/apps/comments/l10n/vi.json index b8cb015da56..2bb30d286df 100644 --- a/apps/comments/l10n/vi.json +++ b/apps/comments/l10n/vi.json @@ -8,6 +8,8 @@ "%1$s commented on %2$s" : "%1$s đã bình luận về%2$s", "{author} commented on {file}" : "{author} đã bình luận về tệp tin {file}", "<strong>Comments</strong> for files" : "<strong>bình luận</strong> đối với các tệp tin", + "You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "Bạn đã được nhắc tới trên \"{file}\", trong một bình luận bởi một người dùng đã bị xoá", + "{user} mentioned you in a comment on \"{file}\"" : "{user} đã nhắc tới bạn trong một bình luận trên \"{file}\"", "Files app plugin to add comments to files" : "Plugin ứng dụng Tệp để thêm bình luận vào tệp", "Edit comment" : "Sửa bình luận", "Delete comment" : "Xóa bình luận", @@ -24,7 +26,7 @@ "Comment deleted" : "Đã xóa bình luận", "An error occurred while trying to delete the comment" : "Đã xảy ra lỗi khi cố gắng xóa bình luận", "An error occurred while trying to create the comment" : "Đã xảy ra lỗi khi cố gắng tạo bình luận", - "You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Bạn đã được nhắc đến ở “{file}”, trong một bình luận bởi một người dùng mà họ đã bị xóa từ đó trở đi", + "You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Bạn đã được nhắc đến ở “{file}”, trong một bình luận bởi một người dùng mà họ đã bị xóa ", "{user} mentioned you in a comment on “{file}”" : "{user} đề cập tới bạn trong một bình luận về “{file}”", "New comment …" : "Tạo bình luận mới", "Post" : "Đăng", @@ -33,7 +35,7 @@ "More comments …" : "Xem thêm các bình luận...", "Save" : "Lưu", "Allowed characters {count} of {max}" : "Số ký tự được còn lại là {count} trong tổng số {max}", - "Error occurred while retrieving comment with ID {id}" : "Xảy ra lỗi khi trích xuất bình của ID{id}", + "Error occurred while retrieving comment with ID {id}" : "Xảy ra lỗi khi trích xuất bình luận của ID{id}", "Error occurred while updating comment with id {id}" : "Có lỗi xảy ra khi cập nhật bình luận có id {id}", "Error occurred while posting comment" : "Có lỗi xảy ra khi đăng bình luận" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/dav/lib/DAV/CustomPropertiesBackend.php b/apps/dav/lib/DAV/CustomPropertiesBackend.php index 1bd207e0967..5f512995ce8 100644 --- a/apps/dav/lib/DAV/CustomPropertiesBackend.php +++ b/apps/dav/lib/DAV/CustomPropertiesBackend.php @@ -303,6 +303,11 @@ class CustomPropertiesBackend implements BackendInterface { ); } } else { + if ($propertyValue instanceOf \Sabre\DAV\Xml\Property\Complex) { + $propertyValue = $propertyValue->getXml(); + } elseif (!is_string($propertyValue)) { + $propertyValue = (string)$propertyValue; + } if (!array_key_exists($propertyName, $existing)) { $this->connection->executeUpdate($insertStatement, [ diff --git a/apps/dav/tests/unit/Comments/CommentsNodeTest.php b/apps/dav/tests/unit/Comments/CommentsNodeTest.php index 1738e1b53f9..f085ace9d89 100644 --- a/apps/dav/tests/unit/Comments/CommentsNodeTest.php +++ b/apps/dav/tests/unit/Comments/CommentsNodeTest.php @@ -404,6 +404,7 @@ class CommentsNodeTest extends \Test\TestCase { $ns . 'objectId' => '1848', $ns . 'referenceId' => 'ref', $ns . 'isUnread' => null, + $ns . 'reactions' => [], ]; $this->commentsManager->expects($this->exactly(2)) diff --git a/apps/files_external/3rdparty/.gitignore b/apps/files_external/3rdparty/.gitignore index 651eb60572d..e787d39fca6 100644 --- a/apps/files_external/3rdparty/.gitignore +++ b/apps/files_external/3rdparty/.gitignore @@ -5,6 +5,8 @@ icewind/smb/install_libsmbclient.sh icewind/smb/Makefile icewind/smb/.travis.yml icewind/smb/.scrutinizer.yml +icewind/smb/example-apache-kerberos.php +icewind/smb/codecov.yml icewind/streams/tests .github .php_cs* diff --git a/apps/files_external/3rdparty/composer.json b/apps/files_external/3rdparty/composer.json index d8854aa976a..e343521add3 100644 --- a/apps/files_external/3rdparty/composer.json +++ b/apps/files_external/3rdparty/composer.json @@ -9,6 +9,6 @@ }, "require": { "icewind/streams": "0.7.4", - "icewind/smb": "3.4.1" + "icewind/smb": "3.5.2" } } diff --git a/apps/files_external/3rdparty/composer.lock b/apps/files_external/3rdparty/composer.lock index 05de684a017..918dd7da08d 100644 --- a/apps/files_external/3rdparty/composer.lock +++ b/apps/files_external/3rdparty/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0ffc772b2aaaaffe52decb8d13361976", + "content-hash": "524c99fd87297e01d004eb5a4e53b04c", "packages": [ { "name": "icewind/smb", - "version": "v3.4.1", + "version": "v3.5.2", "source": { "type": "git", "url": "https://github.com/icewind1991/SMB.git", - "reference": "9dba42ab2a3990de29e18cc62b0a8270aceb74e3" + "reference": "0a425bd21acf7ae112b135dca34640e1b1a825c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/icewind1991/SMB/zipball/9dba42ab2a3990de29e18cc62b0a8270aceb74e3", - "reference": "9dba42ab2a3990de29e18cc62b0a8270aceb74e3", + "url": "https://api.github.com/repos/icewind1991/SMB/zipball/0a425bd21acf7ae112b135dca34640e1b1a825c3", + "reference": "0a425bd21acf7ae112b135dca34640e1b1a825c3", "shasum": "" }, "require": { @@ -49,9 +49,9 @@ "description": "php wrapper for smbclient and libsmbclient-php", "support": { "issues": "https://github.com/icewind1991/SMB/issues", - "source": "https://github.com/icewind1991/SMB/tree/v3.4.1" + "source": "https://github.com/icewind1991/SMB/tree/v3.5.2" }, - "time": "2021-04-19T13:53:08+00:00" + "time": "2022-01-20T14:51:51+00:00" }, { "name": "icewind/streams", @@ -107,5 +107,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.1.0" + "plugin-api-version": "2.2.0" } diff --git a/apps/files_external/3rdparty/composer/ClassLoader.php b/apps/files_external/3rdparty/composer/ClassLoader.php index 6d0c3f2d001..afef3fa2ad8 100644 --- a/apps/files_external/3rdparty/composer/ClassLoader.php +++ b/apps/files_external/3rdparty/composer/ClassLoader.php @@ -42,30 +42,75 @@ namespace Composer\Autoload; */ class ClassLoader { + /** @var ?string */ private $vendorDir; // PSR-4 + /** + * @var array[] + * @psalm-var array<string, array<string, int>> + */ private $prefixLengthsPsr4 = array(); + /** + * @var array[] + * @psalm-var array<string, array<int, string>> + */ private $prefixDirsPsr4 = array(); + /** + * @var array[] + * @psalm-var array<string, string> + */ private $fallbackDirsPsr4 = array(); // PSR-0 + /** + * @var array[] + * @psalm-var array<string, array<string, string[]>> + */ private $prefixesPsr0 = array(); + /** + * @var array[] + * @psalm-var array<string, string> + */ private $fallbackDirsPsr0 = array(); + /** @var bool */ private $useIncludePath = false; + + /** + * @var string[] + * @psalm-var array<string, string> + */ private $classMap = array(); + + /** @var bool */ private $classMapAuthoritative = false; + + /** + * @var bool[] + * @psalm-var array<string, bool> + */ private $missingClasses = array(); + + /** @var ?string */ private $apcuPrefix; + /** + * @var self[] + */ private static $registeredLoaders = array(); + /** + * @param ?string $vendorDir + */ public function __construct($vendorDir = null) { $this->vendorDir = $vendorDir; } + /** + * @return string[] + */ public function getPrefixes() { if (!empty($this->prefixesPsr0)) { @@ -75,28 +120,47 @@ class ClassLoader return array(); } + /** + * @return array[] + * @psalm-return array<string, array<int, string>> + */ public function getPrefixesPsr4() { return $this->prefixDirsPsr4; } + /** + * @return array[] + * @psalm-return array<string, string> + */ public function getFallbackDirs() { return $this->fallbackDirsPsr0; } + /** + * @return array[] + * @psalm-return array<string, string> + */ public function getFallbackDirsPsr4() { return $this->fallbackDirsPsr4; } + /** + * @return string[] Array of classname => path + * @psalm-return array<string, string> + */ public function getClassMap() { return $this->classMap; } /** - * @param array $classMap Class to filename map + * @param string[] $classMap Class to filename map + * @psalm-param array<string, string> $classMap + * + * @return void */ public function addClassMap(array $classMap) { @@ -111,9 +175,11 @@ class ClassLoader * Registers a set of PSR-0 directories for a given prefix, either * appending or prepending to the ones previously set for this prefix. * - * @param string $prefix The prefix - * @param array|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void */ public function add($prefix, $paths, $prepend = false) { @@ -156,11 +222,13 @@ class ClassLoader * Registers a set of PSR-4 directories for a given namespace, either * appending or prepending to the ones previously set for this namespace. * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories * * @throws \InvalidArgumentException + * + * @return void */ public function addPsr4($prefix, $paths, $prepend = false) { @@ -204,8 +272,10 @@ class ClassLoader * Registers a set of PSR-0 directories for a given prefix, * replacing any others previously set for this prefix. * - * @param string $prefix The prefix - * @param array|string $paths The PSR-0 base directories + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 base directories + * + * @return void */ public function set($prefix, $paths) { @@ -220,10 +290,12 @@ class ClassLoader * Registers a set of PSR-4 directories for a given namespace, * replacing any others previously set for this namespace. * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-4 base directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories * * @throws \InvalidArgumentException + * + * @return void */ public function setPsr4($prefix, $paths) { @@ -243,6 +315,8 @@ class ClassLoader * Turns on searching the include path for class files. * * @param bool $useIncludePath + * + * @return void */ public function setUseIncludePath($useIncludePath) { @@ -265,6 +339,8 @@ class ClassLoader * that have not been registered with the class map. * * @param bool $classMapAuthoritative + * + * @return void */ public function setClassMapAuthoritative($classMapAuthoritative) { @@ -285,6 +361,8 @@ class ClassLoader * APCu prefix to use to cache found/not-found classes, if the extension is enabled. * * @param string|null $apcuPrefix + * + * @return void */ public function setApcuPrefix($apcuPrefix) { @@ -305,6 +383,8 @@ class ClassLoader * Registers this instance as an autoloader. * * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void */ public function register($prepend = false) { @@ -324,6 +404,8 @@ class ClassLoader /** * Unregisters this instance as an autoloader. + * + * @return void */ public function unregister() { @@ -403,6 +485,11 @@ class ClassLoader return self::$registeredLoaders; } + /** + * @param string $class + * @param string $ext + * @return string|false + */ private function findFileWithExtension($class, $ext) { // PSR-4 lookup @@ -474,6 +561,10 @@ class ClassLoader * Scope isolated include. * * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + * @private */ function includeFile($file) { diff --git a/apps/files_external/3rdparty/composer/InstalledVersions.php b/apps/files_external/3rdparty/composer/InstalledVersions.php index b3a4e1611e6..d50e0c9fcc4 100644 --- a/apps/files_external/3rdparty/composer/InstalledVersions.php +++ b/apps/files_external/3rdparty/composer/InstalledVersions.php @@ -20,12 +20,25 @@ use Composer\Semver\VersionParser; * * See also https://getcomposer.org/doc/07-runtime.md#installed-versions * - * To require it's presence, you can require `composer-runtime-api ^2.0` + * To require its presence, you can require `composer-runtime-api ^2.0` */ class InstalledVersions { + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null + */ private static $installed; + + /** + * @var bool|null + */ private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> + */ private static $installedByVendor = array(); /** @@ -228,7 +241,7 @@ class InstalledVersions /** * @return array - * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string} + * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} */ public static function getRootPackage() { @@ -242,7 +255,7 @@ class InstalledVersions * * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. * @return array[] - * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} + * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} */ public static function getRawData() { @@ -265,7 +278,7 @@ class InstalledVersions * Returns the raw data of all installed.php which are currently loaded for custom implementations * * @return array[] - * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> + * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> */ public static function getAllRawData() { @@ -288,7 +301,7 @@ class InstalledVersions * @param array[] $data A vendor/composer/installed.php data set * @return void * - * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data + * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data */ public static function reload($data) { @@ -298,7 +311,7 @@ class InstalledVersions /** * @return array[] - * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}> + * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}> */ private static function getInstalled() { diff --git a/apps/files_external/3rdparty/composer/autoload_classmap.php b/apps/files_external/3rdparty/composer/autoload_classmap.php index d0f82994f29..17b94af0e99 100644 --- a/apps/files_external/3rdparty/composer/autoload_classmap.php +++ b/apps/files_external/3rdparty/composer/autoload_classmap.php @@ -48,6 +48,7 @@ return array( 'Icewind\\SMB\\IShare' => $vendorDir . '/icewind/smb/src/IShare.php', 'Icewind\\SMB\\ISystem' => $vendorDir . '/icewind/smb/src/ISystem.php', 'Icewind\\SMB\\ITimeZoneProvider' => $vendorDir . '/icewind/smb/src/ITimeZoneProvider.php', + 'Icewind\\SMB\\KerberosApacheAuth' => $vendorDir . '/icewind/smb/src/KerberosApacheAuth.php', 'Icewind\\SMB\\KerberosAuth' => $vendorDir . '/icewind/smb/src/KerberosAuth.php', 'Icewind\\SMB\\Native\\NativeFileInfo' => $vendorDir . '/icewind/smb/src/Native/NativeFileInfo.php', 'Icewind\\SMB\\Native\\NativeReadStream' => $vendorDir . '/icewind/smb/src/Native/NativeReadStream.php', diff --git a/apps/files_external/3rdparty/composer/autoload_static.php b/apps/files_external/3rdparty/composer/autoload_static.php index 899982f2a67..1d309dcd6f1 100644 --- a/apps/files_external/3rdparty/composer/autoload_static.php +++ b/apps/files_external/3rdparty/composer/autoload_static.php @@ -68,6 +68,7 @@ class ComposerStaticInit98fe9b281934250b3a93f69a5ce843b3 'Icewind\\SMB\\IShare' => __DIR__ . '/..' . '/icewind/smb/src/IShare.php', 'Icewind\\SMB\\ISystem' => __DIR__ . '/..' . '/icewind/smb/src/ISystem.php', 'Icewind\\SMB\\ITimeZoneProvider' => __DIR__ . '/..' . '/icewind/smb/src/ITimeZoneProvider.php', + 'Icewind\\SMB\\KerberosApacheAuth' => __DIR__ . '/..' . '/icewind/smb/src/KerberosApacheAuth.php', 'Icewind\\SMB\\KerberosAuth' => __DIR__ . '/..' . '/icewind/smb/src/KerberosAuth.php', 'Icewind\\SMB\\Native\\NativeFileInfo' => __DIR__ . '/..' . '/icewind/smb/src/Native/NativeFileInfo.php', 'Icewind\\SMB\\Native\\NativeReadStream' => __DIR__ . '/..' . '/icewind/smb/src/Native/NativeReadStream.php', diff --git a/apps/files_external/3rdparty/composer/installed.json b/apps/files_external/3rdparty/composer/installed.json index 7405962c70c..2c9b1c087df 100644 --- a/apps/files_external/3rdparty/composer/installed.json +++ b/apps/files_external/3rdparty/composer/installed.json @@ -2,17 +2,17 @@ "packages": [ { "name": "icewind/smb", - "version": "v3.4.1", - "version_normalized": "3.4.1.0", + "version": "v3.5.2", + "version_normalized": "3.5.2.0", "source": { "type": "git", "url": "https://github.com/icewind1991/SMB.git", - "reference": "9dba42ab2a3990de29e18cc62b0a8270aceb74e3" + "reference": "0a425bd21acf7ae112b135dca34640e1b1a825c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/icewind1991/SMB/zipball/9dba42ab2a3990de29e18cc62b0a8270aceb74e3", - "reference": "9dba42ab2a3990de29e18cc62b0a8270aceb74e3", + "url": "https://api.github.com/repos/icewind1991/SMB/zipball/0a425bd21acf7ae112b135dca34640e1b1a825c3", + "reference": "0a425bd21acf7ae112b135dca34640e1b1a825c3", "shasum": "" }, "require": { @@ -25,7 +25,7 @@ "phpunit/phpunit": "^8.5|^9.3.8", "psalm/phar": "^4.3" }, - "time": "2021-04-19T13:53:08+00:00", + "time": "2022-01-20T14:51:51+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -46,7 +46,7 @@ "description": "php wrapper for smbclient and libsmbclient-php", "support": { "issues": "https://github.com/icewind1991/SMB/issues", - "source": "https://github.com/icewind1991/SMB/tree/v3.4.1" + "source": "https://github.com/icewind1991/SMB/tree/v3.5.2" }, "install-path": "../icewind/smb" }, diff --git a/apps/files_external/3rdparty/composer/installed.php b/apps/files_external/3rdparty/composer/installed.php index 7dfd1c420f7..255420e1003 100644 --- a/apps/files_external/3rdparty/composer/installed.php +++ b/apps/files_external/3rdparty/composer/installed.php @@ -5,7 +5,7 @@ 'type' => 'library', 'install_path' => __DIR__ . '/../', 'aliases' => array(), - 'reference' => '70483a16a3a232758979bb6fa363629b5a16b6a4', + 'reference' => '0bed61f949bc7a8c69cd154919e78b704e28c99e', 'name' => 'files_external/3rdparty', 'dev' => true, ), @@ -16,16 +16,16 @@ 'type' => 'library', 'install_path' => __DIR__ . '/../', 'aliases' => array(), - 'reference' => '70483a16a3a232758979bb6fa363629b5a16b6a4', + 'reference' => '0bed61f949bc7a8c69cd154919e78b704e28c99e', 'dev_requirement' => false, ), 'icewind/smb' => array( - 'pretty_version' => 'v3.4.1', - 'version' => '3.4.1.0', + 'pretty_version' => 'v3.5.2', + 'version' => '3.5.2.0', 'type' => 'library', 'install_path' => __DIR__ . '/../icewind/smb', 'aliases' => array(), - 'reference' => '9dba42ab2a3990de29e18cc62b0a8270aceb74e3', + 'reference' => '0a425bd21acf7ae112b135dca34640e1b1a825c3', 'dev_requirement' => false, ), 'icewind/streams' => array( diff --git a/apps/files_external/3rdparty/icewind/smb/README.md b/apps/files_external/3rdparty/icewind/smb/README.md index 272c4ebedcd..fec1faefbad 100644 --- a/apps/files_external/3rdparty/icewind/smb/README.md +++ b/apps/files_external/3rdparty/icewind/smb/README.md @@ -44,13 +44,42 @@ $server = $serverFactory->createServer('localhost', $auth); ### Using kerberos authentication ### +There are two ways of using kerberos to authenticate against the smb server: + +- Using a ticket from the php server +- Re-using a ticket send by the client + +### Using a server ticket + +Using a server ticket allows the web server to authenticate against the smb server using an existing machine account. + +The ticket needs to be available in the environment of the php process. + ```php $serverFactory = new ServerFactory(); $auth = new KerberosAuth(); $server = $serverFactory->createServer('localhost', $auth); ``` -Note that this requires a valid kerberos ticket to already be available for php +### Re-using a client ticket + +By re-using a client ticket you can create a single sign-on setup where the user authenticates against +the web service using kerberos. And the web server can forward that ticket to the smb server, allowing it +to act on the behalf of the user without requiring the user to enter his passord. + +The setup for such a system is fairly involved and requires roughly the following this + +- The web server is authenticated against kerberos with a machine account +- Delegation is enabled for the web server's machine account +- Apache is setup to perform kerberos authentication and save the ticket in it's environment +- Php has the krb5 extension installed +- The client authenticates using a ticket with forwarding enabled + +```php +$serverFactory = new ServerFactory(); +$auth = new KerberosApacheAuth(); +$server = $serverFactory->createServer('localhost', $auth); +``` ### Upload a file ### diff --git a/apps/files_external/3rdparty/icewind/smb/src/IShare.php b/apps/files_external/3rdparty/icewind/smb/src/IShare.php index 6ac6e0d2d15..40213b93a99 100644 --- a/apps/files_external/3rdparty/icewind/smb/src/IShare.php +++ b/apps/files_external/3rdparty/icewind/smb/src/IShare.php @@ -45,7 +45,7 @@ interface IShare { public function put(string $source, string $target): bool; /** - * Open a readable stream top a remote file + * Open a readable stream to a remote file * * @param string $source * @return resource a read only stream with the contents of the remote file diff --git a/apps/files_external/3rdparty/icewind/smb/src/KerberosApacheAuth.php b/apps/files_external/3rdparty/icewind/smb/src/KerberosApacheAuth.php new file mode 100644 index 00000000000..c49918be114 --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/KerberosApacheAuth.php @@ -0,0 +1,136 @@ +<?php +/** + * @copyright Copyright (c) 2018 Robin Appelman <robin@icewind.nl> + * + * @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 Icewind\SMB; + +use Icewind\SMB\Exception\DependencyException; +use Icewind\SMB\Exception\Exception; + +/** + * Use existing kerberos ticket to authenticate and reuse the apache ticket cache (mod_auth_kerb) + */ +class KerberosApacheAuth extends KerberosAuth implements IAuth { + /** @var string */ + private $ticketPath = ""; + + /** @var bool */ + private $init = false; + + /** @var string|false */ + private $ticketName; + + public function __construct() { + $this->ticketName = getenv("KRB5CCNAME"); + } + + + /** + * Copy the ticket to a temporary location and use that ticket for authentication + * + * @return void + */ + public function copyTicket(): void { + if (!$this->checkTicket()) { + return; + } + $krb5 = new \KRB5CCache(); + $krb5->open($this->ticketName); + $tmpFilename = tempnam("/tmp", "krb5cc_php_"); + $tmpCacheFile = "FILE:" . $tmpFilename; + $krb5->save($tmpCacheFile); + $this->ticketPath = $tmpFilename; + $this->ticketName = $tmpCacheFile; + } + + /** + * Pass the ticket to smbclient by memory instead of path + * + * @return void + */ + public function passTicketFromMemory(): void { + if (!$this->checkTicket()) { + return; + } + $krb5 = new \KRB5CCache(); + $krb5->open($this->ticketName); + $this->ticketName = (string)$krb5->getName(); + } + + /** + * Check if a valid kerberos ticket is present + * + * @return bool + * @psalm-assert-if-true string $this->ticketName + */ + public function checkTicket(): bool { + //read apache kerberos ticket cache + if (!$this->ticketName) { + return false; + } + + $krb5 = new \KRB5CCache(); + $krb5->open($this->ticketName); + /** @psalm-suppress MixedArgument */ + return count($krb5->getEntries()) > 0; + } + + private function init(): void { + if ($this->init) { + return; + } + $this->init = true; + // inspired by https://git.typo3.org/TYPO3CMS/Extensions/fal_cifs.git + + if (!extension_loaded("krb5")) { + // https://pecl.php.net/package/krb5 + throw new DependencyException('Ensure php-krb5 is installed.'); + } + + //read apache kerberos ticket cache + if (!$this->checkTicket()) { + throw new Exception('No kerberos ticket cache environment variable (KRB5CCNAME) found.'); + } + + // note that even if the ticketname is the value we got from `getenv("KRB5CCNAME")` we still need to set the env variable ourselves + // this is because `getenv` also reads the variables passed from the SAPI (apache-php) and we need to set the variable in the OS's env + putenv("KRB5CCNAME=" . $this->ticketName); + } + + public function getExtraCommandLineArguments(): string { + $this->init(); + return parent::getExtraCommandLineArguments(); + } + + public function setExtraSmbClientOptions($smbClientState): void { + $this->init(); + try { + parent::setExtraSmbClientOptions($smbClientState); + } catch (Exception $e) { + // suppress + } + } + + public function __destruct() { + if (!empty($this->ticketPath) && file_exists($this->ticketPath) && is_file($this->ticketPath)) { + unlink($this->ticketPath); + } + } +} diff --git a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeFileInfo.php b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeFileInfo.php index 539bb728426..85fb0274ac1 100644 --- a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeFileInfo.php +++ b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeFileInfo.php @@ -99,7 +99,7 @@ class NativeFileInfo implements IFileInfo { public function isDirectory(): bool { $mode = $this->getMode(); if ($mode > 0x1000) { - return (bool)($mode & 0x4000); // 0x4000: unix directory flag + return ($mode & 0x4000 && !($mode & 0x8000)); // 0x4000: unix directory flag shares bits with 0xC000: socket } else { return (bool)($mode & IFileInfo::MODE_DIRECTORY); } diff --git a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeShare.php b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeShare.php index 03ec501b830..8c4eab2a60f 100644 --- a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeShare.php +++ b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeShare.php @@ -267,14 +267,14 @@ class NativeShare extends AbstractShare { * Open a writeable stream to a remote file * Note: This method will truncate the file to 0bytes first * - * @param string $source + * @param string $target * @return resource a writeable stream * * @throws NotFoundException * @throws InvalidTypeException */ - public function write(string $source) { - $url = $this->buildUrl($source); + public function write(string $target) { + $url = $this->buildUrl($target); $handle = $this->getState()->create($url); return NativeWriteStream::wrap($this->getState(), $handle, 'w', $url); } @@ -282,14 +282,14 @@ class NativeShare extends AbstractShare { /** * Open a writeable stream and set the cursor to the end of the stream * - * @param string $source + * @param string $target * @return resource a writeable stream * * @throws NotFoundException * @throws InvalidTypeException */ - public function append(string $source) { - $url = $this->buildUrl($source); + public function append(string $target) { + $url = $this->buildUrl($target); $handle = $this->getState()->open($url, "a+"); return NativeWriteStream::wrap($this->getState(), $handle, "a", $url); } diff --git a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeState.php b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeState.php index e1a13ce3e72..088e6f733d1 100644 --- a/apps/files_external/3rdparty/icewind/smb/src/Native/NativeState.php +++ b/apps/files_external/3rdparty/icewind/smb/src/Native/NativeState.php @@ -38,6 +38,14 @@ class NativeState { /** @var bool */ protected $connected = false; + /** + * sync the garbage collection cycle + * __deconstruct() of KerberosAuth should not called too soon + * + * @var IAuth|null $auth + */ + protected $auth = null; + // see error.h const EXCEPTION_MAP = [ 1 => ForbiddenException::class, @@ -107,6 +115,11 @@ class NativeState { } $auth->setExtraSmbClientOptions($this->state); + + // sync the garbage collection cycle + // __deconstruct() of KerberosAuth should not caled too soon + $this->auth = $auth; + /** @var bool $result */ $result = @smbclient_state_init($this->state, $auth->getWorkgroup(), $auth->getUsername(), $auth->getPassword()); diff --git a/apps/files_external/3rdparty/icewind/smb/src/System.php b/apps/files_external/3rdparty/icewind/smb/src/System.php index 919907477ab..d3475e7a5cb 100644 --- a/apps/files_external/3rdparty/icewind/smb/src/System.php +++ b/apps/files_external/3rdparty/icewind/smb/src/System.php @@ -62,7 +62,7 @@ class System implements ISystem { $result = null; $output = []; exec("which $binary 2>&1", $output, $result); - $this->paths[$binary] = $result === 0 ? trim(implode('', $output)) : null; + $this->paths[$binary] = $result === 0 && isset($output[0]) ? (string)$output[0] : null; } return $this->paths[$binary]; } diff --git a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Connection.php b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Connection.php index 31b72b05d97..cc73ac1ad14 100644 --- a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Connection.php +++ b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Connection.php @@ -47,7 +47,7 @@ class Connection extends RawConnection { public function clearTillPrompt(): void { $this->write(''); do { - $promptLine = $this->readLine(); + $promptLine = $this->readTillPrompt(); if ($promptLine === false) { break; } @@ -56,13 +56,12 @@ class Connection extends RawConnection { if ($this->write('') === false) { throw new ConnectionRefusedException(); } - $this->readLine(); + $this->readTillPrompt(); } /** * get all unprocessed output from smbclient until the next prompt * - * @param (callable(string):bool)|null $callback (optional) callback to call for every line read * @return string[] * @throws AuthenticationException * @throws ConnectException @@ -71,42 +70,22 @@ class Connection extends RawConnection { * @throws NoLoginServerException * @throws AccessDeniedException */ - public function read(callable $callback = null): array { + public function read(): array { if (!$this->isValid()) { throw new ConnectionException('Connection not valid'); } - $promptLine = $this->readLine(); //first line is prompt - if ($promptLine === false) { - $this->unknownError($promptLine); - } - $this->parser->checkConnectionError($promptLine); - - $output = []; - if (!$this->isPrompt($promptLine)) { - $line = $promptLine; - } else { - $line = $this->readLine(); - } - if ($line === false) { - $this->unknownError($promptLine); - } - while ($line !== false && !$this->isPrompt($line)) { //next prompt functions as delimiter - if (is_callable($callback)) { - $result = $callback($line); - if ($result === false) { // allow the callback to close the connection for infinite running commands - $this->close(true); - break; - } - } else { - $output[] = $line; - } - $line = $this->readLine(); + $output = $this->readTillPrompt(); + if ($output === false) { + $this->unknownError(false); } + $output = explode("\n", $output); + // last line contains the prompt + array_pop($output); return $output; } private function isPrompt(string $line): bool { - return mb_substr($line, 0, self::DELIMITER_LENGTH) === self::DELIMITER; + return substr($line, 0, self::DELIMITER_LENGTH) === self::DELIMITER; } /** @@ -132,6 +111,6 @@ class Connection extends RawConnection { // ignore any errors while trying to send the close command, the process might already be dead @$this->write('close' . PHP_EOL); } - parent::close($terminate); + $this->close_process($terminate); } } diff --git a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/NotifyHandler.php b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/NotifyHandler.php index 18451f4daa6..ecb5bb1e3c1 100644 --- a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/NotifyHandler.php +++ b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/NotifyHandler.php @@ -65,16 +65,20 @@ class NotifyHandler implements INotifyHandler { */ public function listen(callable $callback): void { if ($this->listening) { - $this->connection->read(function (string $line) use ($callback): bool { + while (true) { + $line = $this->connection->readLine(); + if ($line === false) { + break; + } $this->checkForError($line); $change = $this->parseChangeLine($line); if ($change) { $result = $callback($change); - return $result === false ? false : true; - } else { - return true; + if ($result === false) { + break; + } } - }); + }; } } diff --git a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/RawConnection.php b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/RawConnection.php index 26a17cc584b..4aec674c3da 100644 --- a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/RawConnection.php +++ b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/RawConnection.php @@ -71,7 +71,8 @@ class RawConnection { setlocale(LC_ALL, Server::LOCALE); $env = array_merge($this->env, [ - 'CLI_FORCE_INTERACTIVE' => 'y', // Needed or the prompt isn't displayed!! + 'CLI_FORCE_INTERACTIVE' => 'y', // Make sure the prompt is displayed + 'CLI_NO_READLINE' => 1, // Not all distros build smbclient with readline, disable it to get consistent behaviour 'LC_ALL' => Server::LOCALE, 'LANG' => Server::LOCALE, 'COLUMNS' => 8192 // prevent smbclient from line-wrapping it's output @@ -91,7 +92,7 @@ class RawConnection { public function isValid(): bool { if (is_resource($this->process)) { $status = proc_get_status($this->process); - return (bool)$status['running']; + return $status['running']; } else { return false; } @@ -110,12 +111,29 @@ class RawConnection { } /** + * read output till the next prompt + * + * @return string|false + */ + public function readTillPrompt() { + $output = ""; + do { + $chunk = $this->readLine('\> '); + if ($chunk === false) { + return false; + } + $output .= $chunk; + } while (strlen($chunk) == 4096 && strpos($chunk, "smb:") === false); + return $output; + } + + /** * read a line of output * * @return string|false */ - public function readLine() { - return stream_get_line($this->getOutputStream(), 4086, "\n"); + public function readLine(string $end = "\n") { + return stream_get_line($this->getOutputStream(), 4096, $end); } /** @@ -202,6 +220,14 @@ class RawConnection { * @psalm-assert null $this->process */ public function close(bool $terminate = true): void { + $this->close_process($terminate); + } + + /** + * @param bool $terminate + * @psalm-assert null $this->process + */ + protected function close_process(bool $terminate = true): void { if (!is_resource($this->process)) { return; } diff --git a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Share.php b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Share.php index 68446d380e0..eb68d3800b3 100644 --- a/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Share.php +++ b/apps/files_external/3rdparty/icewind/smb/src/Wrapped/Share.php @@ -345,11 +345,17 @@ class Share extends AbstractShare { // since returned stream is closed by the caller we need to create a new instance // since we can't re-use the same file descriptor over multiple calls $connection = $this->getConnection(); + stream_set_blocking($connection->getOutputStream(), false); $connection->write('get ' . $source . ' ' . $this->system->getFD(5)); $connection->write('exit'); $fh = $connection->getFileOutputStream(); - stream_context_set_option($fh, 'file', 'connection', $connection); + $fh = CallbackWrapper::wrap($fh, function() use ($connection) { + $connection->write(''); + }); + if (!is_resource($fh)) { + throw new Exception("Failed to wrap file output"); + } return $fh; } @@ -374,7 +380,9 @@ class Share extends AbstractShare { // use a close callback to ensure the upload is finished before continuing // this also serves as a way to keep the connection in scope - $stream = CallbackWrapper::wrap($fh, null, null, function () use ($connection) { + $stream = CallbackWrapper::wrap($fh, function() use ($connection) { + $connection->write(''); + }, null, function () use ($connection) { $connection->close(false); // dont terminate, give the upload some time }); if (is_resource($stream)) { @@ -446,7 +454,7 @@ class Share extends AbstractShare { * @return string[] */ protected function execute(string $command): array { - $this->connect()->write($command . PHP_EOL); + $this->connect()->write($command); return $this->connect()->read(); } diff --git a/apps/files_external/l10n/cs.js b/apps/files_external/l10n/cs.js index f6091c97853..54d7a1ab4bf 100644 --- a/apps/files_external/l10n/cs.js +++ b/apps/files_external/l10n/cs.js @@ -81,6 +81,7 @@ OC.L10N.register( "Public key" : "Veřejný klíč", "RSA private key" : "Soukromá část RSA klíče", "Private key" : "Soukromá část klíče", + "Kerberos default realm, defaults to \"WORKGROUP\"" : "Výchozí kerberos oblast (realm) – výchozí je „WORKGROUP", "Kerberos ticket" : "Kerberos ticket", "Amazon S3" : "Amazon S3", "Bucket" : "Bucket", @@ -138,6 +139,7 @@ OC.L10N.register( "External storages" : "Externí úložiště", "(group)" : "(skupina)", "SMB / CIFS" : "SMB / CIFS", - "SMB / CIFS using OC login" : "SMB / CIFS za použití přihlašovacího jména OC" + "SMB / CIFS using OC login" : "SMB / CIFS za použití přihlašovacího jména OC", + "Kerberos ticket apache mode" : "Režim kerberos lístku (ticket) apache serveru" }, "nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"); diff --git a/apps/files_external/l10n/cs.json b/apps/files_external/l10n/cs.json index 321ea7c5db6..e85206c3570 100644 --- a/apps/files_external/l10n/cs.json +++ b/apps/files_external/l10n/cs.json @@ -79,6 +79,7 @@ "Public key" : "Veřejný klíč", "RSA private key" : "Soukromá část RSA klíče", "Private key" : "Soukromá část klíče", + "Kerberos default realm, defaults to \"WORKGROUP\"" : "Výchozí kerberos oblast (realm) – výchozí je „WORKGROUP", "Kerberos ticket" : "Kerberos ticket", "Amazon S3" : "Amazon S3", "Bucket" : "Bucket", @@ -136,6 +137,7 @@ "External storages" : "Externí úložiště", "(group)" : "(skupina)", "SMB / CIFS" : "SMB / CIFS", - "SMB / CIFS using OC login" : "SMB / CIFS za použití přihlašovacího jména OC" + "SMB / CIFS using OC login" : "SMB / CIFS za použití přihlašovacího jména OC", + "Kerberos ticket apache mode" : "Režim kerberos lístku (ticket) apache serveru" },"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;" }
\ No newline at end of file diff --git a/apps/files_external/l10n/de_DE.js b/apps/files_external/l10n/de_DE.js index a0c5ad9d544..65ccf20c197 100644 --- a/apps/files_external/l10n/de_DE.js +++ b/apps/files_external/l10n/de_DE.js @@ -81,6 +81,7 @@ OC.L10N.register( "Public key" : "Öffentlicher Schlüssel", "RSA private key" : "Privater RSA-Schlüssel", "Private key" : "Privater Schlüssel", + "Kerberos default realm, defaults to \"WORKGROUP\"" : "Kerberos-Standard-Realm, standardmäßig „WORKGROUP“", "Kerberos ticket" : "Kerberos-Ticket", "Amazon S3" : "Amazon S3", "Bucket" : "Bucket", @@ -138,6 +139,7 @@ OC.L10N.register( "External storages" : "Externe Speicher", "(group)" : "(group)", "SMB / CIFS" : "SMB / CIFS", - "SMB / CIFS using OC login" : "SMB / CIFS mit OC-Anmeldung" + "SMB / CIFS using OC login" : "SMB / CIFS mit OC-Anmeldung", + "Kerberos ticket apache mode" : "Kerberos-Ticket-Apache-Modus" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/de_DE.json b/apps/files_external/l10n/de_DE.json index 56539bd1bed..e3077b5be0b 100644 --- a/apps/files_external/l10n/de_DE.json +++ b/apps/files_external/l10n/de_DE.json @@ -79,6 +79,7 @@ "Public key" : "Öffentlicher Schlüssel", "RSA private key" : "Privater RSA-Schlüssel", "Private key" : "Privater Schlüssel", + "Kerberos default realm, defaults to \"WORKGROUP\"" : "Kerberos-Standard-Realm, standardmäßig „WORKGROUP“", "Kerberos ticket" : "Kerberos-Ticket", "Amazon S3" : "Amazon S3", "Bucket" : "Bucket", @@ -136,6 +137,7 @@ "External storages" : "Externe Speicher", "(group)" : "(group)", "SMB / CIFS" : "SMB / CIFS", - "SMB / CIFS using OC login" : "SMB / CIFS mit OC-Anmeldung" + "SMB / CIFS using OC login" : "SMB / CIFS mit OC-Anmeldung", + "Kerberos ticket apache mode" : "Kerberos-Ticket-Apache-Modus" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/pl.js b/apps/files_external/l10n/pl.js index d5e576daa9e..67bae5748a1 100644 --- a/apps/files_external/l10n/pl.js +++ b/apps/files_external/l10n/pl.js @@ -81,6 +81,7 @@ OC.L10N.register( "Public key" : "Klucz publiczny", "RSA private key" : "Klucz prywatny RSA", "Private key" : "Klucz prywatny", + "Kerberos default realm, defaults to \"WORKGROUP\"" : "Domyślna dziedzina Kerberos, domyślnie \"WORKGROUP\"", "Kerberos ticket" : "Poświadczenia kerberos", "Amazon S3" : "Amazon S3", "Bucket" : "Kosz", @@ -138,6 +139,7 @@ OC.L10N.register( "External storages" : "Magazyny zewnętrzne", "(group)" : "(grupa)", "SMB / CIFS" : "SMB/CIFS", - "SMB / CIFS using OC login" : "SMB/CIFS za pomocą logowania OC" + "SMB / CIFS using OC login" : "SMB/CIFS za pomocą logowania OC", + "Kerberos ticket apache mode" : "Metoda Apache zgłoszenia Kerberos" }, "nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"); diff --git a/apps/files_external/l10n/pl.json b/apps/files_external/l10n/pl.json index 5d6d485c46a..69fb68f44f8 100644 --- a/apps/files_external/l10n/pl.json +++ b/apps/files_external/l10n/pl.json @@ -79,6 +79,7 @@ "Public key" : "Klucz publiczny", "RSA private key" : "Klucz prywatny RSA", "Private key" : "Klucz prywatny", + "Kerberos default realm, defaults to \"WORKGROUP\"" : "Domyślna dziedzina Kerberos, domyślnie \"WORKGROUP\"", "Kerberos ticket" : "Poświadczenia kerberos", "Amazon S3" : "Amazon S3", "Bucket" : "Kosz", @@ -136,6 +137,7 @@ "External storages" : "Magazyny zewnętrzne", "(group)" : "(grupa)", "SMB / CIFS" : "SMB/CIFS", - "SMB / CIFS using OC login" : "SMB/CIFS za pomocą logowania OC" + "SMB / CIFS using OC login" : "SMB/CIFS za pomocą logowania OC", + "Kerberos ticket apache mode" : "Metoda Apache zgłoszenia Kerberos" },"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);" }
\ No newline at end of file diff --git a/apps/files_external/l10n/zh_HK.js b/apps/files_external/l10n/zh_HK.js index 1970f5c2d75..1774bb9dc6b 100644 --- a/apps/files_external/l10n/zh_HK.js +++ b/apps/files_external/l10n/zh_HK.js @@ -81,6 +81,7 @@ OC.L10N.register( "Public key" : "公鑰", "RSA private key" : "RSA 私鑰", "Private key" : "私鑰", + "Kerberos default realm, defaults to \"WORKGROUP\"" : "Kerberos 默認領域,默認為 “WORKGROUP”", "Kerberos ticket" : "Kerberos 票證", "Amazon S3" : "Amazon S3", "Bucket" : "Bucket", @@ -138,6 +139,7 @@ OC.L10N.register( "External storages" : "外部儲存", "(group)" : "(群組)", "SMB / CIFS" : "SMB / CIFS", - "SMB / CIFS using OC login" : "SMB / CIFS 使用 OC 登入" + "SMB / CIFS using OC login" : "SMB / CIFS 使用 OC 登入", + "Kerberos ticket apache mode" : "Kerberos 票證 Apache 模式" }, "nplurals=1; plural=0;"); diff --git a/apps/files_external/l10n/zh_HK.json b/apps/files_external/l10n/zh_HK.json index 159003ea3ab..713832518c9 100644 --- a/apps/files_external/l10n/zh_HK.json +++ b/apps/files_external/l10n/zh_HK.json @@ -79,6 +79,7 @@ "Public key" : "公鑰", "RSA private key" : "RSA 私鑰", "Private key" : "私鑰", + "Kerberos default realm, defaults to \"WORKGROUP\"" : "Kerberos 默認領域,默認為 “WORKGROUP”", "Kerberos ticket" : "Kerberos 票證", "Amazon S3" : "Amazon S3", "Bucket" : "Bucket", @@ -136,6 +137,7 @@ "External storages" : "外部儲存", "(group)" : "(群組)", "SMB / CIFS" : "SMB / CIFS", - "SMB / CIFS using OC login" : "SMB / CIFS 使用 OC 登入" + "SMB / CIFS using OC login" : "SMB / CIFS 使用 OC 登入", + "Kerberos ticket apache mode" : "Kerberos 票證 Apache 模式" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_external/lib/AppInfo/Application.php b/apps/files_external/lib/AppInfo/Application.php index 7f6d8863350..6f8018746b3 100644 --- a/apps/files_external/lib/AppInfo/Application.php +++ b/apps/files_external/lib/AppInfo/Application.php @@ -31,8 +31,6 @@ namespace OCA\Files_External\AppInfo; use OCA\Files_External\Config\ConfigAdapter; use OCA\Files_External\Config\UserPlaceholderHandler; -use OCA\Files_External\Listener\GroupDeletedListener; -use OCA\Files_External\Listener\UserDeletedListener; use OCA\Files_External\Lib\Auth\AmazonS3\AccessKey; use OCA\Files_External\Lib\Auth\Builtin; use OCA\Files_External\Lib\Auth\NullMechanism; @@ -49,6 +47,7 @@ use OCA\Files_External\Lib\Auth\Password\UserGlobalAuth; use OCA\Files_External\Lib\Auth\Password\UserProvided; use OCA\Files_External\Lib\Auth\PublicKey\RSA; use OCA\Files_External\Lib\Auth\PublicKey\RSAPrivateKey; +use OCA\Files_External\Lib\Auth\SMB\KerberosApacheAuth; use OCA\Files_External\Lib\Auth\SMB\KerberosAuth; use OCA\Files_External\Lib\Backend\AmazonS3; use OCA\Files_External\Lib\Backend\DAV; @@ -62,6 +61,8 @@ use OCA\Files_External\Lib\Backend\SMB_OC; use OCA\Files_External\Lib\Backend\Swift; use OCA\Files_External\Lib\Config\IAuthMechanismProvider; use OCA\Files_External\Lib\Config\IBackendProvider; +use OCA\Files_External\Listener\GroupDeletedListener; +use OCA\Files_External\Listener\UserDeletedListener; use OCA\Files_External\Service\BackendService; use OCP\AppFramework\App; use OCP\AppFramework\Bootstrap\IBootContext; @@ -126,16 +127,16 @@ class Application extends App implements IBackendProvider, IAuthMechanismProvide $container = $this->getContainer(); $backends = [ - $container->query(Local::class), - $container->query(FTP::class), - $container->query(DAV::class), - $container->query(OwnCloud::class), - $container->query(SFTP::class), - $container->query(AmazonS3::class), - $container->query(Swift::class), - $container->query(SFTP_Key::class), - $container->query(SMB::class), - $container->query(SMB_OC::class), + $container->get(Local::class), + $container->get(FTP::class), + $container->get(DAV::class), + $container->get(OwnCloud::class), + $container->get(SFTP::class), + $container->get(AmazonS3::class), + $container->get(Swift::class), + $container->get(SFTP_Key::class), + $container->get(SMB::class), + $container->get(SMB_OC::class), ]; return $backends; @@ -149,37 +150,38 @@ class Application extends App implements IBackendProvider, IAuthMechanismProvide return [ // AuthMechanism::SCHEME_NULL mechanism - $container->query(NullMechanism::class), + $container->get(NullMechanism::class), // AuthMechanism::SCHEME_BUILTIN mechanism - $container->query(Builtin::class), + $container->get(Builtin::class), // AuthMechanism::SCHEME_PASSWORD mechanisms - $container->query(Password::class), - $container->query(SessionCredentials::class), - $container->query(LoginCredentials::class), - $container->query(UserProvided::class), - $container->query(GlobalAuth::class), - $container->query(UserGlobalAuth::class), + $container->get(Password::class), + $container->get(SessionCredentials::class), + $container->get(LoginCredentials::class), + $container->get(UserProvided::class), + $container->get(GlobalAuth::class), + $container->get(UserGlobalAuth::class), // AuthMechanism::SCHEME_OAUTH1 mechanisms - $container->query(OAuth1::class), + $container->get(OAuth1::class), // AuthMechanism::SCHEME_OAUTH2 mechanisms - $container->query(OAuth2::class), + $container->get(OAuth2::class), // AuthMechanism::SCHEME_PUBLICKEY mechanisms - $container->query(RSA::class), - $container->query(RSAPrivateKey::class), + $container->get(RSA::class), + $container->get(RSAPrivateKey::class), // AuthMechanism::SCHEME_OPENSTACK mechanisms - $container->query(OpenStackV2::class), - $container->query(OpenStackV3::class), - $container->query(Rackspace::class), + $container->get(OpenStackV2::class), + $container->get(OpenStackV3::class), + $container->get(Rackspace::class), // Specialized mechanisms - $container->query(AccessKey::class), - $container->query(KerberosAuth::class), + $container->get(AccessKey::class), + $container->get(KerberosAuth::class), + $container->get(KerberosApacheAuth::class), ]; } } diff --git a/apps/files_external/lib/Lib/Auth/SMB/KerberosApacheAuth.php b/apps/files_external/lib/Lib/Auth/SMB/KerberosApacheAuth.php new file mode 100644 index 00000000000..17492280275 --- /dev/null +++ b/apps/files_external/lib/Lib/Auth/SMB/KerberosApacheAuth.php @@ -0,0 +1,53 @@ +<?php + +/** + * @copyright Copyright (c) 2018 Robin Appelman <robin@icewind.nl> + * + * @author Robin Appelman <robin@icewind.nl> + * + * @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 OCA\Files_External\Lib\Auth\SMB; + +use OCA\Files_External\Lib\Auth\AuthMechanism; +use OCA\Files_External\Lib\DefinitionParameter; +use OCP\Authentication\LoginCredentials\IStore; +use OCP\IL10N; + +class KerberosApacheAuth extends AuthMechanism { + /** @var IStore */ + private $credentialsStore; + + public function __construct(IL10N $l, IStore $credentialsStore) { + $realm = new DefinitionParameter('default_realm', 'Default realm'); + $realm + ->setType(DefinitionParameter::VALUE_TEXT) + ->setFlag(DefinitionParameter::FLAG_OPTIONAL) + ->setTooltip($l->t('Kerberos default realm, defaults to "WORKGROUP"')); + $this + ->setIdentifier('smb::kerberosapache') + ->setScheme(self::SCHEME_SMB) + ->setText($l->t('Kerberos ticket Apache mode')) + ->addParameter($realm); + $this->credentialsStore = $credentialsStore; + } + + public function getCredentialsStore(): IStore { + return $this->credentialsStore; + } +} diff --git a/apps/files_external/lib/Lib/Backend/SMB.php b/apps/files_external/lib/Lib/Backend/SMB.php index 867648824ac..57ee866f3c7 100644 --- a/apps/files_external/lib/Lib/Backend/SMB.php +++ b/apps/files_external/lib/Lib/Backend/SMB.php @@ -24,16 +24,19 @@ * along with this program. If not, see <http://www.gnu.org/licenses/> * */ + namespace OCA\Files_External\Lib\Backend; use Icewind\SMB\BasicAuth; +use Icewind\SMB\KerberosApacheAuth; use Icewind\SMB\KerberosAuth; use OCA\Files_External\Lib\Auth\AuthMechanism; use OCA\Files_External\Lib\Auth\Password\Password; +use OCA\Files_External\Lib\Auth\SMB\KerberosApacheAuth as KerberosApacheAuthMechanism; use OCA\Files_External\Lib\DefinitionParameter; +use OCA\Files_External\Lib\InsufficientDataForMeaningfulAnswerException; use OCA\Files_External\Lib\LegacyDependencyCheckPolyfill; use OCA\Files_External\Lib\StorageConfig; - use OCP\IL10N; use OCP\IUser; @@ -69,10 +72,6 @@ class SMB extends Backend { ->setLegacyAuthMechanism($legacyAuth); } - /** - * @param StorageConfig $storage - * @param IUser $user - */ public function manipulateStorageConfig(StorageConfig &$storage, IUser $user = null) { $auth = $storage->getAuthMechanism(); if ($auth->getScheme() === AuthMechanism::SCHEME_PASSWORD) { @@ -90,6 +89,45 @@ class SMB extends Backend { case 'smb::kerberos': $smbAuth = new KerberosAuth(); break; + case 'smb::kerberosapache': + if (!$auth instanceof KerberosApacheAuthMechanism) { + throw new \InvalidArgumentException('invalid authentication backend'); + } + $credentialsStore = $auth->getCredentialsStore(); + $kerbAuth = new KerberosApacheAuth(); + // check if a kerberos ticket is available, else fallback to session credentials + if ($kerbAuth->checkTicket()) { + $smbAuth = $kerbAuth; + } else { + try { + $credentials = $credentialsStore->getLoginCredentials(); + $user = $credentials->getLoginName(); + $pass = $credentials->getPassword(); + preg_match('/(.*)@(.*)/', $user, $matches); + $realm = $storage->getBackendOption('default_realm'); + if (empty($realm)) { + $realm = 'WORKGROUP'; + } + $userPart = $matches[1]; + $domainPart = $matches[2]; + if (count($matches) === 0) { + $username = $user; + $workgroup = $realm; + } else { + $username = $userPart; + $workgroup = $domainPart; + } + $smbAuth = new BasicAuth( + $username, + $workgroup, + $pass + ); + } catch (\Exception $e) { + throw new InsufficientDataForMeaningfulAnswerException('No session credentials saved'); + } + } + + break; default: throw new \InvalidArgumentException('unknown authentication backend'); } diff --git a/apps/files_external/tests/setup-krb.sh b/apps/files_external/tests/setup-krb.sh new file mode 100755 index 00000000000..968ba80529e --- /dev/null +++ b/apps/files_external/tests/setup-krb.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +function getContainerHealth { + docker inspect --format "{{.State.Health.Status}}" $1 +} + +function waitContainer { + while STATUS=$(getContainerHealth $1); [ $STATUS != "healthy" ]; do + if [ $STATUS == "unhealthy" ]; then + echo "Failed!" + exit -1 + fi + printf . + lf=$'\n' + sleep 1 + done + printf "$lf" +} + +mkdir /tmp/shared + +# start the dc +docker run -dit --name dc -v /tmp/shared:/shared --hostname krb.domain.test --cap-add SYS_ADMIN icewind1991/samba-krb-test-dc +DC_IP=$(docker inspect dc --format '{{.NetworkSettings.IPAddress}}') + +waitContainer dc + +# start apache +docker run -d --name apache -v $PWD:/var/www/html -v /tmp/shared:/shared --dns $DC_IP --hostname httpd.domain.test icewind1991/samba-krb-test-apache +APACHE_IP=$(docker inspect apache --format '{{.NetworkSettings.IPAddress}}') + +# add the dns record for apache +docker exec dc samba-tool dns add krb.domain.test domain.test httpd A $APACHE_IP -U administrator --password=passwOrd1 diff --git a/apps/files_trashbin/l10n/ru.js b/apps/files_trashbin/l10n/ru.js index cbdc1feeb47..269ded30d1d 100644 --- a/apps/files_trashbin/l10n/ru.js +++ b/apps/files_trashbin/l10n/ru.js @@ -7,6 +7,7 @@ OC.L10N.register( "This application enables users to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the users file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent a user from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Это приложение позволяет пользователям восстанавливать файлы, которые были удалены из системы. Он отображает список удаленных файлов в веб-интерфейсе и имеет опции для восстановления этих удаленных файлов обратно в каталоги пользователей или их окончательного удаления из системы. Восстановление файла также восстанавливает связанные версии файлов, если приложение версий включено. Когда файл удаляется из общего ресурса, его можно восстановить таким же образом, хотя он больше не используется. По умолчанию эти файлы остаются в Корзине в течение 30 дней.\n\nЧтобы у пользователя не было произошло переполнение доступного места на диске, приложение «Удаленные файлы» не будет использовать более 50% доступного в настоящее время дисковой квоты для удаленных файлов. Если удаленные файлы превышают этот предел, приложение удаляет самые старые файлы, пока свободное место не станет ниже этой отметки. Дополнительная информация доступна в документации Удаленные Файлы.", "Restore" : "Восстановить", "Delete permanently" : "Окончательно удалить", + "Error while restoring file from trash bin" : "Произошла ошибка при попытке восстановить файл из корзины", "This operation is forbidden" : "Операция запрещена", "This directory is unavailable, please check the logs or contact the administrator" : "Этот каталог недоступен. Проверьте системные журналы или свяжитесь с администратором", "No deleted files" : "Нет удалённых файлов", diff --git a/apps/files_trashbin/l10n/ru.json b/apps/files_trashbin/l10n/ru.json index 3d66dbfb3ed..ea7fee68f5c 100644 --- a/apps/files_trashbin/l10n/ru.json +++ b/apps/files_trashbin/l10n/ru.json @@ -5,6 +5,7 @@ "This application enables users to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to the users file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days.\nTo prevent a user from running out of disk space, the Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, the app deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation." : "Это приложение позволяет пользователям восстанавливать файлы, которые были удалены из системы. Он отображает список удаленных файлов в веб-интерфейсе и имеет опции для восстановления этих удаленных файлов обратно в каталоги пользователей или их окончательного удаления из системы. Восстановление файла также восстанавливает связанные версии файлов, если приложение версий включено. Когда файл удаляется из общего ресурса, его можно восстановить таким же образом, хотя он больше не используется. По умолчанию эти файлы остаются в Корзине в течение 30 дней.\n\nЧтобы у пользователя не было произошло переполнение доступного места на диске, приложение «Удаленные файлы» не будет использовать более 50% доступного в настоящее время дисковой квоты для удаленных файлов. Если удаленные файлы превышают этот предел, приложение удаляет самые старые файлы, пока свободное место не станет ниже этой отметки. Дополнительная информация доступна в документации Удаленные Файлы.", "Restore" : "Восстановить", "Delete permanently" : "Окончательно удалить", + "Error while restoring file from trash bin" : "Произошла ошибка при попытке восстановить файл из корзины", "This operation is forbidden" : "Операция запрещена", "This directory is unavailable, please check the logs or contact the administrator" : "Этот каталог недоступен. Проверьте системные журналы или свяжитесь с администратором", "No deleted files" : "Нет удалённых файлов", diff --git a/apps/settings/l10n/bg.js b/apps/settings/l10n/bg.js index 14c5f685d0d..9ff010c84e2 100644 --- a/apps/settings/l10n/bg.js +++ b/apps/settings/l10n/bg.js @@ -183,7 +183,6 @@ OC.L10N.register( "Rename" : "Преименувай", "Revoke" : "Отнемане", "Wipe device" : "Изтрий устройството", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Отмяната на този маркер може да попречи на изтриването на вашето устройство, ако то все още не е започнало изтриването.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -490,6 +489,7 @@ OC.L10N.register( "Trusted" : "Доверен", "Public" : "Публичен", "installing and updating apps via the app store or Federated Cloud Sharing" : "инсталиране и актуализиране на приложения чрез магазина за приложения или Federated Cloud Sharing/Федерирано споделяне в облак/", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Отмяната на този маркер може да попречи на изтриването на вашето устройство, ако то все още не е започнало изтриването.", "Nextcloud iOS app" : "Nextcloud iOS приложение", "Nextcloud Android app" : "Приложение Nextcloud за Android", "Nextcloud Talk for iOS" : "Nextcloud Talk за iOS", diff --git a/apps/settings/l10n/bg.json b/apps/settings/l10n/bg.json index df4953c9287..8038144b2f3 100644 --- a/apps/settings/l10n/bg.json +++ b/apps/settings/l10n/bg.json @@ -181,7 +181,6 @@ "Rename" : "Преименувай", "Revoke" : "Отнемане", "Wipe device" : "Изтрий устройството", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Отмяната на този маркер може да попречи на изтриването на вашето устройство, ако то все още не е започнало изтриването.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -488,6 +487,7 @@ "Trusted" : "Доверен", "Public" : "Публичен", "installing and updating apps via the app store or Federated Cloud Sharing" : "инсталиране и актуализиране на приложения чрез магазина за приложения или Federated Cloud Sharing/Федерирано споделяне в облак/", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Отмяната на този маркер може да попречи на изтриването на вашето устройство, ако то все още не е започнало изтриването.", "Nextcloud iOS app" : "Nextcloud iOS приложение", "Nextcloud Android app" : "Приложение Nextcloud за Android", "Nextcloud Talk for iOS" : "Nextcloud Talk за iOS", diff --git a/apps/settings/l10n/br.js b/apps/settings/l10n/br.js index 8de2bbc956f..eb06b6fd33f 100644 --- a/apps/settings/l10n/br.js +++ b/apps/settings/l10n/br.js @@ -164,7 +164,6 @@ OC.L10N.register( "Rename" : "Adenvel", "Revoke" : "Digargañ", "Wipe device" : "Lemel an dra", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Digargañ ar jedouer a c'hell ampech an dilemel eus an dra ma n'eo ket bet kroget c'hoaz.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -391,6 +390,7 @@ OC.L10N.register( "Trusted" : "Fiziet", "Public" : "Publik", "installing and updating apps via the app store or Federated Cloud Sharing" : "stalia ha nevesaat meziantoù dre ar stal meziantoù pe Federation Cloud Sharing", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Digargañ ar jedouer a c'hell ampech an dilemel eus an dra ma n'eo ket bet kroget c'hoaz.", "Nextcloud iOS app" : "Mziant Nextcloud iOS", "Nextcloud Android app" : "Meziant Nextcloud Android", "Nextcloud Talk for iOS" : "Nextcloud Talk evit iOS", diff --git a/apps/settings/l10n/br.json b/apps/settings/l10n/br.json index f6027715dd6..2130546b636 100644 --- a/apps/settings/l10n/br.json +++ b/apps/settings/l10n/br.json @@ -162,7 +162,6 @@ "Rename" : "Adenvel", "Revoke" : "Digargañ", "Wipe device" : "Lemel an dra", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Digargañ ar jedouer a c'hell ampech an dilemel eus an dra ma n'eo ket bet kroget c'hoaz.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -389,6 +388,7 @@ "Trusted" : "Fiziet", "Public" : "Publik", "installing and updating apps via the app store or Federated Cloud Sharing" : "stalia ha nevesaat meziantoù dre ar stal meziantoù pe Federation Cloud Sharing", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Digargañ ar jedouer a c'hell ampech an dilemel eus an dra ma n'eo ket bet kroget c'hoaz.", "Nextcloud iOS app" : "Mziant Nextcloud iOS", "Nextcloud Android app" : "Meziant Nextcloud Android", "Nextcloud Talk for iOS" : "Nextcloud Talk evit iOS", diff --git a/apps/settings/l10n/ca.js b/apps/settings/l10n/ca.js index 62cb6b4d1c1..7b3d2cbff7a 100644 --- a/apps/settings/l10n/ca.js +++ b/apps/settings/l10n/ca.js @@ -166,7 +166,6 @@ OC.L10N.register( "Rename" : "Canvia el nom", "Revoke" : "Revoca", "Wipe device" : "Neteja dispositiu", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Revocant aquest token impedirà la neteja del vostre dispositiu si encara no ha començat.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -398,6 +397,7 @@ OC.L10N.register( "Trusted" : "De confiança", "Public" : "Públic", "installing and updating apps via the app store or Federated Cloud Sharing" : "s’està instal·lant i actualitzant aplicacions mitjançant la botiga d'aplicacions o la compartició de núvols federats", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Revocant aquest token impedirà la neteja del vostre dispositiu si encara no ha començat.", "Nextcloud iOS app" : "Aplicació de Nextcloud per a iOS", "Nextcloud Android app" : "Aplicació de Nextcloud per a Android", "Nextcloud Talk for iOS" : "Nextcloud Talk per a iOS", diff --git a/apps/settings/l10n/ca.json b/apps/settings/l10n/ca.json index 623564e4b7d..32e407aa0b8 100644 --- a/apps/settings/l10n/ca.json +++ b/apps/settings/l10n/ca.json @@ -164,7 +164,6 @@ "Rename" : "Canvia el nom", "Revoke" : "Revoca", "Wipe device" : "Neteja dispositiu", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Revocant aquest token impedirà la neteja del vostre dispositiu si encara no ha començat.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -396,6 +395,7 @@ "Trusted" : "De confiança", "Public" : "Públic", "installing and updating apps via the app store or Federated Cloud Sharing" : "s’està instal·lant i actualitzant aplicacions mitjançant la botiga d'aplicacions o la compartició de núvols federats", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Revocant aquest token impedirà la neteja del vostre dispositiu si encara no ha començat.", "Nextcloud iOS app" : "Aplicació de Nextcloud per a iOS", "Nextcloud Android app" : "Aplicació de Nextcloud per a Android", "Nextcloud Talk for iOS" : "Nextcloud Talk per a iOS", diff --git a/apps/settings/l10n/cs.js b/apps/settings/l10n/cs.js index 1c9de8b09f7..50b479edb1a 100644 --- a/apps/settings/l10n/cs.js +++ b/apps/settings/l10n/cs.js @@ -183,7 +183,7 @@ OC.L10N.register( "Rename" : "Přejmenovat", "Revoke" : "Odvolat", "Wipe device" : "Vymazat obsah zařízení", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Odstranění tohoto tokenu může zabránit vymazání obsahu přístroje, pokud nebyl proces vymazání do teď zahájen.", + "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "Odstranění tohoto tokenu může zabránit vymazání obsahu přístroje, pokud nebyl proces vymazání do teď zahájen.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -490,6 +490,7 @@ OC.L10N.register( "Trusted" : "Důvěryhodné", "Public" : "Veřejné", "installing and updating apps via the app store or Federated Cloud Sharing" : "Instalovat a aktualizovat aplikace prostřednictvím katalogu nebo federované cloudové sdílení", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Odstranění tohoto tokenu může zabránit vymazání obsahu přístroje, pokud nebyl proces vymazání do teď zahájen.", "Nextcloud iOS app" : "Aplikace Nextcloud pro iOS", "Nextcloud Android app" : "Aplikace Nextcloud pro Android", "Nextcloud Talk for iOS" : "Nextcloud Talk pro iOS", diff --git a/apps/settings/l10n/cs.json b/apps/settings/l10n/cs.json index a5f300af470..0bb7a15a492 100644 --- a/apps/settings/l10n/cs.json +++ b/apps/settings/l10n/cs.json @@ -181,7 +181,7 @@ "Rename" : "Přejmenovat", "Revoke" : "Odvolat", "Wipe device" : "Vymazat obsah zařízení", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Odstranění tohoto tokenu může zabránit vymazání obsahu přístroje, pokud nebyl proces vymazání do teď zahájen.", + "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "Odstranění tohoto tokenu může zabránit vymazání obsahu přístroje, pokud nebyl proces vymazání do teď zahájen.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -488,6 +488,7 @@ "Trusted" : "Důvěryhodné", "Public" : "Veřejné", "installing and updating apps via the app store or Federated Cloud Sharing" : "Instalovat a aktualizovat aplikace prostřednictvím katalogu nebo federované cloudové sdílení", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Odstranění tohoto tokenu může zabránit vymazání obsahu přístroje, pokud nebyl proces vymazání do teď zahájen.", "Nextcloud iOS app" : "Aplikace Nextcloud pro iOS", "Nextcloud Android app" : "Aplikace Nextcloud pro Android", "Nextcloud Talk for iOS" : "Nextcloud Talk pro iOS", diff --git a/apps/settings/l10n/da.js b/apps/settings/l10n/da.js index 1c224da424d..65ec7ae134b 100644 --- a/apps/settings/l10n/da.js +++ b/apps/settings/l10n/da.js @@ -183,7 +183,6 @@ OC.L10N.register( "Rename" : "Omdøb", "Revoke" : "Tilbagekald", "Wipe device" : "Slet enhed", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Tilbagekaldelse af dette token kan muligvis forhindre sletning af din enhed, hvis den ikke har startet sletningen endnu.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -490,6 +489,7 @@ OC.L10N.register( "Trusted" : "Betroet", "Public" : "Offentlig", "installing and updating apps via the app store or Federated Cloud Sharing" : "installation og opdatering af apps via app-butikken eller sammensluttet Cloud deling", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Tilbagekaldelse af dette token kan muligvis forhindre sletning af din enhed, hvis den ikke har startet sletningen endnu.", "Nextcloud iOS app" : "Nextcloud iOS app", "Nextcloud Android app" : "Nextcloud Android app", "Nextcloud Talk for iOS" : "Nextcloud Talk til iOS", diff --git a/apps/settings/l10n/da.json b/apps/settings/l10n/da.json index d79391fe03a..37194f36ef9 100644 --- a/apps/settings/l10n/da.json +++ b/apps/settings/l10n/da.json @@ -181,7 +181,6 @@ "Rename" : "Omdøb", "Revoke" : "Tilbagekald", "Wipe device" : "Slet enhed", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Tilbagekaldelse af dette token kan muligvis forhindre sletning af din enhed, hvis den ikke har startet sletningen endnu.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -488,6 +487,7 @@ "Trusted" : "Betroet", "Public" : "Offentlig", "installing and updating apps via the app store or Federated Cloud Sharing" : "installation og opdatering af apps via app-butikken eller sammensluttet Cloud deling", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Tilbagekaldelse af dette token kan muligvis forhindre sletning af din enhed, hvis den ikke har startet sletningen endnu.", "Nextcloud iOS app" : "Nextcloud iOS app", "Nextcloud Android app" : "Nextcloud Android app", "Nextcloud Talk for iOS" : "Nextcloud Talk til iOS", diff --git a/apps/settings/l10n/de.js b/apps/settings/l10n/de.js index 676e10661cb..54f825d4e45 100644 --- a/apps/settings/l10n/de.js +++ b/apps/settings/l10n/de.js @@ -183,7 +183,6 @@ OC.L10N.register( "Rename" : "Umbenennen", "Revoke" : "Widerrufen", "Wipe device" : "Gerät löschen", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Zurückziehen dieses Tokens könnte das Löschen von Deinem Gerät verhindern, wenn die Löschung noch nicht gestartet wurde.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -488,6 +487,7 @@ OC.L10N.register( "Trusted" : "Vertrauenswürdig", "Public" : "Öffentlich", "installing and updating apps via the app store or Federated Cloud Sharing" : "Das Installieren und Aktualisieren von Apps durch den App-Store oder durch Federated Cloud Sharing", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Zurückziehen dieses Tokens könnte das Löschen von Deinem Gerät verhindern, wenn die Löschung noch nicht gestartet wurde.", "Nextcloud iOS app" : "Nextcloud iOS-App", "Nextcloud Android app" : "Nextcloud Android-App", "Nextcloud Talk for iOS" : "Nextcloud Talk für iOS", diff --git a/apps/settings/l10n/de.json b/apps/settings/l10n/de.json index 09dda4f1fce..097bfcbce82 100644 --- a/apps/settings/l10n/de.json +++ b/apps/settings/l10n/de.json @@ -181,7 +181,6 @@ "Rename" : "Umbenennen", "Revoke" : "Widerrufen", "Wipe device" : "Gerät löschen", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Zurückziehen dieses Tokens könnte das Löschen von Deinem Gerät verhindern, wenn die Löschung noch nicht gestartet wurde.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -486,6 +485,7 @@ "Trusted" : "Vertrauenswürdig", "Public" : "Öffentlich", "installing and updating apps via the app store or Federated Cloud Sharing" : "Das Installieren und Aktualisieren von Apps durch den App-Store oder durch Federated Cloud Sharing", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Zurückziehen dieses Tokens könnte das Löschen von Deinem Gerät verhindern, wenn die Löschung noch nicht gestartet wurde.", "Nextcloud iOS app" : "Nextcloud iOS-App", "Nextcloud Android app" : "Nextcloud Android-App", "Nextcloud Talk for iOS" : "Nextcloud Talk für iOS", diff --git a/apps/settings/l10n/de_DE.js b/apps/settings/l10n/de_DE.js index 605c66840a9..52f960a3bd8 100644 --- a/apps/settings/l10n/de_DE.js +++ b/apps/settings/l10n/de_DE.js @@ -183,7 +183,7 @@ OC.L10N.register( "Rename" : "Umbennen", "Revoke" : "Widerrufen", "Wipe device" : "Gerät löschen", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Zurückziehen dieses Tokens könnte das Löschen von Ihrem Gerät verhindern, wenn die Löschung noch nicht gestartet wurde.", + "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "Zurückziehen dieses Tokens könnte das Löschen von Ihrem Gerät verhindern, wenn die Löschung noch nicht gestartet wurde.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -490,6 +490,7 @@ OC.L10N.register( "Trusted" : "Vertrauenswürdig", "Public" : "Öffentlich", "installing and updating apps via the app store or Federated Cloud Sharing" : "Das Installieren und Aktualisieren von Apps durch den App-Store oder durch Federated Cloud Sharing", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Zurückziehen dieses Tokens könnte das Löschen von Ihrem Gerät verhindern, wenn die Löschung noch nicht gestartet wurde.", "Nextcloud iOS app" : "Nextcloud iOS-App", "Nextcloud Android app" : "Nextcloud Android-App", "Nextcloud Talk for iOS" : "Nextcloud Talk für iOS", diff --git a/apps/settings/l10n/de_DE.json b/apps/settings/l10n/de_DE.json index f0a3ef64bf7..859165efa5a 100644 --- a/apps/settings/l10n/de_DE.json +++ b/apps/settings/l10n/de_DE.json @@ -181,7 +181,7 @@ "Rename" : "Umbennen", "Revoke" : "Widerrufen", "Wipe device" : "Gerät löschen", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Zurückziehen dieses Tokens könnte das Löschen von Ihrem Gerät verhindern, wenn die Löschung noch nicht gestartet wurde.", + "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "Zurückziehen dieses Tokens könnte das Löschen von Ihrem Gerät verhindern, wenn die Löschung noch nicht gestartet wurde.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -488,6 +488,7 @@ "Trusted" : "Vertrauenswürdig", "Public" : "Öffentlich", "installing and updating apps via the app store or Federated Cloud Sharing" : "Das Installieren und Aktualisieren von Apps durch den App-Store oder durch Federated Cloud Sharing", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Zurückziehen dieses Tokens könnte das Löschen von Ihrem Gerät verhindern, wenn die Löschung noch nicht gestartet wurde.", "Nextcloud iOS app" : "Nextcloud iOS-App", "Nextcloud Android app" : "Nextcloud Android-App", "Nextcloud Talk for iOS" : "Nextcloud Talk für iOS", diff --git a/apps/settings/l10n/el.js b/apps/settings/l10n/el.js index 18e70783ddc..8ec0609474c 100644 --- a/apps/settings/l10n/el.js +++ b/apps/settings/l10n/el.js @@ -171,7 +171,6 @@ OC.L10N.register( "Rename" : "Μετονομασία", "Revoke" : "Ανάκληση", "Wipe device" : "Εκκαθάριση συσκευής", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Η κατάργηση αυτού του αναγνωριστικού ενδέχεται να αποτρέψει την εκκαθάριστη της συσκευής σας αν δεν έχει ξεκινήσει ακόμα.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -403,6 +402,7 @@ OC.L10N.register( "Trusted" : "Έμπιστος", "Public" : "Δημόσιο", "installing and updating apps via the app store or Federated Cloud Sharing" : "εγκατάσταση και ενημέρωση εφαρμογών μέσω του καταστήματος εφαρμογών ή του ", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Η κατάργηση αυτού του αναγνωριστικού ενδέχεται να αποτρέψει την εκκαθάριστη της συσκευής σας αν δεν έχει ξεκινήσει ακόμα.", "Nextcloud iOS app" : "Nextcloud iOS app", "Nextcloud Android app" : "Nextcloud Android app", "Nextcloud Talk for iOS" : "Nextcloud Talk για iOS", diff --git a/apps/settings/l10n/el.json b/apps/settings/l10n/el.json index c340426ff89..395e59dd17b 100644 --- a/apps/settings/l10n/el.json +++ b/apps/settings/l10n/el.json @@ -169,7 +169,6 @@ "Rename" : "Μετονομασία", "Revoke" : "Ανάκληση", "Wipe device" : "Εκκαθάριση συσκευής", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Η κατάργηση αυτού του αναγνωριστικού ενδέχεται να αποτρέψει την εκκαθάριστη της συσκευής σας αν δεν έχει ξεκινήσει ακόμα.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -401,6 +400,7 @@ "Trusted" : "Έμπιστος", "Public" : "Δημόσιο", "installing and updating apps via the app store or Federated Cloud Sharing" : "εγκατάσταση και ενημέρωση εφαρμογών μέσω του καταστήματος εφαρμογών ή του ", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Η κατάργηση αυτού του αναγνωριστικού ενδέχεται να αποτρέψει την εκκαθάριστη της συσκευής σας αν δεν έχει ξεκινήσει ακόμα.", "Nextcloud iOS app" : "Nextcloud iOS app", "Nextcloud Android app" : "Nextcloud Android app", "Nextcloud Talk for iOS" : "Nextcloud Talk για iOS", diff --git a/apps/settings/l10n/eo.js b/apps/settings/l10n/eo.js index 958373fc809..2328ac68a18 100644 --- a/apps/settings/l10n/eo.js +++ b/apps/settings/l10n/eo.js @@ -153,7 +153,6 @@ OC.L10N.register( "Rename" : "Alinomi", "Revoke" : "Senvalidigi", "Wipe device" : "Forviŝi aparaton", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Senvalido de tiu ĉi ĵetono eble malhelpos forviŝadon de via aparato, se ĝi ankoraŭ ne komencis forviŝadon.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -356,6 +355,7 @@ OC.L10N.register( "Use a second factor besides your password to increase security for your account." : "Uzu duan fazon krom via pasvorto por plisekurigi vian konton.", "Public" : "Publika", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalado kaj ĝisdatigo de aplikaĵoj per aplikaĵejo aŭ Federnuba Kunhavado", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Senvalido de tiu ĉi ĵetono eble malhelpos forviŝadon de via aparato, se ĝi ankoraŭ ne komencis forviŝadon.", "Nextcloud iOS app" : "iOS_aplikaĵo Nextcloud", "Nextcloud Android app" : "Android-aplikaĵo Nextcloud", "Nextcloud Talk for iOS" : "Nextcloud Talk por iOS", diff --git a/apps/settings/l10n/eo.json b/apps/settings/l10n/eo.json index 7e073034dbf..7ab8f80eadc 100644 --- a/apps/settings/l10n/eo.json +++ b/apps/settings/l10n/eo.json @@ -151,7 +151,6 @@ "Rename" : "Alinomi", "Revoke" : "Senvalidigi", "Wipe device" : "Forviŝi aparaton", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Senvalido de tiu ĉi ĵetono eble malhelpos forviŝadon de via aparato, se ĝi ankoraŭ ne komencis forviŝadon.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -354,6 +353,7 @@ "Use a second factor besides your password to increase security for your account." : "Uzu duan fazon krom via pasvorto por plisekurigi vian konton.", "Public" : "Publika", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalado kaj ĝisdatigo de aplikaĵoj per aplikaĵejo aŭ Federnuba Kunhavado", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Senvalido de tiu ĉi ĵetono eble malhelpos forviŝadon de via aparato, se ĝi ankoraŭ ne komencis forviŝadon.", "Nextcloud iOS app" : "iOS_aplikaĵo Nextcloud", "Nextcloud Android app" : "Android-aplikaĵo Nextcloud", "Nextcloud Talk for iOS" : "Nextcloud Talk por iOS", diff --git a/apps/settings/l10n/es.js b/apps/settings/l10n/es.js index 091a3a12d72..c4b5c529c3d 100644 --- a/apps/settings/l10n/es.js +++ b/apps/settings/l10n/es.js @@ -183,7 +183,6 @@ OC.L10N.register( "Rename" : "Renombrar", "Revoke" : "Anular", "Wipe device" : "Borrar dispositivo", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Anular este token puede evitar el borrado de tu dispositivo si aún no se ha iniciado el borrado.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -490,6 +489,7 @@ OC.L10N.register( "Trusted" : "De confianza", "Public" : "Público", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalando y actualizando aplicaciones a través de la tienda de aplicaciones o de la nube compartida federada", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Anular este token puede evitar el borrado de tu dispositivo si aún no se ha iniciado el borrado.", "Nextcloud iOS app" : "App Nextcloud para iOS", "Nextcloud Android app" : "App Nextcloud para Android", "Nextcloud Talk for iOS" : "Nextcloud Talk para iOS", diff --git a/apps/settings/l10n/es.json b/apps/settings/l10n/es.json index bb17a2e29ca..ec7a3c31ea5 100644 --- a/apps/settings/l10n/es.json +++ b/apps/settings/l10n/es.json @@ -181,7 +181,6 @@ "Rename" : "Renombrar", "Revoke" : "Anular", "Wipe device" : "Borrar dispositivo", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Anular este token puede evitar el borrado de tu dispositivo si aún no se ha iniciado el borrado.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -488,6 +487,7 @@ "Trusted" : "De confianza", "Public" : "Público", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalando y actualizando aplicaciones a través de la tienda de aplicaciones o de la nube compartida federada", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Anular este token puede evitar el borrado de tu dispositivo si aún no se ha iniciado el borrado.", "Nextcloud iOS app" : "App Nextcloud para iOS", "Nextcloud Android app" : "App Nextcloud para Android", "Nextcloud Talk for iOS" : "Nextcloud Talk para iOS", diff --git a/apps/settings/l10n/eu.js b/apps/settings/l10n/eu.js index 7231ed17ff8..1885ec6f398 100644 --- a/apps/settings/l10n/eu.js +++ b/apps/settings/l10n/eu.js @@ -183,7 +183,6 @@ OC.L10N.register( "Rename" : "Berrizendatu", "Revoke" : "Ezeztatu", "Wipe device" : "Ezabatu gailua", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Token hau baliogabetzen baduzu zure gailua garbitzea ezinezkoa gerta daiteke garbiketa jada ez bada hasi.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -489,6 +488,7 @@ OC.L10N.register( "Trusted" : "Fidagarria", "Public" : "Publikoa", "installing and updating apps via the app store or Federated Cloud Sharing" : "Aplikazioak aplikazio-biltegiaren edo federatutako hodei partekatzearen bidez instalatzen edo eguneratzen", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Token hau baliogabetzen baduzu zure gailua garbitzea ezinezkoa gerta daiteke garbiketa jada ez bada hasi.", "Nextcloud iOS app" : "Nextcloud iOS aplikazioa", "Nextcloud Android app" : "Nextcloud Android aplikazioa", "Nextcloud Talk for iOS" : "Nextcloud Talk iOSentzat", diff --git a/apps/settings/l10n/eu.json b/apps/settings/l10n/eu.json index f9a32c6bcb9..a9eb8360f9f 100644 --- a/apps/settings/l10n/eu.json +++ b/apps/settings/l10n/eu.json @@ -181,7 +181,6 @@ "Rename" : "Berrizendatu", "Revoke" : "Ezeztatu", "Wipe device" : "Ezabatu gailua", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Token hau baliogabetzen baduzu zure gailua garbitzea ezinezkoa gerta daiteke garbiketa jada ez bada hasi.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -487,6 +486,7 @@ "Trusted" : "Fidagarria", "Public" : "Publikoa", "installing and updating apps via the app store or Federated Cloud Sharing" : "Aplikazioak aplikazio-biltegiaren edo federatutako hodei partekatzearen bidez instalatzen edo eguneratzen", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Token hau baliogabetzen baduzu zure gailua garbitzea ezinezkoa gerta daiteke garbiketa jada ez bada hasi.", "Nextcloud iOS app" : "Nextcloud iOS aplikazioa", "Nextcloud Android app" : "Nextcloud Android aplikazioa", "Nextcloud Talk for iOS" : "Nextcloud Talk iOSentzat", diff --git a/apps/settings/l10n/fa.js b/apps/settings/l10n/fa.js index c38997f0d92..c05545af6ff 100644 --- a/apps/settings/l10n/fa.js +++ b/apps/settings/l10n/fa.js @@ -155,7 +155,6 @@ OC.L10N.register( "Rename" : "تغییرنام", "Revoke" : "لغو", "Wipe device" : "وسیله را پاک کنید", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : " ابطال این نشانه ممکن است از هدر رفتن وسیله شما جلوگیری کند،اگر هنوز پاک نشده است.", "Internet Explorer" : "اینترنت اکسپلور", "Edge" : "مرورگر Edge", "Firefox" : "فایرفاکس", @@ -362,6 +361,7 @@ OC.L10N.register( "Use a second factor besides your password to increase security for your account." : "برای افزایش امنیت حساب کاربری خود ، از یک عامل دوم علاوه بر رمز عبور خود استفاده کنید.", "Public" : "عمومی", "installing and updating apps via the app store or Federated Cloud Sharing" : "نصب و به روزرسانی برنامه ها از طریق فروشگاه برنامه یا اشتراک گذاری ابر فدرال", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : " ابطال این نشانه ممکن است از هدر رفتن وسیله شما جلوگیری کند،اگر هنوز پاک نشده است.", "Nextcloud iOS app" : "برنامه iOS نکست کلود ", "Nextcloud Android app" : "نکست کلود برای اندروید", "Nextcloud Talk for iOS" : "نکست کلود تالک برای iOS", diff --git a/apps/settings/l10n/fa.json b/apps/settings/l10n/fa.json index aea8503d83e..ef70b92b5ab 100644 --- a/apps/settings/l10n/fa.json +++ b/apps/settings/l10n/fa.json @@ -153,7 +153,6 @@ "Rename" : "تغییرنام", "Revoke" : "لغو", "Wipe device" : "وسیله را پاک کنید", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : " ابطال این نشانه ممکن است از هدر رفتن وسیله شما جلوگیری کند،اگر هنوز پاک نشده است.", "Internet Explorer" : "اینترنت اکسپلور", "Edge" : "مرورگر Edge", "Firefox" : "فایرفاکس", @@ -360,6 +359,7 @@ "Use a second factor besides your password to increase security for your account." : "برای افزایش امنیت حساب کاربری خود ، از یک عامل دوم علاوه بر رمز عبور خود استفاده کنید.", "Public" : "عمومی", "installing and updating apps via the app store or Federated Cloud Sharing" : "نصب و به روزرسانی برنامه ها از طریق فروشگاه برنامه یا اشتراک گذاری ابر فدرال", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : " ابطال این نشانه ممکن است از هدر رفتن وسیله شما جلوگیری کند،اگر هنوز پاک نشده است.", "Nextcloud iOS app" : "برنامه iOS نکست کلود ", "Nextcloud Android app" : "نکست کلود برای اندروید", "Nextcloud Talk for iOS" : "نکست کلود تالک برای iOS", diff --git a/apps/settings/l10n/fr.js b/apps/settings/l10n/fr.js index c1bc5625369..6381fe1f47b 100644 --- a/apps/settings/l10n/fr.js +++ b/apps/settings/l10n/fr.js @@ -183,7 +183,6 @@ OC.L10N.register( "Rename" : "Renommer", "Revoke" : "Révoquer", "Wipe device" : "Effacer l'appareil", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Révoquer ce jeton peut empêcher l'effacement de votre appareil s'il n'a pas encore démarré l'effacement.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -490,6 +489,7 @@ OC.L10N.register( "Trusted" : "Approuvé", "Public" : "Publique", "installing and updating apps via the app store or Federated Cloud Sharing" : "le partage Federated Cloud ou l'installation et la mise à jour d'applications par l'app store", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Révoquer ce jeton peut empêcher l'effacement de votre appareil s'il n'a pas encore démarré l'effacement.", "Nextcloud iOS app" : "Application iOS Nextcloud", "Nextcloud Android app" : "Application Android Nextcloud", "Nextcloud Talk for iOS" : "Nextcloud Talk pour iOS", diff --git a/apps/settings/l10n/fr.json b/apps/settings/l10n/fr.json index 9910cce2df8..bb1a823b6b0 100644 --- a/apps/settings/l10n/fr.json +++ b/apps/settings/l10n/fr.json @@ -181,7 +181,6 @@ "Rename" : "Renommer", "Revoke" : "Révoquer", "Wipe device" : "Effacer l'appareil", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Révoquer ce jeton peut empêcher l'effacement de votre appareil s'il n'a pas encore démarré l'effacement.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -488,6 +487,7 @@ "Trusted" : "Approuvé", "Public" : "Publique", "installing and updating apps via the app store or Federated Cloud Sharing" : "le partage Federated Cloud ou l'installation et la mise à jour d'applications par l'app store", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Révoquer ce jeton peut empêcher l'effacement de votre appareil s'il n'a pas encore démarré l'effacement.", "Nextcloud iOS app" : "Application iOS Nextcloud", "Nextcloud Android app" : "Application Android Nextcloud", "Nextcloud Talk for iOS" : "Nextcloud Talk pour iOS", diff --git a/apps/settings/l10n/gl.js b/apps/settings/l10n/gl.js index 5fbb2c2b7c4..7ac0ca27601 100644 --- a/apps/settings/l10n/gl.js +++ b/apps/settings/l10n/gl.js @@ -172,7 +172,6 @@ OC.L10N.register( "Rename" : "Renomear", "Revoke" : "Revogar", "Wipe device" : "Limpar o dispositivo", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "O revogado deste testemuño pode impedir a limpeza deste dispositivo se aínda non comezou.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -407,6 +406,7 @@ OC.L10N.register( "Trusted" : "De confianza", "Public" : "Público", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalando e actualizando aplicacións mediante a tenda de aplicacións ou da nube federada compartida", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "O revogado deste testemuño pode impedir a limpeza deste dispositivo se aínda non comezou.", "Nextcloud iOS app" : "Apli Nextcloud para iOS", "Nextcloud Android app" : "Apli Nextcloud para Android", "Nextcloud Talk for iOS" : "Nextcloud Talk para iOS", diff --git a/apps/settings/l10n/gl.json b/apps/settings/l10n/gl.json index ae3c0fc291f..73e2442d42b 100644 --- a/apps/settings/l10n/gl.json +++ b/apps/settings/l10n/gl.json @@ -170,7 +170,6 @@ "Rename" : "Renomear", "Revoke" : "Revogar", "Wipe device" : "Limpar o dispositivo", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "O revogado deste testemuño pode impedir a limpeza deste dispositivo se aínda non comezou.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -405,6 +404,7 @@ "Trusted" : "De confianza", "Public" : "Público", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalando e actualizando aplicacións mediante a tenda de aplicacións ou da nube federada compartida", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "O revogado deste testemuño pode impedir a limpeza deste dispositivo se aínda non comezou.", "Nextcloud iOS app" : "Apli Nextcloud para iOS", "Nextcloud Android app" : "Apli Nextcloud para Android", "Nextcloud Talk for iOS" : "Nextcloud Talk para iOS", diff --git a/apps/settings/l10n/he.js b/apps/settings/l10n/he.js index 16dba110480..551d7cfb88e 100644 --- a/apps/settings/l10n/he.js +++ b/apps/settings/l10n/he.js @@ -172,7 +172,6 @@ OC.L10N.register( "Rename" : "שינוי שם", "Revoke" : "שלילה", "Wipe device" : "השמדת נתוני מכשיר", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "שלילת האסימון הזו עשויה למנוע את השמדת נתוני המכשיר שלך אם ההשמדה טרם החלה.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -406,6 +405,7 @@ OC.L10N.register( "Trusted" : "מהימן", "Public" : "ציבורי", "installing and updating apps via the app store or Federated Cloud Sharing" : "התקנה ועדכון היישום דרך חנות היישומים או ענן שיתוף מאוגד", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "שלילת האסימון הזו עשויה למנוע את השמדת נתוני המכשיר שלך אם ההשמדה טרם החלה.", "Nextcloud iOS app" : "יישומון iOS של Nextcloud", "Nextcloud Android app" : "יישומון Android של Nextcloud", "Nextcloud Talk for iOS" : "Nextcloud Talk ל־iOS", diff --git a/apps/settings/l10n/he.json b/apps/settings/l10n/he.json index abeb63f9d0f..43ab013f2e1 100644 --- a/apps/settings/l10n/he.json +++ b/apps/settings/l10n/he.json @@ -170,7 +170,6 @@ "Rename" : "שינוי שם", "Revoke" : "שלילה", "Wipe device" : "השמדת נתוני מכשיר", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "שלילת האסימון הזו עשויה למנוע את השמדת נתוני המכשיר שלך אם ההשמדה טרם החלה.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -404,6 +403,7 @@ "Trusted" : "מהימן", "Public" : "ציבורי", "installing and updating apps via the app store or Federated Cloud Sharing" : "התקנה ועדכון היישום דרך חנות היישומים או ענן שיתוף מאוגד", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "שלילת האסימון הזו עשויה למנוע את השמדת נתוני המכשיר שלך אם ההשמדה טרם החלה.", "Nextcloud iOS app" : "יישומון iOS של Nextcloud", "Nextcloud Android app" : "יישומון Android של Nextcloud", "Nextcloud Talk for iOS" : "Nextcloud Talk ל־iOS", diff --git a/apps/settings/l10n/hr.js b/apps/settings/l10n/hr.js index 78f6e866c24..d1e5ed3d387 100644 --- a/apps/settings/l10n/hr.js +++ b/apps/settings/l10n/hr.js @@ -183,7 +183,6 @@ OC.L10N.register( "Rename" : "Preimenuj", "Revoke" : "Opozovi", "Wipe device" : "Izbriši sve s uređaja", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Opozivanje ovog tokena može spriječiti brisanje sadržaja s vašeg uređaja ako brisanje nije pokrenuto.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -490,6 +489,7 @@ OC.L10N.register( "Trusted" : "Pouzdan", "Public" : "Javna", "installing and updating apps via the app store or Federated Cloud Sharing" : "instaliranje i ažuriranje aplikacija putem trgovine aplikacijama ili dijeljenja putem udruženog oblaka", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Opozivanje ovog tokena može spriječiti brisanje sadržaja s vašeg uređaja ako brisanje nije pokrenuto.", "Nextcloud iOS app" : "Aplikacija Nextcloud za iOS", "Nextcloud Android app" : "Aplikacija Nextcloud za Android", "Nextcloud Talk for iOS" : "Nextcloud Talk za iOS", diff --git a/apps/settings/l10n/hr.json b/apps/settings/l10n/hr.json index a6f13e48569..6397ca5a53a 100644 --- a/apps/settings/l10n/hr.json +++ b/apps/settings/l10n/hr.json @@ -181,7 +181,6 @@ "Rename" : "Preimenuj", "Revoke" : "Opozovi", "Wipe device" : "Izbriši sve s uređaja", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Opozivanje ovog tokena može spriječiti brisanje sadržaja s vašeg uređaja ako brisanje nije pokrenuto.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -488,6 +487,7 @@ "Trusted" : "Pouzdan", "Public" : "Javna", "installing and updating apps via the app store or Federated Cloud Sharing" : "instaliranje i ažuriranje aplikacija putem trgovine aplikacijama ili dijeljenja putem udruženog oblaka", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Opozivanje ovog tokena može spriječiti brisanje sadržaja s vašeg uređaja ako brisanje nije pokrenuto.", "Nextcloud iOS app" : "Aplikacija Nextcloud za iOS", "Nextcloud Android app" : "Aplikacija Nextcloud za Android", "Nextcloud Talk for iOS" : "Nextcloud Talk za iOS", diff --git a/apps/settings/l10n/hu.js b/apps/settings/l10n/hu.js index 913366d787d..0a0c5159b65 100644 --- a/apps/settings/l10n/hu.js +++ b/apps/settings/l10n/hu.js @@ -183,7 +183,6 @@ OC.L10N.register( "Rename" : "Átnevezés", "Revoke" : "Visszavonás", "Wipe device" : "Eszköz törlése", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "A token visszavonása lehet hogy meggátolja az eszköz törlését, ha az még nem kezdődött el.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -490,6 +489,7 @@ OC.L10N.register( "Trusted" : "Megbízható", "Public" : "Nyilvános", "installing and updating apps via the app store or Federated Cloud Sharing" : "alkalmazások telepítése és frissítése az alkalmazástár vagy a föderált felhőmegosztás segítségével", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "A token visszavonása lehet hogy meggátolja az eszköz törlését, ha az még nem kezdődött el.", "Nextcloud iOS app" : "Nextcloud iOS-es alkalmazás", "Nextcloud Android app" : "Nextcloud androidos alkalmazás", "Nextcloud Talk for iOS" : "Nextcloud Beszélgetés iOS-re", diff --git a/apps/settings/l10n/hu.json b/apps/settings/l10n/hu.json index c47fc992e26..36488c10ab0 100644 --- a/apps/settings/l10n/hu.json +++ b/apps/settings/l10n/hu.json @@ -181,7 +181,6 @@ "Rename" : "Átnevezés", "Revoke" : "Visszavonás", "Wipe device" : "Eszköz törlése", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "A token visszavonása lehet hogy meggátolja az eszköz törlését, ha az még nem kezdődött el.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -488,6 +487,7 @@ "Trusted" : "Megbízható", "Public" : "Nyilvános", "installing and updating apps via the app store or Federated Cloud Sharing" : "alkalmazások telepítése és frissítése az alkalmazástár vagy a föderált felhőmegosztás segítségével", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "A token visszavonása lehet hogy meggátolja az eszköz törlését, ha az még nem kezdődött el.", "Nextcloud iOS app" : "Nextcloud iOS-es alkalmazás", "Nextcloud Android app" : "Nextcloud androidos alkalmazás", "Nextcloud Talk for iOS" : "Nextcloud Beszélgetés iOS-re", diff --git a/apps/settings/l10n/id.js b/apps/settings/l10n/id.js index e4dba2b724e..a3d3d2a3ef1 100644 --- a/apps/settings/l10n/id.js +++ b/apps/settings/l10n/id.js @@ -143,7 +143,6 @@ OC.L10N.register( "Rename" : "Ubah nama", "Revoke" : "Cabut ijin", "Wipe device" : "Hapus perangkat", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Mencabut token ini mungkin akan mencegah penghapusan perangkat Anda jika penghapusan belum dimulai.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -326,6 +325,7 @@ OC.L10N.register( "Change password" : "Ubah kata sandi", "Public" : "Publik", "installing and updating apps via the app store or Federated Cloud Sharing" : "memasang dan memperbarui aplikasi via toko aplikasi atau Federated Cloud Sharing", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Mencabut token ini mungkin akan mencegah penghapusan perangkat Anda jika penghapusan belum dimulai.", "Nextcloud iOS app" : "Aplikasi iOS Nextcloud", "Nextcloud Android app" : "Aplikasi Android Nextcloud", "Nextcloud Talk for iOS" : "Nextcloud Talk untuk iOS", diff --git a/apps/settings/l10n/id.json b/apps/settings/l10n/id.json index a7ccf98526b..fc9ed59812e 100644 --- a/apps/settings/l10n/id.json +++ b/apps/settings/l10n/id.json @@ -141,7 +141,6 @@ "Rename" : "Ubah nama", "Revoke" : "Cabut ijin", "Wipe device" : "Hapus perangkat", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Mencabut token ini mungkin akan mencegah penghapusan perangkat Anda jika penghapusan belum dimulai.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -324,6 +323,7 @@ "Change password" : "Ubah kata sandi", "Public" : "Publik", "installing and updating apps via the app store or Federated Cloud Sharing" : "memasang dan memperbarui aplikasi via toko aplikasi atau Federated Cloud Sharing", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Mencabut token ini mungkin akan mencegah penghapusan perangkat Anda jika penghapusan belum dimulai.", "Nextcloud iOS app" : "Aplikasi iOS Nextcloud", "Nextcloud Android app" : "Aplikasi Android Nextcloud", "Nextcloud Talk for iOS" : "Nextcloud Talk untuk iOS", diff --git a/apps/settings/l10n/it.js b/apps/settings/l10n/it.js index ca228cc842c..7b5634c0bad 100644 --- a/apps/settings/l10n/it.js +++ b/apps/settings/l10n/it.js @@ -183,7 +183,6 @@ OC.L10N.register( "Rename" : "Rinomina", "Revoke" : "Revoca", "Wipe device" : "Cancella dispositivo", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "La revoca di questo token potrebbe impedire la cancellazione del tuo dispositivo se non ha ancora iniziato ancora la cancellazione.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -490,6 +489,7 @@ OC.L10N.register( "Trusted" : "Affidabili", "Public" : "Pubblico", "installing and updating apps via the app store or Federated Cloud Sharing" : "installazione e aggiornamento delle applicazioni tramite il negozio delle applicazioni o condivisione cloud federata", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "La revoca di questo token potrebbe impedire la cancellazione del tuo dispositivo se non ha ancora iniziato ancora la cancellazione.", "Nextcloud iOS app" : "Applicazione di Nextcloud per iOS", "Nextcloud Android app" : "Applicazione di Nextcloud per Android", "Nextcloud Talk for iOS" : "Nextcloud Talk per iOS", diff --git a/apps/settings/l10n/it.json b/apps/settings/l10n/it.json index bdc91bfc863..e2bfa99141e 100644 --- a/apps/settings/l10n/it.json +++ b/apps/settings/l10n/it.json @@ -181,7 +181,6 @@ "Rename" : "Rinomina", "Revoke" : "Revoca", "Wipe device" : "Cancella dispositivo", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "La revoca di questo token potrebbe impedire la cancellazione del tuo dispositivo se non ha ancora iniziato ancora la cancellazione.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -488,6 +487,7 @@ "Trusted" : "Affidabili", "Public" : "Pubblico", "installing and updating apps via the app store or Federated Cloud Sharing" : "installazione e aggiornamento delle applicazioni tramite il negozio delle applicazioni o condivisione cloud federata", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "La revoca di questo token potrebbe impedire la cancellazione del tuo dispositivo se non ha ancora iniziato ancora la cancellazione.", "Nextcloud iOS app" : "Applicazione di Nextcloud per iOS", "Nextcloud Android app" : "Applicazione di Nextcloud per Android", "Nextcloud Talk for iOS" : "Nextcloud Talk per iOS", diff --git a/apps/settings/l10n/ja.js b/apps/settings/l10n/ja.js index d1c592fe948..9a6a688d01c 100644 --- a/apps/settings/l10n/ja.js +++ b/apps/settings/l10n/ja.js @@ -183,7 +183,6 @@ OC.L10N.register( "Rename" : "名前を変更", "Revoke" : "取り消す", "Wipe device" : "デバイスをワイプ", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "ワイプが開始されていない場合、このトークンを無効にすると端末のワイプが無効になる可能性があります。", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -480,6 +479,7 @@ OC.L10N.register( "Trusted" : "信頼できる", "Public" : "公開", "installing and updating apps via the app store or Federated Cloud Sharing" : "アプリストアまたはクラウド連携共有から、アプリをインストールならびにアップデート", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "ワイプが開始されていない場合、このトークンを無効にすると端末のワイプが無効になる可能性があります。", "Nextcloud iOS app" : "Nextcloud iOSアプリ", "Nextcloud Android app" : "Nextcloud Android アプリ", "Nextcloud Talk for iOS" : "iOS用Nextcloud Talk", diff --git a/apps/settings/l10n/ja.json b/apps/settings/l10n/ja.json index 9e77120abe6..e9014bd6b00 100644 --- a/apps/settings/l10n/ja.json +++ b/apps/settings/l10n/ja.json @@ -181,7 +181,6 @@ "Rename" : "名前を変更", "Revoke" : "取り消す", "Wipe device" : "デバイスをワイプ", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "ワイプが開始されていない場合、このトークンを無効にすると端末のワイプが無効になる可能性があります。", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -478,6 +477,7 @@ "Trusted" : "信頼できる", "Public" : "公開", "installing and updating apps via the app store or Federated Cloud Sharing" : "アプリストアまたはクラウド連携共有から、アプリをインストールならびにアップデート", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "ワイプが開始されていない場合、このトークンを無効にすると端末のワイプが無効になる可能性があります。", "Nextcloud iOS app" : "Nextcloud iOSアプリ", "Nextcloud Android app" : "Nextcloud Android アプリ", "Nextcloud Talk for iOS" : "iOS用Nextcloud Talk", diff --git a/apps/settings/l10n/lt_LT.js b/apps/settings/l10n/lt_LT.js index 6c9e83cdd20..407e33b60ac 100644 --- a/apps/settings/l10n/lt_LT.js +++ b/apps/settings/l10n/lt_LT.js @@ -163,7 +163,6 @@ OC.L10N.register( "Rename" : "Pervadinti", "Revoke" : "Panaikinti", "Wipe device" : "Ištrinti duomenis įrenginyje", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Panaikinus šį prieigos raktą, jums gali būti neleista ištrinti šio įrenginio duomenų, jeigu jis dar nepradėjo duomenų ištrynimo.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -415,6 +414,7 @@ OC.L10N.register( "Trusted" : "Patikima", "Public" : "Viešas", "installing and updating apps via the app store or Federated Cloud Sharing" : "Programėlių diegimas ir naujinimas per programėlių parduotuvę arba per „Federated Cloud Sharing“", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Panaikinus šį prieigos raktą, jums gali būti neleista ištrinti šio įrenginio duomenų, jeigu jis dar nepradėjo duomenų ištrynimo.", "Nextcloud iOS app" : "Nextcloud iOS programėlė", "Nextcloud Android app" : "Nextcloud Android programėlė", "Nextcloud Talk for iOS" : "Nextcloud pokalbiai iOS", diff --git a/apps/settings/l10n/lt_LT.json b/apps/settings/l10n/lt_LT.json index eaf23da3c25..433f4928a6d 100644 --- a/apps/settings/l10n/lt_LT.json +++ b/apps/settings/l10n/lt_LT.json @@ -161,7 +161,6 @@ "Rename" : "Pervadinti", "Revoke" : "Panaikinti", "Wipe device" : "Ištrinti duomenis įrenginyje", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Panaikinus šį prieigos raktą, jums gali būti neleista ištrinti šio įrenginio duomenų, jeigu jis dar nepradėjo duomenų ištrynimo.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -413,6 +412,7 @@ "Trusted" : "Patikima", "Public" : "Viešas", "installing and updating apps via the app store or Federated Cloud Sharing" : "Programėlių diegimas ir naujinimas per programėlių parduotuvę arba per „Federated Cloud Sharing“", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Panaikinus šį prieigos raktą, jums gali būti neleista ištrinti šio įrenginio duomenų, jeigu jis dar nepradėjo duomenų ištrynimo.", "Nextcloud iOS app" : "Nextcloud iOS programėlė", "Nextcloud Android app" : "Nextcloud Android programėlė", "Nextcloud Talk for iOS" : "Nextcloud pokalbiai iOS", diff --git a/apps/settings/l10n/mk.js b/apps/settings/l10n/mk.js index 8546577a3a5..fc8ce3fc8b5 100644 --- a/apps/settings/l10n/mk.js +++ b/apps/settings/l10n/mk.js @@ -182,7 +182,6 @@ OC.L10N.register( "Rename" : "Преименувај", "Revoke" : "Одземи", "Wipe device" : "Избриши уред", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Одземањето на овој токен може да спречи бришење на вашиот уред ако сè уште не е избришано.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -472,6 +471,7 @@ OC.L10N.register( "Trusted" : "Доверлив", "Public" : "Јавно", "installing and updating apps via the app store or Federated Cloud Sharing" : "инсталирање и ажурирање на апликации преку продавницата за апликации или Федерално споделување на облак", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Одземањето на овој токен може да спречи бришење на вашиот уред ако сè уште не е избришано.", "Nextcloud iOS app" : "iOS Апликација", "Nextcloud Android app" : "Android app", "Nextcloud Talk for iOS" : "Разговор за iOS", diff --git a/apps/settings/l10n/mk.json b/apps/settings/l10n/mk.json index 6fdf066c9ad..a02b0d05ee5 100644 --- a/apps/settings/l10n/mk.json +++ b/apps/settings/l10n/mk.json @@ -180,7 +180,6 @@ "Rename" : "Преименувај", "Revoke" : "Одземи", "Wipe device" : "Избриши уред", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Одземањето на овој токен може да спречи бришење на вашиот уред ако сè уште не е избришано.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -470,6 +469,7 @@ "Trusted" : "Доверлив", "Public" : "Јавно", "installing and updating apps via the app store or Federated Cloud Sharing" : "инсталирање и ажурирање на апликации преку продавницата за апликации или Федерално споделување на облак", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Одземањето на овој токен може да спречи бришење на вашиот уред ако сè уште не е избришано.", "Nextcloud iOS app" : "iOS Апликација", "Nextcloud Android app" : "Android app", "Nextcloud Talk for iOS" : "Разговор за iOS", diff --git a/apps/settings/l10n/nl.js b/apps/settings/l10n/nl.js index bb7812a4322..99b23259a21 100644 --- a/apps/settings/l10n/nl.js +++ b/apps/settings/l10n/nl.js @@ -183,7 +183,6 @@ OC.L10N.register( "Rename" : "Hernoemen", "Revoke" : "Intrekken", "Wipe device" : "Apparaat wissen", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Het verwijderen van deze token voorkomt mogelijk dat je apparaat gewist wordt, als dit proces nog niet gestart is.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -490,6 +489,7 @@ OC.L10N.register( "Trusted" : "Vertrouwd", "Public" : "Openbaar", "installing and updating apps via the app store or Federated Cloud Sharing" : "installeren en bijwerken van applicaties via de app store of gefedereerd delen", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Het verwijderen van deze token voorkomt mogelijk dat je apparaat gewist wordt, als dit proces nog niet gestart is.", "Nextcloud iOS app" : "Nextcloud iOS app", "Nextcloud Android app" : "Nextcloud Android app", "Nextcloud Talk for iOS" : "Nextcloud Talk voor iOS", diff --git a/apps/settings/l10n/nl.json b/apps/settings/l10n/nl.json index 4330a4e7f53..f5f99039e45 100644 --- a/apps/settings/l10n/nl.json +++ b/apps/settings/l10n/nl.json @@ -181,7 +181,6 @@ "Rename" : "Hernoemen", "Revoke" : "Intrekken", "Wipe device" : "Apparaat wissen", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Het verwijderen van deze token voorkomt mogelijk dat je apparaat gewist wordt, als dit proces nog niet gestart is.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -488,6 +487,7 @@ "Trusted" : "Vertrouwd", "Public" : "Openbaar", "installing and updating apps via the app store or Federated Cloud Sharing" : "installeren en bijwerken van applicaties via de app store of gefedereerd delen", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Het verwijderen van deze token voorkomt mogelijk dat je apparaat gewist wordt, als dit proces nog niet gestart is.", "Nextcloud iOS app" : "Nextcloud iOS app", "Nextcloud Android app" : "Nextcloud Android app", "Nextcloud Talk for iOS" : "Nextcloud Talk voor iOS", diff --git a/apps/settings/l10n/pl.js b/apps/settings/l10n/pl.js index c96d251df73..a6eb37b6ed1 100644 --- a/apps/settings/l10n/pl.js +++ b/apps/settings/l10n/pl.js @@ -183,7 +183,7 @@ OC.L10N.register( "Rename" : "Zmień nazwę", "Revoke" : "Cofnij", "Wipe device" : "Wyczyść urządzenie", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Unieważnienie tego tokena uniemożliwi czyszczenie urządzenia, jeśli jeszcze nie zostało rozpoczęte.", + "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "Unieważnienie tego tokena uniemożliwi czyszczenie urządzenia, jeśli jeszcze nie zostało rozpoczęte.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -490,6 +490,7 @@ OC.L10N.register( "Trusted" : "Zaufany", "Public" : "Publiczny", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalowanie i aktualizowanie aplikacji za pośrednictwem sklepu z aplikacjami lub Udostępnionej Chmury Federacyjnej", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Unieważnienie tego tokena uniemożliwi czyszczenie urządzenia, jeśli jeszcze nie zostało rozpoczęte.", "Nextcloud iOS app" : "Aplikacja Nextcloud iOS", "Nextcloud Android app" : "Aplikacja Nextcloud Android", "Nextcloud Talk for iOS" : "Nextcloud Talk dla iOS", diff --git a/apps/settings/l10n/pl.json b/apps/settings/l10n/pl.json index f69b944dbc0..65ff817fae0 100644 --- a/apps/settings/l10n/pl.json +++ b/apps/settings/l10n/pl.json @@ -181,7 +181,7 @@ "Rename" : "Zmień nazwę", "Revoke" : "Cofnij", "Wipe device" : "Wyczyść urządzenie", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Unieważnienie tego tokena uniemożliwi czyszczenie urządzenia, jeśli jeszcze nie zostało rozpoczęte.", + "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "Unieważnienie tego tokena uniemożliwi czyszczenie urządzenia, jeśli jeszcze nie zostało rozpoczęte.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -488,6 +488,7 @@ "Trusted" : "Zaufany", "Public" : "Publiczny", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalowanie i aktualizowanie aplikacji za pośrednictwem sklepu z aplikacjami lub Udostępnionej Chmury Federacyjnej", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Unieważnienie tego tokena uniemożliwi czyszczenie urządzenia, jeśli jeszcze nie zostało rozpoczęte.", "Nextcloud iOS app" : "Aplikacja Nextcloud iOS", "Nextcloud Android app" : "Aplikacja Nextcloud Android", "Nextcloud Talk for iOS" : "Nextcloud Talk dla iOS", diff --git a/apps/settings/l10n/pt_BR.js b/apps/settings/l10n/pt_BR.js index 0059a16f7cb..fb217baf69b 100644 --- a/apps/settings/l10n/pt_BR.js +++ b/apps/settings/l10n/pt_BR.js @@ -183,7 +183,7 @@ OC.L10N.register( "Rename" : "Renomear", "Revoke" : "Revogar", "Wipe device" : "Limpar o dispositivo", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "A revogação deste token pode impedir a limpeza do seu dispositivo, caso ainda não tenha sido iniciada.", + "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "A revogação deste token pode impedir a limpeza do seu dispositivo, caso ainda não tenha sido iniciada.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -490,6 +490,7 @@ OC.L10N.register( "Trusted" : "Confiável", "Public" : "Público", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalando e atualizando aplicativos via loja de aplicativos ou Nuvem Compartilhada Federada", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "A revogação deste token pode impedir a limpeza do seu dispositivo, caso ainda não tenha sido iniciada.", "Nextcloud iOS app" : "Aplicativo iOS Nextcloud", "Nextcloud Android app" : "Aplicativo Android Nextcloud", "Nextcloud Talk for iOS" : "Nextcloud Talk para iOS", diff --git a/apps/settings/l10n/pt_BR.json b/apps/settings/l10n/pt_BR.json index 3ab1a69dc29..b0e25c97ff5 100644 --- a/apps/settings/l10n/pt_BR.json +++ b/apps/settings/l10n/pt_BR.json @@ -181,7 +181,7 @@ "Rename" : "Renomear", "Revoke" : "Revogar", "Wipe device" : "Limpar o dispositivo", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "A revogação deste token pode impedir a limpeza do seu dispositivo, caso ainda não tenha sido iniciada.", + "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "A revogação deste token pode impedir a limpeza do seu dispositivo, caso ainda não tenha sido iniciada.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -488,6 +488,7 @@ "Trusted" : "Confiável", "Public" : "Público", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalando e atualizando aplicativos via loja de aplicativos ou Nuvem Compartilhada Federada", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "A revogação deste token pode impedir a limpeza do seu dispositivo, caso ainda não tenha sido iniciada.", "Nextcloud iOS app" : "Aplicativo iOS Nextcloud", "Nextcloud Android app" : "Aplicativo Android Nextcloud", "Nextcloud Talk for iOS" : "Nextcloud Talk para iOS", diff --git a/apps/settings/l10n/ru.js b/apps/settings/l10n/ru.js index c5c2b13aaf8..ca89b682cdf 100644 --- a/apps/settings/l10n/ru.js +++ b/apps/settings/l10n/ru.js @@ -183,7 +183,7 @@ OC.L10N.register( "Rename" : "Переименовать", "Revoke" : "Отозвать", "Wipe device" : "Удалить данные с устройства", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Если удаление данных с устройства не было инициировано, отзыв токена может сделать это невозможным.", + "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "Отзыв токена может привести к невозможности удаления данных с устройства, если такое удаление ещё не запущено.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -250,9 +250,9 @@ OC.L10N.register( "Your organisation" : "Ваша организация", "Unable to update organisation" : "Не удалось изменить организацию", "Edit your Profile visibility" : "Изменить видимость профиля", - "Enable Profile" : "Включить Профиль", - "Unable to update profile enabled state" : "Не удалось обновить состояние \"Профиль включен\"", - "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected." : "В вашем профиле соблюдаются более строгие настройки видимости или области действия. Например, если для видимости установлено значение \"Видно всем\", а для области действия установлено значение \"Скрыто\", \"Скрыто\" соблюдается.", + "Enable Profile" : "Использовать профиль", + "Unable to update profile enabled state" : "Не удалось обновить состояние профиля", + "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected." : "В профиле устанавливаются более строгие настройки видимости или области действия. Например, если для видимости установлено значение «Видно всем», а для области действия установлено значение «Скрыто», будет использоваться значение «Скрыто».", "{displayId}" : "{displayId}", "Unable to update visibility of {displayId}" : "Не удалось изменить видимость {displayId}", "Your role" : "Ваша роль", @@ -336,7 +336,7 @@ OC.L10N.register( "Please confirm the group removal " : "Подтвердите удаление группы", "Address" : "Адрес", "Avatar" : "Аватар", - "About" : "О вас", + "About" : "О себе", "Full name" : "Полное имя", "Additional email" : "Доп. адрес эл. почты", "Headline" : "Заголовок", @@ -345,9 +345,9 @@ OC.L10N.register( "Profile" : "Профиль", "Role" : "Роль", "Twitter" : "Twitter", - "Website" : "Адрес в интернете", + "Website" : "Адрес сайта", "Profile visibility" : "Видимость профиля", - "Not available as this property is required for core functionality including file sharing and calendar invitations" : "Недоступно, так как это свойство требуется для основных функций, включая общий доступ к файлам и приглашения в календарь", + "Not available as this property is required for core functionality including file sharing and calendar invitations" : "Заданный параметр не может быть использован, так как его используют основные функции, такие как совместный доступ к файлам и приглашения к событиям из календаря", "Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions" : "Недоступно, так как публикация пользовательских данных на сервере поиска запрещена, обратитесь к системному администратору, если у вас возникнут какие-либо вопросы", "Show to everyone" : "Видим для всех", "Show to logged in users only" : "Видим только для пользователей, вошедших в систему", @@ -487,6 +487,7 @@ OC.L10N.register( "Trusted" : "Доверенный", "Public" : "Открытый", "installing and updating apps via the app store or Federated Cloud Sharing" : "установка и обновление приложений через магазин приложений или федерацию облачных хранилищ", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Если удаление данных с устройства не было инициировано, отзыв токена может сделать это невозможным.", "Nextcloud iOS app" : "Приложение Nextcloud для iOS", "Nextcloud Android app" : "Приложение Nextcloud для Android", "Nextcloud Talk for iOS" : "Nextcloud Talk для iOS", diff --git a/apps/settings/l10n/ru.json b/apps/settings/l10n/ru.json index aa2a52cb234..cabb4a28efb 100644 --- a/apps/settings/l10n/ru.json +++ b/apps/settings/l10n/ru.json @@ -181,7 +181,7 @@ "Rename" : "Переименовать", "Revoke" : "Отозвать", "Wipe device" : "Удалить данные с устройства", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Если удаление данных с устройства не было инициировано, отзыв токена может сделать это невозможным.", + "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "Отзыв токена может привести к невозможности удаления данных с устройства, если такое удаление ещё не запущено.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -248,9 +248,9 @@ "Your organisation" : "Ваша организация", "Unable to update organisation" : "Не удалось изменить организацию", "Edit your Profile visibility" : "Изменить видимость профиля", - "Enable Profile" : "Включить Профиль", - "Unable to update profile enabled state" : "Не удалось обновить состояние \"Профиль включен\"", - "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected." : "В вашем профиле соблюдаются более строгие настройки видимости или области действия. Например, если для видимости установлено значение \"Видно всем\", а для области действия установлено значение \"Скрыто\", \"Скрыто\" соблюдается.", + "Enable Profile" : "Использовать профиль", + "Unable to update profile enabled state" : "Не удалось обновить состояние профиля", + "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected." : "В профиле устанавливаются более строгие настройки видимости или области действия. Например, если для видимости установлено значение «Видно всем», а для области действия установлено значение «Скрыто», будет использоваться значение «Скрыто».", "{displayId}" : "{displayId}", "Unable to update visibility of {displayId}" : "Не удалось изменить видимость {displayId}", "Your role" : "Ваша роль", @@ -334,7 +334,7 @@ "Please confirm the group removal " : "Подтвердите удаление группы", "Address" : "Адрес", "Avatar" : "Аватар", - "About" : "О вас", + "About" : "О себе", "Full name" : "Полное имя", "Additional email" : "Доп. адрес эл. почты", "Headline" : "Заголовок", @@ -343,9 +343,9 @@ "Profile" : "Профиль", "Role" : "Роль", "Twitter" : "Twitter", - "Website" : "Адрес в интернете", + "Website" : "Адрес сайта", "Profile visibility" : "Видимость профиля", - "Not available as this property is required for core functionality including file sharing and calendar invitations" : "Недоступно, так как это свойство требуется для основных функций, включая общий доступ к файлам и приглашения в календарь", + "Not available as this property is required for core functionality including file sharing and calendar invitations" : "Заданный параметр не может быть использован, так как его используют основные функции, такие как совместный доступ к файлам и приглашения к событиям из календаря", "Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions" : "Недоступно, так как публикация пользовательских данных на сервере поиска запрещена, обратитесь к системному администратору, если у вас возникнут какие-либо вопросы", "Show to everyone" : "Видим для всех", "Show to logged in users only" : "Видим только для пользователей, вошедших в систему", @@ -485,6 +485,7 @@ "Trusted" : "Доверенный", "Public" : "Открытый", "installing and updating apps via the app store or Federated Cloud Sharing" : "установка и обновление приложений через магазин приложений или федерацию облачных хранилищ", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Если удаление данных с устройства не было инициировано, отзыв токена может сделать это невозможным.", "Nextcloud iOS app" : "Приложение Nextcloud для iOS", "Nextcloud Android app" : "Приложение Nextcloud для Android", "Nextcloud Talk for iOS" : "Nextcloud Talk для iOS", diff --git a/apps/settings/l10n/sc.js b/apps/settings/l10n/sc.js index 0423766cb0c..19b1680ad92 100644 --- a/apps/settings/l10n/sc.js +++ b/apps/settings/l10n/sc.js @@ -179,7 +179,6 @@ OC.L10N.register( "Rename" : "Torra a numenare", "Revoke" : "Rèvoca", "Wipe device" : "Cantzella dispositivu", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Sa rèvoca de custu token diat pòdere impedire sa cantzelladura de su dispositivu si no est cumintzada ancora.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -440,6 +439,7 @@ OC.L10N.register( "Trusted" : "Fidadu", "Public" : "Pùblicu", "installing and updating apps via the app store or Federated Cloud Sharing" : "installatzione e s'agiornamentu de is aplicatziones tràmite sa butega de is aplicatziones o sa cumpartzidura in sa nue federada", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Sa rèvoca de custu token diat pòdere impedire sa cantzelladura de su dispositivu si no est cumintzada ancora.", "Nextcloud iOS app" : "Aplicatzione Nextcloud pro iOS", "Nextcloud Android app" : "Aplicatzione Nextcloud pro Android", "Nextcloud Talk for iOS" : "Nextcloud Talk pro iOS", diff --git a/apps/settings/l10n/sc.json b/apps/settings/l10n/sc.json index cb7325886e9..dfe876e278f 100644 --- a/apps/settings/l10n/sc.json +++ b/apps/settings/l10n/sc.json @@ -177,7 +177,6 @@ "Rename" : "Torra a numenare", "Revoke" : "Rèvoca", "Wipe device" : "Cantzella dispositivu", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Sa rèvoca de custu token diat pòdere impedire sa cantzelladura de su dispositivu si no est cumintzada ancora.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -438,6 +437,7 @@ "Trusted" : "Fidadu", "Public" : "Pùblicu", "installing and updating apps via the app store or Federated Cloud Sharing" : "installatzione e s'agiornamentu de is aplicatziones tràmite sa butega de is aplicatziones o sa cumpartzidura in sa nue federada", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Sa rèvoca de custu token diat pòdere impedire sa cantzelladura de su dispositivu si no est cumintzada ancora.", "Nextcloud iOS app" : "Aplicatzione Nextcloud pro iOS", "Nextcloud Android app" : "Aplicatzione Nextcloud pro Android", "Nextcloud Talk for iOS" : "Nextcloud Talk pro iOS", diff --git a/apps/settings/l10n/sk.js b/apps/settings/l10n/sk.js index 4883cdda586..6261cd4208a 100644 --- a/apps/settings/l10n/sk.js +++ b/apps/settings/l10n/sk.js @@ -183,7 +183,7 @@ OC.L10N.register( "Rename" : "Premenovať", "Revoke" : "Odvolať", "Wipe device" : "Vymazať obsah zariadenia", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Ostránenie tohto tokenu môže zabrániť vymazaniu vášho zariadenia, ak sa ešte nezačalo mazanie.", + "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "Ostránenie tohto tokenu môže zabrániť vymazaniu vášho zariadenia, ak sa ešte nezačalo mazanie.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -490,6 +490,7 @@ OC.L10N.register( "Trusted" : "Dôveryhodné", "Public" : "Verejné", "installing and updating apps via the app store or Federated Cloud Sharing" : "Inštalovať a aktualizovať aplikácia pomocou obchodu alebo Zdieľaného Cloudového Úložiska", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Ostránenie tohto tokenu môže zabrániť vymazaniu vášho zariadenia, ak sa ešte nezačalo mazanie.", "Nextcloud iOS app" : "Apka Nextcloud pre iOS", "Nextcloud Android app" : "Apka Nextcloud pre Android", "Nextcloud Talk for iOS" : "Nextcloud Talk pre iOS", diff --git a/apps/settings/l10n/sk.json b/apps/settings/l10n/sk.json index b622931a8cb..826c0d83633 100644 --- a/apps/settings/l10n/sk.json +++ b/apps/settings/l10n/sk.json @@ -181,7 +181,7 @@ "Rename" : "Premenovať", "Revoke" : "Odvolať", "Wipe device" : "Vymazať obsah zariadenia", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Ostránenie tohto tokenu môže zabrániť vymazaniu vášho zariadenia, ak sa ešte nezačalo mazanie.", + "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "Ostránenie tohto tokenu môže zabrániť vymazaniu vášho zariadenia, ak sa ešte nezačalo mazanie.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -488,6 +488,7 @@ "Trusted" : "Dôveryhodné", "Public" : "Verejné", "installing and updating apps via the app store or Federated Cloud Sharing" : "Inštalovať a aktualizovať aplikácia pomocou obchodu alebo Zdieľaného Cloudového Úložiska", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Ostránenie tohto tokenu môže zabrániť vymazaniu vášho zariadenia, ak sa ešte nezačalo mazanie.", "Nextcloud iOS app" : "Apka Nextcloud pre iOS", "Nextcloud Android app" : "Apka Nextcloud pre Android", "Nextcloud Talk for iOS" : "Nextcloud Talk pre iOS", diff --git a/apps/settings/l10n/sl.js b/apps/settings/l10n/sl.js index 8f1d1d11be3..635cb2e0c1f 100644 --- a/apps/settings/l10n/sl.js +++ b/apps/settings/l10n/sl.js @@ -182,7 +182,6 @@ OC.L10N.register( "Rename" : "Preimenuj", "Revoke" : "Prekliči", "Wipe device" : "Varnostno izbriši napravo", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Obnovitev tega žetona lahko prepreči varnostno brisanje naprave, če se to še ni začelo.", "Internet Explorer" : "Internet Explorer", "Edge" : "Microsoft Edge", "Firefox" : "Mozilla Firefox", @@ -478,6 +477,7 @@ OC.L10N.register( "Trusted" : "Varni strežniki", "Public" : "Javno", "installing and updating apps via the app store or Federated Cloud Sharing" : "nameščanje in posodabljanje programov z uporabo programske zbirke ali zveznega oblaka", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Obnovitev tega žetona lahko prepreči varnostno brisanje naprave, če se to še ni začelo.", "Nextcloud iOS app" : "Program Nextcloud iOS", "Nextcloud Android app" : "Program Nextcloud Android", "Nextcloud Talk for iOS" : "Nextcloud Talk za iOS", diff --git a/apps/settings/l10n/sl.json b/apps/settings/l10n/sl.json index 26249414cb5..c5346fbdb1b 100644 --- a/apps/settings/l10n/sl.json +++ b/apps/settings/l10n/sl.json @@ -180,7 +180,6 @@ "Rename" : "Preimenuj", "Revoke" : "Prekliči", "Wipe device" : "Varnostno izbriši napravo", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Obnovitev tega žetona lahko prepreči varnostno brisanje naprave, če se to še ni začelo.", "Internet Explorer" : "Internet Explorer", "Edge" : "Microsoft Edge", "Firefox" : "Mozilla Firefox", @@ -476,6 +475,7 @@ "Trusted" : "Varni strežniki", "Public" : "Javno", "installing and updating apps via the app store or Federated Cloud Sharing" : "nameščanje in posodabljanje programov z uporabo programske zbirke ali zveznega oblaka", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Obnovitev tega žetona lahko prepreči varnostno brisanje naprave, če se to še ni začelo.", "Nextcloud iOS app" : "Program Nextcloud iOS", "Nextcloud Android app" : "Program Nextcloud Android", "Nextcloud Talk for iOS" : "Nextcloud Talk za iOS", diff --git a/apps/settings/l10n/sr.js b/apps/settings/l10n/sr.js index 8802b8dd0e3..74c9130d9af 100644 --- a/apps/settings/l10n/sr.js +++ b/apps/settings/l10n/sr.js @@ -164,7 +164,6 @@ OC.L10N.register( "Rename" : "Преименуј", "Revoke" : "Повуци", "Wipe device" : "Очисти уређај", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Повлачење овог токена може онемогућити удаљено брисање овог уређаја, ако оно још није започето.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -395,6 +394,7 @@ OC.L10N.register( "Trusted" : "Од поверења", "Public" : "Јавно", "installing and updating apps via the app store or Federated Cloud Sharing" : "Инсталирање и ажурирање апликација кроз продавницу или здруженом дељењу у облаку", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Повлачење овог токена може онемогућити удаљено брисање овог уређаја, ако оно још није започето.", "Nextcloud iOS app" : "Некстклауд iOS апликација", "Nextcloud Android app" : "Некстклауд Андроид апликација", "Nextcloud Talk for iOS" : "Nextcloud Talk за iOS", diff --git a/apps/settings/l10n/sr.json b/apps/settings/l10n/sr.json index 9ae08c70e5a..e3c04b4e54b 100644 --- a/apps/settings/l10n/sr.json +++ b/apps/settings/l10n/sr.json @@ -162,7 +162,6 @@ "Rename" : "Преименуј", "Revoke" : "Повуци", "Wipe device" : "Очисти уређај", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Повлачење овог токена може онемогућити удаљено брисање овог уређаја, ако оно још није започето.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -393,6 +392,7 @@ "Trusted" : "Од поверења", "Public" : "Јавно", "installing and updating apps via the app store or Federated Cloud Sharing" : "Инсталирање и ажурирање апликација кроз продавницу или здруженом дељењу у облаку", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Повлачење овог токена може онемогућити удаљено брисање овог уређаја, ако оно још није започето.", "Nextcloud iOS app" : "Некстклауд iOS апликација", "Nextcloud Android app" : "Некстклауд Андроид апликација", "Nextcloud Talk for iOS" : "Nextcloud Talk за iOS", diff --git a/apps/settings/l10n/sv.js b/apps/settings/l10n/sv.js index b6024ec8295..a462f499f12 100644 --- a/apps/settings/l10n/sv.js +++ b/apps/settings/l10n/sv.js @@ -183,7 +183,6 @@ OC.L10N.register( "Rename" : "Byt namn", "Revoke" : "Återkalla", "Wipe device" : "Rensa enhet", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Återkallning kan förhindra att enheten rensas om inte rensningen redan har startat.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -486,6 +485,7 @@ OC.L10N.register( "Trusted" : "Betrodd", "Public" : "Offentlig", "installing and updating apps via the app store or Federated Cloud Sharing" : "installerar och uppdaterar appar via appbutiken eller federerad molndelning", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Återkallning kan förhindra att enheten rensas om inte rensningen redan har startat.", "Nextcloud iOS app" : "Nextcloud iOS-app", "Nextcloud Android app" : "Nextcloud Android-app", "Nextcloud Talk for iOS" : "Nextcloud Talk för iOS", diff --git a/apps/settings/l10n/sv.json b/apps/settings/l10n/sv.json index bb980ce0398..5a26004012d 100644 --- a/apps/settings/l10n/sv.json +++ b/apps/settings/l10n/sv.json @@ -181,7 +181,6 @@ "Rename" : "Byt namn", "Revoke" : "Återkalla", "Wipe device" : "Rensa enhet", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Återkallning kan förhindra att enheten rensas om inte rensningen redan har startat.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -484,6 +483,7 @@ "Trusted" : "Betrodd", "Public" : "Offentlig", "installing and updating apps via the app store or Federated Cloud Sharing" : "installerar och uppdaterar appar via appbutiken eller federerad molndelning", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Återkallning kan förhindra att enheten rensas om inte rensningen redan har startat.", "Nextcloud iOS app" : "Nextcloud iOS-app", "Nextcloud Android app" : "Nextcloud Android-app", "Nextcloud Talk for iOS" : "Nextcloud Talk för iOS", diff --git a/apps/settings/l10n/th.js b/apps/settings/l10n/th.js index dfd73f449e2..89efb65fc7c 100644 --- a/apps/settings/l10n/th.js +++ b/apps/settings/l10n/th.js @@ -115,7 +115,6 @@ OC.L10N.register( "Rename" : "เปลี่ยนชื่อ", "Revoke" : "เพิกถอน", "Wipe device" : "ล้างอุปกรณ์", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "การเพิกถอนโทเค็นนี้อาจทำให้ไม่สามารถล้างอุปกรณ์ของคุณได้หากการล้างยังไม่เริ่ม", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -330,6 +329,7 @@ OC.L10N.register( "Trusted" : "เชื่อถือแล้ว", "Public" : "สาธารณะ", "installing and updating apps via the app store or Federated Cloud Sharing" : "กำลังติดตั้งและอัพเดทแอพพลิเคชันผ่าแอพสโตร์หรือคลาวด์ในเครือ", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "การเพิกถอนโทเค็นนี้อาจทำให้ไม่สามารถล้างอุปกรณ์ของคุณได้หากการล้างยังไม่เริ่ม", "Nextcloud iOS app" : "แอป Nextcloud สำหรับ iOS", "Nextcloud Android app" : "แอป Nextcloud สำหรับ Android", "Nextcloud Talk for iOS" : "Nextcloud Talk สำหรับ iOS", diff --git a/apps/settings/l10n/th.json b/apps/settings/l10n/th.json index 0993a57ea81..d87d811818f 100644 --- a/apps/settings/l10n/th.json +++ b/apps/settings/l10n/th.json @@ -113,7 +113,6 @@ "Rename" : "เปลี่ยนชื่อ", "Revoke" : "เพิกถอน", "Wipe device" : "ล้างอุปกรณ์", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "การเพิกถอนโทเค็นนี้อาจทำให้ไม่สามารถล้างอุปกรณ์ของคุณได้หากการล้างยังไม่เริ่ม", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -328,6 +327,7 @@ "Trusted" : "เชื่อถือแล้ว", "Public" : "สาธารณะ", "installing and updating apps via the app store or Federated Cloud Sharing" : "กำลังติดตั้งและอัพเดทแอพพลิเคชันผ่าแอพสโตร์หรือคลาวด์ในเครือ", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "การเพิกถอนโทเค็นนี้อาจทำให้ไม่สามารถล้างอุปกรณ์ของคุณได้หากการล้างยังไม่เริ่ม", "Nextcloud iOS app" : "แอป Nextcloud สำหรับ iOS", "Nextcloud Android app" : "แอป Nextcloud สำหรับ Android", "Nextcloud Talk for iOS" : "Nextcloud Talk สำหรับ iOS", diff --git a/apps/settings/l10n/tr.js b/apps/settings/l10n/tr.js index 3d909476def..9d75838a859 100644 --- a/apps/settings/l10n/tr.js +++ b/apps/settings/l10n/tr.js @@ -183,7 +183,6 @@ OC.L10N.register( "Rename" : "Yeniden adlandır", "Revoke" : "Geri al", "Wipe device" : "Aygıtı sil", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Silme işlemi henüz başlamamış ise bu kodun geri çekilmesi aygıtınızın silinmesini engelleyebilir.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -490,6 +489,7 @@ OC.L10N.register( "Trusted" : "Güvenilen", "Public" : "Herkese açık", "installing and updating apps via the app store or Federated Cloud Sharing" : "Uygulama mağazası ve Birleşik Bulut Paylaşımından uygulama kurma ve güncelleme", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Silme işlemi henüz başlamamış ise bu kodun geri çekilmesi aygıtınızın silinmesini engelleyebilir.", "Nextcloud iOS app" : "Nextcloud iOS uygulaması", "Nextcloud Android app" : "Nextcloud Android uygulaması", "Nextcloud Talk for iOS" : "iOS için Nextcloud Talk", diff --git a/apps/settings/l10n/tr.json b/apps/settings/l10n/tr.json index 965197df8f0..7bd606ce7bf 100644 --- a/apps/settings/l10n/tr.json +++ b/apps/settings/l10n/tr.json @@ -181,7 +181,6 @@ "Rename" : "Yeniden adlandır", "Revoke" : "Geri al", "Wipe device" : "Aygıtı sil", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Silme işlemi henüz başlamamış ise bu kodun geri çekilmesi aygıtınızın silinmesini engelleyebilir.", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -488,6 +487,7 @@ "Trusted" : "Güvenilen", "Public" : "Herkese açık", "installing and updating apps via the app store or Federated Cloud Sharing" : "Uygulama mağazası ve Birleşik Bulut Paylaşımından uygulama kurma ve güncelleme", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Silme işlemi henüz başlamamış ise bu kodun geri çekilmesi aygıtınızın silinmesini engelleyebilir.", "Nextcloud iOS app" : "Nextcloud iOS uygulaması", "Nextcloud Android app" : "Nextcloud Android uygulaması", "Nextcloud Talk for iOS" : "iOS için Nextcloud Talk", diff --git a/apps/settings/l10n/vi.js b/apps/settings/l10n/vi.js index 4eb90530986..6a034f618cb 100644 --- a/apps/settings/l10n/vi.js +++ b/apps/settings/l10n/vi.js @@ -141,7 +141,6 @@ OC.L10N.register( "Rename" : "Đổi tên", "Revoke" : "Thu hồi", "Wipe device" : "Xóa thiết bị", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Việc thu hồi tín chỉ này có thể ngăn việc xóa thiết bị của bạn nếu thiết bị chưa bắt đầu xóa.", "This session" : "Phiên này", "Device" : "Thiết bị", "Last activity" : "Hoạt động cuối", @@ -252,6 +251,7 @@ OC.L10N.register( "Change password" : "Đổi mật khẩu", "Public" : "Công khai", "installing and updating apps via the app store or Federated Cloud Sharing" : "Đang cài đặt và cập nhật ứng dụng từ app store hoặc Federated Cloud Sharing", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Việc thu hồi tín chỉ này có thể ngăn việc xóa thiết bị của bạn nếu thiết bị chưa bắt đầu xóa.", "Add user in group" : "Thêm người dùng vào nhóm", "Close" : "Đóng", "All languages" : "Tất cả ngôn ngữ", diff --git a/apps/settings/l10n/vi.json b/apps/settings/l10n/vi.json index eafaf79f682..443e4ea2dd0 100644 --- a/apps/settings/l10n/vi.json +++ b/apps/settings/l10n/vi.json @@ -139,7 +139,6 @@ "Rename" : "Đổi tên", "Revoke" : "Thu hồi", "Wipe device" : "Xóa thiết bị", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Việc thu hồi tín chỉ này có thể ngăn việc xóa thiết bị của bạn nếu thiết bị chưa bắt đầu xóa.", "This session" : "Phiên này", "Device" : "Thiết bị", "Last activity" : "Hoạt động cuối", @@ -250,6 +249,7 @@ "Change password" : "Đổi mật khẩu", "Public" : "Công khai", "installing and updating apps via the app store or Federated Cloud Sharing" : "Đang cài đặt và cập nhật ứng dụng từ app store hoặc Federated Cloud Sharing", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "Việc thu hồi tín chỉ này có thể ngăn việc xóa thiết bị của bạn nếu thiết bị chưa bắt đầu xóa.", "Add user in group" : "Thêm người dùng vào nhóm", "Close" : "Đóng", "All languages" : "Tất cả ngôn ngữ", diff --git a/apps/settings/l10n/zh_CN.js b/apps/settings/l10n/zh_CN.js index 9fece971e3e..dddb0065d05 100644 --- a/apps/settings/l10n/zh_CN.js +++ b/apps/settings/l10n/zh_CN.js @@ -183,7 +183,6 @@ OC.L10N.register( "Rename" : "重命名", "Revoke" : "撤销", "Wipe device" : "擦除设备", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "如果擦除操作还未开始,撤销此令牌可能会妨碍对您设备的擦除操作", "Internet Explorer" : "IE 浏览器", "Edge" : "Edge 浏览器", "Firefox" : "火狐浏览器", @@ -490,6 +489,7 @@ OC.L10N.register( "Trusted" : "受信任", "Public" : "公开", "installing and updating apps via the app store or Federated Cloud Sharing" : "通过应用程序商店或联合云共享安装和更新应用程序", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "如果擦除操作还未开始,撤销此令牌可能会妨碍对您设备的擦除操作", "Nextcloud iOS app" : "Nextcloud iOS 应用", "Nextcloud Android app" : "Nextcloud Android 应用", "Nextcloud Talk for iOS" : "Nextcloud Talk for iOS", diff --git a/apps/settings/l10n/zh_CN.json b/apps/settings/l10n/zh_CN.json index 4e6ef22449c..0dfc0307d73 100644 --- a/apps/settings/l10n/zh_CN.json +++ b/apps/settings/l10n/zh_CN.json @@ -181,7 +181,6 @@ "Rename" : "重命名", "Revoke" : "撤销", "Wipe device" : "擦除设备", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "如果擦除操作还未开始,撤销此令牌可能会妨碍对您设备的擦除操作", "Internet Explorer" : "IE 浏览器", "Edge" : "Edge 浏览器", "Firefox" : "火狐浏览器", @@ -488,6 +487,7 @@ "Trusted" : "受信任", "Public" : "公开", "installing and updating apps via the app store or Federated Cloud Sharing" : "通过应用程序商店或联合云共享安装和更新应用程序", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "如果擦除操作还未开始,撤销此令牌可能会妨碍对您设备的擦除操作", "Nextcloud iOS app" : "Nextcloud iOS 应用", "Nextcloud Android app" : "Nextcloud Android 应用", "Nextcloud Talk for iOS" : "Nextcloud Talk for iOS", diff --git a/apps/settings/l10n/zh_HK.js b/apps/settings/l10n/zh_HK.js index ae9a0cd7f97..a8b612d29b9 100644 --- a/apps/settings/l10n/zh_HK.js +++ b/apps/settings/l10n/zh_HK.js @@ -183,7 +183,7 @@ OC.L10N.register( "Rename" : "重新命名", "Revoke" : "撤銷", "Wipe device" : "抹除裝置", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "如果還沒開始抹除,則撤銷此權杖可能會導致無法抹除您的裝置。", + "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "如果還沒開始抹除,則撤銷此權杖可能會導致無法抹除您的裝置。", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -490,6 +490,7 @@ OC.L10N.register( "Trusted" : "受信任", "Public" : "公開", "installing and updating apps via the app store or Federated Cloud Sharing" : "透過應用程式中心或是聯盟式雲端分享來安裝、更新應用程式", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "如果還沒開始抹除,則撤銷此權杖可能會導致無法抹除您的裝置。", "Nextcloud iOS app" : "Nextcloud iOS 應用程式", "Nextcloud Android app" : "Nextcloud Android 應用程式", "Nextcloud Talk for iOS" : "iOS 版 Nextcloud Talk", diff --git a/apps/settings/l10n/zh_HK.json b/apps/settings/l10n/zh_HK.json index bd041933154..ac7ee1ada19 100644 --- a/apps/settings/l10n/zh_HK.json +++ b/apps/settings/l10n/zh_HK.json @@ -181,7 +181,7 @@ "Rename" : "重新命名", "Revoke" : "撤銷", "Wipe device" : "抹除裝置", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "如果還沒開始抹除,則撤銷此權杖可能會導致無法抹除您的裝置。", + "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "如果還沒開始抹除,則撤銷此權杖可能會導致無法抹除您的裝置。", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -488,6 +488,7 @@ "Trusted" : "受信任", "Public" : "公開", "installing and updating apps via the app store or Federated Cloud Sharing" : "透過應用程式中心或是聯盟式雲端分享來安裝、更新應用程式", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "如果還沒開始抹除,則撤銷此權杖可能會導致無法抹除您的裝置。", "Nextcloud iOS app" : "Nextcloud iOS 應用程式", "Nextcloud Android app" : "Nextcloud Android 應用程式", "Nextcloud Talk for iOS" : "iOS 版 Nextcloud Talk", diff --git a/apps/settings/l10n/zh_TW.js b/apps/settings/l10n/zh_TW.js index bf0383900d6..f8c2ecc4883 100644 --- a/apps/settings/l10n/zh_TW.js +++ b/apps/settings/l10n/zh_TW.js @@ -183,7 +183,6 @@ OC.L10N.register( "Rename" : "重新命名", "Revoke" : "撤銷", "Wipe device" : "抹除裝置", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "如果還沒開始抹除,則撤銷此權杖可能會導致無法抹除您的裝置。", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -490,6 +489,7 @@ OC.L10N.register( "Trusted" : "受信任", "Public" : "公開", "installing and updating apps via the app store or Federated Cloud Sharing" : "透過應用程式中心或是聯盟式雲端分享來安裝、更新應用程式", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "如果還沒開始抹除,則撤銷此權杖可能會導致無法抹除您的裝置。", "Nextcloud iOS app" : "Nextcloud iOS 應用程式", "Nextcloud Android app" : "Nextcloud Android 應用程式", "Nextcloud Talk for iOS" : "iOS 版 Nextcloud Talk", diff --git a/apps/settings/l10n/zh_TW.json b/apps/settings/l10n/zh_TW.json index 263721952c4..b66abddc721 100644 --- a/apps/settings/l10n/zh_TW.json +++ b/apps/settings/l10n/zh_TW.json @@ -181,7 +181,6 @@ "Rename" : "重新命名", "Revoke" : "撤銷", "Wipe device" : "抹除裝置", - "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "如果還沒開始抹除,則撤銷此權杖可能會導致無法抹除您的裝置。", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", "Firefox" : "Firefox", @@ -488,6 +487,7 @@ "Trusted" : "受信任", "Public" : "公開", "installing and updating apps via the app store or Federated Cloud Sharing" : "透過應用程式中心或是聯盟式雲端分享來安裝、更新應用程式", + "Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet." : "如果還沒開始抹除,則撤銷此權杖可能會導致無法抹除您的裝置。", "Nextcloud iOS app" : "Nextcloud iOS 應用程式", "Nextcloud Android app" : "Nextcloud Android 應用程式", "Nextcloud Talk for iOS" : "iOS 版 Nextcloud Talk", diff --git a/apps/settings/src/components/AuthToken.vue b/apps/settings/src/components/AuthToken.vue index ce9d59936b9..e599be9c671 100644 --- a/apps/settings/src/components/AuthToken.vue +++ b/apps/settings/src/components/AuthToken.vue @@ -76,7 +76,7 @@ icon="icon-delete" :title="t('settings', 'Revoke')" @click.stop.prevent="revoke"> - {{ t('settings', 'Revoking this token might prevent the wiping of your device if it hasn\'t started the wipe yet.') }} + {{ t('settings', 'Revoking this token might prevent the wiping of your device if it has not started the wipe yet.') }} </ActionButton> </template> </Actions> diff --git a/apps/sharebymail/l10n/pt_BR.js b/apps/sharebymail/l10n/pt_BR.js index af8c11bd523..17d2b6e74c0 100644 --- a/apps/sharebymail/l10n/pt_BR.js +++ b/apps/sharebymail/l10n/pt_BR.js @@ -27,6 +27,7 @@ OC.L10N.register( "Share by mail" : "Compartilhamento por e-mail", "Sharing %1$s failed, because this item is already shared with user %2$s" : "Compartilhamento de %1$s falhou, porque este item já está compartilhado com o usuário%2$s", "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Não pudemos enviar a você a senha auto-gerada. Defina um e-mail válido em sua configuração e tente novamente.", + "Failed to send share by email. Got an invalid email address" : "Compartilhamento por email falhou. Endereço de email inválido", "Failed to send share by email" : "Falha ao enviar compartilhamento via e-mail", "%1$s shared »%2$s« with you" : "%1$s compartilhou »%2$s« com você", "%1$s shared »%2$s« with you." : "%1$s compartilhou »%2$s« com você.", diff --git a/apps/sharebymail/l10n/pt_BR.json b/apps/sharebymail/l10n/pt_BR.json index 0b227250790..9a3b11757c4 100644 --- a/apps/sharebymail/l10n/pt_BR.json +++ b/apps/sharebymail/l10n/pt_BR.json @@ -25,6 +25,7 @@ "Share by mail" : "Compartilhamento por e-mail", "Sharing %1$s failed, because this item is already shared with user %2$s" : "Compartilhamento de %1$s falhou, porque este item já está compartilhado com o usuário%2$s", "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Não pudemos enviar a você a senha auto-gerada. Defina um e-mail válido em sua configuração e tente novamente.", + "Failed to send share by email. Got an invalid email address" : "Compartilhamento por email falhou. Endereço de email inválido", "Failed to send share by email" : "Falha ao enviar compartilhamento via e-mail", "%1$s shared »%2$s« with you" : "%1$s compartilhou »%2$s« com você", "%1$s shared »%2$s« with you." : "%1$s compartilhou »%2$s« com você.", diff --git a/apps/updatenotification/l10n/bg.js b/apps/updatenotification/l10n/bg.js index b8c0fe74045..ba00cd69e87 100644 --- a/apps/updatenotification/l10n/bg.js +++ b/apps/updatenotification/l10n/bg.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Проверка на приложенията за съвместими версии", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Моля, уверете се, че в config.php не е зададено <samp>appstoreenabled</samp> на false.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Свързването с магазина за приложения App Store не е възможно или изобщо не са върнати актуализации. Търсете ръчно за актуализации или се уверете, че вашият сървър има достъп до интернет и може да се свърже с App Store.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Всички</strong> приложения имат налична съвместима версия за тази версия на Nextcloud", "View changelog" : "Преглед на списъка с промени", "Enterprise" : "Предприятие", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "За професионална употреба. Осигурява винаги най-новото ниво на корекция, но няма да се актуализира веднага до следващото голямо издание. Тази актуализация се случва, след като Nextcloud GmbH направи допълнително подсилване и тестване за широкомащабни и критични за мисията внедрявания. Този канал е достъпен само за клиенти и доставчици на пакета Nextcloud Enterprise.", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Последната стабилна версия. Подходяща е за ежедневно ползване и се актуализации до последната главна версия.", "Beta" : "Бета", "A pre-release version only for testing new features, not for production environments." : "Версия само за тестване на нови функционалности, която не е подходяща за ползване в производствена среда.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> от приложенията нямат налична съвместима версия за тази версия на Nextcloud ","<strong>%n</strong> от приложенията нямат налична съвместима версия за тази версия на Nextcloud "], "Apps missing updates" : "Приложения без актуализация", "Apps with available updates" : "Приложенията, с налични актуализации", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "След издаването на нова версия обикновено няма да получите веднага известие. Потребителите се известяват на интервали, което може да доведе до пропускане на версия ако се появят проблеми.", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Проверка на приложенията за съвместими актуализации", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Свързването с магазина за приложения не е възможно или няма актуализации. Потърсете ръчно за актуализации или се уверете, че сървъра има връзка с Интернет и може да се свързва с магазина за приложения.", "<strong>All</strong> apps have an update for this version available" : "<strong>Всички</strong> приложения имат актуализация за наличната версия", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> приложение няма актуализация за тази версия","<strong>%n</strong> приложения нямат актуализация за тази версия"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> приложение няма актуализация за тази версия","<strong>%n</strong> приложения нямат актуализация за тази версия"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Всички</strong> приложения имат налична съвместима версия за тази версия на Nextcloud", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> от приложенията нямат налична съвместима версия за тази версия на Nextcloud ","<strong>%n</strong> от приложенията нямат налична съвместима версия за тази версия на Nextcloud "] }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/bg.json b/apps/updatenotification/l10n/bg.json index 7ab74e9bd97..ded40c26565 100644 --- a/apps/updatenotification/l10n/bg.json +++ b/apps/updatenotification/l10n/bg.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Проверка на приложенията за съвместими версии", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Моля, уверете се, че в config.php не е зададено <samp>appstoreenabled</samp> на false.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Свързването с магазина за приложения App Store не е възможно или изобщо не са върнати актуализации. Търсете ръчно за актуализации или се уверете, че вашият сървър има достъп до интернет и може да се свърже с App Store.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Всички</strong> приложения имат налична съвместима версия за тази версия на Nextcloud", "View changelog" : "Преглед на списъка с промени", "Enterprise" : "Предприятие", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "За професионална употреба. Осигурява винаги най-новото ниво на корекция, но няма да се актуализира веднага до следващото голямо издание. Тази актуализация се случва, след като Nextcloud GmbH направи допълнително подсилване и тестване за широкомащабни и критични за мисията внедрявания. Този канал е достъпен само за клиенти и доставчици на пакета Nextcloud Enterprise.", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Последната стабилна версия. Подходяща е за ежедневно ползване и се актуализации до последната главна версия.", "Beta" : "Бета", "A pre-release version only for testing new features, not for production environments." : "Версия само за тестване на нови функционалности, която не е подходяща за ползване в производствена среда.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> от приложенията нямат налична съвместима версия за тази версия на Nextcloud ","<strong>%n</strong> от приложенията нямат налична съвместима версия за тази версия на Nextcloud "], "Apps missing updates" : "Приложения без актуализация", "Apps with available updates" : "Приложенията, с налични актуализации", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "След издаването на нова версия обикновено няма да получите веднага известие. Потребителите се известяват на интервали, което може да доведе до пропускане на версия ако се появят проблеми.", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Проверка на приложенията за съвместими актуализации", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Свързването с магазина за приложения не е възможно или няма актуализации. Потърсете ръчно за актуализации или се уверете, че сървъра има връзка с Интернет и може да се свързва с магазина за приложения.", "<strong>All</strong> apps have an update for this version available" : "<strong>Всички</strong> приложения имат актуализация за наличната версия", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> приложение няма актуализация за тази версия","<strong>%n</strong> приложения нямат актуализация за тази версия"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> приложение няма актуализация за тази версия","<strong>%n</strong> приложения нямат актуализация за тази версия"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Всички</strong> приложения имат налична съвместима версия за тази версия на Nextcloud", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> от приложенията нямат налична съвместима версия за тази версия на Nextcloud ","<strong>%n</strong> от приложенията нямат налична съвместима версия за тази версия на Nextcloud "] },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/cs.js b/apps/updatenotification/l10n/cs.js index 11d9b14eed5..15a3dff750b 100644 --- a/apps/updatenotification/l10n/cs.js +++ b/apps/updatenotification/l10n/cs.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Kontrola kompatibilních verzí aplikací", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Ověřte, že v souboru s nastaveními config.php není volba <samp>appstoreenabled</samp> nastavena na hodnotu false.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Nedaří se spojit s katalogem aplikací nebo tento nevrátil vůbec žádné aktualizace. Vyhledejte aktualizace ručně nebo ověřte, zda má váš server přístup k Internetu a může se spojit s katalogem.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Všechny</strong> aplikace mají k dispozici kompatibilní verzi s verzí tohoto Nextcloud serveru", "View changelog" : "Zobrazit souhrn změn", "Enterprise" : "Podnikové", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Pro podnikové nasazení. Poskytuje vždy nejnovější opravy, ale nebude hned aktualizováno na další hlavní vydání. K tomu dochází až když Nextcloud GmbH dokončí další zodolnění a testování pro rozsáhlá a kritická nasazení. Tento kanál je k dispozici pouze zákazníkům a poskytuje balíček Nextcloud Enterprise.", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Nejnovější stabilní verze. Je vhodná pro běžné používání a vždy ji lze aktualizovat na nejnovější hlavní verzi", "Beta" : "Vývojové", "A pre-release version only for testing new features, not for production environments." : "Předprodukční verze, pouze pro zkoušení nových funkcí, není určeno pro praktické nasazení.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplikace nemá kompatibilní verzi pro verzi tohoto Nextcloud serveru","<strong>%n</strong> aplikace nemají kompatibilní verzi pro verzi tohoto Nextcloud serveru","<strong>%n</strong> aplikací nemá kompatibilní verzi pro verzi tohoto Nextcloudu","1%n1 aplikace nemají kompatibilní verzi pro verzi tohoto Nextcloud serveru"], "Apps missing updates" : "Aplikace s chybějícími aktualizacemi", "Apps with available updates" : "Aplikace s dostupnými aktualizacemi", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Všimněte si, že po vydání nové verze může chvíli trvat, než se zde objeví. Nové verze totiž distribuujeme mezi uživatele postupně a pokud jsou nalezeny problémy, někdy danou verzi přeskočíme.", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Zjišťuje se dostupnost kompatibilních aktualizací aplikací", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Nedaří se spojit s katalogem aplikací nebo tento nevrátil vůbec žádné aktualizace. Vyhledejte aktualizace ručně nebo ověřte, zda má váš server přístup k Internetu a může se spojit s katalogem.", "<strong>All</strong> apps have an update for this version available" : "<strong>Všehny</strong> aplikace mají k dispozici aktualizaci pro tuto verzi", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikace nemá k dispozici aktualizaci na tuto verzi","<strong>%n</strong> aplikace nemají k dispozici aktualizaci na tuto verzi","<strong>%n</strong> aplikací nemá k dispozici aktualizaci na tuto verzi","<strong>%n</strong> aplikace nemají k dispozici aktualizaci na tuto verzi"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikace nemá k dispozici aktualizaci na tuto verzi","<strong>%n</strong> aplikace nemají k dispozici aktualizaci na tuto verzi","<strong>%n</strong> aplikací nemá k dispozici aktualizaci na tuto verzi","<strong>%n</strong> aplikace nemají k dispozici aktualizaci na tuto verzi"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Všechny</strong> aplikace mají k dispozici kompatibilní verzi s verzí tohoto Nextcloud serveru", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplikace nemá kompatibilní verzi pro verzi tohoto Nextcloud serveru","<strong>%n</strong> aplikace nemají kompatibilní verzi pro verzi tohoto Nextcloud serveru","<strong>%n</strong> aplikací nemá kompatibilní verzi pro verzi tohoto Nextcloudu","1%n1 aplikace nemají kompatibilní verzi pro verzi tohoto Nextcloud serveru"] }, "nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"); diff --git a/apps/updatenotification/l10n/cs.json b/apps/updatenotification/l10n/cs.json index 11b53885ee4..6399195ce05 100644 --- a/apps/updatenotification/l10n/cs.json +++ b/apps/updatenotification/l10n/cs.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Kontrola kompatibilních verzí aplikací", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Ověřte, že v souboru s nastaveními config.php není volba <samp>appstoreenabled</samp> nastavena na hodnotu false.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Nedaří se spojit s katalogem aplikací nebo tento nevrátil vůbec žádné aktualizace. Vyhledejte aktualizace ručně nebo ověřte, zda má váš server přístup k Internetu a může se spojit s katalogem.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Všechny</strong> aplikace mají k dispozici kompatibilní verzi s verzí tohoto Nextcloud serveru", "View changelog" : "Zobrazit souhrn změn", "Enterprise" : "Podnikové", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Pro podnikové nasazení. Poskytuje vždy nejnovější opravy, ale nebude hned aktualizováno na další hlavní vydání. K tomu dochází až když Nextcloud GmbH dokončí další zodolnění a testování pro rozsáhlá a kritická nasazení. Tento kanál je k dispozici pouze zákazníkům a poskytuje balíček Nextcloud Enterprise.", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Nejnovější stabilní verze. Je vhodná pro běžné používání a vždy ji lze aktualizovat na nejnovější hlavní verzi", "Beta" : "Vývojové", "A pre-release version only for testing new features, not for production environments." : "Předprodukční verze, pouze pro zkoušení nových funkcí, není určeno pro praktické nasazení.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplikace nemá kompatibilní verzi pro verzi tohoto Nextcloud serveru","<strong>%n</strong> aplikace nemají kompatibilní verzi pro verzi tohoto Nextcloud serveru","<strong>%n</strong> aplikací nemá kompatibilní verzi pro verzi tohoto Nextcloudu","1%n1 aplikace nemají kompatibilní verzi pro verzi tohoto Nextcloud serveru"], "Apps missing updates" : "Aplikace s chybějícími aktualizacemi", "Apps with available updates" : "Aplikace s dostupnými aktualizacemi", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Všimněte si, že po vydání nové verze může chvíli trvat, než se zde objeví. Nové verze totiž distribuujeme mezi uživatele postupně a pokud jsou nalezeny problémy, někdy danou verzi přeskočíme.", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Zjišťuje se dostupnost kompatibilních aktualizací aplikací", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Nedaří se spojit s katalogem aplikací nebo tento nevrátil vůbec žádné aktualizace. Vyhledejte aktualizace ručně nebo ověřte, zda má váš server přístup k Internetu a může se spojit s katalogem.", "<strong>All</strong> apps have an update for this version available" : "<strong>Všehny</strong> aplikace mají k dispozici aktualizaci pro tuto verzi", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikace nemá k dispozici aktualizaci na tuto verzi","<strong>%n</strong> aplikace nemají k dispozici aktualizaci na tuto verzi","<strong>%n</strong> aplikací nemá k dispozici aktualizaci na tuto verzi","<strong>%n</strong> aplikace nemají k dispozici aktualizaci na tuto verzi"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikace nemá k dispozici aktualizaci na tuto verzi","<strong>%n</strong> aplikace nemají k dispozici aktualizaci na tuto verzi","<strong>%n</strong> aplikací nemá k dispozici aktualizaci na tuto verzi","<strong>%n</strong> aplikace nemají k dispozici aktualizaci na tuto verzi"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Všechny</strong> aplikace mají k dispozici kompatibilní verzi s verzí tohoto Nextcloud serveru", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplikace nemá kompatibilní verzi pro verzi tohoto Nextcloud serveru","<strong>%n</strong> aplikace nemají kompatibilní verzi pro verzi tohoto Nextcloud serveru","<strong>%n</strong> aplikací nemá kompatibilní verzi pro verzi tohoto Nextcloudu","1%n1 aplikace nemají kompatibilní verzi pro verzi tohoto Nextcloud serveru"] },"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/de.js b/apps/updatenotification/l10n/de.js index d505901f02f..897396ad2ff 100644 --- a/apps/updatenotification/l10n/de.js +++ b/apps/updatenotification/l10n/de.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Es werden alle Apps auf kompatible Versionen geprüft", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Bitte stelle sicher, dass in der \"config.php\"-Datei die Variable <samp>appstoreenabled</samp> nicht auf \"false\" steht.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Die Verbindung zum App-Store konnte nicht aufgebaut werden oder der App-Store hat keine Apps zurück geliefert. Suche selbst nach Updates oder stelle sicher, dass Dein Server Zugriff auf das Internet hat und eine Verbindung zum App-Store aufbauen kann. ", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "Für <strong>alle</strong> Apps steht eine kompatible Version zur Verfügung", "View changelog" : "Liste der Änderungen anschauen", "Enterprise" : "Version für Unternehmen", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Für den Einsatz in Unternehmen. Stellt immer die neueste Patch-Version bereit, wird jedoch nicht sofort auf die nächste Hauptversion aktualisiert. Diese Aktualisierung wird durchgeführt, sobald die Nextcloud GmbH zusätzliche Vorbereitungen und Tests für umfangreiche und unternehmenskritische Software-Verteilungen durchgeführt hat. Dieser Kanal steht nur Kunden zur Verfügung und enthält das Nextcloud Firmen-Paket .", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Die aktuellste stabile Version. Diese ist für den regelmäßigen Gebrauch geeignet und wird immer auf die letzte Hauptversion aktualisiert.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Eine Vorabversion die einzig zum Testen neuer Funktionen dient, nicht aber für den Einsatz in Produktivumgebungen geeignet ist.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["Für <strong>%n</strong> App steht eine kompatible Version zur Verfügung","Für <strong>%n</strong> Apps steht eine kompatible Version zur Verfügung"], "Apps missing updates" : "Für diese Apps fehlen Aktualisierungen", "Apps with available updates" : "Für diese Apps gibt es Aktualisierungen", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Nach Veröffentlichung einer neuen Version kann es einige Zeit dauern bis diese hier erscheint. Die neuen Versionen verteilen sich beim Ausrollen im Laufe der Zeit auf die Benutzer. Manchmal werden Versionen übersprungen, wenn Probleme gefunden wurden.", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Es werden alle Apps auf kompatible Aktualisierungen geprüft", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Die Verbindung zum App-Store konnte nicht aufgebaut werden oder der App-Store hat keine Apps zurück geliefert. Suche selbst nach Updates oder stelle sicher, dass Dein Server Zugriff auf das Internet hat und eine Verbindung zum App-Store aufbauen kann. ", "<strong>All</strong> apps have an update for this version available" : "Für <strong>alle</strong> Apps steht eine Aktualisierung zur Verfügung", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["Für <strong>%n</strong> App steht keine Aktualisierung für diese Version zur Verfügung","Für <strong>%n</strong> Apps stehen keine Aktualisierungen für diese Version zur Verfügung"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["Für <strong>%n</strong> App steht keine Aktualisierung für diese Version zur Verfügung","Für <strong>%n</strong> Apps stehen keine Aktualisierungen für diese Version zur Verfügung"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "Für <strong>alle</strong> Apps steht eine kompatible Version zur Verfügung", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["Für <strong>%n</strong> App steht eine kompatible Version zur Verfügung","Für <strong>%n</strong> Apps steht eine kompatible Version zur Verfügung"] }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/de.json b/apps/updatenotification/l10n/de.json index 90d548a4913..420ad6978a0 100644 --- a/apps/updatenotification/l10n/de.json +++ b/apps/updatenotification/l10n/de.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Es werden alle Apps auf kompatible Versionen geprüft", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Bitte stelle sicher, dass in der \"config.php\"-Datei die Variable <samp>appstoreenabled</samp> nicht auf \"false\" steht.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Die Verbindung zum App-Store konnte nicht aufgebaut werden oder der App-Store hat keine Apps zurück geliefert. Suche selbst nach Updates oder stelle sicher, dass Dein Server Zugriff auf das Internet hat und eine Verbindung zum App-Store aufbauen kann. ", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "Für <strong>alle</strong> Apps steht eine kompatible Version zur Verfügung", "View changelog" : "Liste der Änderungen anschauen", "Enterprise" : "Version für Unternehmen", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Für den Einsatz in Unternehmen. Stellt immer die neueste Patch-Version bereit, wird jedoch nicht sofort auf die nächste Hauptversion aktualisiert. Diese Aktualisierung wird durchgeführt, sobald die Nextcloud GmbH zusätzliche Vorbereitungen und Tests für umfangreiche und unternehmenskritische Software-Verteilungen durchgeführt hat. Dieser Kanal steht nur Kunden zur Verfügung und enthält das Nextcloud Firmen-Paket .", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Die aktuellste stabile Version. Diese ist für den regelmäßigen Gebrauch geeignet und wird immer auf die letzte Hauptversion aktualisiert.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Eine Vorabversion die einzig zum Testen neuer Funktionen dient, nicht aber für den Einsatz in Produktivumgebungen geeignet ist.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["Für <strong>%n</strong> App steht eine kompatible Version zur Verfügung","Für <strong>%n</strong> Apps steht eine kompatible Version zur Verfügung"], "Apps missing updates" : "Für diese Apps fehlen Aktualisierungen", "Apps with available updates" : "Für diese Apps gibt es Aktualisierungen", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Nach Veröffentlichung einer neuen Version kann es einige Zeit dauern bis diese hier erscheint. Die neuen Versionen verteilen sich beim Ausrollen im Laufe der Zeit auf die Benutzer. Manchmal werden Versionen übersprungen, wenn Probleme gefunden wurden.", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Es werden alle Apps auf kompatible Aktualisierungen geprüft", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Die Verbindung zum App-Store konnte nicht aufgebaut werden oder der App-Store hat keine Apps zurück geliefert. Suche selbst nach Updates oder stelle sicher, dass Dein Server Zugriff auf das Internet hat und eine Verbindung zum App-Store aufbauen kann. ", "<strong>All</strong> apps have an update for this version available" : "Für <strong>alle</strong> Apps steht eine Aktualisierung zur Verfügung", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["Für <strong>%n</strong> App steht keine Aktualisierung für diese Version zur Verfügung","Für <strong>%n</strong> Apps stehen keine Aktualisierungen für diese Version zur Verfügung"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["Für <strong>%n</strong> App steht keine Aktualisierung für diese Version zur Verfügung","Für <strong>%n</strong> Apps stehen keine Aktualisierungen für diese Version zur Verfügung"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "Für <strong>alle</strong> Apps steht eine kompatible Version zur Verfügung", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["Für <strong>%n</strong> App steht eine kompatible Version zur Verfügung","Für <strong>%n</strong> Apps steht eine kompatible Version zur Verfügung"] },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/de_DE.js b/apps/updatenotification/l10n/de_DE.js index d6473c5a400..0caef6ebb14 100644 --- a/apps/updatenotification/l10n/de_DE.js +++ b/apps/updatenotification/l10n/de_DE.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Es werden alle Apps auf kompatible Versionen geprüft", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Bitte stellen Sie sicher, dass in der \"config.php\"-Datei die Variable <samp>appstoreenabled</samp>nicht auf \"false\" steht.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Es konnte keine Verbindung zum App-Store hergestellt werden oder es wurden keine Updates zurückgegeben. Suchen Sie manuell nach Updates oder stellen Sie sicher, dass Ihr Server Zugang zum Internet hat und eine Verbindung zum App-Store herstellen kann.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "Für <strong>alle</strong> Apps steht eine kompatible Version zur Verfügung", "View changelog" : "Liste der Änderungen anschauen", "Enterprise" : "Version für Unternehmen", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Für den Einsatz in Unternehmen. Stellt immer die neueste Patch-Version bereit, wird jedoch nicht sofort auf die nächste Hauptversion aktualisiert. Diese Aktualisierung wird durchgeführt, sobald die Nextcloud GmbH zusätzliche Vorbereitungen und Tests für umfangreiche und unternehmenskritische Software-Verteilungen durchgeführt hat. Dieser Kanal steht nur Kunden zur Verfügung und enthält das Nextcloud Firmen-Paket .", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Die aktuellste stabile Version. Diese ist für den regelmäßigen Gebrauch geeignet und wird immer auf die letzte Hauptversion aktualisiert.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Eine Vorabversion, die einzig zum Testen neuer Funktionen dient, nicht aber für den Einsatz in Produktivumgebungen geeignet ist.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["Für <strong>%n</strong> App steht keine kompatible Version zur Verfügung.","Für <strong>%n</strong> Apps steht keine kompatible Version zur Verfügung."], "Apps missing updates" : "Für diese Apps fehlen Aktualisierungen", "Apps with available updates" : "Für diese Apps gibt es Aktualisierungen", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Nach Veröffentlichung einer neuen Version kann es einige Zeit dauern bis diese hier erscheint. Die neuen Versionen verteilen sich beim Ausrollen im Laufe der Zeit auf die Benutzer. Manchmal werden Versionen übersprungen, wenn Probleme gefunden wurden.", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Es werden alle Apps auf kompatible Aktualisierungen geprüft", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Die Verbindung zum Appstore konnte nicht aufgebaut werden oder der Appstore hat keine Apps zurück geliefert. Suchen Sie selbst nach den Updates oder stellen Sie sicher, dass Ihr Server Zugriff auf das Internet hat und eine Verbindung zum Appstore aufbauen kann. ", "<strong>All</strong> apps have an update for this version available" : "Für <strong>alle</strong> Apps steht eine Aktualisierung zur Verfügung", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["Für <strong>%n</strong> App steht keine Aktualisierung für diese Version zur Verfügung","Für <strong>%n</strong> Apps stehen keine Aktualisierungen für diese Version zur Verfügung"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["Für <strong>%n</strong> App steht keine Aktualisierung für diese Version zur Verfügung","Für <strong>%n</strong> Apps stehen keine Aktualisierungen für diese Version zur Verfügung"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "Für <strong>alle</strong> Apps steht eine kompatible Version zur Verfügung", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["Für <strong>%n</strong> App steht keine kompatible Version zur Verfügung.","Für <strong>%n</strong> Apps steht keine kompatible Version zur Verfügung."] }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/de_DE.json b/apps/updatenotification/l10n/de_DE.json index 65da9b911ee..ebd4bb61be6 100644 --- a/apps/updatenotification/l10n/de_DE.json +++ b/apps/updatenotification/l10n/de_DE.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Es werden alle Apps auf kompatible Versionen geprüft", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Bitte stellen Sie sicher, dass in der \"config.php\"-Datei die Variable <samp>appstoreenabled</samp>nicht auf \"false\" steht.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Es konnte keine Verbindung zum App-Store hergestellt werden oder es wurden keine Updates zurückgegeben. Suchen Sie manuell nach Updates oder stellen Sie sicher, dass Ihr Server Zugang zum Internet hat und eine Verbindung zum App-Store herstellen kann.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "Für <strong>alle</strong> Apps steht eine kompatible Version zur Verfügung", "View changelog" : "Liste der Änderungen anschauen", "Enterprise" : "Version für Unternehmen", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Für den Einsatz in Unternehmen. Stellt immer die neueste Patch-Version bereit, wird jedoch nicht sofort auf die nächste Hauptversion aktualisiert. Diese Aktualisierung wird durchgeführt, sobald die Nextcloud GmbH zusätzliche Vorbereitungen und Tests für umfangreiche und unternehmenskritische Software-Verteilungen durchgeführt hat. Dieser Kanal steht nur Kunden zur Verfügung und enthält das Nextcloud Firmen-Paket .", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Die aktuellste stabile Version. Diese ist für den regelmäßigen Gebrauch geeignet und wird immer auf die letzte Hauptversion aktualisiert.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Eine Vorabversion, die einzig zum Testen neuer Funktionen dient, nicht aber für den Einsatz in Produktivumgebungen geeignet ist.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["Für <strong>%n</strong> App steht keine kompatible Version zur Verfügung.","Für <strong>%n</strong> Apps steht keine kompatible Version zur Verfügung."], "Apps missing updates" : "Für diese Apps fehlen Aktualisierungen", "Apps with available updates" : "Für diese Apps gibt es Aktualisierungen", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Nach Veröffentlichung einer neuen Version kann es einige Zeit dauern bis diese hier erscheint. Die neuen Versionen verteilen sich beim Ausrollen im Laufe der Zeit auf die Benutzer. Manchmal werden Versionen übersprungen, wenn Probleme gefunden wurden.", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Es werden alle Apps auf kompatible Aktualisierungen geprüft", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Die Verbindung zum Appstore konnte nicht aufgebaut werden oder der Appstore hat keine Apps zurück geliefert. Suchen Sie selbst nach den Updates oder stellen Sie sicher, dass Ihr Server Zugriff auf das Internet hat und eine Verbindung zum Appstore aufbauen kann. ", "<strong>All</strong> apps have an update for this version available" : "Für <strong>alle</strong> Apps steht eine Aktualisierung zur Verfügung", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["Für <strong>%n</strong> App steht keine Aktualisierung für diese Version zur Verfügung","Für <strong>%n</strong> Apps stehen keine Aktualisierungen für diese Version zur Verfügung"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["Für <strong>%n</strong> App steht keine Aktualisierung für diese Version zur Verfügung","Für <strong>%n</strong> Apps stehen keine Aktualisierungen für diese Version zur Verfügung"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "Für <strong>alle</strong> Apps steht eine kompatible Version zur Verfügung", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["Für <strong>%n</strong> App steht keine kompatible Version zur Verfügung.","Für <strong>%n</strong> Apps steht keine kompatible Version zur Verfügung."] },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/es.js b/apps/updatenotification/l10n/es.js index 7af1f55ea26..425ced3fbdb 100644 --- a/apps/updatenotification/l10n/es.js +++ b/apps/updatenotification/l10n/es.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Comprobando las versiones comatibles de las apps ", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Por favor, asegúrate de que tu config.php no tiene configurado <samp>appstoreenabled</samp> como 'false'.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "No se ha podido conectar a la App Store o no se ha devuelto ninguna actualización. Busque manualmente las actualizaciones o asegúrese de que su servidor tiene acceso a Internet y pueda conectarse a la App Store.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Todas</strong> las apps son compatibles con la versión de Nextcloud disponible", "View changelog" : "Ver registro de cambios", "Enterprise" : "Empresa", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Para uso empresarial. Proporciona siempre el último nivel de actualización, pero no realiza inmediatamente la actualización a la siguiente versión mayor. La actualización ocurre cuando Nextcloud GmbH ha realizado una revisión dedicada, pruebas para despliegues a gran escala y servicios críticos. Este canal está disponible únicamente para los clientes del paquete Nextcloud Enterprise.", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Es la versión estable más reciente. Es adecuada para uso en producción y siempre se actualizará a la última versión principal.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Es la versión preliminar para poder probar nuevas características, no para entornos de producción.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> app no es compatible con la versión de Nextcloud disponible","<strong>%n</strong> apps no son compatibles con la versión de Nextcloud disponible"], "Apps missing updates" : "Apps con actualizaciones no disponibles", "Apps with available updates" : "Apps con actualizaciones disponibles", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Nota: tras un nuevo lanzamiento, puede pasar algo de tiempo antes de que aparezca aquí. Escalonamos la difusión de nuevas versiones a nuestros usuarios y a veces saltamos una versión cuando aparecen problemas.", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Comprobando que las apps tengan actualizaciones compatibles", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "No se ha podido conectar con la appstore o no ha devuelto ninguna actualización. Busca actualizaciones manualmente o asegúrate de que tu servidor tiene acceso a internet y puede conectarse a la appstore.", "<strong>All</strong> apps have an update for this version available" : "<strong>Todas</strong> las apps tienen disponible una actualización para esta versión", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> app no dispone de actualización para esta versión.","<strong>%n</strong> apps no disponen de actualización para esta versión."] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> app no dispone de actualización para esta versión.","<strong>%n</strong> apps no disponen de actualización para esta versión."], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Todas</strong> las apps son compatibles con la versión de Nextcloud disponible", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> app no es compatible con la versión de Nextcloud disponible","<strong>%n</strong> apps no son compatibles con la versión de Nextcloud disponible"] }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/es.json b/apps/updatenotification/l10n/es.json index 5114dbad7ef..24a72a3de79 100644 --- a/apps/updatenotification/l10n/es.json +++ b/apps/updatenotification/l10n/es.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Comprobando las versiones comatibles de las apps ", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Por favor, asegúrate de que tu config.php no tiene configurado <samp>appstoreenabled</samp> como 'false'.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "No se ha podido conectar a la App Store o no se ha devuelto ninguna actualización. Busque manualmente las actualizaciones o asegúrese de que su servidor tiene acceso a Internet y pueda conectarse a la App Store.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Todas</strong> las apps son compatibles con la versión de Nextcloud disponible", "View changelog" : "Ver registro de cambios", "Enterprise" : "Empresa", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Para uso empresarial. Proporciona siempre el último nivel de actualización, pero no realiza inmediatamente la actualización a la siguiente versión mayor. La actualización ocurre cuando Nextcloud GmbH ha realizado una revisión dedicada, pruebas para despliegues a gran escala y servicios críticos. Este canal está disponible únicamente para los clientes del paquete Nextcloud Enterprise.", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Es la versión estable más reciente. Es adecuada para uso en producción y siempre se actualizará a la última versión principal.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Es la versión preliminar para poder probar nuevas características, no para entornos de producción.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> app no es compatible con la versión de Nextcloud disponible","<strong>%n</strong> apps no son compatibles con la versión de Nextcloud disponible"], "Apps missing updates" : "Apps con actualizaciones no disponibles", "Apps with available updates" : "Apps con actualizaciones disponibles", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Nota: tras un nuevo lanzamiento, puede pasar algo de tiempo antes de que aparezca aquí. Escalonamos la difusión de nuevas versiones a nuestros usuarios y a veces saltamos una versión cuando aparecen problemas.", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Comprobando que las apps tengan actualizaciones compatibles", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "No se ha podido conectar con la appstore o no ha devuelto ninguna actualización. Busca actualizaciones manualmente o asegúrate de que tu servidor tiene acceso a internet y puede conectarse a la appstore.", "<strong>All</strong> apps have an update for this version available" : "<strong>Todas</strong> las apps tienen disponible una actualización para esta versión", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> app no dispone de actualización para esta versión.","<strong>%n</strong> apps no disponen de actualización para esta versión."] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> app no dispone de actualización para esta versión.","<strong>%n</strong> apps no disponen de actualización para esta versión."], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Todas</strong> las apps son compatibles con la versión de Nextcloud disponible", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> app no es compatible con la versión de Nextcloud disponible","<strong>%n</strong> apps no son compatibles con la versión de Nextcloud disponible"] },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/eu.js b/apps/updatenotification/l10n/eu.js index b978f002c0b..35665dbd418 100644 --- a/apps/updatenotification/l10n/eu.js +++ b/apps/updatenotification/l10n/eu.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Bertsio bateragarrientzat aplikaziorik dagoen egiaztatzen", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Ziurtatu config.php-k ez duela <samp> app store gaitua </samp>faltsu gisa ezartzen.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Ezin izan da appstore-arekin konektatu edo honek ez du eguneratzerik itzuli. Bilatu eskuz eguneratzeak edo ziurtatu zure zerbitzariak internet konexioa duela eta aplikazio biltegiarekin konektatu daitekeela.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong></strong>Aplikazio guztiek Nextcloud bertsio honetarako bertsio bateragarria erabilgarri dute ", "View changelog" : "Ikusi aldaketen egunkaria", "Enterprise" : "Enpresa", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Enpresa erabilerarako. Ematen du beti azken adabaki maila, baina ez da berehala eguneratzen hurrengo bertsio nagusira. Eguneratze hori gertatzen da Nextcloud GmbH-k eskala handiko eta berebiziko garrantzia duten inplementazioetarako indartze eta probaketa osagarriak egin ondoren. Kanal hau bezeroentzako soilik dago erabilgarri eta Nextcloud Enterprise paketea ematen du.", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Bertsio egonkor berriena. Eguneroko erabilerarako prest dago eta beti eguneratuko da azken bertsio garrantzitsuenera.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Argitaratu aurreko bertsioa funtzionalitate berriak probatzeko soilik da, ez ekoizpen inguruneetarako.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong>aplikazioek ez dute Nextcloud bertsio honetarako bertsio bateragarririk erabilgarri","<strong>%n</strong>aplikazioek ez dute Nextcloud bertsio honetarako bertsio bateragarririk erabilgarri"], "Apps missing updates" : "Eguneratzeak falta dituzten aplikazioak", "Apps with available updates" : "Eguneratzeak eskuragarri dituzten aplikazioak", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Kontuan izan bertsio berriak ateratzean denbora behar izaten dutela hemen agertzeko. Denboran zehar tartekatuta zabaltzen ditugu bertsio berriak eta batzuetan bertsio bat saltatu egiten dugu, arazoak topatzen bazaizkio. ", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Egiaztatzen eguneratzeetarako aplikazio bateragarriak", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Ezin izan da appstore-arekin konektatu edo honek ez du eguneratzerik itzuli. Bilatu eskuz eguneratzeak edo ziurtatu zure zerbitzariak internet konexioa duela eta appstore-arekin konektatu daitekeela.", "<strong>All</strong> apps have an update for this version available" : "Aplikazio <strong>guztiek</strong> eguneraketa bat dute bertsio honentzat eskuragarri", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikazioak ez du bertsio hau eskuragarri eguneratzeko","<strong>%n</strong> aplikazioek ez dute bertsio hau eskuragarri eguneratzeko"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikazioak ez du bertsio hau eskuragarri eguneratzeko","<strong>%n</strong> aplikazioek ez dute bertsio hau eskuragarri eguneratzeko"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong></strong>Aplikazio guztiek Nextcloud bertsio honetarako bertsio bateragarria erabilgarri dute ", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong>aplikazioek ez dute Nextcloud bertsio honetarako bertsio bateragarririk erabilgarri","<strong>%n</strong>aplikazioek ez dute Nextcloud bertsio honetarako bertsio bateragarririk erabilgarri"] }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/eu.json b/apps/updatenotification/l10n/eu.json index 533cfa977c3..e7a22484796 100644 --- a/apps/updatenotification/l10n/eu.json +++ b/apps/updatenotification/l10n/eu.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Bertsio bateragarrientzat aplikaziorik dagoen egiaztatzen", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Ziurtatu config.php-k ez duela <samp> app store gaitua </samp>faltsu gisa ezartzen.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Ezin izan da appstore-arekin konektatu edo honek ez du eguneratzerik itzuli. Bilatu eskuz eguneratzeak edo ziurtatu zure zerbitzariak internet konexioa duela eta aplikazio biltegiarekin konektatu daitekeela.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong></strong>Aplikazio guztiek Nextcloud bertsio honetarako bertsio bateragarria erabilgarri dute ", "View changelog" : "Ikusi aldaketen egunkaria", "Enterprise" : "Enpresa", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Enpresa erabilerarako. Ematen du beti azken adabaki maila, baina ez da berehala eguneratzen hurrengo bertsio nagusira. Eguneratze hori gertatzen da Nextcloud GmbH-k eskala handiko eta berebiziko garrantzia duten inplementazioetarako indartze eta probaketa osagarriak egin ondoren. Kanal hau bezeroentzako soilik dago erabilgarri eta Nextcloud Enterprise paketea ematen du.", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Bertsio egonkor berriena. Eguneroko erabilerarako prest dago eta beti eguneratuko da azken bertsio garrantzitsuenera.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Argitaratu aurreko bertsioa funtzionalitate berriak probatzeko soilik da, ez ekoizpen inguruneetarako.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong>aplikazioek ez dute Nextcloud bertsio honetarako bertsio bateragarririk erabilgarri","<strong>%n</strong>aplikazioek ez dute Nextcloud bertsio honetarako bertsio bateragarririk erabilgarri"], "Apps missing updates" : "Eguneratzeak falta dituzten aplikazioak", "Apps with available updates" : "Eguneratzeak eskuragarri dituzten aplikazioak", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Kontuan izan bertsio berriak ateratzean denbora behar izaten dutela hemen agertzeko. Denboran zehar tartekatuta zabaltzen ditugu bertsio berriak eta batzuetan bertsio bat saltatu egiten dugu, arazoak topatzen bazaizkio. ", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Egiaztatzen eguneratzeetarako aplikazio bateragarriak", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Ezin izan da appstore-arekin konektatu edo honek ez du eguneratzerik itzuli. Bilatu eskuz eguneratzeak edo ziurtatu zure zerbitzariak internet konexioa duela eta appstore-arekin konektatu daitekeela.", "<strong>All</strong> apps have an update for this version available" : "Aplikazio <strong>guztiek</strong> eguneraketa bat dute bertsio honentzat eskuragarri", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikazioak ez du bertsio hau eskuragarri eguneratzeko","<strong>%n</strong> aplikazioek ez dute bertsio hau eskuragarri eguneratzeko"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikazioak ez du bertsio hau eskuragarri eguneratzeko","<strong>%n</strong> aplikazioek ez dute bertsio hau eskuragarri eguneratzeko"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong></strong>Aplikazio guztiek Nextcloud bertsio honetarako bertsio bateragarria erabilgarri dute ", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong>aplikazioek ez dute Nextcloud bertsio honetarako bertsio bateragarririk erabilgarri","<strong>%n</strong>aplikazioek ez dute Nextcloud bertsio honetarako bertsio bateragarririk erabilgarri"] },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/fi.js b/apps/updatenotification/l10n/fi.js index 513355ccb12..a852d01fec2 100644 --- a/apps/updatenotification/l10n/fi.js +++ b/apps/updatenotification/l10n/fi.js @@ -34,7 +34,6 @@ OC.L10N.register( "Checked on {lastCheckedDate}" : "Tarkistettu {lastCheckedDate}", "Checking apps for compatible versions" : "Tarkistetaan sovellusten yhteensopivat versiot ", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Varmista, ettei config.php-tiedosto aseta valintaa <samp>appstoreenabled</samp> arvoon false.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Kaikista</strong> sovelluksista on saatavilla yhteensopiva versio tämän Nextcloudin version kanssa.", "View changelog" : "Näytä muutosloki", "Enterprise" : "Enterprise", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Yrityskäyttöön. Tarjoaa aina viimeisimmän korjaustason, mutta ei päivitä välittömästi seuraavaan pääversioon. Päivitys tapahtuu, kun Nextcloud GmbH on tehnyt lisävahvistuksia ja -testejä laajamittaisia ja kriittisiä käyttöönottoja varten. Tämä kanava on vain sopimusasiakkaiden käytettävissä, ja se tarjoaa Nextcloud Enterprise -paketin.", @@ -42,7 +41,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Viimeisin vakaa versio. Sopii säännölliseen käyttöön ja päivittyy aina uusimpaan pääversioon.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Esijulkaisuversio uusien toimintojen testaukseen, ei tuotantoympäristöille.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n:lle</strong> sovellukselle ei ole yhteensopivaa versiota tämän Nextcloud-version kanssa","<strong>%n:lle</strong> sovellukselle ei ole yhteensopivaa versiota tämän Nextcloud-version kanssa"], "Apps missing updates" : "Sovellukset, joilta puuttuvat päivitykset", "Apps with available updates" : "Sovellukset, joihin saatavilla päivityksiä", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Huomioi, että uuden julkaisun jälkeen voi mennä jonkin aikaa ennenkuin se näkyy täällä. Julkaisemme uusia versioita käyttäjillemme ajoittain, ja joskus jätämme jonkin version väliin, jos havaitsemme ongelmia.", @@ -50,6 +48,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Tarkistetaan sovellusten yhteensopivat päivitykset ", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Yhteyttä sovelluskauppaan ei voitu muodostaa tai sovelluskauppa ei ilmoittanut päivityksistä. Etsi päivityksiä manuaalisesti tai varmista, että palvelimellasi on yhteys internetiin ja se voi yhdistää sovelluskauppaan.", "<strong>All</strong> apps have an update for this version available" : "<strong>Kaikilla</strong> sovelluksilla on päivitys tähän versioon saatavilla", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> sovelluksella ei ole päivitystä tähän versioon saatavilla","<strong>%n</strong> sovelluksella ei ole päivitystä tähän versioon saatavilla"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> sovelluksella ei ole päivitystä tähän versioon saatavilla","<strong>%n</strong> sovelluksella ei ole päivitystä tähän versioon saatavilla"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Kaikista</strong> sovelluksista on saatavilla yhteensopiva versio tämän Nextcloudin version kanssa.", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n:lle</strong> sovellukselle ei ole yhteensopivaa versiota tämän Nextcloud-version kanssa","<strong>%n:lle</strong> sovellukselle ei ole yhteensopivaa versiota tämän Nextcloud-version kanssa"] }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/fi.json b/apps/updatenotification/l10n/fi.json index 0c10b5d653c..6e4f7bceb39 100644 --- a/apps/updatenotification/l10n/fi.json +++ b/apps/updatenotification/l10n/fi.json @@ -32,7 +32,6 @@ "Checked on {lastCheckedDate}" : "Tarkistettu {lastCheckedDate}", "Checking apps for compatible versions" : "Tarkistetaan sovellusten yhteensopivat versiot ", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Varmista, ettei config.php-tiedosto aseta valintaa <samp>appstoreenabled</samp> arvoon false.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Kaikista</strong> sovelluksista on saatavilla yhteensopiva versio tämän Nextcloudin version kanssa.", "View changelog" : "Näytä muutosloki", "Enterprise" : "Enterprise", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Yrityskäyttöön. Tarjoaa aina viimeisimmän korjaustason, mutta ei päivitä välittömästi seuraavaan pääversioon. Päivitys tapahtuu, kun Nextcloud GmbH on tehnyt lisävahvistuksia ja -testejä laajamittaisia ja kriittisiä käyttöönottoja varten. Tämä kanava on vain sopimusasiakkaiden käytettävissä, ja se tarjoaa Nextcloud Enterprise -paketin.", @@ -40,7 +39,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Viimeisin vakaa versio. Sopii säännölliseen käyttöön ja päivittyy aina uusimpaan pääversioon.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Esijulkaisuversio uusien toimintojen testaukseen, ei tuotantoympäristöille.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n:lle</strong> sovellukselle ei ole yhteensopivaa versiota tämän Nextcloud-version kanssa","<strong>%n:lle</strong> sovellukselle ei ole yhteensopivaa versiota tämän Nextcloud-version kanssa"], "Apps missing updates" : "Sovellukset, joilta puuttuvat päivitykset", "Apps with available updates" : "Sovellukset, joihin saatavilla päivityksiä", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Huomioi, että uuden julkaisun jälkeen voi mennä jonkin aikaa ennenkuin se näkyy täällä. Julkaisemme uusia versioita käyttäjillemme ajoittain, ja joskus jätämme jonkin version väliin, jos havaitsemme ongelmia.", @@ -48,6 +46,8 @@ "Checking apps for compatible updates" : "Tarkistetaan sovellusten yhteensopivat päivitykset ", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Yhteyttä sovelluskauppaan ei voitu muodostaa tai sovelluskauppa ei ilmoittanut päivityksistä. Etsi päivityksiä manuaalisesti tai varmista, että palvelimellasi on yhteys internetiin ja se voi yhdistää sovelluskauppaan.", "<strong>All</strong> apps have an update for this version available" : "<strong>Kaikilla</strong> sovelluksilla on päivitys tähän versioon saatavilla", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> sovelluksella ei ole päivitystä tähän versioon saatavilla","<strong>%n</strong> sovelluksella ei ole päivitystä tähän versioon saatavilla"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> sovelluksella ei ole päivitystä tähän versioon saatavilla","<strong>%n</strong> sovelluksella ei ole päivitystä tähän versioon saatavilla"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Kaikista</strong> sovelluksista on saatavilla yhteensopiva versio tämän Nextcloudin version kanssa.", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n:lle</strong> sovellukselle ei ole yhteensopivaa versiota tämän Nextcloud-version kanssa","<strong>%n:lle</strong> sovellukselle ei ole yhteensopivaa versiota tämän Nextcloud-version kanssa"] },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/fr.js b/apps/updatenotification/l10n/fr.js index 6a7f81e1063..c0e4ed66ff2 100644 --- a/apps/updatenotification/l10n/fr.js +++ b/apps/updatenotification/l10n/fr.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Vérification de la compatibilité des applications", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Veuillez vous assurer que le paramètre <samp>appstoreenabled</samp> n'est pas défini à false dans votre config.php.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Impossible de se connecter à l'App Store ou aucune mise à jour n'est disponible. Recherchez manuellement les mises à jour ou assurez-vous que votre serveur a accès à Internet et peut se connecter à l'App Store.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong></strong>Applications compatibles pour cette version de Nexctloud", "View changelog" : "Voir le journal des modifications", "Enterprise" : "Entreprise", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Pour les entreprises. Fournit toujours le correctif le plus récent, mais ne mettra pas à jour dans la version majeure suivante immédiatement. Cette mise à jour sera effectuée une fois que Nextcloud GmbH aura effectué les renforcements et tests pour permettre un déploiement en production et à grande échelle. Ce canal de mise à jour est seulement disponible pour les clients et fournit le paquet Nextcloud Entreprise.", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "La version stable la plus récente. Elle est adaptée pour une utilisation régulière et sera toujours mise à jour vers la dernière version majeure.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Une version préliminaire utilisée seulement pour tester les nouvelles fonctionnalités, n'est pas adaptée dans un environnement de production.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> application n'a pas de version compatible avec cette version disponible de Nextcloud","<strong>%n</strong> applications n'ont pas de version compatible avec cette version disponible de Nextcloud"], "Apps missing updates" : "Applications à mettre à jour", "Apps with available updates" : "Applications avec des mises à jour disponibles", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Veuillez noter qu'il peut s'écouler un certain temps entre la sortie d'une nouvelle version et sa disponibilité pour téléchargement et mise-à-jour ici, sur votre instance. Nous répartissons le déploiement des nouvelles versions Nextcloud dans le temps à l'ensemble de nos utilisateurs. Certaines versions mineures, présentant des bugs problématiques, peuvent être sautées.", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Vérification des applications pour des mises à jour compatibles", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Il est impossible de se connecter à l'appstore ou alors l'appstore n'a renvoyé aucune mise à jour. Cherchez manuellement les mises à jour ou assurez-vous que votre serveur a accès à Internet et peut se connecter à l'appstore.", "<strong>All</strong> apps have an update for this version available" : "<strong>Toutes</strong> les applications ont une mise à jour disponible pour cette version", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> application n'a pas de mise à jour disponible pour cette version","<strong>%n</strong> applications n'ont pas de mise à jour disponible pour cette version"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> application n'a pas de mise à jour disponible pour cette version","<strong>%n</strong> applications n'ont pas de mise à jour disponible pour cette version"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong></strong>Applications compatibles pour cette version de Nexctloud", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> application n'a pas de version compatible avec cette version disponible de Nextcloud","<strong>%n</strong> applications n'ont pas de version compatible avec cette version disponible de Nextcloud"] }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/updatenotification/l10n/fr.json b/apps/updatenotification/l10n/fr.json index 065114fed75..ec8381eafb8 100644 --- a/apps/updatenotification/l10n/fr.json +++ b/apps/updatenotification/l10n/fr.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Vérification de la compatibilité des applications", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Veuillez vous assurer que le paramètre <samp>appstoreenabled</samp> n'est pas défini à false dans votre config.php.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Impossible de se connecter à l'App Store ou aucune mise à jour n'est disponible. Recherchez manuellement les mises à jour ou assurez-vous que votre serveur a accès à Internet et peut se connecter à l'App Store.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong></strong>Applications compatibles pour cette version de Nexctloud", "View changelog" : "Voir le journal des modifications", "Enterprise" : "Entreprise", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Pour les entreprises. Fournit toujours le correctif le plus récent, mais ne mettra pas à jour dans la version majeure suivante immédiatement. Cette mise à jour sera effectuée une fois que Nextcloud GmbH aura effectué les renforcements et tests pour permettre un déploiement en production et à grande échelle. Ce canal de mise à jour est seulement disponible pour les clients et fournit le paquet Nextcloud Entreprise.", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "La version stable la plus récente. Elle est adaptée pour une utilisation régulière et sera toujours mise à jour vers la dernière version majeure.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Une version préliminaire utilisée seulement pour tester les nouvelles fonctionnalités, n'est pas adaptée dans un environnement de production.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> application n'a pas de version compatible avec cette version disponible de Nextcloud","<strong>%n</strong> applications n'ont pas de version compatible avec cette version disponible de Nextcloud"], "Apps missing updates" : "Applications à mettre à jour", "Apps with available updates" : "Applications avec des mises à jour disponibles", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Veuillez noter qu'il peut s'écouler un certain temps entre la sortie d'une nouvelle version et sa disponibilité pour téléchargement et mise-à-jour ici, sur votre instance. Nous répartissons le déploiement des nouvelles versions Nextcloud dans le temps à l'ensemble de nos utilisateurs. Certaines versions mineures, présentant des bugs problématiques, peuvent être sautées.", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Vérification des applications pour des mises à jour compatibles", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Il est impossible de se connecter à l'appstore ou alors l'appstore n'a renvoyé aucune mise à jour. Cherchez manuellement les mises à jour ou assurez-vous que votre serveur a accès à Internet et peut se connecter à l'appstore.", "<strong>All</strong> apps have an update for this version available" : "<strong>Toutes</strong> les applications ont une mise à jour disponible pour cette version", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> application n'a pas de mise à jour disponible pour cette version","<strong>%n</strong> applications n'ont pas de mise à jour disponible pour cette version"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> application n'a pas de mise à jour disponible pour cette version","<strong>%n</strong> applications n'ont pas de mise à jour disponible pour cette version"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong></strong>Applications compatibles pour cette version de Nexctloud", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> application n'a pas de version compatible avec cette version disponible de Nextcloud","<strong>%n</strong> applications n'ont pas de version compatible avec cette version disponible de Nextcloud"] },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/gl.js b/apps/updatenotification/l10n/gl.js index 8a882e96433..9e3166e69d8 100644 --- a/apps/updatenotification/l10n/gl.js +++ b/apps/updatenotification/l10n/gl.js @@ -34,7 +34,6 @@ OC.L10N.register( "Checked on {lastCheckedDate}" : "Comprobado o {lastCheckedDate}", "Checking apps for compatible versions" : "Comprobando as versións compatíbeis das aplicacións", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Asegúrese de que o seu config.php non ten configurado <samp>appstoreenabled</samp> como «false».", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Todas</strong> as aplicacións teñen dispoñíbel unha versión compatible para esta versión de Nextcloud", "View changelog" : "Ver o rexistro de cambios", "Enterprise" : "Empresarial", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Para uso empresarial. Ofrece sempre o último nivel de parches, pero non se actualizará inmediatamente á seguinte versión principal. Esta actualización prodúcese unha vez que Nextcloud GmbH teña feitas as probas e reforzos para implementacións a gran escala e de obxectivos críticos. Esta canle só está dispoñíbel para os clientes e fornece o paquete Nextcloud empresarial.", @@ -42,7 +41,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "A versión estábel máis recente. É axeitada para uso en produción e actualizarase sempre á última versión maior.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Unha versión preliminar só para probar funcionalidades novas, non para contornos de produción", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplicación non ten ningunha versión compatíbel dispoñíbel para esta versión de Nextcloud","<strong>%n</strong> aplicacións non teñen ningunha versión compatíbel dispoñíbel para esta versión de Nextcloud"], "Apps missing updates" : "Aplicacións con actualizacións non dispoñíbeis", "Apps with available updates" : "Aplicacións con actualizacións dispoñíbeis", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Teña en conta que após a publicación dunha nova versión pode levar algún tempo antes de que se amose aiquí. Programamos novas versións ao longo do tempo para os nosos usuarios e por veces omitimos unha versión cando se atopan incidentes.", @@ -50,6 +48,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Comprobando as actualizacións compatíbeis das aplicacións", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Non foi posíbel conectar coa tenda de aplicacións ou esta non devolveu ningunha actualización. Busque as actualizacións manualmente ou asegúrese de que o seu servidor ten acceso á Internet e pode conectarse coa tenda de aplicacións.", "<strong>All</strong> apps have an update for this version available" : "<strong>Todas</strong> as aplicacións teñen unha actualización dispoñíbel para esta versión", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplicación non ten unha actualización dispoñíbel para esta versión","<strong>%n</strong> aplicacións non teñen unha actualización dispoñíbel para esta versión"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplicación non ten unha actualización dispoñíbel para esta versión","<strong>%n</strong> aplicacións non teñen unha actualización dispoñíbel para esta versión"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Todas</strong> as aplicacións teñen dispoñíbel unha versión compatible para esta versión de Nextcloud", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplicación non ten ningunha versión compatíbel dispoñíbel para esta versión de Nextcloud","<strong>%n</strong> aplicacións non teñen ningunha versión compatíbel dispoñíbel para esta versión de Nextcloud"] }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/gl.json b/apps/updatenotification/l10n/gl.json index 46688b6c930..a7ee52810ef 100644 --- a/apps/updatenotification/l10n/gl.json +++ b/apps/updatenotification/l10n/gl.json @@ -32,7 +32,6 @@ "Checked on {lastCheckedDate}" : "Comprobado o {lastCheckedDate}", "Checking apps for compatible versions" : "Comprobando as versións compatíbeis das aplicacións", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Asegúrese de que o seu config.php non ten configurado <samp>appstoreenabled</samp> como «false».", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Todas</strong> as aplicacións teñen dispoñíbel unha versión compatible para esta versión de Nextcloud", "View changelog" : "Ver o rexistro de cambios", "Enterprise" : "Empresarial", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Para uso empresarial. Ofrece sempre o último nivel de parches, pero non se actualizará inmediatamente á seguinte versión principal. Esta actualización prodúcese unha vez que Nextcloud GmbH teña feitas as probas e reforzos para implementacións a gran escala e de obxectivos críticos. Esta canle só está dispoñíbel para os clientes e fornece o paquete Nextcloud empresarial.", @@ -40,7 +39,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "A versión estábel máis recente. É axeitada para uso en produción e actualizarase sempre á última versión maior.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Unha versión preliminar só para probar funcionalidades novas, non para contornos de produción", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplicación non ten ningunha versión compatíbel dispoñíbel para esta versión de Nextcloud","<strong>%n</strong> aplicacións non teñen ningunha versión compatíbel dispoñíbel para esta versión de Nextcloud"], "Apps missing updates" : "Aplicacións con actualizacións non dispoñíbeis", "Apps with available updates" : "Aplicacións con actualizacións dispoñíbeis", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Teña en conta que após a publicación dunha nova versión pode levar algún tempo antes de que se amose aiquí. Programamos novas versións ao longo do tempo para os nosos usuarios e por veces omitimos unha versión cando se atopan incidentes.", @@ -48,6 +46,8 @@ "Checking apps for compatible updates" : "Comprobando as actualizacións compatíbeis das aplicacións", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Non foi posíbel conectar coa tenda de aplicacións ou esta non devolveu ningunha actualización. Busque as actualizacións manualmente ou asegúrese de que o seu servidor ten acceso á Internet e pode conectarse coa tenda de aplicacións.", "<strong>All</strong> apps have an update for this version available" : "<strong>Todas</strong> as aplicacións teñen unha actualización dispoñíbel para esta versión", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplicación non ten unha actualización dispoñíbel para esta versión","<strong>%n</strong> aplicacións non teñen unha actualización dispoñíbel para esta versión"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplicación non ten unha actualización dispoñíbel para esta versión","<strong>%n</strong> aplicacións non teñen unha actualización dispoñíbel para esta versión"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Todas</strong> as aplicacións teñen dispoñíbel unha versión compatible para esta versión de Nextcloud", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplicación non ten ningunha versión compatíbel dispoñíbel para esta versión de Nextcloud","<strong>%n</strong> aplicacións non teñen ningunha versión compatíbel dispoñíbel para esta versión de Nextcloud"] },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/hr.js b/apps/updatenotification/l10n/hr.js index e3c419102db..562acfcf285 100644 --- a/apps/updatenotification/l10n/hr.js +++ b/apps/updatenotification/l10n/hr.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Provjera aplikacija za kompatibilne verzije", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Provjerite da vaš config.php nije postavio <samp>appstoreenabled</samp> na vrijednost „netočno”.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Neuspješno povezivanje s trgovinom aplikacijama App Store ili je vraćena obavijest da nema ažuriranja. Ručno potražite ažuriranja ili provjerite ima li vaš poslužitelj pristup internetu i može li se povezati s trgovinom aplikacijama App Store.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Sve</strong> aplikacije imaju inačicu koja je kompatibilna s ovom inačicom Nextclouda", "View changelog" : "Prikaži zapis promjena", "Enterprise" : "Enterprise", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Samo za poslovnu primjenu. Uvijek obuhvaća najnoviju razinu zakrpe, ali neće se odmah ažurirati na sljedeće veliko izdanje ili verziju. Ažuriranje se izvršava nakon dodatnih ispitivanja i provjera koje provodi Nextcloud GmbH kako bi osigurao primjereno skaliranje u kritičnim primjenama. Ovaj je kanal dostupan samo kupcima i sadrži paket Nextcloud Enterprise.", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Najnovija stabilna inačica. Primjerena je za redovitu uporabu i uvijek će se ažurirati na najnoviju glavnu inačicu.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Razvojna inačica koja služi samo za ispitivanje novih značajki, a nikako za produkcijska okruženja.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplikacija nema nijednu inačicu koja je kompatibilna s ovom inačicom Nextclouda","<strong>%n</strong> aplikacije nemaju nijednu inačicu koja je kompatibilna s ovom inačicom Nextclouda","<strong>%n</strong> aplikacija nema nijednu inačicu koja je kompatibilna s ovom inačicom Nextclouda"], "Apps missing updates" : "Aplikacijama nedostaju ažuriranja", "Apps with available updates" : "Aplikacije s dostupnim ažuriranjima", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Imajte na umu da se nova izdanja mogu pojaviti ovdje tek nakon nekog dužeg vremena. Nove inačice uvodimo u pravilnim vremenskim razmacima i ponekad preskočimo inačicu ako je problematična.", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Provjera aplikacija za kompatibilna ažuriranja", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Neuspješno povezivanje s trgovinom aplikacijama ili je trgovina aplikacijama vratila da nema ažuriranja. Ručno potražite ažuriranja ili provjerite ima li vaš poslužitelj pristup internetu i može li se povezati s trgovinom aplikacijama.", "<strong>All</strong> apps have an update for this version available" : "<strong>Sve</strong> aplikacije imaju dostupno ažuriranje za trenutnu inačicu", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikacija nema dostupno ažuriranje za trenutnu inačicu","<strong>%n</strong> aplikacije nemaju dostupno ažuriranje za trenutnu inačicu","<strong>%n</strong> aplikacije nemaju dostupno ažuriranje za trenutnu inačicu"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikacija nema dostupno ažuriranje za trenutnu inačicu","<strong>%n</strong> aplikacije nemaju dostupno ažuriranje za trenutnu inačicu","<strong>%n</strong> aplikacije nemaju dostupno ažuriranje za trenutnu inačicu"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Sve</strong> aplikacije imaju inačicu koja je kompatibilna s ovom inačicom Nextclouda", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplikacija nema nijednu inačicu koja je kompatibilna s ovom inačicom Nextclouda","<strong>%n</strong> aplikacije nemaju nijednu inačicu koja je kompatibilna s ovom inačicom Nextclouda","<strong>%n</strong> aplikacija nema nijednu inačicu koja je kompatibilna s ovom inačicom Nextclouda"] }, "nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"); diff --git a/apps/updatenotification/l10n/hr.json b/apps/updatenotification/l10n/hr.json index 200e1719469..69c8865c96a 100644 --- a/apps/updatenotification/l10n/hr.json +++ b/apps/updatenotification/l10n/hr.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Provjera aplikacija za kompatibilne verzije", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Provjerite da vaš config.php nije postavio <samp>appstoreenabled</samp> na vrijednost „netočno”.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Neuspješno povezivanje s trgovinom aplikacijama App Store ili je vraćena obavijest da nema ažuriranja. Ručno potražite ažuriranja ili provjerite ima li vaš poslužitelj pristup internetu i može li se povezati s trgovinom aplikacijama App Store.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Sve</strong> aplikacije imaju inačicu koja je kompatibilna s ovom inačicom Nextclouda", "View changelog" : "Prikaži zapis promjena", "Enterprise" : "Enterprise", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Samo za poslovnu primjenu. Uvijek obuhvaća najnoviju razinu zakrpe, ali neće se odmah ažurirati na sljedeće veliko izdanje ili verziju. Ažuriranje se izvršava nakon dodatnih ispitivanja i provjera koje provodi Nextcloud GmbH kako bi osigurao primjereno skaliranje u kritičnim primjenama. Ovaj je kanal dostupan samo kupcima i sadrži paket Nextcloud Enterprise.", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Najnovija stabilna inačica. Primjerena je za redovitu uporabu i uvijek će se ažurirati na najnoviju glavnu inačicu.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Razvojna inačica koja služi samo za ispitivanje novih značajki, a nikako za produkcijska okruženja.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplikacija nema nijednu inačicu koja je kompatibilna s ovom inačicom Nextclouda","<strong>%n</strong> aplikacije nemaju nijednu inačicu koja je kompatibilna s ovom inačicom Nextclouda","<strong>%n</strong> aplikacija nema nijednu inačicu koja je kompatibilna s ovom inačicom Nextclouda"], "Apps missing updates" : "Aplikacijama nedostaju ažuriranja", "Apps with available updates" : "Aplikacije s dostupnim ažuriranjima", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Imajte na umu da se nova izdanja mogu pojaviti ovdje tek nakon nekog dužeg vremena. Nove inačice uvodimo u pravilnim vremenskim razmacima i ponekad preskočimo inačicu ako je problematična.", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Provjera aplikacija za kompatibilna ažuriranja", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Neuspješno povezivanje s trgovinom aplikacijama ili je trgovina aplikacijama vratila da nema ažuriranja. Ručno potražite ažuriranja ili provjerite ima li vaš poslužitelj pristup internetu i može li se povezati s trgovinom aplikacijama.", "<strong>All</strong> apps have an update for this version available" : "<strong>Sve</strong> aplikacije imaju dostupno ažuriranje za trenutnu inačicu", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikacija nema dostupno ažuriranje za trenutnu inačicu","<strong>%n</strong> aplikacije nemaju dostupno ažuriranje za trenutnu inačicu","<strong>%n</strong> aplikacije nemaju dostupno ažuriranje za trenutnu inačicu"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikacija nema dostupno ažuriranje za trenutnu inačicu","<strong>%n</strong> aplikacije nemaju dostupno ažuriranje za trenutnu inačicu","<strong>%n</strong> aplikacije nemaju dostupno ažuriranje za trenutnu inačicu"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Sve</strong> aplikacije imaju inačicu koja je kompatibilna s ovom inačicom Nextclouda", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplikacija nema nijednu inačicu koja je kompatibilna s ovom inačicom Nextclouda","<strong>%n</strong> aplikacije nemaju nijednu inačicu koja je kompatibilna s ovom inačicom Nextclouda","<strong>%n</strong> aplikacija nema nijednu inačicu koja je kompatibilna s ovom inačicom Nextclouda"] },"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/hu.js b/apps/updatenotification/l10n/hu.js index c673184130f..2032d995c66 100644 --- a/apps/updatenotification/l10n/hu.js +++ b/apps/updatenotification/l10n/hu.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Alkalmazások ellenőrzése kompatibilis verziók után", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Ellenőrizze, hogy a config.php fájl nem állítja-e be <samp>appstoreenabled</samp> értékét false-ra.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Nem lehet csatlakozni az alkalmazástárhoz, vagy az egyáltalán nem adott vissza frissítéseket. Keressen kézzel frissítéseket, vagy győződjön meg arról, hogy a kiszolgálója hozzáfér-e az internethez és eléri-e az alkalmazástárat.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Minden</strong> alkalmazás rendelkezik ezzel a Nextcloud verzióval kompatibilis verzióval", "View changelog" : "Változásnapló megjelenítése", "Enterprise" : "Vállalati", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Vállalati felhasználásra. Mindig a legfrissebb foltozási szint, de nem fog azonnal a legújabb főverzióra frissíteni. A frissítés csak azután fog megtörténni, amikor a Nextcloud GmbH elvégezte a szükséges biztonsági megerősítéseket, illetve a nagy méretű és kritikus fontosságú rendszereket érintő teszteket. Ez a csatorna csak ügyfelek számára érhető el, és a Nextcloud Vállalati csomagját biztosítja.", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "A legfrissebb stabil verzió. Mindennapos használatra ajánlott, mindig a legújabb főverzióra frissít.", "Beta" : "Béta", "A pre-release version only for testing new features, not for production environments." : "Az előzetes verzió kizárólag az új funkciók tesztelésére szolgál, nem éles környezetekbe való.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> alkalmazásnak nincs elérhető kompatibilis verziója ehhez a Nextcloud verzióhoz","<strong>%n</strong> alkalmazásnak nincs elérhető kompatibilis verziója ehhez a Nextcloud verzióhoz"], "Apps missing updates" : "Alkalmazások frissítés nélkül", "Apps with available updates" : "Alkalmazások elérhető frissítéssel", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Vegye figyelembe, hogy egy új kiadás után időbe telhet, míg itt megjelenik. Fokozatosan juttatjuk el a frissítéseket a felhasználókhoz, és néha kimarad egy-egy verziót, ha problémák merülnek fel.", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Alkalmazások ellenőrzése kompatibilis frissítések után", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Nem lehet csatlakozni az alkalmazástárhoz, vagy az egyáltalán nem adott vissza frissítéseket. Keressen kézzel frissítéseket, vagy győződjön meg arról, hogy a kiszolgálója hozzáfér-e az internethez és eléri-e az alkalmazástárat.", "<strong>All</strong> apps have an update for this version available" : "<strong>Minden</strong> alkalmazás frissítve a legújabb verzióra", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> alkalmazásnak nincs elérhető frissítése ehhez a verzióhoz","<strong>%n</strong> alkalmazásnak nincs elérhető frissítése ehhez a verzióhoz"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> alkalmazásnak nincs elérhető frissítése ehhez a verzióhoz","<strong>%n</strong> alkalmazásnak nincs elérhető frissítése ehhez a verzióhoz"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Minden</strong> alkalmazás rendelkezik ezzel a Nextcloud verzióval kompatibilis verzióval", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> alkalmazásnak nincs elérhető kompatibilis verziója ehhez a Nextcloud verzióhoz","<strong>%n</strong> alkalmazásnak nincs elérhető kompatibilis verziója ehhez a Nextcloud verzióhoz"] }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/hu.json b/apps/updatenotification/l10n/hu.json index 191e0796918..d8b58b9580c 100644 --- a/apps/updatenotification/l10n/hu.json +++ b/apps/updatenotification/l10n/hu.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Alkalmazások ellenőrzése kompatibilis verziók után", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Ellenőrizze, hogy a config.php fájl nem állítja-e be <samp>appstoreenabled</samp> értékét false-ra.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Nem lehet csatlakozni az alkalmazástárhoz, vagy az egyáltalán nem adott vissza frissítéseket. Keressen kézzel frissítéseket, vagy győződjön meg arról, hogy a kiszolgálója hozzáfér-e az internethez és eléri-e az alkalmazástárat.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Minden</strong> alkalmazás rendelkezik ezzel a Nextcloud verzióval kompatibilis verzióval", "View changelog" : "Változásnapló megjelenítése", "Enterprise" : "Vállalati", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Vállalati felhasználásra. Mindig a legfrissebb foltozási szint, de nem fog azonnal a legújabb főverzióra frissíteni. A frissítés csak azután fog megtörténni, amikor a Nextcloud GmbH elvégezte a szükséges biztonsági megerősítéseket, illetve a nagy méretű és kritikus fontosságú rendszereket érintő teszteket. Ez a csatorna csak ügyfelek számára érhető el, és a Nextcloud Vállalati csomagját biztosítja.", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "A legfrissebb stabil verzió. Mindennapos használatra ajánlott, mindig a legújabb főverzióra frissít.", "Beta" : "Béta", "A pre-release version only for testing new features, not for production environments." : "Az előzetes verzió kizárólag az új funkciók tesztelésére szolgál, nem éles környezetekbe való.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> alkalmazásnak nincs elérhető kompatibilis verziója ehhez a Nextcloud verzióhoz","<strong>%n</strong> alkalmazásnak nincs elérhető kompatibilis verziója ehhez a Nextcloud verzióhoz"], "Apps missing updates" : "Alkalmazások frissítés nélkül", "Apps with available updates" : "Alkalmazások elérhető frissítéssel", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Vegye figyelembe, hogy egy új kiadás után időbe telhet, míg itt megjelenik. Fokozatosan juttatjuk el a frissítéseket a felhasználókhoz, és néha kimarad egy-egy verziót, ha problémák merülnek fel.", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Alkalmazások ellenőrzése kompatibilis frissítések után", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Nem lehet csatlakozni az alkalmazástárhoz, vagy az egyáltalán nem adott vissza frissítéseket. Keressen kézzel frissítéseket, vagy győződjön meg arról, hogy a kiszolgálója hozzáfér-e az internethez és eléri-e az alkalmazástárat.", "<strong>All</strong> apps have an update for this version available" : "<strong>Minden</strong> alkalmazás frissítve a legújabb verzióra", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> alkalmazásnak nincs elérhető frissítése ehhez a verzióhoz","<strong>%n</strong> alkalmazásnak nincs elérhető frissítése ehhez a verzióhoz"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> alkalmazásnak nincs elérhető frissítése ehhez a verzióhoz","<strong>%n</strong> alkalmazásnak nincs elérhető frissítése ehhez a verzióhoz"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Minden</strong> alkalmazás rendelkezik ezzel a Nextcloud verzióval kompatibilis verzióval", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> alkalmazásnak nincs elérhető kompatibilis verziója ehhez a Nextcloud verzióhoz","<strong>%n</strong> alkalmazásnak nincs elérhető kompatibilis verziója ehhez a Nextcloud verzióhoz"] },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/it.js b/apps/updatenotification/l10n/it.js index 4f98c8a6c1a..6ecd78b0331 100644 --- a/apps/updatenotification/l10n/it.js +++ b/apps/updatenotification/l10n/it.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Controllo di applicazioni con versioni compatibili", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Assicurati che il tuo config.php non abbia <samp>appstoreenabled</samp> impostata a false.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Impossibile connettersi al negozio delle applicazioni o il negozio delle applicazioni non ha restituito alcun aggiornamento. Cerca manualmente gli aggiornamenti o assicurati che il server abbia accesso a Internet e possa collegarsi al negozio delle applicazioni.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Tutte</strong> le applicazioni hanno una versione compatibile disponibile per questa versione di Nextcloud", "View changelog" : "Visualizza le novità", "Enterprise" : "Enterprise", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Per utilizzo aziendale. Fornisce sempre l'ultimo livello di patch, ma non sarà aggiornato immediatamente all'ultima versione principale. Tale aggiornamento sarà disponibile nel momento in cui Nextcloud GmbH avrà apportato miglioramenti della sicurezza, test su larga scala e installazioni in ambienti di importanza rilevante. Questo canale è disponibile solo per i clienti e fornisce il pacchetto Nextcloud Enterprise.", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "La versione stabile più recente. È appropriata per l'utilizzo di tutti i giorni e sarà sempre aggiornata all'ultima versione principale.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Una versione pre-rilascio solo per provare le nuove funzionalità, non per ambienti di produzione.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> applicazione non ha una versione compatibile disponibile per questa versione di Nextcloud","<strong>%n</strong> applicazione non hanno una versione compatibile disponibile per questa versione di Nextcloud"], "Apps missing updates" : "Applicazioni non aggiornate", "Apps with available updates" : "Applicazioni con aggiornamenti disponibili", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Nota che, dopo una nuova versione, potrebbe essere necessario del tempo prima che sia mostrato qui. Rilasciamo nel tempo nuove versioni ai nostri utenti e, a volte, saltiamo una versione, se troviamo dei problemi.", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Controlla le applicazioni per aggiornamenti compatibili", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Impossibile connettersi al negozio delle applicazioni o il negozio delle applicazioni non ha restituito alcun aggiornamento. Cerca manualmente gli aggiornamenti o assicurati che il server abbia accesso a Internet e possa collegarsi al negozio delle applicazioni.", "<strong>All</strong> apps have an update for this version available" : "<strong>Tutte</strong> le applicazioni hanno un aggiornamento disponibile per questa versione", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> applicazione non ha un aggiornamento disponibile per questa versione","<strong>%n</strong> applicazioni non hanno un aggiornamento disponibile per questa versione"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> applicazione non ha un aggiornamento disponibile per questa versione","<strong>%n</strong> applicazioni non hanno un aggiornamento disponibile per questa versione"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Tutte</strong> le applicazioni hanno una versione compatibile disponibile per questa versione di Nextcloud", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> applicazione non ha una versione compatibile disponibile per questa versione di Nextcloud","<strong>%n</strong> applicazione non hanno una versione compatibile disponibile per questa versione di Nextcloud"] }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/it.json b/apps/updatenotification/l10n/it.json index 593cdff0b41..b7b0a31e1fe 100644 --- a/apps/updatenotification/l10n/it.json +++ b/apps/updatenotification/l10n/it.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Controllo di applicazioni con versioni compatibili", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Assicurati che il tuo config.php non abbia <samp>appstoreenabled</samp> impostata a false.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Impossibile connettersi al negozio delle applicazioni o il negozio delle applicazioni non ha restituito alcun aggiornamento. Cerca manualmente gli aggiornamenti o assicurati che il server abbia accesso a Internet e possa collegarsi al negozio delle applicazioni.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Tutte</strong> le applicazioni hanno una versione compatibile disponibile per questa versione di Nextcloud", "View changelog" : "Visualizza le novità", "Enterprise" : "Enterprise", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Per utilizzo aziendale. Fornisce sempre l'ultimo livello di patch, ma non sarà aggiornato immediatamente all'ultima versione principale. Tale aggiornamento sarà disponibile nel momento in cui Nextcloud GmbH avrà apportato miglioramenti della sicurezza, test su larga scala e installazioni in ambienti di importanza rilevante. Questo canale è disponibile solo per i clienti e fornisce il pacchetto Nextcloud Enterprise.", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "La versione stabile più recente. È appropriata per l'utilizzo di tutti i giorni e sarà sempre aggiornata all'ultima versione principale.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Una versione pre-rilascio solo per provare le nuove funzionalità, non per ambienti di produzione.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> applicazione non ha una versione compatibile disponibile per questa versione di Nextcloud","<strong>%n</strong> applicazione non hanno una versione compatibile disponibile per questa versione di Nextcloud"], "Apps missing updates" : "Applicazioni non aggiornate", "Apps with available updates" : "Applicazioni con aggiornamenti disponibili", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Nota che, dopo una nuova versione, potrebbe essere necessario del tempo prima che sia mostrato qui. Rilasciamo nel tempo nuove versioni ai nostri utenti e, a volte, saltiamo una versione, se troviamo dei problemi.", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Controlla le applicazioni per aggiornamenti compatibili", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Impossibile connettersi al negozio delle applicazioni o il negozio delle applicazioni non ha restituito alcun aggiornamento. Cerca manualmente gli aggiornamenti o assicurati che il server abbia accesso a Internet e possa collegarsi al negozio delle applicazioni.", "<strong>All</strong> apps have an update for this version available" : "<strong>Tutte</strong> le applicazioni hanno un aggiornamento disponibile per questa versione", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> applicazione non ha un aggiornamento disponibile per questa versione","<strong>%n</strong> applicazioni non hanno un aggiornamento disponibile per questa versione"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> applicazione non ha un aggiornamento disponibile per questa versione","<strong>%n</strong> applicazioni non hanno un aggiornamento disponibile per questa versione"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Tutte</strong> le applicazioni hanno una versione compatibile disponibile per questa versione di Nextcloud", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> applicazione non ha una versione compatibile disponibile per questa versione di Nextcloud","<strong>%n</strong> applicazione non hanno una versione compatibile disponibile per questa versione di Nextcloud"] },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/ja.js b/apps/updatenotification/l10n/ja.js index 1d9bdb8d770..75ad17d9d65 100644 --- a/apps/updatenotification/l10n/ja.js +++ b/apps/updatenotification/l10n/ja.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "アプリの互換性のあるバージョンを確認する", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "config.phpで<samp>appstoreenabled</samp>がfalseに設定されていないことを確認してください。", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Appstoreに接続できなかったか、Appstoreからアップデートが返されませんでした。アップデートを手動で検索するか、サーバーがインターネットへアクセスでき、Appstoreに接続できることを確認してください。", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>すべて</strong>のアプリが、このNextcloudのバージョンに対応しています。", "View changelog" : "変更履歴を確認する", "Enterprise" : "法人向け", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "法人向けです。 常に最新のパッチレベルを提供しますが、すぐに次のメジャーリリースにアップデートはしません。このアップデートはNextcloud GmbHが大規模でミッションクリティカルな開発のための追加の強化とテストを行った後に行われます。 このチャンネルは顧客だけが利用でき、Nextcloud Enterpriseパッケージを提供します。", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "最新の安定版です。 通常の使用に適しており、常に最新のメジャーバージョンにアップデートされます。", "Beta" : "ベータ", "A pre-release version only for testing new features, not for production environments." : "本番環境ではなく、新機能のテスト専用のプレリリース版です。", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["アプリ<strong>%n</strong> には、このNextcloudに互換性のあるバージョンがありません。"], "Apps missing updates" : "アプリのアップデートがありません", "Apps with available updates" : "アップデート可能なアプリ", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "新しいリリースの後、公開されるまでには時間がかかります。\n新しいバージョンを公開して配布しますが、問題が発見されたときにバージョンをスキップすることがあります。", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "互換性のあるアップデートの有無を確認する", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Appstoreに接続できなかったか、Appstoreからアップデートが返されませんでした。アップデートを手動で検索するか、サーバーがインターネットへアクセスでき、Appstoreに接続できることを確認してください。", "<strong>All</strong> apps have an update for this version available" : "<strong>すべての</strong> アプリにこのバージョンのアップデートがあります", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> アプリにこのバージョンのアップデートがありません"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> アプリにこのバージョンのアップデートがありません"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>すべて</strong>のアプリが、このNextcloudのバージョンに対応しています。", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["アプリ<strong>%n</strong> には、このNextcloudに互換性のあるバージョンがありません。"] }, "nplurals=1; plural=0;"); diff --git a/apps/updatenotification/l10n/ja.json b/apps/updatenotification/l10n/ja.json index 0f7c4b93c86..b10bb87e059 100644 --- a/apps/updatenotification/l10n/ja.json +++ b/apps/updatenotification/l10n/ja.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "アプリの互換性のあるバージョンを確認する", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "config.phpで<samp>appstoreenabled</samp>がfalseに設定されていないことを確認してください。", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Appstoreに接続できなかったか、Appstoreからアップデートが返されませんでした。アップデートを手動で検索するか、サーバーがインターネットへアクセスでき、Appstoreに接続できることを確認してください。", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>すべて</strong>のアプリが、このNextcloudのバージョンに対応しています。", "View changelog" : "変更履歴を確認する", "Enterprise" : "法人向け", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "法人向けです。 常に最新のパッチレベルを提供しますが、すぐに次のメジャーリリースにアップデートはしません。このアップデートはNextcloud GmbHが大規模でミッションクリティカルな開発のための追加の強化とテストを行った後に行われます。 このチャンネルは顧客だけが利用でき、Nextcloud Enterpriseパッケージを提供します。", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "最新の安定版です。 通常の使用に適しており、常に最新のメジャーバージョンにアップデートされます。", "Beta" : "ベータ", "A pre-release version only for testing new features, not for production environments." : "本番環境ではなく、新機能のテスト専用のプレリリース版です。", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["アプリ<strong>%n</strong> には、このNextcloudに互換性のあるバージョンがありません。"], "Apps missing updates" : "アプリのアップデートがありません", "Apps with available updates" : "アップデート可能なアプリ", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "新しいリリースの後、公開されるまでには時間がかかります。\n新しいバージョンを公開して配布しますが、問題が発見されたときにバージョンをスキップすることがあります。", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "互換性のあるアップデートの有無を確認する", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Appstoreに接続できなかったか、Appstoreからアップデートが返されませんでした。アップデートを手動で検索するか、サーバーがインターネットへアクセスでき、Appstoreに接続できることを確認してください。", "<strong>All</strong> apps have an update for this version available" : "<strong>すべての</strong> アプリにこのバージョンのアップデートがあります", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> アプリにこのバージョンのアップデートがありません"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> アプリにこのバージョンのアップデートがありません"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>すべて</strong>のアプリが、このNextcloudのバージョンに対応しています。", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["アプリ<strong>%n</strong> には、このNextcloudに互換性のあるバージョンがありません。"] },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/mk.js b/apps/updatenotification/l10n/mk.js index ce4cc335b41..b5be1930eb1 100644 --- a/apps/updatenotification/l10n/mk.js +++ b/apps/updatenotification/l10n/mk.js @@ -34,7 +34,6 @@ OC.L10N.register( "Checked on {lastCheckedDate}" : "Проверено на {lastCheckedDate}", "Checking apps for compatible versions" : "Проверка за компатибилност на апликациите со новата верзија", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Бидете сигурни дека во config.php датотеката параматарот <samp>appstoreenabled</samp> е поставен на false.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Сите</strong> апликации се компатибилни за оваа верзија", "View changelog" : "Видете ги проммените", "Enterprise" : "Професионален", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "За професионална употреба. Овозможува секогаш најново ниво на ажурирање, но нема веднаш да се ажурира на следното големо издание. Ова ажурирање се случува откако Nextcloud GmbH ќе направи дополнително тестирање за големи и критични сервери. Овој канал е достапен само за клиентите и го имаат пакетот Nextcloud Enterprise.", @@ -42,7 +41,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Најнова стабилна верзија. Корисно за редовна употреба и секогаш ќе се ажурира до последната најнова верзија.", "Beta" : "Бета", "A pre-release version only for testing new features, not for production environments." : "Неиздадена верзија само за тестирање на новите можности, не е за редовна употреба.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> апликација нема компатибилност со оваа веријза","<strong>%n</strong> апликации немаат компатибилност со оваа веријза"], "Apps missing updates" : "Недостасуваат ажурирања за апликации", "Apps with available updates" : "Апликации со достапни ажурирања", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Можно е да треба некое време додека новата верзија се прикаже овде. Ние испорачуваме нови до нашите корисници но од време на време некој верзии ги прескокнуваме поради пројандени проблеми во истите.", @@ -50,6 +48,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Проверка за компатибилност на апликациите со новата верзија", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Неможе да се поврзе со appstore или одговорот е дека нема ажурирање. Пребарајте рачно за ажурирање или бидете сигурни дека серверот има пристап до интернет и може да се поврзе со продавницата.", "<strong>All</strong> apps have an update for this version available" : "<strong>Сите</strong> апликации имаат ажурирања за оваа верзија", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> апликација нема ажурирање за оваа веријза","<strong>%n</strong> апликации немаат ажурирања за оваа веријза"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> апликација нема ажурирање за оваа веријза","<strong>%n</strong> апликации немаат ажурирања за оваа веријза"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Сите</strong> апликации се компатибилни за оваа верзија", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> апликација нема компатибилност со оваа веријза","<strong>%n</strong> апликации немаат компатибилност со оваа веријза"] }, "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); diff --git a/apps/updatenotification/l10n/mk.json b/apps/updatenotification/l10n/mk.json index 646ff07f8a5..fb5c6f08219 100644 --- a/apps/updatenotification/l10n/mk.json +++ b/apps/updatenotification/l10n/mk.json @@ -32,7 +32,6 @@ "Checked on {lastCheckedDate}" : "Проверено на {lastCheckedDate}", "Checking apps for compatible versions" : "Проверка за компатибилност на апликациите со новата верзија", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Бидете сигурни дека во config.php датотеката параматарот <samp>appstoreenabled</samp> е поставен на false.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Сите</strong> апликации се компатибилни за оваа верзија", "View changelog" : "Видете ги проммените", "Enterprise" : "Професионален", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "За професионална употреба. Овозможува секогаш најново ниво на ажурирање, но нема веднаш да се ажурира на следното големо издание. Ова ажурирање се случува откако Nextcloud GmbH ќе направи дополнително тестирање за големи и критични сервери. Овој канал е достапен само за клиентите и го имаат пакетот Nextcloud Enterprise.", @@ -40,7 +39,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Најнова стабилна верзија. Корисно за редовна употреба и секогаш ќе се ажурира до последната најнова верзија.", "Beta" : "Бета", "A pre-release version only for testing new features, not for production environments." : "Неиздадена верзија само за тестирање на новите можности, не е за редовна употреба.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> апликација нема компатибилност со оваа веријза","<strong>%n</strong> апликации немаат компатибилност со оваа веријза"], "Apps missing updates" : "Недостасуваат ажурирања за апликации", "Apps with available updates" : "Апликации со достапни ажурирања", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Можно е да треба некое време додека новата верзија се прикаже овде. Ние испорачуваме нови до нашите корисници но од време на време некој верзии ги прескокнуваме поради пројандени проблеми во истите.", @@ -48,6 +46,8 @@ "Checking apps for compatible updates" : "Проверка за компатибилност на апликациите со новата верзија", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Неможе да се поврзе со appstore или одговорот е дека нема ажурирање. Пребарајте рачно за ажурирање или бидете сигурни дека серверот има пристап до интернет и може да се поврзе со продавницата.", "<strong>All</strong> apps have an update for this version available" : "<strong>Сите</strong> апликации имаат ажурирања за оваа верзија", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> апликација нема ажурирање за оваа веријза","<strong>%n</strong> апликации немаат ажурирања за оваа веријза"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> апликација нема ажурирање за оваа веријза","<strong>%n</strong> апликации немаат ажурирања за оваа веријза"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Сите</strong> апликации се компатибилни за оваа верзија", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> апликација нема компатибилност со оваа веријза","<strong>%n</strong> апликации немаат компатибилност со оваа веријза"] },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/nl.js b/apps/updatenotification/l10n/nl.js index cee25e6c144..b00c5965713 100644 --- a/apps/updatenotification/l10n/nl.js +++ b/apps/updatenotification/l10n/nl.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Apps controleren op compatibele versies.", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Zorg ervoor dat je in config.php <samp>appstoreenabled</samp> niet op 'false' zet.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Kan niet verbinden met de App Store of er zijn geen updates teruggegeven. Zoek handmatig naar updates of verifieer dat je server internettoegang heeft en kan verbinden met de App Store.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Alle</strong> apps hebben een compatibele versie voor deze Nextcloud versie", "View changelog" : "Bekijk wijzigingenoverzicht", "Enterprise" : "Zakelijk", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Voor zakelijk gebruik. Biedt altijd het laatste patch level, maar zal niet meteen naar de laatste hoofdrelease bijwerken. Die update vindt pas plaats nadat Nextcloud GmbH aanvullende hardening en tests voor grootschalige en bedrijfskritische installaties heeft uitgevoerd. Dit kanaal is alleen beschikbaar voor klanten en levert het Nextcloud Enterprise pakket.", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "De meest recente stabiele versie. Het is geschikt voor normaal gebruik en werkt altijd bij naar de laatste hoofdversie.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Een vroeg vrijgegeven versie, alleen bedoeld om nieuwe functies te testen. Niet voor productieomgevingen.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> app heeft geen compatibele versie voor deze Nextcloud versie","<strong>%n</strong> apps hebben geen compatibele versie voor deze Nextcloud versie"], "Apps missing updates" : "Apps met ontbrekende updates", "Apps with available updates" : "Apps met beschikbare updates", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Houd er rekening mee dat het enige tijd kan duren voordat na een nieuwe versie hier verschijnt. We verspreiden nieuwe versies over de tijd aan onze gebruikers en soms slaan we een versie over als er problemen zijn gevonden.", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Apps controleren op compatibele updates", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Kan niet verbinden met de appstore of de appstore gaf geen updates terug. Zoek handmatig naar updates of verifieer dat je server internettoegang heeft en kan verbinden met de appstore.", "<strong>All</strong> apps have an update for this version available" : "<strong>Alle</strong> apps hebben een update voor deze versie beschikbaar", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> app heeft geen update voor deze versie beschikbaar","<strong>%n</strong> apps hebben geen update voor deze versie beschikbaar"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> app heeft geen update voor deze versie beschikbaar","<strong>%n</strong> apps hebben geen update voor deze versie beschikbaar"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Alle</strong> apps hebben een compatibele versie voor deze Nextcloud versie", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> app heeft geen compatibele versie voor deze Nextcloud versie","<strong>%n</strong> apps hebben geen compatibele versie voor deze Nextcloud versie"] }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/nl.json b/apps/updatenotification/l10n/nl.json index ef86c9dc1e8..3fee17dd260 100644 --- a/apps/updatenotification/l10n/nl.json +++ b/apps/updatenotification/l10n/nl.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Apps controleren op compatibele versies.", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Zorg ervoor dat je in config.php <samp>appstoreenabled</samp> niet op 'false' zet.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Kan niet verbinden met de App Store of er zijn geen updates teruggegeven. Zoek handmatig naar updates of verifieer dat je server internettoegang heeft en kan verbinden met de App Store.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Alle</strong> apps hebben een compatibele versie voor deze Nextcloud versie", "View changelog" : "Bekijk wijzigingenoverzicht", "Enterprise" : "Zakelijk", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Voor zakelijk gebruik. Biedt altijd het laatste patch level, maar zal niet meteen naar de laatste hoofdrelease bijwerken. Die update vindt pas plaats nadat Nextcloud GmbH aanvullende hardening en tests voor grootschalige en bedrijfskritische installaties heeft uitgevoerd. Dit kanaal is alleen beschikbaar voor klanten en levert het Nextcloud Enterprise pakket.", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "De meest recente stabiele versie. Het is geschikt voor normaal gebruik en werkt altijd bij naar de laatste hoofdversie.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Een vroeg vrijgegeven versie, alleen bedoeld om nieuwe functies te testen. Niet voor productieomgevingen.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> app heeft geen compatibele versie voor deze Nextcloud versie","<strong>%n</strong> apps hebben geen compatibele versie voor deze Nextcloud versie"], "Apps missing updates" : "Apps met ontbrekende updates", "Apps with available updates" : "Apps met beschikbare updates", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Houd er rekening mee dat het enige tijd kan duren voordat na een nieuwe versie hier verschijnt. We verspreiden nieuwe versies over de tijd aan onze gebruikers en soms slaan we een versie over als er problemen zijn gevonden.", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Apps controleren op compatibele updates", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Kan niet verbinden met de appstore of de appstore gaf geen updates terug. Zoek handmatig naar updates of verifieer dat je server internettoegang heeft en kan verbinden met de appstore.", "<strong>All</strong> apps have an update for this version available" : "<strong>Alle</strong> apps hebben een update voor deze versie beschikbaar", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> app heeft geen update voor deze versie beschikbaar","<strong>%n</strong> apps hebben geen update voor deze versie beschikbaar"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> app heeft geen update voor deze versie beschikbaar","<strong>%n</strong> apps hebben geen update voor deze versie beschikbaar"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Alle</strong> apps hebben een compatibele versie voor deze Nextcloud versie", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> app heeft geen compatibele versie voor deze Nextcloud versie","<strong>%n</strong> apps hebben geen compatibele versie voor deze Nextcloud versie"] },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/pl.js b/apps/updatenotification/l10n/pl.js index 2bdb1219c62..ca65821bc55 100644 --- a/apps/updatenotification/l10n/pl.js +++ b/apps/updatenotification/l10n/pl.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Sprawdzanie aplikacji pod kątem kompatybilnych wersji", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Upewnij się, że opcja <samp>appstoreenabled</samp> w Twoim config.php nie jest ustawiona na false.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Nie można połączyć się ze sklepem z aplikacjami lub zgłasza brak aktualizacji. Wyszukaj aktualizacje ręcznie lub upewnij się, że serwer ma dostęp do Internetu i może łączyć się ze sklepem z aplikacjami.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Wszystkie</strong> aplikacje mają dostępną wersję zgodną z tą wersją Nextcloud", "View changelog" : "Zobacz listę zmian", "Enterprise" : "Komercyjna", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Do użytku firmowego. Zapewnia zawsze najnowszy poziom poprawek, które zostaną wprowadzone dopiero po przetestowaniu przez Nextcloud GmbH. Aktualizacja usunie błędy krytyczne i wprowadzi dodatkowe ulepszenia. Ten kanał jest dostępny tylko dla klientów, którzy posiadają pakiet dla firm.", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Najnowsza wersja stabilna. Jest odpowiednia do regularnego używania i zawsze będzie aktualizowana do najnowszej wersji głównej.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Wersja przedpremierowa tylko do testowania nowych funkcji. Nie jest do środowisk produkcyjnych.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplikacja nie ma kompatybilnej wersji dla tej wersji Nextcloud","<strong>%n</strong> aplikacje nie mają kompatybilnej wersji dla tej wersji Nextcloud","<strong>%n</strong> aplikacji nie ma kompatybilnej wersji dla tej wersji Nextcloud","<strong>%n</strong> aplikacji nie ma kompatybilnej wersji dla tej wersji Nextcloud"], "Apps missing updates" : "Brakujące aktualizacje aplikacji", "Apps with available updates" : "Dostępne aktualizacje dla aplikacji", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Zauważ, że po opublikowaniu nowej wersji może minąć trochę czasu, zanim pojawi się ona tutaj. Publikację dla naszych użytkowników rozkładamy w czasie, a czasami pomijamy wersję, gdy znajdziemy jakieś błędy.", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Sprawdzanie aplikacji pod kątem zgodnych aktualizacji", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Nie można połączyć się ze sklepem z aplikacjami lub zgłasza brak aktualizacji. Wyszukaj aktualizacje ręcznie lub upewnij się, że serwer ma dostęp do Internetu i może łączyć się ze sklepem z aplikacjami.", "<strong>All</strong> apps have an update for this version available" : "<strong>Wszystkie</strong> aplikacje mają dostępną aktualizację dla tej wersji", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikacja nie ma dostępnej aktualizacji dla tej wersji","<strong>%n</strong> aplikacje nie mają dostępnych aktualizacji dla tej wersji","<strong>%n</strong> aplikacji nie ma dostępnych aktualizacji dla tej wersji","<strong>%n</strong> aplikacje nie mają dostępnych aktualizacji dla tej wersji"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikacja nie ma dostępnej aktualizacji dla tej wersji","<strong>%n</strong> aplikacje nie mają dostępnych aktualizacji dla tej wersji","<strong>%n</strong> aplikacji nie ma dostępnych aktualizacji dla tej wersji","<strong>%n</strong> aplikacje nie mają dostępnych aktualizacji dla tej wersji"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Wszystkie</strong> aplikacje mają dostępną wersję zgodną z tą wersją Nextcloud", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplikacja nie ma kompatybilnej wersji dla tej wersji Nextcloud","<strong>%n</strong> aplikacje nie mają kompatybilnej wersji dla tej wersji Nextcloud","<strong>%n</strong> aplikacji nie ma kompatybilnej wersji dla tej wersji Nextcloud","<strong>%n</strong> aplikacji nie ma kompatybilnej wersji dla tej wersji Nextcloud"] }, "nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"); diff --git a/apps/updatenotification/l10n/pl.json b/apps/updatenotification/l10n/pl.json index d379c4fd50d..139a8881f66 100644 --- a/apps/updatenotification/l10n/pl.json +++ b/apps/updatenotification/l10n/pl.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Sprawdzanie aplikacji pod kątem kompatybilnych wersji", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Upewnij się, że opcja <samp>appstoreenabled</samp> w Twoim config.php nie jest ustawiona na false.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Nie można połączyć się ze sklepem z aplikacjami lub zgłasza brak aktualizacji. Wyszukaj aktualizacje ręcznie lub upewnij się, że serwer ma dostęp do Internetu i może łączyć się ze sklepem z aplikacjami.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Wszystkie</strong> aplikacje mają dostępną wersję zgodną z tą wersją Nextcloud", "View changelog" : "Zobacz listę zmian", "Enterprise" : "Komercyjna", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Do użytku firmowego. Zapewnia zawsze najnowszy poziom poprawek, które zostaną wprowadzone dopiero po przetestowaniu przez Nextcloud GmbH. Aktualizacja usunie błędy krytyczne i wprowadzi dodatkowe ulepszenia. Ten kanał jest dostępny tylko dla klientów, którzy posiadają pakiet dla firm.", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Najnowsza wersja stabilna. Jest odpowiednia do regularnego używania i zawsze będzie aktualizowana do najnowszej wersji głównej.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Wersja przedpremierowa tylko do testowania nowych funkcji. Nie jest do środowisk produkcyjnych.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplikacja nie ma kompatybilnej wersji dla tej wersji Nextcloud","<strong>%n</strong> aplikacje nie mają kompatybilnej wersji dla tej wersji Nextcloud","<strong>%n</strong> aplikacji nie ma kompatybilnej wersji dla tej wersji Nextcloud","<strong>%n</strong> aplikacji nie ma kompatybilnej wersji dla tej wersji Nextcloud"], "Apps missing updates" : "Brakujące aktualizacje aplikacji", "Apps with available updates" : "Dostępne aktualizacje dla aplikacji", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Zauważ, że po opublikowaniu nowej wersji może minąć trochę czasu, zanim pojawi się ona tutaj. Publikację dla naszych użytkowników rozkładamy w czasie, a czasami pomijamy wersję, gdy znajdziemy jakieś błędy.", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Sprawdzanie aplikacji pod kątem zgodnych aktualizacji", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Nie można połączyć się ze sklepem z aplikacjami lub zgłasza brak aktualizacji. Wyszukaj aktualizacje ręcznie lub upewnij się, że serwer ma dostęp do Internetu i może łączyć się ze sklepem z aplikacjami.", "<strong>All</strong> apps have an update for this version available" : "<strong>Wszystkie</strong> aplikacje mają dostępną aktualizację dla tej wersji", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikacja nie ma dostępnej aktualizacji dla tej wersji","<strong>%n</strong> aplikacje nie mają dostępnych aktualizacji dla tej wersji","<strong>%n</strong> aplikacji nie ma dostępnych aktualizacji dla tej wersji","<strong>%n</strong> aplikacje nie mają dostępnych aktualizacji dla tej wersji"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikacja nie ma dostępnej aktualizacji dla tej wersji","<strong>%n</strong> aplikacje nie mają dostępnych aktualizacji dla tej wersji","<strong>%n</strong> aplikacji nie ma dostępnych aktualizacji dla tej wersji","<strong>%n</strong> aplikacje nie mają dostępnych aktualizacji dla tej wersji"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Wszystkie</strong> aplikacje mają dostępną wersję zgodną z tą wersją Nextcloud", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplikacja nie ma kompatybilnej wersji dla tej wersji Nextcloud","<strong>%n</strong> aplikacje nie mają kompatybilnej wersji dla tej wersji Nextcloud","<strong>%n</strong> aplikacji nie ma kompatybilnej wersji dla tej wersji Nextcloud","<strong>%n</strong> aplikacji nie ma kompatybilnej wersji dla tej wersji Nextcloud"] },"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/pt_BR.js b/apps/updatenotification/l10n/pt_BR.js index da6ccebf0ec..17b68a9e613 100644 --- a/apps/updatenotification/l10n/pt_BR.js +++ b/apps/updatenotification/l10n/pt_BR.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Verificando aplicativos para versões compatíveis", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Certifique-se de que seu config.php não tenha configurado <samp>appstoreenabled</samp> para falso.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Não foi possível conectar à App Store ou nenhuma atualização foi retornada. Pesquise manualmente por atualizações ou certifique-se de que seu servidor tenha acesso à Internet e possa se conectar à App Store.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Todos</strong> os aplicativos têm uma versão compatível para esta versão Nextcloud disponível", "View changelog" : "Visualizar registro de alterações", "Enterprise" : "Empresarial", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Para uso empresarial. Fornece sempre o nível de patch mais recente, mas não será atualizado para a próxima versão principal imediatamente. Essa atualização acontece assim que a Nextcloud GmbH fizer mais ajustes e testes para implantações de larga escala e missão crítica. Este canal está disponível apenas para clientes do Nextcloud Enterprise.", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "A versão estável mais recente. É adequada para uso regular e será sempre atualizada para a versão principal mais recente.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Uma versão de pré-lançamento para testar novos recursos, não indicada para produção.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplicativo não têm versão compatível para esta versão Nextcloud disponível ","<strong>%n</strong> aplicativos não têm versão compatível para esta versão Nextcloud disponível"], "Apps missing updates" : "Aplicativos faltando atualizações", "Apps with available updates" : "Aplicativos com atualizações disponíveis", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Observe que uma nova versão pode levar um tempo até aparecer aqui. Lançamos novas versões distribuídas ao longo do tempo para nossos usuários e às vezes pulamos uma versão quando problemas são encontrados.", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Verificando atualização dos aplicativos", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Não foi possível conectar a appstore ou não havia atualização. Procure manualmente por atualizações ou verifique se o servidor tem acesso à internet.", "<strong>All</strong> apps have an update for this version available" : "<strong>Todos</strong> os aplicativos tem uma atualização disponível", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplicativo não tem atualização disponível","<strong>%n</strong> aplicativos tem uma atualização disponível"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplicativo não tem atualização disponível","<strong>%n</strong> aplicativos tem uma atualização disponível"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Todos</strong> os aplicativos têm uma versão compatível para esta versão Nextcloud disponível", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplicativo não têm versão compatível para esta versão Nextcloud disponível ","<strong>%n</strong> aplicativos não têm versão compatível para esta versão Nextcloud disponível"] }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/updatenotification/l10n/pt_BR.json b/apps/updatenotification/l10n/pt_BR.json index 03eb14de650..09445e36097 100644 --- a/apps/updatenotification/l10n/pt_BR.json +++ b/apps/updatenotification/l10n/pt_BR.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Verificando aplicativos para versões compatíveis", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Certifique-se de que seu config.php não tenha configurado <samp>appstoreenabled</samp> para falso.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Não foi possível conectar à App Store ou nenhuma atualização foi retornada. Pesquise manualmente por atualizações ou certifique-se de que seu servidor tenha acesso à Internet e possa se conectar à App Store.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Todos</strong> os aplicativos têm uma versão compatível para esta versão Nextcloud disponível", "View changelog" : "Visualizar registro de alterações", "Enterprise" : "Empresarial", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Para uso empresarial. Fornece sempre o nível de patch mais recente, mas não será atualizado para a próxima versão principal imediatamente. Essa atualização acontece assim que a Nextcloud GmbH fizer mais ajustes e testes para implantações de larga escala e missão crítica. Este canal está disponível apenas para clientes do Nextcloud Enterprise.", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "A versão estável mais recente. É adequada para uso regular e será sempre atualizada para a versão principal mais recente.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Uma versão de pré-lançamento para testar novos recursos, não indicada para produção.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplicativo não têm versão compatível para esta versão Nextcloud disponível ","<strong>%n</strong> aplicativos não têm versão compatível para esta versão Nextcloud disponível"], "Apps missing updates" : "Aplicativos faltando atualizações", "Apps with available updates" : "Aplicativos com atualizações disponíveis", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Observe que uma nova versão pode levar um tempo até aparecer aqui. Lançamos novas versões distribuídas ao longo do tempo para nossos usuários e às vezes pulamos uma versão quando problemas são encontrados.", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Verificando atualização dos aplicativos", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Não foi possível conectar a appstore ou não havia atualização. Procure manualmente por atualizações ou verifique se o servidor tem acesso à internet.", "<strong>All</strong> apps have an update for this version available" : "<strong>Todos</strong> os aplicativos tem uma atualização disponível", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplicativo não tem atualização disponível","<strong>%n</strong> aplicativos tem uma atualização disponível"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplicativo não tem atualização disponível","<strong>%n</strong> aplicativos tem uma atualização disponível"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Todos</strong> os aplicativos têm uma versão compatível para esta versão Nextcloud disponível", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplicativo não têm versão compatível para esta versão Nextcloud disponível ","<strong>%n</strong> aplicativos não têm versão compatível para esta versão Nextcloud disponível"] },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/ru.js b/apps/updatenotification/l10n/ru.js index f5f36a512ed..11dc18b0121 100644 --- a/apps/updatenotification/l10n/ru.js +++ b/apps/updatenotification/l10n/ru.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Проверка приложений на совместимость версий", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Убедитесь, что значением параметра <samp>appstoreenabled</samp> в файле «config.php» не является «false».", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Не удалось подключиться к App Store или обновления не были получены. Выполните поиск обновлений вручную или убедитесь, что ваш сервер имеет доступ к Интернету и может подключиться к App Store.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Все</strong> приложения имеют версию, совместимую с этой версией Nextcloud.", "View changelog" : "Просмотреть изменения", "Enterprise" : "Использование на предприятии (Enterprise)", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Для корпоративного использования. Всегда обеспечивает самый последний уровень исправлений, но не будет немедленно обновляться до следующего основного выпуска. Обновление произойдет, когда Nextcloud GmbH проведут дополнительное тестирование для крупномасштабных и критически важных развертываний. Этот канал доступен только для клиентов и предоставляет пакет Nextcloud Enterprise.", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Актуальная стабильная версия. Подходит для обычного использования и будет обновляться до старшей версии сразу после её выхода.", "Beta" : "Бета-версии (Beta)", "A pre-release version only for testing new features, not for production environments." : "Предрелизная версия, предназначенная только для тестирования новых возможностей.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["У <strong>%n</strong> приложения нет версии, совместимой с этой версией Nextcloud.","У <strong>%n</strong> приложений нет версии, совместимой с этой версией Nextcloud.","У <strong>%n</strong> приложений нет версии, совместимой с этой версией Nextcloud.","У <strong>%n</strong> приложений нет версии, совместимой с этой версией Nextcloud."], "Apps missing updates" : "Приложения без обновлений", "Apps with available updates" : "Приложения с доступными обновлениями", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Обратите внимание, что с момента выпуска новой версии до её появления здесь может пройти некоторое время. Мы растягиваем во времени распространение новых версий и иногда, при обнаружении проблем, пропускаем версию.", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Проверка приложений на совместимые обновления", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Не удалось установить соединение с магазином приложений, либо магазин приложений не предоставляет информации об обновлениях. Выполните поиск обновлений вручную, или убедитесь, что сервер имеет подключение к Интернет и магазин приложений доступен.", "<strong>All</strong> apps have an update for this version available" : "<strong>Все</strong> приложения имеют доступные обновления для этой версии", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["Для <strong>%n</strong> приложения отсутствует обновление, совместимое с этой версией.","Для <strong>%n</strong> приложений отсутствуют обновления, совместимые с этой версией.","Для <strong>%n</strong> приложений отсутствуют обновления, совместимые с этой версией.","Для <strong>%n</strong> приложений отсутствуют обновления, совместимые с этой версией."] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["Для <strong>%n</strong> приложения отсутствует обновление, совместимое с этой версией.","Для <strong>%n</strong> приложений отсутствуют обновления, совместимые с этой версией.","Для <strong>%n</strong> приложений отсутствуют обновления, совместимые с этой версией.","Для <strong>%n</strong> приложений отсутствуют обновления, совместимые с этой версией."], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Все</strong> приложения имеют версию, совместимую с этой версией Nextcloud.", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["У <strong>%n</strong> приложения нет версии, совместимой с этой версией Nextcloud.","У <strong>%n</strong> приложений нет версии, совместимой с этой версией Nextcloud.","У <strong>%n</strong> приложений нет версии, совместимой с этой версией Nextcloud.","У <strong>%n</strong> приложений нет версии, совместимой с этой версией Nextcloud."] }, "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/apps/updatenotification/l10n/ru.json b/apps/updatenotification/l10n/ru.json index e6c573faf56..f79eba3f262 100644 --- a/apps/updatenotification/l10n/ru.json +++ b/apps/updatenotification/l10n/ru.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Проверка приложений на совместимость версий", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Убедитесь, что значением параметра <samp>appstoreenabled</samp> в файле «config.php» не является «false».", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Не удалось подключиться к App Store или обновления не были получены. Выполните поиск обновлений вручную или убедитесь, что ваш сервер имеет доступ к Интернету и может подключиться к App Store.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Все</strong> приложения имеют версию, совместимую с этой версией Nextcloud.", "View changelog" : "Просмотреть изменения", "Enterprise" : "Использование на предприятии (Enterprise)", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Для корпоративного использования. Всегда обеспечивает самый последний уровень исправлений, но не будет немедленно обновляться до следующего основного выпуска. Обновление произойдет, когда Nextcloud GmbH проведут дополнительное тестирование для крупномасштабных и критически важных развертываний. Этот канал доступен только для клиентов и предоставляет пакет Nextcloud Enterprise.", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Актуальная стабильная версия. Подходит для обычного использования и будет обновляться до старшей версии сразу после её выхода.", "Beta" : "Бета-версии (Beta)", "A pre-release version only for testing new features, not for production environments." : "Предрелизная версия, предназначенная только для тестирования новых возможностей.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["У <strong>%n</strong> приложения нет версии, совместимой с этой версией Nextcloud.","У <strong>%n</strong> приложений нет версии, совместимой с этой версией Nextcloud.","У <strong>%n</strong> приложений нет версии, совместимой с этой версией Nextcloud.","У <strong>%n</strong> приложений нет версии, совместимой с этой версией Nextcloud."], "Apps missing updates" : "Приложения без обновлений", "Apps with available updates" : "Приложения с доступными обновлениями", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Обратите внимание, что с момента выпуска новой версии до её появления здесь может пройти некоторое время. Мы растягиваем во времени распространение новых версий и иногда, при обнаружении проблем, пропускаем версию.", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Проверка приложений на совместимые обновления", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Не удалось установить соединение с магазином приложений, либо магазин приложений не предоставляет информации об обновлениях. Выполните поиск обновлений вручную, или убедитесь, что сервер имеет подключение к Интернет и магазин приложений доступен.", "<strong>All</strong> apps have an update for this version available" : "<strong>Все</strong> приложения имеют доступные обновления для этой версии", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["Для <strong>%n</strong> приложения отсутствует обновление, совместимое с этой версией.","Для <strong>%n</strong> приложений отсутствуют обновления, совместимые с этой версией.","Для <strong>%n</strong> приложений отсутствуют обновления, совместимые с этой версией.","Для <strong>%n</strong> приложений отсутствуют обновления, совместимые с этой версией."] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["Для <strong>%n</strong> приложения отсутствует обновление, совместимое с этой версией.","Для <strong>%n</strong> приложений отсутствуют обновления, совместимые с этой версией.","Для <strong>%n</strong> приложений отсутствуют обновления, совместимые с этой версией.","Для <strong>%n</strong> приложений отсутствуют обновления, совместимые с этой версией."], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Все</strong> приложения имеют версию, совместимую с этой версией Nextcloud.", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["У <strong>%n</strong> приложения нет версии, совместимой с этой версией Nextcloud.","У <strong>%n</strong> приложений нет версии, совместимой с этой версией Nextcloud.","У <strong>%n</strong> приложений нет версии, совместимой с этой версией Nextcloud.","У <strong>%n</strong> приложений нет версии, совместимой с этой версией Nextcloud."] },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/sc.js b/apps/updatenotification/l10n/sc.js index 07f1f0a8756..357f18149fb 100644 --- a/apps/updatenotification/l10n/sc.js +++ b/apps/updatenotification/l10n/sc.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Controllu de aplicatziones cun versiones cumpatìbiles", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Segura·ti chi su config.php tuo non tèngiat <samp>appstoreenabled</samp> impostada a false.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "No at fatu a si connètere a sa butega de aplicatziones o a sa butega de aplicatziones no at torradu perunu agiornamentu. Chirca a manu is agiornamentos o segura·ti chi su serbidore potzat intrare a Internet e si potzat collegare a sa butega de aplicatziones.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Totu</strong> is aplicatziones tenent una versione cumpatìbile a disponimentu pro custa versione de Nextcloud", "View changelog" : "Visualiza le novidade", "Enterprise" : "Impresa", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Pro un'impreu aziendale. Frunit semper s'ùrtimu livellu de patch, ma non s'at a agiornare deretu a s'ùrtima versione printzipale. Tale agiornamentu at a èssere a disponimentu in su momentu chi Nextcloud GmbH at a àere megioradu sa seguresa, at a àere fatu proas a iscala manna e installatziones in ambientes de importu mannu. Custu canale est a disponimentu isceti pro is clientes e frunit is pachetes Nextcloud Enterprise.", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Sa versione istàbile prus reghente. Est dèghida pro s'impreu fitianu e at a èssere semper agiornada a s'ùrtima versione printzipale.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Una versione pre-publicatzione isceti pro proare is funtzionalidades noas, non pro ambientes de produtzione.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong>aplicatziones no tenent una versione noa cumpatìbile a disponimentu pro custa versione de Nextcloud ","<strong>%n</strong> "], "Apps missing updates" : "Aplicatzione no agiornadas", "Apps with available updates" : "Aplicatziones cun agiornamentos a disponimentu", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Càstia chi, a pustis de una versione noa, bi diat pòdere chèrrere tempus in antis chi si bidat inoghe. Publicamus in su tempus versiones noas a is utentes nostros e, a bortas, brincamus una versione, si b'at problemas. ", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Controlla is aplicatziones pro agiornamentos cumpatìbiles", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "No at fatu a si connètere a sa butega de aplicatziones o a sa butega de aplicatziones no at torradu perunu agiornamentu. Chirca a manu is agiornamentos o segura·ti chi su serbidore potzat intrare a Internet e si potzat collegare a sa butega de aplicatziones.", "<strong>All</strong> apps have an update for this version available" : "<strong>Totu</strong> is aplicatziones tenent un'agiornamentu a disponimentu pro custa versione", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplicatziones non tenent un'agiornamentu a disponimentu pro custa versione","<strong>%n</strong>"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplicatziones non tenent un'agiornamentu a disponimentu pro custa versione","<strong>%n</strong>"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Totu</strong> is aplicatziones tenent una versione cumpatìbile a disponimentu pro custa versione de Nextcloud", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong>aplicatziones no tenent una versione noa cumpatìbile a disponimentu pro custa versione de Nextcloud ","<strong>%n</strong> "] }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/sc.json b/apps/updatenotification/l10n/sc.json index dfcbce82340..3491a8134c0 100644 --- a/apps/updatenotification/l10n/sc.json +++ b/apps/updatenotification/l10n/sc.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Controllu de aplicatziones cun versiones cumpatìbiles", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Segura·ti chi su config.php tuo non tèngiat <samp>appstoreenabled</samp> impostada a false.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "No at fatu a si connètere a sa butega de aplicatziones o a sa butega de aplicatziones no at torradu perunu agiornamentu. Chirca a manu is agiornamentos o segura·ti chi su serbidore potzat intrare a Internet e si potzat collegare a sa butega de aplicatziones.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Totu</strong> is aplicatziones tenent una versione cumpatìbile a disponimentu pro custa versione de Nextcloud", "View changelog" : "Visualiza le novidade", "Enterprise" : "Impresa", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Pro un'impreu aziendale. Frunit semper s'ùrtimu livellu de patch, ma non s'at a agiornare deretu a s'ùrtima versione printzipale. Tale agiornamentu at a èssere a disponimentu in su momentu chi Nextcloud GmbH at a àere megioradu sa seguresa, at a àere fatu proas a iscala manna e installatziones in ambientes de importu mannu. Custu canale est a disponimentu isceti pro is clientes e frunit is pachetes Nextcloud Enterprise.", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Sa versione istàbile prus reghente. Est dèghida pro s'impreu fitianu e at a èssere semper agiornada a s'ùrtima versione printzipale.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Una versione pre-publicatzione isceti pro proare is funtzionalidades noas, non pro ambientes de produtzione.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong>aplicatziones no tenent una versione noa cumpatìbile a disponimentu pro custa versione de Nextcloud ","<strong>%n</strong> "], "Apps missing updates" : "Aplicatzione no agiornadas", "Apps with available updates" : "Aplicatziones cun agiornamentos a disponimentu", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Càstia chi, a pustis de una versione noa, bi diat pòdere chèrrere tempus in antis chi si bidat inoghe. Publicamus in su tempus versiones noas a is utentes nostros e, a bortas, brincamus una versione, si b'at problemas. ", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Controlla is aplicatziones pro agiornamentos cumpatìbiles", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "No at fatu a si connètere a sa butega de aplicatziones o a sa butega de aplicatziones no at torradu perunu agiornamentu. Chirca a manu is agiornamentos o segura·ti chi su serbidore potzat intrare a Internet e si potzat collegare a sa butega de aplicatziones.", "<strong>All</strong> apps have an update for this version available" : "<strong>Totu</strong> is aplicatziones tenent un'agiornamentu a disponimentu pro custa versione", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplicatziones non tenent un'agiornamentu a disponimentu pro custa versione","<strong>%n</strong>"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplicatziones non tenent un'agiornamentu a disponimentu pro custa versione","<strong>%n</strong>"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Totu</strong> is aplicatziones tenent una versione cumpatìbile a disponimentu pro custa versione de Nextcloud", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong>aplicatziones no tenent una versione noa cumpatìbile a disponimentu pro custa versione de Nextcloud ","<strong>%n</strong> "] },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/sk.js b/apps/updatenotification/l10n/sk.js index 7d339af463e..014fab84a59 100644 --- a/apps/updatenotification/l10n/sk.js +++ b/apps/updatenotification/l10n/sk.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Kontrolujú sa aplikácie na kompatibilné verzie", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Prosím uistite sa, že Váš config.php nemá nastavené <samp>appstoreenabled</samp>na false.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Nepodarilo sa pripojiť k obchodu s aplikáciami alebo obchod nemá žiadne aktualizácie. Aktualizácie hľadajte manuálne alebo sa uistite, že Váš server má prístup na internet a že sa môže pripojiť k obchodu.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Všetky</strong> aplikácie majú dostupnú kompatibilnú verziu s týmto Nextcloudom", "View changelog" : "Zobraziť súhrn zmien", "Enterprise" : "Podnikové", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Pre podnikové použitie. Poskytuje vždy najnovšiu úroveň opráv, ale neaktualizuje sa okamžite na ďalšie hlavné vydanie. K tejto aktualizácii dôjde, keď Nextcloud GmbH urobí ďalšie zodolnenie a testovanie pre veľké a kritické nasadenia. Tento kanál je k dispozícii iba pre zákazníkov a poskytuje balík Nextcloud Enterprise.", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Najnovšia stabilná verzia. Je vhodná na bežné používanie a vždy sa aktualizuje na najnovšiu hlavnú verziu.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Verzia pred vydaním iba na testovanie nových funkcií, nie pre praktické nasadenie.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplikácia nemá dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom"], "Apps missing updates" : "Aplikácie s chýbajúcimi aktualizáciami", "Apps with available updates" : "Aplikácie pre ktoré sú dostupné aktualizácie", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Upozorňujeme, že po oficiálnom vydaní novej verzie môže chvíľu trvať, než sa tu objaví. Nové verzie medzi našich používateľov distribuujeme priebežne rozložené v čase a ak sa nájdu chyby, niekedy danú verziu preskočíme.", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Kontrolujú sa aplikácie na kompatibilné aktualizácie", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Nepodarilo sa pripojiť k obchodu s aplikáciami alebo obchod nemá žiadne aktualizácie. Aktualizácie hľadajte manuálne alebo sa uistite, že Váš server má prístup na internet a že sa môže pripojiť k obchodu.", "<strong>All</strong> apps have an update for this version available" : "<strong>Všetky</strong> aplikácie majú dostupnú aktualizáciu", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikácia nemá dostupnú aktualizáciu na túto verziu","<strong>%n</strong> aplikácie nemá dostupnú aktualizáciu na túto verziu ","<strong>%n</strong> aplikácií nemá dostupnú aktualizáciu na túto verziu","<strong>%n</strong>aplikácií nemá dostupnú aktualizáciu na túto verziu"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikácia nemá dostupnú aktualizáciu na túto verziu","<strong>%n</strong> aplikácie nemá dostupnú aktualizáciu na túto verziu ","<strong>%n</strong> aplikácií nemá dostupnú aktualizáciu na túto verziu","<strong>%n</strong>aplikácií nemá dostupnú aktualizáciu na túto verziu"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Všetky</strong> aplikácie majú dostupnú kompatibilnú verziu s týmto Nextcloudom", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplikácia nemá dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom"] }, "nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"); diff --git a/apps/updatenotification/l10n/sk.json b/apps/updatenotification/l10n/sk.json index 5ad9f95f540..1721f3a605d 100644 --- a/apps/updatenotification/l10n/sk.json +++ b/apps/updatenotification/l10n/sk.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Kontrolujú sa aplikácie na kompatibilné verzie", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Prosím uistite sa, že Váš config.php nemá nastavené <samp>appstoreenabled</samp>na false.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Nepodarilo sa pripojiť k obchodu s aplikáciami alebo obchod nemá žiadne aktualizácie. Aktualizácie hľadajte manuálne alebo sa uistite, že Váš server má prístup na internet a že sa môže pripojiť k obchodu.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Všetky</strong> aplikácie majú dostupnú kompatibilnú verziu s týmto Nextcloudom", "View changelog" : "Zobraziť súhrn zmien", "Enterprise" : "Podnikové", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Pre podnikové použitie. Poskytuje vždy najnovšiu úroveň opráv, ale neaktualizuje sa okamžite na ďalšie hlavné vydanie. K tejto aktualizácii dôjde, keď Nextcloud GmbH urobí ďalšie zodolnenie a testovanie pre veľké a kritické nasadenia. Tento kanál je k dispozícii iba pre zákazníkov a poskytuje balík Nextcloud Enterprise.", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Najnovšia stabilná verzia. Je vhodná na bežné používanie a vždy sa aktualizuje na najnovšiu hlavnú verziu.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Verzia pred vydaním iba na testovanie nových funkcií, nie pre praktické nasadenie.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplikácia nemá dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom"], "Apps missing updates" : "Aplikácie s chýbajúcimi aktualizáciami", "Apps with available updates" : "Aplikácie pre ktoré sú dostupné aktualizácie", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Upozorňujeme, že po oficiálnom vydaní novej verzie môže chvíľu trvať, než sa tu objaví. Nové verzie medzi našich používateľov distribuujeme priebežne rozložené v čase a ak sa nájdu chyby, niekedy danú verziu preskočíme.", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Kontrolujú sa aplikácie na kompatibilné aktualizácie", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Nepodarilo sa pripojiť k obchodu s aplikáciami alebo obchod nemá žiadne aktualizácie. Aktualizácie hľadajte manuálne alebo sa uistite, že Váš server má prístup na internet a že sa môže pripojiť k obchodu.", "<strong>All</strong> apps have an update for this version available" : "<strong>Všetky</strong> aplikácie majú dostupnú aktualizáciu", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikácia nemá dostupnú aktualizáciu na túto verziu","<strong>%n</strong> aplikácie nemá dostupnú aktualizáciu na túto verziu ","<strong>%n</strong> aplikácií nemá dostupnú aktualizáciu na túto verziu","<strong>%n</strong>aplikácií nemá dostupnú aktualizáciu na túto verziu"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> aplikácia nemá dostupnú aktualizáciu na túto verziu","<strong>%n</strong> aplikácie nemá dostupnú aktualizáciu na túto verziu ","<strong>%n</strong> aplikácií nemá dostupnú aktualizáciu na túto verziu","<strong>%n</strong>aplikácií nemá dostupnú aktualizáciu na túto verziu"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Všetky</strong> aplikácie majú dostupnú kompatibilnú verziu s týmto Nextcloudom", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> aplikácia nemá dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom","<strong>%n</strong> aplikácie nemajú dostupnú kompatibilnú verziu s týmto Nextcloudom"] },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/sl.js b/apps/updatenotification/l10n/sl.js index fb82dc359d0..8b2f211df7f 100644 --- a/apps/updatenotification/l10n/sl.js +++ b/apps/updatenotification/l10n/sl.js @@ -34,7 +34,6 @@ OC.L10N.register( "Checked on {lastCheckedDate}" : "Nazadnje preverjeno {lastCheckedDate}", "Checking apps for compatible versions" : "Preverjanje skladnih posodobitev različic programov", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Prepričajte se, da v datoteki config.php možnost <samp>appstoreenabled</samp> ni nastavljena na vrednost napak – false.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Vsi</strong> nameščeni programi imajo pripravljene posodobitve, skladne s to različico okolja Nextcloud.", "View changelog" : "Ogled Dnevnika sprememb", "Enterprise" : "Poslovno", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Za poslovno uporabo. Na voljo so najnovejši popravki programov in manjše posodobitve, ne pa tudi takojšnja nadgradnja sistema na naslednjo večjo različico. Ta posodobitev je na voljo šele po daljšem in podrobnejšem preizkušanju sistema. Ta kanal je na voljo le naročnikom, ki uporabljajo paket Nextcloud Enterprise.", @@ -42,7 +41,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Najnovejša stabilna različica je primerna za običajno rabo in bo vedno posodobljena na zadnjo najvišjo različico.", "Beta" : "Preizkusno", "A pre-release version only for testing new features, not for production environments." : "Preizkusna različica je namenjena preizkušanju novih zmožnosti in ni primerna za produkcijska okolja.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["S to različico okolja Nextcloud ima potrjene skladne posodobitve <strong>%n</strong> nameščen program.","S to različico okolja Nextcloud imata potrjene skladne posodobitve <strong>%n</strong> nameščena programa.","S to različico okolja Nextcloud imajo potrjene skladne posodobitve <strong>%n</strong> nameščeni programi.","S to različico okolja Nextcloud ima potrjene skladne posodobitve <strong>%n</strong> nameščenih programov."], "Apps missing updates" : "Manjkajoče programske posodobitve", "Apps with available updates" : "Programi z objavljenimi posodobitvami", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Po vsaki novi objavi je lahko tudi daljši časovni zamik, preden se posodobitev pojavi v sistemu. Nove različice objavljamo v časovnih razmikih in včasih kakšno tudi preskočimo, če prvi uporabniki zaznajo težave ali napake.", @@ -50,6 +48,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Poteka preverjanje za skladne posodobitve ...", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "S trgovino se ni mogoče povezati, ali pa usklajevanje ni vrnilo nobenih posodobitev. Te je mogoče poiskati tudi ročno, priporočljivo pa je preveriti, ali ima strežnik dostop do interneta in je povezava s trgovino sploh mogoča.", "<strong>All</strong> apps have an update for this version available" : "Za <strong>vse nameščene programe</strong> je na voljo podprta posodobitev.", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["Za <strong>%n</strong> program je na voljo posodobitev za to različico.","Za <strong>%n</strong> programa so na voljo posodobitve za to različico.","Za <strong>%n</strong> programe so na voljo posodobitve za to različico.","Za <strong>%n</strong> programov so na voljo posodobitve za to različico."] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["Za <strong>%n</strong> program je na voljo posodobitev za to različico.","Za <strong>%n</strong> programa so na voljo posodobitve za to različico.","Za <strong>%n</strong> programe so na voljo posodobitve za to različico.","Za <strong>%n</strong> programov so na voljo posodobitve za to različico."], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Vsi</strong> nameščeni programi imajo pripravljene posodobitve, skladne s to različico okolja Nextcloud.", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["S to različico okolja Nextcloud ima potrjene skladne posodobitve <strong>%n</strong> nameščen program.","S to različico okolja Nextcloud imata potrjene skladne posodobitve <strong>%n</strong> nameščena programa.","S to različico okolja Nextcloud imajo potrjene skladne posodobitve <strong>%n</strong> nameščeni programi.","S to različico okolja Nextcloud ima potrjene skladne posodobitve <strong>%n</strong> nameščenih programov."] }, "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); diff --git a/apps/updatenotification/l10n/sl.json b/apps/updatenotification/l10n/sl.json index ead31ff90b9..980913ab9dc 100644 --- a/apps/updatenotification/l10n/sl.json +++ b/apps/updatenotification/l10n/sl.json @@ -32,7 +32,6 @@ "Checked on {lastCheckedDate}" : "Nazadnje preverjeno {lastCheckedDate}", "Checking apps for compatible versions" : "Preverjanje skladnih posodobitev različic programov", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Prepričajte se, da v datoteki config.php možnost <samp>appstoreenabled</samp> ni nastavljena na vrednost napak – false.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Vsi</strong> nameščeni programi imajo pripravljene posodobitve, skladne s to različico okolja Nextcloud.", "View changelog" : "Ogled Dnevnika sprememb", "Enterprise" : "Poslovno", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Za poslovno uporabo. Na voljo so najnovejši popravki programov in manjše posodobitve, ne pa tudi takojšnja nadgradnja sistema na naslednjo večjo različico. Ta posodobitev je na voljo šele po daljšem in podrobnejšem preizkušanju sistema. Ta kanal je na voljo le naročnikom, ki uporabljajo paket Nextcloud Enterprise.", @@ -40,7 +39,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Najnovejša stabilna različica je primerna za običajno rabo in bo vedno posodobljena na zadnjo najvišjo različico.", "Beta" : "Preizkusno", "A pre-release version only for testing new features, not for production environments." : "Preizkusna različica je namenjena preizkušanju novih zmožnosti in ni primerna za produkcijska okolja.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["S to različico okolja Nextcloud ima potrjene skladne posodobitve <strong>%n</strong> nameščen program.","S to različico okolja Nextcloud imata potrjene skladne posodobitve <strong>%n</strong> nameščena programa.","S to različico okolja Nextcloud imajo potrjene skladne posodobitve <strong>%n</strong> nameščeni programi.","S to različico okolja Nextcloud ima potrjene skladne posodobitve <strong>%n</strong> nameščenih programov."], "Apps missing updates" : "Manjkajoče programske posodobitve", "Apps with available updates" : "Programi z objavljenimi posodobitvami", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Po vsaki novi objavi je lahko tudi daljši časovni zamik, preden se posodobitev pojavi v sistemu. Nove različice objavljamo v časovnih razmikih in včasih kakšno tudi preskočimo, če prvi uporabniki zaznajo težave ali napake.", @@ -48,6 +46,8 @@ "Checking apps for compatible updates" : "Poteka preverjanje za skladne posodobitve ...", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "S trgovino se ni mogoče povezati, ali pa usklajevanje ni vrnilo nobenih posodobitev. Te je mogoče poiskati tudi ročno, priporočljivo pa je preveriti, ali ima strežnik dostop do interneta in je povezava s trgovino sploh mogoča.", "<strong>All</strong> apps have an update for this version available" : "Za <strong>vse nameščene programe</strong> je na voljo podprta posodobitev.", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["Za <strong>%n</strong> program je na voljo posodobitev za to različico.","Za <strong>%n</strong> programa so na voljo posodobitve za to različico.","Za <strong>%n</strong> programe so na voljo posodobitve za to različico.","Za <strong>%n</strong> programov so na voljo posodobitve za to različico."] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["Za <strong>%n</strong> program je na voljo posodobitev za to različico.","Za <strong>%n</strong> programa so na voljo posodobitve za to različico.","Za <strong>%n</strong> programe so na voljo posodobitve za to različico.","Za <strong>%n</strong> programov so na voljo posodobitve za to različico."], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Vsi</strong> nameščeni programi imajo pripravljene posodobitve, skladne s to različico okolja Nextcloud.", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["S to različico okolja Nextcloud ima potrjene skladne posodobitve <strong>%n</strong> nameščen program.","S to različico okolja Nextcloud imata potrjene skladne posodobitve <strong>%n</strong> nameščena programa.","S to različico okolja Nextcloud imajo potrjene skladne posodobitve <strong>%n</strong> nameščeni programi.","S to različico okolja Nextcloud ima potrjene skladne posodobitve <strong>%n</strong> nameščenih programov."] },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/sv.js b/apps/updatenotification/l10n/sv.js index 122a889b88c..3d70f7a5812 100644 --- a/apps/updatenotification/l10n/sv.js +++ b/apps/updatenotification/l10n/sv.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Kontrollerar appar efter kompatibla versioner", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Se till att din config.php inte ställer in <samp>appstoreenabled</samp> till falsk.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Kunde inte ansluta till appbutiken eller så returnerades inga uppdateringar alls. Sök manuellt för uppdateringar och säkerställ att din server har tillgång till internet och kan ansluta till appbutiken.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Alla</strong> appar har en kompatibel version för denna version av Nextcloud.", "View changelog" : "Visa ändringslogg", "Enterprise" : "Enterprise", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Innehåller alltid den senaste patchnivån, men uppdateras inte omedelbart till nästa större version. Den uppdateringen sker när Nextcloud GmbH har utfört ytterligare verifiering och testning för storskaliga och kritiska installationer. Den här kanalen är endast tillgänglig för kunder och tillhandahåller Nextcloud Enterprise-paketet.", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Den senaste stabila versionen. Den är lämplig för regelbunden användning och kommer alltid att uppdatera till den senaste större mer omfattande versionen.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "En förhandsversion endast för att testa nya funktioner, inte för produktionsmiljöer.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> app har ingen tillgänglig kompatibel version för denna version av Nextcloud.","<strong>%n</strong> appar har ingen tillgänglig kompatibel version för denna version av Nextcloud."], "Apps missing updates" : "Appar som saknar uppdateringar", "Apps with available updates" : "Appar med tillgängliga uppdateringar", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Notera att när en ny version släppts kan det ta lite tid innan den dyker upp här. Vi rullar ut nya versioner till våra användare vid utspridda tillfällen och hoppar ibland över versioner när problem hittas.", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Kontrollera appar för kompatibla uppdateringar", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Kunde inte ansluta till appbutiken eller så returnerades inga uppdateringar alls. Sök manuellt för uppdateringar och säkerställ att din server har tillgång till internet och kan ansluta till appbutiken.", "<strong>All</strong> apps have an update for this version available" : "<strong>Alla</strong> appar har en uppdatering för den här versionen tillgänglig", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> appen har ingen uppdatering för den här versionen tillgänglig","<strong>%n</strong> appar har inga uppdateringar för den här versionen tillgänglig"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> appen har ingen uppdatering för den här versionen tillgänglig","<strong>%n</strong> appar har inga uppdateringar för den här versionen tillgänglig"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Alla</strong> appar har en kompatibel version för denna version av Nextcloud.", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> app har ingen tillgänglig kompatibel version för denna version av Nextcloud.","<strong>%n</strong> appar har ingen tillgänglig kompatibel version för denna version av Nextcloud."] }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/sv.json b/apps/updatenotification/l10n/sv.json index 634bc425c31..0d91ff20a76 100644 --- a/apps/updatenotification/l10n/sv.json +++ b/apps/updatenotification/l10n/sv.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Kontrollerar appar efter kompatibla versioner", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Se till att din config.php inte ställer in <samp>appstoreenabled</samp> till falsk.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Kunde inte ansluta till appbutiken eller så returnerades inga uppdateringar alls. Sök manuellt för uppdateringar och säkerställ att din server har tillgång till internet och kan ansluta till appbutiken.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Alla</strong> appar har en kompatibel version för denna version av Nextcloud.", "View changelog" : "Visa ändringslogg", "Enterprise" : "Enterprise", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Innehåller alltid den senaste patchnivån, men uppdateras inte omedelbart till nästa större version. Den uppdateringen sker när Nextcloud GmbH har utfört ytterligare verifiering och testning för storskaliga och kritiska installationer. Den här kanalen är endast tillgänglig för kunder och tillhandahåller Nextcloud Enterprise-paketet.", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Den senaste stabila versionen. Den är lämplig för regelbunden användning och kommer alltid att uppdatera till den senaste större mer omfattande versionen.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "En förhandsversion endast för att testa nya funktioner, inte för produktionsmiljöer.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> app har ingen tillgänglig kompatibel version för denna version av Nextcloud.","<strong>%n</strong> appar har ingen tillgänglig kompatibel version för denna version av Nextcloud."], "Apps missing updates" : "Appar som saknar uppdateringar", "Apps with available updates" : "Appar med tillgängliga uppdateringar", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Notera att när en ny version släppts kan det ta lite tid innan den dyker upp här. Vi rullar ut nya versioner till våra användare vid utspridda tillfällen och hoppar ibland över versioner när problem hittas.", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Kontrollera appar för kompatibla uppdateringar", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Kunde inte ansluta till appbutiken eller så returnerades inga uppdateringar alls. Sök manuellt för uppdateringar och säkerställ att din server har tillgång till internet och kan ansluta till appbutiken.", "<strong>All</strong> apps have an update for this version available" : "<strong>Alla</strong> appar har en uppdatering för den här versionen tillgänglig", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> appen har ingen uppdatering för den här versionen tillgänglig","<strong>%n</strong> appar har inga uppdateringar för den här versionen tillgänglig"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> appen har ingen uppdatering för den här versionen tillgänglig","<strong>%n</strong> appar har inga uppdateringar för den här versionen tillgänglig"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Alla</strong> appar har en kompatibel version för denna version av Nextcloud.", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> app har ingen tillgänglig kompatibel version för denna version av Nextcloud.","<strong>%n</strong> appar har ingen tillgänglig kompatibel version för denna version av Nextcloud."] },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/tr.js b/apps/updatenotification/l10n/tr.js index afee2e9bb5d..797bd81164d 100644 --- a/apps/updatenotification/l10n/tr.js +++ b/apps/updatenotification/l10n/tr.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "Uygulamalar uyumlu sürümler için denetleniyor", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Lütfen config.php dosyasındaki <samp>appstoreenabled</samp> seçeneğinin false olarak ayarlanmadığından emin olun.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Uygulama mağazası ile bağlantı kurulamadı ya da uygulama mağazasında herhangi bir güncelleme yok. Güncellemeleri el ile arayın ya da sunucunuzun İnternet ve uygulama mağazası ile bağlantı kurabildiğinden emin olun.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Tüm</strong> uygulamaların bu Nextcloud sürümü ile uyumlu bir sürümü var", "View changelog" : "Değişiklik günlüğünü görüntüle", "Enterprise" : "Kurumsal", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Kurumsal kullanım için her zaman en son yayınlanmış yama düzeyi sunulur ancak sonraki ana sürüme hemen geçilmez. Bu güncellemeye Nextcloud GmbH tarafından büyük ölçekli ve görev kritik dağıtımlar için ek düzenlemeler ve sınamalar yapıldıktan sonra geçilir. Bu kanalı yalnız müşteriler kullanabilir ve Nextcloud Enterprise paketi sunulur.", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Son kararlı sürüm. Normal kullanıma uygundur ve her zaman son büyük sürümü kullanır.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Yeni özellikleri denemek için kullanılabilecek yayın öncesi sürümü. Üretim ortamları için önerilmez.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> uygulamanın bu Nextcloud sürümü ile uyumlu bir sürümü var","<strong>%n</strong> uygulamanın bu Nextcloud sürümü ile uyumlu bir sürümü var"], "Apps missing updates" : "Güncellemesi eksik uygulamalar", "Apps with available updates" : "Güncellenebilecek uygulamalar", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Yeni bir sürümün yayınlanmasından sonra burada görüntülenmesinin biraz zaman alabileceğini unutmayın. Yeni sürümleri kullanıcılarımıza zamanla dağıtıyoruz ve bazen sorunlarla karşılaştığımızda bir sürümü atlayabiliyoruz.", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "Uyumlu güncellemeler için uygulamalar denetleniyor", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Uygulama mağazası ile bağlantı kurulamadı ya da uygulama mağazasında herhangi bir güncelleme yok. Güncellemeleri el ile arayın ya da sunucunuzun İnternet ve uygulama mağazası ile bağlantı kurabildiğinden emin olun.", "<strong>All</strong> apps have an update for this version available" : "<strong>Tüm</strong> uygulamaların bu sürüm için kullanılabilecek bir güncellemesi var", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> uygulamanın bu sürüm için kullanılabilecek bir güncellemesi yok","<strong>%n</strong> uygulamanın bu sürüm için kullanılabilecek bir güncellemesi yok"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> uygulamanın bu sürüm için kullanılabilecek bir güncellemesi yok","<strong>%n</strong> uygulamanın bu sürüm için kullanılabilecek bir güncellemesi yok"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Tüm</strong> uygulamaların bu Nextcloud sürümü ile uyumlu bir sürümü var", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> uygulamanın bu Nextcloud sürümü ile uyumlu bir sürümü var","<strong>%n</strong> uygulamanın bu Nextcloud sürümü ile uyumlu bir sürümü var"] }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/updatenotification/l10n/tr.json b/apps/updatenotification/l10n/tr.json index 93b3781650e..18c4e73494a 100644 --- a/apps/updatenotification/l10n/tr.json +++ b/apps/updatenotification/l10n/tr.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "Uygulamalar uyumlu sürümler için denetleniyor", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "Lütfen config.php dosyasındaki <samp>appstoreenabled</samp> seçeneğinin false olarak ayarlanmadığından emin olun.", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "Uygulama mağazası ile bağlantı kurulamadı ya da uygulama mağazasında herhangi bir güncelleme yok. Güncellemeleri el ile arayın ya da sunucunuzun İnternet ve uygulama mağazası ile bağlantı kurabildiğinden emin olun.", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Tüm</strong> uygulamaların bu Nextcloud sürümü ile uyumlu bir sürümü var", "View changelog" : "Değişiklik günlüğünü görüntüle", "Enterprise" : "Kurumsal", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "Kurumsal kullanım için her zaman en son yayınlanmış yama düzeyi sunulur ancak sonraki ana sürüme hemen geçilmez. Bu güncellemeye Nextcloud GmbH tarafından büyük ölçekli ve görev kritik dağıtımlar için ek düzenlemeler ve sınamalar yapıldıktan sonra geçilir. Bu kanalı yalnız müşteriler kullanabilir ve Nextcloud Enterprise paketi sunulur.", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "Son kararlı sürüm. Normal kullanıma uygundur ve her zaman son büyük sürümü kullanır.", "Beta" : "Beta", "A pre-release version only for testing new features, not for production environments." : "Yeni özellikleri denemek için kullanılabilecek yayın öncesi sürümü. Üretim ortamları için önerilmez.", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> uygulamanın bu Nextcloud sürümü ile uyumlu bir sürümü var","<strong>%n</strong> uygulamanın bu Nextcloud sürümü ile uyumlu bir sürümü var"], "Apps missing updates" : "Güncellemesi eksik uygulamalar", "Apps with available updates" : "Güncellenebilecek uygulamalar", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "Yeni bir sürümün yayınlanmasından sonra burada görüntülenmesinin biraz zaman alabileceğini unutmayın. Yeni sürümleri kullanıcılarımıza zamanla dağıtıyoruz ve bazen sorunlarla karşılaştığımızda bir sürümü atlayabiliyoruz.", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "Uyumlu güncellemeler için uygulamalar denetleniyor", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "Uygulama mağazası ile bağlantı kurulamadı ya da uygulama mağazasında herhangi bir güncelleme yok. Güncellemeleri el ile arayın ya da sunucunuzun İnternet ve uygulama mağazası ile bağlantı kurabildiğinden emin olun.", "<strong>All</strong> apps have an update for this version available" : "<strong>Tüm</strong> uygulamaların bu sürüm için kullanılabilecek bir güncellemesi var", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> uygulamanın bu sürüm için kullanılabilecek bir güncellemesi yok","<strong>%n</strong> uygulamanın bu sürüm için kullanılabilecek bir güncellemesi yok"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> uygulamanın bu sürüm için kullanılabilecek bir güncellemesi yok","<strong>%n</strong> uygulamanın bu sürüm için kullanılabilecek bir güncellemesi yok"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>Tüm</strong> uygulamaların bu Nextcloud sürümü ile uyumlu bir sürümü var", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> uygulamanın bu Nextcloud sürümü ile uyumlu bir sürümü var","<strong>%n</strong> uygulamanın bu Nextcloud sürümü ile uyumlu bir sürümü var"] },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/zh_CN.js b/apps/updatenotification/l10n/zh_CN.js index 5d9737fdbfc..5cc788266b2 100644 --- a/apps/updatenotification/l10n/zh_CN.js +++ b/apps/updatenotification/l10n/zh_CN.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "正在检查应用程序的兼容版本", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "请确认 config.php 没有设置<samp>appstoreenabled </samp> 为 false。", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "无法连接到应用商店或没有返回任何更新。手动搜索更新,或者确保你的服务器可以上网且可以连接到应用商店。", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>所有</strong>应用都有一个与这个 Nextcloud 版本兼容的版本可用", "View changelog" : "查看更新记录", "Enterprise" : "企业级", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "供企业使用。总是提供最新的补丁级别,但不会马上升级到下一个大版本。当Nextcloud GmbH为大规模和关键任务部署完成额外的加固和测试后,升级才会进行。此频道只对客户可用,提供Nextcloud企业级软件包。", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "最新稳定版本。适合日常使用并总是更新至最新主版本。", "Beta" : "Beta测试版", "A pre-release version only for testing new features, not for production environments." : "预发布版本仅作测试新功能用,不可用于生产环境。", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong>个应用有与这个 Nextcloud 兼容的版本可用"], "Apps missing updates" : "缺少更新的应用", "Apps with available updates" : "有可用更新的应用", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "请注意,在新版本发布后,它可能需要一段时间才能显示在这里。新版本发布后,随着时间的推移,当用户发现问题时我们可能会跳过一个版本。", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "检查应用以匹配更新", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "无法连接到应用商店,或者应用商店返回无可用更新。请手动搜索更新,或者是确认您的服务器能访问互联网,并能连接到应用商店。", "<strong>All</strong> apps have an update for this version available" : "<strong>所有</strong> 应用有适用于这个版本的更新", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong>应用没有适用这个版本的更新"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong>应用没有适用这个版本的更新"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>所有</strong>应用都有一个与这个 Nextcloud 版本兼容的版本可用", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong>个应用有与这个 Nextcloud 兼容的版本可用"] }, "nplurals=1; plural=0;"); diff --git a/apps/updatenotification/l10n/zh_CN.json b/apps/updatenotification/l10n/zh_CN.json index 9000d7cd998..54490833449 100644 --- a/apps/updatenotification/l10n/zh_CN.json +++ b/apps/updatenotification/l10n/zh_CN.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "正在检查应用程序的兼容版本", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "请确认 config.php 没有设置<samp>appstoreenabled </samp> 为 false。", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "无法连接到应用商店或没有返回任何更新。手动搜索更新,或者确保你的服务器可以上网且可以连接到应用商店。", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>所有</strong>应用都有一个与这个 Nextcloud 版本兼容的版本可用", "View changelog" : "查看更新记录", "Enterprise" : "企业级", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "供企业使用。总是提供最新的补丁级别,但不会马上升级到下一个大版本。当Nextcloud GmbH为大规模和关键任务部署完成额外的加固和测试后,升级才会进行。此频道只对客户可用,提供Nextcloud企业级软件包。", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "最新稳定版本。适合日常使用并总是更新至最新主版本。", "Beta" : "Beta测试版", "A pre-release version only for testing new features, not for production environments." : "预发布版本仅作测试新功能用,不可用于生产环境。", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong>个应用有与这个 Nextcloud 兼容的版本可用"], "Apps missing updates" : "缺少更新的应用", "Apps with available updates" : "有可用更新的应用", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "请注意,在新版本发布后,它可能需要一段时间才能显示在这里。新版本发布后,随着时间的推移,当用户发现问题时我们可能会跳过一个版本。", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "检查应用以匹配更新", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "无法连接到应用商店,或者应用商店返回无可用更新。请手动搜索更新,或者是确认您的服务器能访问互联网,并能连接到应用商店。", "<strong>All</strong> apps have an update for this version available" : "<strong>所有</strong> 应用有适用于这个版本的更新", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong>应用没有适用这个版本的更新"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong>应用没有适用这个版本的更新"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>所有</strong>应用都有一个与这个 Nextcloud 版本兼容的版本可用", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong>个应用有与这个 Nextcloud 兼容的版本可用"] },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/zh_HK.js b/apps/updatenotification/l10n/zh_HK.js index 1d90910340c..9dc5c264ed5 100644 --- a/apps/updatenotification/l10n/zh_HK.js +++ b/apps/updatenotification/l10n/zh_HK.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "檢查應用程式的兼容版本", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "請確定您的 config.php 中並沒有將 <samp>appstoreenabled</samp> 的值設定為 false。", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "無法連接到 App Store 或根本沒有返回任何更新。手動搜索更新或確保您的伺服器可以訪問互聯網並且可以連接到 App Store。", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>所有</strong>應用程式都具有適用於此Nextcloud版本的兼容版本", "View changelog" : "檢視版本更新紀錄", "Enterprise" : "企業", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "企業用。一律提供最新的修補程式等級,但不會立刻更新到下一個主要版本。一旦 Nextcloud GmbH 完成對大規模與關鍵任務部署的額外強化與測試,才會進行更新。此頻道僅供客戶使用,並提供 Nextcloud Enterprise 軟體包。", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "最新的穩定版本。適於一般使用,亦將一律更新到最新主要版本。", "Beta" : "Beta 測試版", "A pre-release version only for testing new features, not for production environments." : "預發佈版本僅用於測試新功能,不適用於生產環境。", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> 個應用程式沒有適用於此 Nextcloud 版本的兼容版本"], "Apps missing updates" : "沒有更新版本的應用程式", "Apps with available updates" : "具有可用更新版本的應用程式", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "請注意,新版本推出後,更新通告可能需要過一段時間才會在此顯示。我們隨著時間為用戶推出新版本,偶爾會在發現問題時跳過一個更新版本。", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "正在檢查應用程序是否兼容更新", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "無法連線至應用程式商店,或者應用程式商店回應無任何更新,請您手動搜尋更新,或者修復您伺服器的網際網路連線,讓它可以連線至應用程式商店。", "<strong>All</strong> apps have an update for this version available" : "<strong>所有</strong>應用程式都有支援此版本的更新版", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> 個應用程式無支援此版本的更新版"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> 個應用程式無支援此版本的更新版"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>所有</strong>應用程式都具有適用於此Nextcloud版本的兼容版本", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> 個應用程式沒有適用於此 Nextcloud 版本的兼容版本"] }, "nplurals=1; plural=0;"); diff --git a/apps/updatenotification/l10n/zh_HK.json b/apps/updatenotification/l10n/zh_HK.json index a7f4488dbf0..c86affea149 100644 --- a/apps/updatenotification/l10n/zh_HK.json +++ b/apps/updatenotification/l10n/zh_HK.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "檢查應用程式的兼容版本", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "請確定您的 config.php 中並沒有將 <samp>appstoreenabled</samp> 的值設定為 false。", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "無法連接到 App Store 或根本沒有返回任何更新。手動搜索更新或確保您的伺服器可以訪問互聯網並且可以連接到 App Store。", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>所有</strong>應用程式都具有適用於此Nextcloud版本的兼容版本", "View changelog" : "檢視版本更新紀錄", "Enterprise" : "企業", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "企業用。一律提供最新的修補程式等級,但不會立刻更新到下一個主要版本。一旦 Nextcloud GmbH 完成對大規模與關鍵任務部署的額外強化與測試,才會進行更新。此頻道僅供客戶使用,並提供 Nextcloud Enterprise 軟體包。", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "最新的穩定版本。適於一般使用,亦將一律更新到最新主要版本。", "Beta" : "Beta 測試版", "A pre-release version only for testing new features, not for production environments." : "預發佈版本僅用於測試新功能,不適用於生產環境。", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> 個應用程式沒有適用於此 Nextcloud 版本的兼容版本"], "Apps missing updates" : "沒有更新版本的應用程式", "Apps with available updates" : "具有可用更新版本的應用程式", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "請注意,新版本推出後,更新通告可能需要過一段時間才會在此顯示。我們隨著時間為用戶推出新版本,偶爾會在發現問題時跳過一個更新版本。", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "正在檢查應用程序是否兼容更新", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "無法連線至應用程式商店,或者應用程式商店回應無任何更新,請您手動搜尋更新,或者修復您伺服器的網際網路連線,讓它可以連線至應用程式商店。", "<strong>All</strong> apps have an update for this version available" : "<strong>所有</strong>應用程式都有支援此版本的更新版", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> 個應用程式無支援此版本的更新版"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> 個應用程式無支援此版本的更新版"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>所有</strong>應用程式都具有適用於此Nextcloud版本的兼容版本", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> 個應用程式沒有適用於此 Nextcloud 版本的兼容版本"] },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/zh_TW.js b/apps/updatenotification/l10n/zh_TW.js index 640f3e97304..5d2826b0232 100644 --- a/apps/updatenotification/l10n/zh_TW.js +++ b/apps/updatenotification/l10n/zh_TW.js @@ -35,7 +35,6 @@ OC.L10N.register( "Checking apps for compatible versions" : "正在檢查應用程式的相容版本", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "請確定您的 config.php 中並沒有將 <samp>appstoreenabled</samp> 的值設定為 false。", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "無法連線至應用程式商店,或是應用程式商店回傳無任何更新。請手動搜尋更新或確定您的伺服器的網際網路連線正常,並可連線至應用程式商店。", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>所有</strong>應用程式都有適用於此 Nextcloud 版本的相容版本", "View changelog" : "檢視版本更新紀錄", "Enterprise" : "企業", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "企業用。一律提供最新的修補程式等級,但不會立刻更新到下一個主要版本。一旦 Nextcloud GmbH 完成對大規模與關鍵任務部署的額外強化與測試,才會進行更新。此頻道僅供客戶使用,並提供 Nextcloud Enterprise 軟體包。", @@ -43,7 +42,6 @@ OC.L10N.register( "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "最新的穩定版本。適於一般使用,一律更新到最新主要版本。", "Beta" : "Beta 測試版", "A pre-release version only for testing new features, not for production environments." : "釋出前版本,僅供測試新功能使用,不適用於生產環境。", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> 應用程式沒有與此 Nextcloud 版本相容的版本"], "Apps missing updates" : "缺少更新的應用程式", "Apps with available updates" : "有可用更新的應用程式", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "請注意,新版本釋出後,需要過一段時間才會在此顯示通知。隨著時間推進,我們為用戶推出了新的版本,有時候會在發現問題時跳過前一個版本更新。", @@ -51,6 +49,8 @@ OC.L10N.register( "Checking apps for compatible updates" : "正在檢查應用程式是否相容於更新", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "無法連線至應用程式商店,或者應用程式商店回應無任何更新,請您手動搜尋更新,或者修復您伺服器的網際網路連線,讓它可以連線至應用程式商店。", "<strong>All</strong> apps have an update for this version available" : "<strong>所有</strong>應用程式都有此版本的更新", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> 應用程式沒有此版本的更新"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> 應用程式沒有此版本的更新"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>所有</strong>應用程式都有適用於此 Nextcloud 版本的相容版本", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> 應用程式沒有與此 Nextcloud 版本相容的版本"] }, "nplurals=1; plural=0;"); diff --git a/apps/updatenotification/l10n/zh_TW.json b/apps/updatenotification/l10n/zh_TW.json index a2a1bad74ee..dc8ae2474a2 100644 --- a/apps/updatenotification/l10n/zh_TW.json +++ b/apps/updatenotification/l10n/zh_TW.json @@ -33,7 +33,6 @@ "Checking apps for compatible versions" : "正在檢查應用程式的相容版本", "Please make sure your config.php does not set <samp>appstoreenabled</samp> to false." : "請確定您的 config.php 中並沒有將 <samp>appstoreenabled</samp> 的值設定為 false。", "Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store." : "無法連線至應用程式商店,或是應用程式商店回傳無任何更新。請手動搜尋更新或確定您的伺服器的網際網路連線正常,並可連線至應用程式商店。", - "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>所有</strong>應用程式都有適用於此 Nextcloud 版本的相容版本", "View changelog" : "檢視版本更新紀錄", "Enterprise" : "企業", "For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package." : "企業用。一律提供最新的修補程式等級,但不會立刻更新到下一個主要版本。一旦 Nextcloud GmbH 完成對大規模與關鍵任務部署的額外強化與測試,才會進行更新。此頻道僅供客戶使用,並提供 Nextcloud Enterprise 軟體包。", @@ -41,7 +40,6 @@ "The most recent stable version. It is suited for regular use and will always update to the latest major version." : "最新的穩定版本。適於一般使用,一律更新到最新主要版本。", "Beta" : "Beta 測試版", "A pre-release version only for testing new features, not for production environments." : "釋出前版本,僅供測試新功能使用,不適用於生產環境。", - "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> 應用程式沒有與此 Nextcloud 版本相容的版本"], "Apps missing updates" : "缺少更新的應用程式", "Apps with available updates" : "有可用更新的應用程式", "Note that after a new release it can take some time before it shows up here. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found." : "請注意,新版本釋出後,需要過一段時間才會在此顯示通知。隨著時間推進,我們為用戶推出了新的版本,有時候會在發現問題時跳過前一個版本更新。", @@ -49,6 +47,8 @@ "Checking apps for compatible updates" : "正在檢查應用程式是否相容於更新", "Could not connect to the appstore or the appstore returned no updates at all. Search manually for updates or make sure your server has access to the internet and can connect to the appstore." : "無法連線至應用程式商店,或者應用程式商店回應無任何更新,請您手動搜尋更新,或者修復您伺服器的網際網路連線,讓它可以連線至應用程式商店。", "<strong>All</strong> apps have an update for this version available" : "<strong>所有</strong>應用程式都有此版本的更新", - "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> 應用程式沒有此版本的更新"] + "_<strong>%n</strong> app has no update for this version available_::_<strong>%n</strong> apps have no update for this version available_" : ["<strong>%n</strong> 應用程式沒有此版本的更新"], + "<strong>All</strong> apps have a compatible version for this Nextcloud version available" : "<strong>所有</strong>應用程式都有適用於此 Nextcloud 版本的相容版本", + "_<strong>%n</strong> app has no compatible version for this Nextcloud version available_::_<strong>%n</strong> apps have no compatible version for this Nextcloud version available_" : ["<strong>%n</strong> 應用程式沒有與此 Nextcloud 版本相容的版本"] },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/updatenotification/src/components/UpdateNotification.vue b/apps/updatenotification/src/components/UpdateNotification.vue index b9e28e4ec2c..09c229fb36e 100644 --- a/apps/updatenotification/src/components/UpdateNotification.vue +++ b/apps/updatenotification/src/components/UpdateNotification.vue @@ -198,8 +198,8 @@ export default { } return this.missingAppUpdates.length === 0 - ? t('updatenotification', '<strong>All</strong> apps have a compatible version for this Nextcloud version available', this) - : n('updatenotification', '<strong>%n</strong> app has no compatible version for this Nextcloud version available', '<strong>%n</strong> apps have no compatible version for this Nextcloud version available', this.missingAppUpdates.length) + ? t('updatenotification', '<strong>All</strong> apps have a compatible version for this Nextcloud version available.', this) + : n('updatenotification', '<strong>%n</strong> app has no compatible version for this Nextcloud version available.', '<strong>%n</strong> apps have no compatible version for this Nextcloud version available.', this.missingAppUpdates.length) }, whatsNew() { diff --git a/apps/user_ldap/l10n/ru.js b/apps/user_ldap/l10n/ru.js index 9ab5e8e811f..bfe80b48343 100644 --- a/apps/user_ldap/l10n/ru.js +++ b/apps/user_ldap/l10n/ru.js @@ -49,13 +49,17 @@ OC.L10N.register( "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Подумайте о сужении поиска, поскольку он охватывает многих пользователей, но только первый из которых сможет войти в систему.", "An unspecified error occurred. Please check log and settings." : "Произошла неуказанная ошибка. Проверьте настройки и журнал.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Некорректный фильтр поиска, возможно из-за синтаксических проблем, таких как несоответствие открывающих и закрывающих скобок. Пожалуйста проверьте.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Произошла ошибка подключения к LDAP/AD. Пожалуйста, проверьте хост, порт и учётные данные.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Заполнитель \"%uid\" отсутствует. Он будет заменён именем пользователя при запросе LDAP/AD.", "Please provide a login name to test against" : "Пожалуйста, укажите логин для проверки", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Блок группы был отключен, поскольку сервер LDAP/AD не поддерживает memberOf.", "Password change rejected. Hint: " : "Смена пароля отклонена. Подсказка:", "Please login with the new password" : "Войдите в систему со своим новым паролем", "LDAP User backend" : "Механизм учета пользователей LDAP", "Your password will expire tomorrow." : "Завтра истекает срок действия пароля.", "Your password will expire today." : "Сегодня истекает срок действия пароля.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Срок действия пароля истекает через %n день.","Срок действия пароля истекает через %n дня.","Срок действия пароля истекает через %n дней.","Срок действия пароля истекает через %n день."], + "LDAP/AD integration" : "LDAP/AD интеграция", "_%s group found_::_%s groups found_" : ["%s группа найдена","%s группы найдены","%s групп найдено","%s групп найдено"], "_%s user found_::_%s users found_" : ["%s пользователь найден","%s пользователя найдено","%s пользователей найдено","%s пользователей найдено"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Не удалось автоматически определить атрибут, содержащий отображаемое имя пользователя. Зайдите в расширенные настройки LDAP и укажите его вручную.", @@ -77,6 +81,9 @@ OC.L10N.register( "The filter specifies which LDAP groups shall have access to the %s instance." : "Этот фильтр определяет какие LDAP группы должны иметь доступ к экземпляру %s.", "Verify settings and count the groups" : "Проверить настройки и пересчитать группы", "When logging in, %s will find the user based on the following attributes:" : "При входе, %s будет искать пользователя по следующим атрибутам:", + "LDAP/AD Username:" : "LDAP/AD Имя пользователя:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Позволяет войти в систему по имени пользователя LDAP/AD, которое является либо \"uid\", либо \"sAMAccountName\" и будет распознано.", + "LDAP/AD Email Address:" : "LDAP/AD Адрес электронной почты:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Позволяет вход с помощью адреса email. Разрешены аттрибуты «mail» и «mailPrimaryAddress».", "Other Attributes:" : "Другие атрибуты:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Определяет фильтр для применения при попытке входа. «%% uid» заменяет имя пользователя для входа в систему. Например: \"uid=%%uid\"", diff --git a/apps/user_ldap/l10n/ru.json b/apps/user_ldap/l10n/ru.json index 48cf4e3edcc..7a6470e66a0 100644 --- a/apps/user_ldap/l10n/ru.json +++ b/apps/user_ldap/l10n/ru.json @@ -47,13 +47,17 @@ "Consider narrowing your search, as it encompassed many users, only the first one of whom will be able to log in." : "Подумайте о сужении поиска, поскольку он охватывает многих пользователей, но только первый из которых сможет войти в систему.", "An unspecified error occurred. Please check log and settings." : "Произошла неуказанная ошибка. Проверьте настройки и журнал.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Некорректный фильтр поиска, возможно из-за синтаксических проблем, таких как несоответствие открывающих и закрывающих скобок. Пожалуйста проверьте.", + "A connection error to LDAP/AD occurred. Please check host, port and credentials." : "Произошла ошибка подключения к LDAP/AD. Пожалуйста, проверьте хост, порт и учётные данные.", + "The \"%uid\" placeholder is missing. It will be replaced with the login name when querying LDAP/AD." : "Заполнитель \"%uid\" отсутствует. Он будет заменён именем пользователя при запросе LDAP/AD.", "Please provide a login name to test against" : "Пожалуйста, укажите логин для проверки", + "The group box was disabled, because the LDAP/AD server does not support memberOf." : "Блок группы был отключен, поскольку сервер LDAP/AD не поддерживает memberOf.", "Password change rejected. Hint: " : "Смена пароля отклонена. Подсказка:", "Please login with the new password" : "Войдите в систему со своим новым паролем", "LDAP User backend" : "Механизм учета пользователей LDAP", "Your password will expire tomorrow." : "Завтра истекает срок действия пароля.", "Your password will expire today." : "Сегодня истекает срок действия пароля.", "_Your password will expire within %n day._::_Your password will expire within %n days._" : ["Срок действия пароля истекает через %n день.","Срок действия пароля истекает через %n дня.","Срок действия пароля истекает через %n дней.","Срок действия пароля истекает через %n день."], + "LDAP/AD integration" : "LDAP/AD интеграция", "_%s group found_::_%s groups found_" : ["%s группа найдена","%s группы найдены","%s групп найдено","%s групп найдено"], "_%s user found_::_%s users found_" : ["%s пользователь найден","%s пользователя найдено","%s пользователей найдено","%s пользователей найдено"], "Could not detect user display name attribute. Please specify it yourself in advanced LDAP settings." : "Не удалось автоматически определить атрибут, содержащий отображаемое имя пользователя. Зайдите в расширенные настройки LDAP и укажите его вручную.", @@ -75,6 +79,9 @@ "The filter specifies which LDAP groups shall have access to the %s instance." : "Этот фильтр определяет какие LDAP группы должны иметь доступ к экземпляру %s.", "Verify settings and count the groups" : "Проверить настройки и пересчитать группы", "When logging in, %s will find the user based on the following attributes:" : "При входе, %s будет искать пользователя по следующим атрибутам:", + "LDAP/AD Username:" : "LDAP/AD Имя пользователя:", + "Allows login against the LDAP/AD username, which is either \"uid\" or \"sAMAccountName\" and will be detected." : "Позволяет войти в систему по имени пользователя LDAP/AD, которое является либо \"uid\", либо \"sAMAccountName\" и будет распознано.", + "LDAP/AD Email Address:" : "LDAP/AD Адрес электронной почты:", "Allows login against an email attribute. \"mail\" and \"mailPrimaryAddress\" allowed." : "Позволяет вход с помощью адреса email. Разрешены аттрибуты «mail» и «mailPrimaryAddress».", "Other Attributes:" : "Другие атрибуты:", "Defines the filter to apply, when login is attempted. \"%%uid\" replaces the username in the login action. Example: \"uid=%%uid\"" : "Определяет фильтр для применения при попытке входа. «%% uid» заменяет имя пользователя для входа в систему. Например: \"uid=%%uid\"", diff --git a/apps/user_status/l10n/ru.js b/apps/user_status/l10n/ru.js index 0adaac99134..ed32cd16a14 100644 --- a/apps/user_status/l10n/ru.js +++ b/apps/user_status/l10n/ru.js @@ -7,9 +7,11 @@ OC.L10N.register( "Out sick" : "Болею", "Vacationing" : "В отпуске", "Working remotely" : "Удалённая работа", + "In a call" : "Вызывать", "User status" : "Статус пользователя", "View profile" : "Открыть профиль", "Clear status message after" : "Очистить сообщение о состоянии через", + "What is your status?" : "Какой у вас статус?", "Set status" : "Установить статус", "Online status" : "Статус работы в сети", "Status message" : "Описание статуса", diff --git a/apps/user_status/l10n/ru.json b/apps/user_status/l10n/ru.json index 81f15f0b089..1d8d5c0aab9 100644 --- a/apps/user_status/l10n/ru.json +++ b/apps/user_status/l10n/ru.json @@ -5,9 +5,11 @@ "Out sick" : "Болею", "Vacationing" : "В отпуске", "Working remotely" : "Удалённая работа", + "In a call" : "Вызывать", "User status" : "Статус пользователя", "View profile" : "Открыть профиль", "Clear status message after" : "Очистить сообщение о состоянии через", + "What is your status?" : "Какой у вас статус?", "Set status" : "Установить статус", "Online status" : "Статус работы в сети", "Status message" : "Описание статуса", diff --git a/apps/weather_status/l10n/ru.js b/apps/weather_status/l10n/ru.js index a7ec8fc4fbb..97e953a1b4f 100644 --- a/apps/weather_status/l10n/ru.js +++ b/apps/weather_status/l10n/ru.js @@ -11,6 +11,28 @@ OC.L10N.register( "Detect location" : "Определить местоположение", "Set custom address" : "Задать адрес", "Favorites" : "Избранное", + "{temperature} {unit} clear sky later today" : "{temperature} {unit} сегодня обещают ясную погоду", + "{temperature} {unit} clear sky" : "{temperature} {unit} ясно", + "{temperature} {unit} cloudy later today" : "{temperature} {unit} сегодня обещают облачно", + "{temperature} {unit} cloudy" : "{temperature} {unit} облачно", + "{temperature} {unit} fair weather later today" : "{temperature} {unit} сегодня обещают хорошую погоду", + "{temperature} {unit} fair weather" : "{temperature} {unit} хорошая погода", + "{temperature} {unit} partly cloudy later today" : "{temperature} {unit} сегодня обещают местами облачно", + "{temperature} {unit} partly cloudy" : "{temperature} {unit} местами облачно", + "{temperature} {unit} foggy later today" : "{temperature} {unit} сегодня обещают туман", + "{temperature} {unit} foggy" : "{temperature} {unit} туман", + "{temperature} {unit} light rain later today" : "{temperature} {unit} сегодня обещают небольшой дождь", + "{temperature} {unit} light rain" : "{temperature} {unit} идёт небольшой дождь", + "{temperature} {unit} rain later today" : "{temperature} {unit} сегодня обещают дождь", + "{temperature} {unit} rain" : "{temperature} {unit} идёт дождь", + "{temperature} {unit} heavy rain later today" : "{temperature} {unit} сегодня обещают сильный дождь", + "{temperature} {unit} heavy rain" : "{temperature} {unit} идёт сильный дождь", + "{temperature} {unit} rain showers later today" : "{temperature} {unit} сегодня обещают мокрый снег", + "{temperature} {unit} rain showers" : "{temperature} {unit} идёт мокрый снег", + "{temperature} {unit} light rain showers later today" : "{temperature} {unit} сегодня обещают снег с дождём", + "{temperature} {unit} light rain showers" : "{temperature} {unit} идёт снег с дождём ", + "{temperature} {unit} heavy rain showers later today" : "{temperature} {unit} сегодня обещают сильный снег с дождём ", + "{temperature} {unit} heavy rain showers" : "{temperature} {unit} идёт сильный снег с дождём ", "More weather for {adr}" : "Дополнительные сведения о погоде в {adr}", "Loading weather" : "Получение сведений о погоде...", "Remove from favorites" : "Удалить из избранного", diff --git a/apps/weather_status/l10n/ru.json b/apps/weather_status/l10n/ru.json index 607882c886d..386e6a4903c 100644 --- a/apps/weather_status/l10n/ru.json +++ b/apps/weather_status/l10n/ru.json @@ -9,6 +9,28 @@ "Detect location" : "Определить местоположение", "Set custom address" : "Задать адрес", "Favorites" : "Избранное", + "{temperature} {unit} clear sky later today" : "{temperature} {unit} сегодня обещают ясную погоду", + "{temperature} {unit} clear sky" : "{temperature} {unit} ясно", + "{temperature} {unit} cloudy later today" : "{temperature} {unit} сегодня обещают облачно", + "{temperature} {unit} cloudy" : "{temperature} {unit} облачно", + "{temperature} {unit} fair weather later today" : "{temperature} {unit} сегодня обещают хорошую погоду", + "{temperature} {unit} fair weather" : "{temperature} {unit} хорошая погода", + "{temperature} {unit} partly cloudy later today" : "{temperature} {unit} сегодня обещают местами облачно", + "{temperature} {unit} partly cloudy" : "{temperature} {unit} местами облачно", + "{temperature} {unit} foggy later today" : "{temperature} {unit} сегодня обещают туман", + "{temperature} {unit} foggy" : "{temperature} {unit} туман", + "{temperature} {unit} light rain later today" : "{temperature} {unit} сегодня обещают небольшой дождь", + "{temperature} {unit} light rain" : "{temperature} {unit} идёт небольшой дождь", + "{temperature} {unit} rain later today" : "{temperature} {unit} сегодня обещают дождь", + "{temperature} {unit} rain" : "{temperature} {unit} идёт дождь", + "{temperature} {unit} heavy rain later today" : "{temperature} {unit} сегодня обещают сильный дождь", + "{temperature} {unit} heavy rain" : "{temperature} {unit} идёт сильный дождь", + "{temperature} {unit} rain showers later today" : "{temperature} {unit} сегодня обещают мокрый снег", + "{temperature} {unit} rain showers" : "{temperature} {unit} идёт мокрый снег", + "{temperature} {unit} light rain showers later today" : "{temperature} {unit} сегодня обещают снег с дождём", + "{temperature} {unit} light rain showers" : "{temperature} {unit} идёт снег с дождём ", + "{temperature} {unit} heavy rain showers later today" : "{temperature} {unit} сегодня обещают сильный снег с дождём ", + "{temperature} {unit} heavy rain showers" : "{temperature} {unit} идёт сильный снег с дождём ", "More weather for {adr}" : "Дополнительные сведения о погоде в {adr}", "Loading weather" : "Получение сведений о погоде...", "Remove from favorites" : "Удалить из избранного", diff --git a/apps/weather_status/l10n/zh_CN.js b/apps/weather_status/l10n/zh_CN.js index 56945daa3fa..539875aaff6 100644 --- a/apps/weather_status/l10n/zh_CN.js +++ b/apps/weather_status/l10n/zh_CN.js @@ -11,6 +11,28 @@ OC.L10N.register( "Detect location" : "检测地点", "Set custom address" : "自定义地址", "Favorites" : "收藏", + "{temperature} {unit} clear sky later today" : "今天日晚些时候{temperature} {unit}晴天", + "{temperature} {unit} clear sky" : "{temperature} {unit}晴天", + "{temperature} {unit} cloudy later today" : "今日晚些时候{temperature} {unit}多云", + "{temperature} {unit} cloudy" : "{temperature} {unit}多云", + "{temperature} {unit} fair weather later today" : "今日晚些时候天气还行{temperature} {unit}", + "{temperature} {unit} fair weather" : "{temperature} {unit}天气还行", + "{temperature} {unit} partly cloudy later today" : "今日晚些时候{temperature} {unit}局部多云", + "{temperature} {unit} partly cloudy" : "{temperature} {unit}局部多云", + "{temperature} {unit} foggy later today" : "今日晚些时候{temperature} {unit}有雾", + "{temperature} {unit} foggy" : "{temperature} {unit}雾", + "{temperature} {unit} light rain later today" : "今日晚些时候{temperature} {unit}小雨", + "{temperature} {unit} light rain" : "{temperature} {unit}小雨", + "{temperature} {unit} rain later today" : "今日晚些时候{temperature} {unit}有雨", + "{temperature} {unit} rain" : "{temperature} {unit}下雨", + "{temperature} {unit} heavy rain later today" : "今日晚些时候{temperature} {unit}大雨", + "{temperature} {unit} heavy rain" : "{temperature} {unit}大雨", + "{temperature} {unit} rain showers later today" : "今日晚些时候{temperature} {unit}有阵雨", + "{temperature} {unit} rain showers" : "{temperature} {unit}阵雨", + "{temperature} {unit} light rain showers later today" : "今日晚些时候{temperature} {unit}零星小雨", + "{temperature} {unit} light rain showers" : "{temperature} {unit}零星小雨", + "{temperature} {unit} heavy rain showers later today" : "今日晚先时候{temperature} {unit}有滂沱阵雨", + "{temperature} {unit} heavy rain showers" : "{temperature} {unit}滂沱阵雨", "More weather for {adr}" : "{adr} 的更多天气信息", "Loading weather" : "正在加载天气", "Remove from favorites" : "从收藏夹移除", @@ -35,7 +57,7 @@ OC.L10N.register( "{temperature} {unit} Rain at {time}" : "{temperature} {unit} 雨,于 {time}", "{temperature} {unit} Heavy rain at {time}" : "{temperature} {unit} 大雨,于 {time}", "{temperature} {unit} Rain showers at {time}" : "{temperature} {unit} 阵雨,于 {time}", - "{temperature} {unit} Light rain showers at {time}" : "{temperature} {unit} 阵小雨,于 {time}", - "{temperature} {unit} Heavy rain showers at {time}" : "{temperature} {unit} 阵大雨,于 {time}" + "{temperature} {unit} Light rain showers at {time}" : "{temperature} {unit} 零星小雨,于 {time}", + "{temperature} {unit} Heavy rain showers at {time}" : "{temperature} {unit} 滂沱阵雨,于 {time}" }, "nplurals=1; plural=0;"); diff --git a/apps/weather_status/l10n/zh_CN.json b/apps/weather_status/l10n/zh_CN.json index b0d19699212..21984b00647 100644 --- a/apps/weather_status/l10n/zh_CN.json +++ b/apps/weather_status/l10n/zh_CN.json @@ -9,6 +9,28 @@ "Detect location" : "检测地点", "Set custom address" : "自定义地址", "Favorites" : "收藏", + "{temperature} {unit} clear sky later today" : "今天日晚些时候{temperature} {unit}晴天", + "{temperature} {unit} clear sky" : "{temperature} {unit}晴天", + "{temperature} {unit} cloudy later today" : "今日晚些时候{temperature} {unit}多云", + "{temperature} {unit} cloudy" : "{temperature} {unit}多云", + "{temperature} {unit} fair weather later today" : "今日晚些时候天气还行{temperature} {unit}", + "{temperature} {unit} fair weather" : "{temperature} {unit}天气还行", + "{temperature} {unit} partly cloudy later today" : "今日晚些时候{temperature} {unit}局部多云", + "{temperature} {unit} partly cloudy" : "{temperature} {unit}局部多云", + "{temperature} {unit} foggy later today" : "今日晚些时候{temperature} {unit}有雾", + "{temperature} {unit} foggy" : "{temperature} {unit}雾", + "{temperature} {unit} light rain later today" : "今日晚些时候{temperature} {unit}小雨", + "{temperature} {unit} light rain" : "{temperature} {unit}小雨", + "{temperature} {unit} rain later today" : "今日晚些时候{temperature} {unit}有雨", + "{temperature} {unit} rain" : "{temperature} {unit}下雨", + "{temperature} {unit} heavy rain later today" : "今日晚些时候{temperature} {unit}大雨", + "{temperature} {unit} heavy rain" : "{temperature} {unit}大雨", + "{temperature} {unit} rain showers later today" : "今日晚些时候{temperature} {unit}有阵雨", + "{temperature} {unit} rain showers" : "{temperature} {unit}阵雨", + "{temperature} {unit} light rain showers later today" : "今日晚些时候{temperature} {unit}零星小雨", + "{temperature} {unit} light rain showers" : "{temperature} {unit}零星小雨", + "{temperature} {unit} heavy rain showers later today" : "今日晚先时候{temperature} {unit}有滂沱阵雨", + "{temperature} {unit} heavy rain showers" : "{temperature} {unit}滂沱阵雨", "More weather for {adr}" : "{adr} 的更多天气信息", "Loading weather" : "正在加载天气", "Remove from favorites" : "从收藏夹移除", @@ -33,7 +55,7 @@ "{temperature} {unit} Rain at {time}" : "{temperature} {unit} 雨,于 {time}", "{temperature} {unit} Heavy rain at {time}" : "{temperature} {unit} 大雨,于 {time}", "{temperature} {unit} Rain showers at {time}" : "{temperature} {unit} 阵雨,于 {time}", - "{temperature} {unit} Light rain showers at {time}" : "{temperature} {unit} 阵小雨,于 {time}", - "{temperature} {unit} Heavy rain showers at {time}" : "{temperature} {unit} 阵大雨,于 {time}" + "{temperature} {unit} Light rain showers at {time}" : "{temperature} {unit} 零星小雨,于 {time}", + "{temperature} {unit} Heavy rain showers at {time}" : "{temperature} {unit} 滂沱阵雨,于 {time}" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml index 485a3fe706c..80198e702ea 100644 --- a/build/psalm-baseline.xml +++ b/build/psalm-baseline.xml @@ -4246,11 +4246,6 @@ <code>mixed</code> </LessSpecificImplementedReturnType> </file> - <file src="lib/private/Memcache/Memcached.php"> - <RedundantCondition occurrences="1"> - <code>method_exists(self::$cache, 'deleteMulti')</code> - </RedundantCondition> - </file> <file src="lib/private/Memcache/Redis.php"> <InvalidMethodCall occurrences="2"> <code>exec</code> @@ -4387,10 +4382,6 @@ </TypeDoesNotContainType> </file> <file src="lib/private/Repair/RemoveLinkShares.php"> - <ImplicitToStringCast occurrences="2"> - <code>$query->createFunction('(' . $subQuery->getSQL() . ')')</code> - <code>$subQuery->createFunction('(' . $subSubQuery->getSQL() . ')')</code> - </ImplicitToStringCast> <InvalidPropertyAssignmentValue occurrences="1"> <code>$this->userToNotify</code> </InvalidPropertyAssignmentValue> diff --git a/config/config.sample.php b/config/config.sample.php index 21ccab6732c..3dcde590d89 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -354,6 +354,13 @@ $CONFIG = [ 'lost_password_link' => 'https://example.org/link/to/password/reset', /** + * URL to use as target for the logo link in the header (top-left logo) + * + * Defaults to the base URL of your Nextcloud instance + */ +'logo_url' => 'https://example.org', + +/** * Mail Parameters * * These configure the email settings for Nextcloud notifications and password diff --git a/core/Migrations/Version24000Date20211222112246.php b/core/Migrations/Version24000Date20211222112246.php new file mode 100644 index 00000000000..a265bebcd86 --- /dev/null +++ b/core/Migrations/Version24000Date20211222112246.php @@ -0,0 +1,96 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright 2021 Vitor Mattos <vitor@php.rio> + * + * @author Vitor Mattos <vitor@php.rio> + * + * @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\Core\Migrations; + +use Closure; +use OCP\DB\ISchemaWrapper; +use OCP\DB\Types; +use OCP\Migration\IOutput; +use OCP\Migration\SimpleMigrationStep; + +class Version24000Date20211222112246 extends SimpleMigrationStep { + private const TABLE_NAME = 'reactions'; + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * @return null|ISchemaWrapper + */ + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + $comments = $schema->getTable('comments'); + if (!$comments->hasColumn('reactions')) { + $comments->addColumn('reactions', Types::STRING, [ + 'notnull' => false, + 'length' => 4000, + ]); + } + + if (!$schema->hasTable(self::TABLE_NAME)) { + $table = $schema->createTable(self::TABLE_NAME); + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + 'length' => 11, + 'unsigned' => true, + ]); + $table->addColumn('parent_id', Types::BIGINT, [ + 'notnull' => true, + 'length' => 11, + 'unsigned' => true, + ]); + $table->addColumn('message_id', Types::BIGINT, [ + 'notnull' => true, + 'length' => 11, + 'unsigned' => true, + ]); + $table->addColumn('actor_type', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + 'default' => '', + ]); + $table->addColumn('actor_id', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + 'default' => '', + ]); + $table->addColumn('reaction', Types::STRING, [ + 'notnull' => true, + 'length' => 32, + ]); + $table->setPrimaryKey(['id']); + $table->addIndex(['reaction'], 'comment_reaction'); + $table->addIndex(['parent_id'], 'comment_reaction_parent_id'); + $table->addUniqueIndex(['parent_id', 'actor_type', 'actor_id', 'reaction'], 'comment_reaction_unique'); + return $schema; + } + return null; + } +} diff --git a/core/l10n/bg.js b/core/l10n/bg.js index 241f9c85373..2e3b98a237a 100644 --- a/core/l10n/bg.js +++ b/core/l10n/bg.js @@ -179,8 +179,6 @@ OC.L10N.register( "Login form is disabled." : "Формулярът за вход е деактивиран", "Edit Profile" : "Редактиране на профил", "The headline and about sections will show up here" : "Заглавието и секцията за информация ще се покажат тук", - "You haven't added any info yet" : "Все още не сте добавили никаква информация", - "{user} hasn't added any info yet" : "{user} все още не е добавил никаква информация", "Error opening the user status modal, try hard refreshing the page" : "Грешка при отваряне на модалния статус на потребителя, опитайте настоятелно да опресните страницата", "Reset search" : "Рестартирай търсенето", "Search for {name} only" : "Търсене само за {name}", diff --git a/core/l10n/bg.json b/core/l10n/bg.json index bddee113dbb..da0dbf70172 100644 --- a/core/l10n/bg.json +++ b/core/l10n/bg.json @@ -177,8 +177,6 @@ "Login form is disabled." : "Формулярът за вход е деактивиран", "Edit Profile" : "Редактиране на профил", "The headline and about sections will show up here" : "Заглавието и секцията за информация ще се покажат тук", - "You haven't added any info yet" : "Все още не сте добавили никаква информация", - "{user} hasn't added any info yet" : "{user} все още не е добавил никаква информация", "Error opening the user status modal, try hard refreshing the page" : "Грешка при отваряне на модалния статус на потребителя, опитайте настоятелно да опресните страницата", "Reset search" : "Рестартирай търсенето", "Search for {name} only" : "Търсене само за {name}", diff --git a/core/l10n/br.js b/core/l10n/br.js index 148b296cad3..d08678dc8cb 100644 --- a/core/l10n/br.js +++ b/core/l10n/br.js @@ -276,8 +276,8 @@ OC.L10N.register( "Account access" : "Mont d'ar c'hont", "You are about to grant %1$s access to your %2$s account." : "Emaoc'h war-nes reiñ an aotre da \"%1$s\" da dizhout ho kont \"%2$s\".", "Account connected" : "Kont kenstaged", - "Your client should now be connected!" : "O c'hliant azlefe bezhañ kenstaget !", - "You can close this window." : "Posuple eo deoc'h seriñ ar prenestr.", + "Your client should now be connected!" : "O c'hliant a zlefe bezañ kenstaget !", + "You can close this window." : "Gallout a rit serriñ ar prenestr.", "This share is password-protected" : "Al liamm a zo gwarezet gant ur ger-tremen", "The password is wrong. Try again." : "Direizh eo ger-tremen. Klaskit en-dro.", "Two-factor authentication" : "Eil- elfenn dilesa", @@ -302,7 +302,7 @@ OC.L10N.register( "The theme %s has been disabled." : "An tem %s a zo bet disaotreet.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Grit sur m'az eo ar rouadennoù-diaz, an teuliad config hag an teuliad roadennoù a zo bet rag-enrollet a raok lakaat da dreiñ mar-plij.", "Start update" : "Kregiñ an adnevezadur", - "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Evit trement e-biou dale blam da diazezadurioù brazoc'h, posuble eo doc'h implijout an urzh war-lec'h adalek ho teuliad diazezadur :", + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Evit tremen e-biou dale abalamour da ziazezadurioù brasoc'h, e c'hellit implijout an urzh war-lerc’h adalek ho teuliad diazezadur :", "Detailed logs" : "Kazetenn munudet", "Update needed" : "Un adnevezadur ez eu ezhomp", "Please use the command line updater because you have a big instance with more than 50 users." : "Mar-plij, implijit al linnen-urz adneveziñ peogwir m'az eo brazh o azgoulenn gant muioc'h eget 50 implijer.", @@ -351,7 +351,7 @@ OC.L10N.register( "Continue to Nextcloud" : "Kendalc'h war Nextcloud", "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["An adnevezadenn a zo bet graet. adkased oc'h war Nexcloud a ben %n eilenn.","An adnevezadenn a zo bet graet. adkased oc'h war Nexcloud a ben %n eilenn.","An adnevezadenn a zo bet graet. adkased oc'h war Nexcloud a ben %n eilenn.","An adnevezadenn a zo bet graet. adkased oc'h war Nexcloud a ben %n eilenn.","An adnevezadenn a zo bet graet. adkased oc'h war Nexcloud a ben %n eilenn."], "A password reset message has been sent to the e-mail address of this account. If you do not receive it, check your spam/junk folders or ask your local administrator for help." : "Ur gemenadenn cheñch ger-tremenn a zo bet kaset da chom-lec'h bostel ar c'hont. Ma n'ho peus ket resevet anezhañ, gwiriit en ho spam/boubelenn pe goulennit d'ho merour sikour.", - "Password can not be changed. Please contact your administrator." : "N'eo ket posuple cheñch ar ger-tremen. Mar-plij galvit o merour.", + "Password can not be changed. Please contact your administrator." : "Ne c'hell ket ar ger-tremen bezañ cheñchet. Gallout a rit mont e darempred gant o merour.", "Could not fetch list of apps from the app store." : "N'eo ket posuple tizout listenn ar meziantoù eus stal ar meziantoù.", "Can't install this app because it is not compatible" : "N'eo ket posuple staliañ ar meziant peogwir n'eo ket kenglot", "Can't install this app" : "N'eo ket posuple staliañ ar meziant", diff --git a/core/l10n/br.json b/core/l10n/br.json index 835266667f2..d61f713fabf 100644 --- a/core/l10n/br.json +++ b/core/l10n/br.json @@ -274,8 +274,8 @@ "Account access" : "Mont d'ar c'hont", "You are about to grant %1$s access to your %2$s account." : "Emaoc'h war-nes reiñ an aotre da \"%1$s\" da dizhout ho kont \"%2$s\".", "Account connected" : "Kont kenstaged", - "Your client should now be connected!" : "O c'hliant azlefe bezhañ kenstaget !", - "You can close this window." : "Posuple eo deoc'h seriñ ar prenestr.", + "Your client should now be connected!" : "O c'hliant a zlefe bezañ kenstaget !", + "You can close this window." : "Gallout a rit serriñ ar prenestr.", "This share is password-protected" : "Al liamm a zo gwarezet gant ur ger-tremen", "The password is wrong. Try again." : "Direizh eo ger-tremen. Klaskit en-dro.", "Two-factor authentication" : "Eil- elfenn dilesa", @@ -300,7 +300,7 @@ "The theme %s has been disabled." : "An tem %s a zo bet disaotreet.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Grit sur m'az eo ar rouadennoù-diaz, an teuliad config hag an teuliad roadennoù a zo bet rag-enrollet a raok lakaat da dreiñ mar-plij.", "Start update" : "Kregiñ an adnevezadur", - "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Evit trement e-biou dale blam da diazezadurioù brazoc'h, posuble eo doc'h implijout an urzh war-lec'h adalek ho teuliad diazezadur :", + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Evit tremen e-biou dale abalamour da ziazezadurioù brasoc'h, e c'hellit implijout an urzh war-lerc’h adalek ho teuliad diazezadur :", "Detailed logs" : "Kazetenn munudet", "Update needed" : "Un adnevezadur ez eu ezhomp", "Please use the command line updater because you have a big instance with more than 50 users." : "Mar-plij, implijit al linnen-urz adneveziñ peogwir m'az eo brazh o azgoulenn gant muioc'h eget 50 implijer.", @@ -349,7 +349,7 @@ "Continue to Nextcloud" : "Kendalc'h war Nextcloud", "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["An adnevezadenn a zo bet graet. adkased oc'h war Nexcloud a ben %n eilenn.","An adnevezadenn a zo bet graet. adkased oc'h war Nexcloud a ben %n eilenn.","An adnevezadenn a zo bet graet. adkased oc'h war Nexcloud a ben %n eilenn.","An adnevezadenn a zo bet graet. adkased oc'h war Nexcloud a ben %n eilenn.","An adnevezadenn a zo bet graet. adkased oc'h war Nexcloud a ben %n eilenn."], "A password reset message has been sent to the e-mail address of this account. If you do not receive it, check your spam/junk folders or ask your local administrator for help." : "Ur gemenadenn cheñch ger-tremenn a zo bet kaset da chom-lec'h bostel ar c'hont. Ma n'ho peus ket resevet anezhañ, gwiriit en ho spam/boubelenn pe goulennit d'ho merour sikour.", - "Password can not be changed. Please contact your administrator." : "N'eo ket posuple cheñch ar ger-tremen. Mar-plij galvit o merour.", + "Password can not be changed. Please contact your administrator." : "Ne c'hell ket ar ger-tremen bezañ cheñchet. Gallout a rit mont e darempred gant o merour.", "Could not fetch list of apps from the app store." : "N'eo ket posuple tizout listenn ar meziantoù eus stal ar meziantoù.", "Can't install this app because it is not compatible" : "N'eo ket posuple staliañ ar meziant peogwir n'eo ket kenglot", "Can't install this app" : "N'eo ket posuple staliañ ar meziant", diff --git a/core/l10n/cs.js b/core/l10n/cs.js index a0d9fd2763c..1a39aa4b160 100644 --- a/core/l10n/cs.js +++ b/core/l10n/cs.js @@ -180,8 +180,8 @@ OC.L10N.register( "Login form is disabled." : "Formulář pro přihlášení je vypnut", "Edit Profile" : "Upravit profil", "The headline and about sections will show up here" : "Nadpis a sekce o uživatelích se zobrazí zde", - "You haven't added any info yet" : "Zatím jste nezadali žádné informace", - "{user} hasn't added any info yet" : "{user} uživatel zatím nezadal žádné informace", + "You have not added any info yet" : "Zatím jste nezadali žádné informace", + "{user} has not added any info yet" : "{user} uživatel zatím nezadal žádné informace", "Error opening the user status modal, try hard refreshing the page" : "Chyba při otevírání dialogu stavu uživatele, pokus o opětovné načtení stránky", "Reset search" : "Resetovat hledání", "Search for {name} only" : "Hledat pouze {name}", diff --git a/core/l10n/cs.json b/core/l10n/cs.json index 5f099163b1f..85f764a354d 100644 --- a/core/l10n/cs.json +++ b/core/l10n/cs.json @@ -178,8 +178,8 @@ "Login form is disabled." : "Formulář pro přihlášení je vypnut", "Edit Profile" : "Upravit profil", "The headline and about sections will show up here" : "Nadpis a sekce o uživatelích se zobrazí zde", - "You haven't added any info yet" : "Zatím jste nezadali žádné informace", - "{user} hasn't added any info yet" : "{user} uživatel zatím nezadal žádné informace", + "You have not added any info yet" : "Zatím jste nezadali žádné informace", + "{user} has not added any info yet" : "{user} uživatel zatím nezadal žádné informace", "Error opening the user status modal, try hard refreshing the page" : "Chyba při otevírání dialogu stavu uživatele, pokus o opětovné načtení stránky", "Reset search" : "Resetovat hledání", "Search for {name} only" : "Hledat pouze {name}", diff --git a/core/l10n/da.js b/core/l10n/da.js index 6bfc5eb0335..56ff37b35d5 100644 --- a/core/l10n/da.js +++ b/core/l10n/da.js @@ -178,8 +178,6 @@ OC.L10N.register( "Back" : "Tilbage", "Login form is disabled." : "Loginformularen er deaktiveret.", "Edit Profile" : "Rediger profil", - "You haven't added any info yet" : "Du har ikke tilføjet nogle info endnu", - "{user} hasn't added any info yet" : "{user} har ikke tilføjet nogle info endnu", "Error opening the user status modal, try hard refreshing the page" : "Fejl ved åbning af brugerstatusmodal. Prøv at opdatere siden", "Reset search" : "Nulstil søgning", "Search for {name} only" : "Søg kun efter {name}", diff --git a/core/l10n/da.json b/core/l10n/da.json index cda5c380962..d882e0db11e 100644 --- a/core/l10n/da.json +++ b/core/l10n/da.json @@ -176,8 +176,6 @@ "Back" : "Tilbage", "Login form is disabled." : "Loginformularen er deaktiveret.", "Edit Profile" : "Rediger profil", - "You haven't added any info yet" : "Du har ikke tilføjet nogle info endnu", - "{user} hasn't added any info yet" : "{user} har ikke tilføjet nogle info endnu", "Error opening the user status modal, try hard refreshing the page" : "Fejl ved åbning af brugerstatusmodal. Prøv at opdatere siden", "Reset search" : "Nulstil søgning", "Search for {name} only" : "Søg kun efter {name}", diff --git a/core/l10n/de.js b/core/l10n/de.js index 8300f93a8ff..447134de5a7 100644 --- a/core/l10n/de.js +++ b/core/l10n/de.js @@ -175,7 +175,6 @@ OC.L10N.register( "Back" : "Zurück", "Login form is disabled." : "Das Anmeldeformular ist deaktiviert.", "Edit Profile" : "Profil bearbeiten", - "You haven't added any info yet" : "Du hast bisher noch keine Infos hinzugefügt", "Reset search" : "Suche zurücksetzen", "Search for {name} only" : "Nur nach {name} suchen", "No results for {query}" : "Keine Suchergebnisse zu {query}", diff --git a/core/l10n/de.json b/core/l10n/de.json index a159498b96d..dfde7d0d1e6 100644 --- a/core/l10n/de.json +++ b/core/l10n/de.json @@ -173,7 +173,6 @@ "Back" : "Zurück", "Login form is disabled." : "Das Anmeldeformular ist deaktiviert.", "Edit Profile" : "Profil bearbeiten", - "You haven't added any info yet" : "Du hast bisher noch keine Infos hinzugefügt", "Reset search" : "Suche zurücksetzen", "Search for {name} only" : "Nur nach {name} suchen", "No results for {query}" : "Keine Suchergebnisse zu {query}", diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js index 487353d8612..734fa202b4d 100644 --- a/core/l10n/de_DE.js +++ b/core/l10n/de_DE.js @@ -180,8 +180,8 @@ OC.L10N.register( "Login form is disabled." : "Das Anmeldeformular ist deaktiviert.", "Edit Profile" : "Profil bearbeiten", "The headline and about sections will show up here" : "Die Überschrift und der Infobereich werden hier angezeigt", - "You haven't added any info yet" : "Sie haben noch keine Infos hinzugefügt", - "{user} hasn't added any info yet" : "{user} hat noch keine Infos hinzugefügt", + "You have not added any info yet" : "Sie haben noch keine Infos hinzugefügt", + "{user} has not added any info yet" : "{user} hat noch keine Infos hinzugefügt", "Error opening the user status modal, try hard refreshing the page" : "Fehler beim Modal-öffnen des Benutzerstatus, versuchen Sie die Seite zu aktualisieren", "Reset search" : "Suche zurücksetzen", "Search for {name} only" : "Nur nach {name} suchen", diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json index e24497158f7..baf150a4005 100644 --- a/core/l10n/de_DE.json +++ b/core/l10n/de_DE.json @@ -178,8 +178,8 @@ "Login form is disabled." : "Das Anmeldeformular ist deaktiviert.", "Edit Profile" : "Profil bearbeiten", "The headline and about sections will show up here" : "Die Überschrift und der Infobereich werden hier angezeigt", - "You haven't added any info yet" : "Sie haben noch keine Infos hinzugefügt", - "{user} hasn't added any info yet" : "{user} hat noch keine Infos hinzugefügt", + "You have not added any info yet" : "Sie haben noch keine Infos hinzugefügt", + "{user} has not added any info yet" : "{user} hat noch keine Infos hinzugefügt", "Error opening the user status modal, try hard refreshing the page" : "Fehler beim Modal-öffnen des Benutzerstatus, versuchen Sie die Seite zu aktualisieren", "Reset search" : "Suche zurücksetzen", "Search for {name} only" : "Nur nach {name} suchen", diff --git a/core/l10n/es.js b/core/l10n/es.js index f1c56a847df..e81f9fe2182 100644 --- a/core/l10n/es.js +++ b/core/l10n/es.js @@ -180,8 +180,6 @@ OC.L10N.register( "Login form is disabled." : "La página de inicio de sesión está deshabilitada.", "Edit Profile" : "Editar perfil", "The headline and about sections will show up here" : "El título y la sección acerca de aparecerán aquí", - "You haven't added any info yet" : "No has añadido ninguna información todavía", - "{user} hasn't added any info yet" : "{user} no ha añadido aún ninguna información", "Error opening the user status modal, try hard refreshing the page" : "Error al abrir la ventana de estado del usuario, intente actualizar la página", "Reset search" : "Resetear búsqueda", "Search for {name} only" : "Buscar solo por {name}", diff --git a/core/l10n/es.json b/core/l10n/es.json index 62e10af1d87..6b78d1fb961 100644 --- a/core/l10n/es.json +++ b/core/l10n/es.json @@ -178,8 +178,6 @@ "Login form is disabled." : "La página de inicio de sesión está deshabilitada.", "Edit Profile" : "Editar perfil", "The headline and about sections will show up here" : "El título y la sección acerca de aparecerán aquí", - "You haven't added any info yet" : "No has añadido ninguna información todavía", - "{user} hasn't added any info yet" : "{user} no ha añadido aún ninguna información", "Error opening the user status modal, try hard refreshing the page" : "Error al abrir la ventana de estado del usuario, intente actualizar la página", "Reset search" : "Resetear búsqueda", "Search for {name} only" : "Buscar solo por {name}", diff --git a/core/l10n/eu.js b/core/l10n/eu.js index 84f543991c1..890f7ef7dfe 100644 --- a/core/l10n/eu.js +++ b/core/l10n/eu.js @@ -180,8 +180,6 @@ OC.L10N.register( "Login form is disabled." : "Saioa hasteko inprimakia desgaituta dago.", "Edit Profile" : "Editatu profila", "The headline and about sections will show up here" : "Izenburua eta 'honi buruz' atalak hemen agertuko dira", - "You haven't added any info yet" : "Ez duzu informaziorik gehitu oraindik", - "{user} hasn't added any info yet" : "{user} ez du informaziorik gehitu oraindik", "Error opening the user status modal, try hard refreshing the page" : "Errorea erabiltzailen egoera leihoa irekitzen, saiatu orria guztiz freskatzen", "Reset search" : "Berrezarri bilaketa", "Search for {name} only" : "Biatu {name} bakarrik", diff --git a/core/l10n/eu.json b/core/l10n/eu.json index 1e973f405ec..cf2cf5ade3f 100644 --- a/core/l10n/eu.json +++ b/core/l10n/eu.json @@ -178,8 +178,6 @@ "Login form is disabled." : "Saioa hasteko inprimakia desgaituta dago.", "Edit Profile" : "Editatu profila", "The headline and about sections will show up here" : "Izenburua eta 'honi buruz' atalak hemen agertuko dira", - "You haven't added any info yet" : "Ez duzu informaziorik gehitu oraindik", - "{user} hasn't added any info yet" : "{user} ez du informaziorik gehitu oraindik", "Error opening the user status modal, try hard refreshing the page" : "Errorea erabiltzailen egoera leihoa irekitzen, saiatu orria guztiz freskatzen", "Reset search" : "Berrezarri bilaketa", "Search for {name} only" : "Biatu {name} bakarrik", diff --git a/core/l10n/fi.js b/core/l10n/fi.js index ea38a1ab0f4..7bb7833d612 100644 --- a/core/l10n/fi.js +++ b/core/l10n/fi.js @@ -148,8 +148,6 @@ OC.L10N.register( "Back" : "Takaisin", "Login form is disabled." : "Kirjautumislomake on poistettu käytöstä.", "Edit Profile" : "Muokkaa profiilia", - "You haven't added any info yet" : "Et ole lisännyt tietoja vielä", - "{user} hasn't added any info yet" : "{user} ei ole lisännyt tietoja vielä", "Reset search" : "Tyhjennä haku", "Search for {name} only" : "Etsi vain {name}", "No results for {query}" : "Ei tuloksia haulle {query}", diff --git a/core/l10n/fi.json b/core/l10n/fi.json index fbb0d377160..ad0e65f9186 100644 --- a/core/l10n/fi.json +++ b/core/l10n/fi.json @@ -146,8 +146,6 @@ "Back" : "Takaisin", "Login form is disabled." : "Kirjautumislomake on poistettu käytöstä.", "Edit Profile" : "Muokkaa profiilia", - "You haven't added any info yet" : "Et ole lisännyt tietoja vielä", - "{user} hasn't added any info yet" : "{user} ei ole lisännyt tietoja vielä", "Reset search" : "Tyhjennä haku", "Search for {name} only" : "Etsi vain {name}", "No results for {query}" : "Ei tuloksia haulle {query}", diff --git a/core/l10n/fr.js b/core/l10n/fr.js index b42cb53a293..217acbfc701 100644 --- a/core/l10n/fr.js +++ b/core/l10n/fr.js @@ -180,8 +180,6 @@ OC.L10N.register( "Login form is disabled." : "Le formulaire de connexion est désactivé.", "Edit Profile" : "Modifier le profil", "The headline and about sections will show up here" : "Le titre et la section \"A propos\" apparaîtront ici", - "You haven't added any info yet" : "Vous n'avez ajouté aucune information pour l'instant", - "{user} hasn't added any info yet" : "{user} n'a ajouté aucune information pour l'instant", "Error opening the user status modal, try hard refreshing the page" : "Erreur lors de l'ouverture du modal du statut de l'utilisateur, essayez d'actualiser la page", "Reset search" : "Réinitialiser la recherche", "Search for {name} only" : "Rechercher pour {name} uniquement", diff --git a/core/l10n/fr.json b/core/l10n/fr.json index 04f73c86d8d..d940bf11c5f 100644 --- a/core/l10n/fr.json +++ b/core/l10n/fr.json @@ -178,8 +178,6 @@ "Login form is disabled." : "Le formulaire de connexion est désactivé.", "Edit Profile" : "Modifier le profil", "The headline and about sections will show up here" : "Le titre et la section \"A propos\" apparaîtront ici", - "You haven't added any info yet" : "Vous n'avez ajouté aucune information pour l'instant", - "{user} hasn't added any info yet" : "{user} n'a ajouté aucune information pour l'instant", "Error opening the user status modal, try hard refreshing the page" : "Erreur lors de l'ouverture du modal du statut de l'utilisateur, essayez d'actualiser la page", "Reset search" : "Réinitialiser la recherche", "Search for {name} only" : "Rechercher pour {name} uniquement", diff --git a/core/l10n/hu.js b/core/l10n/hu.js index 43508e02aaa..530c4309575 100644 --- a/core/l10n/hu.js +++ b/core/l10n/hu.js @@ -179,8 +179,6 @@ OC.L10N.register( "Login form is disabled." : "A bejelentkezési űrlap letiltva.", "Edit Profile" : "Profil szerkesztése", "The headline and about sections will show up here" : "A fejléc és a névjegy szakaszok itt fognak megjelenni", - "You haven't added any info yet" : "Még nem adott hozzá információkat", - "{user} hasn't added any info yet" : "{user} még nem adott hozzá információkat", "Error opening the user status modal, try hard refreshing the page" : "Hiba a felhasználói állapot párbeszédablak megnyitásakor, próbálja meg az oldal kényszerített újratöltését", "Reset search" : "Keresés visszaállítása", "Search for {name} only" : "Keresés csak a(z) {name} kifejezésre", diff --git a/core/l10n/hu.json b/core/l10n/hu.json index f772eb2adff..e2bf3c3fec3 100644 --- a/core/l10n/hu.json +++ b/core/l10n/hu.json @@ -177,8 +177,6 @@ "Login form is disabled." : "A bejelentkezési űrlap letiltva.", "Edit Profile" : "Profil szerkesztése", "The headline and about sections will show up here" : "A fejléc és a névjegy szakaszok itt fognak megjelenni", - "You haven't added any info yet" : "Még nem adott hozzá információkat", - "{user} hasn't added any info yet" : "{user} még nem adott hozzá információkat", "Error opening the user status modal, try hard refreshing the page" : "Hiba a felhasználói állapot párbeszédablak megnyitásakor, próbálja meg az oldal kényszerített újratöltését", "Reset search" : "Keresés visszaállítása", "Search for {name} only" : "Keresés csak a(z) {name} kifejezésre", diff --git a/core/l10n/it.js b/core/l10n/it.js index 44653213b01..46d39773ae2 100644 --- a/core/l10n/it.js +++ b/core/l10n/it.js @@ -180,8 +180,6 @@ OC.L10N.register( "Login form is disabled." : "Il modulo di accesso è disabilitato.", "Edit Profile" : "Modifica il profilo", "The headline and about sections will show up here" : "Le sezioni del titolo e delle informazioni verranno mostrate qui", - "You haven't added any info yet" : "Non hai ancora aggiunto alcuna informazione", - "{user} hasn't added any info yet" : "{user} non ha ancora aggiunto alcuna informazione", "Error opening the user status modal, try hard refreshing the page" : "Errore nell'apertura dello stato utente, prova a ricaricare la pagina", "Reset search" : "Ripristina ricerca", "Search for {name} only" : "Cerca solo {name}", diff --git a/core/l10n/it.json b/core/l10n/it.json index a000cc299ad..812882c0090 100644 --- a/core/l10n/it.json +++ b/core/l10n/it.json @@ -178,8 +178,6 @@ "Login form is disabled." : "Il modulo di accesso è disabilitato.", "Edit Profile" : "Modifica il profilo", "The headline and about sections will show up here" : "Le sezioni del titolo e delle informazioni verranno mostrate qui", - "You haven't added any info yet" : "Non hai ancora aggiunto alcuna informazione", - "{user} hasn't added any info yet" : "{user} non ha ancora aggiunto alcuna informazione", "Error opening the user status modal, try hard refreshing the page" : "Errore nell'apertura dello stato utente, prova a ricaricare la pagina", "Reset search" : "Ripristina ricerca", "Search for {name} only" : "Cerca solo {name}", diff --git a/core/l10n/ja.js b/core/l10n/ja.js index f3b9ee76bfd..8eeaf30a7ea 100644 --- a/core/l10n/ja.js +++ b/core/l10n/ja.js @@ -180,8 +180,6 @@ OC.L10N.register( "Login form is disabled." : "ログインフォームは無効です。", "Edit Profile" : "プロフィールを編集", "The headline and about sections will show up here" : "見出しと概要セクションがここに表示されます", - "You haven't added any info yet" : "まだ情報が追加されていません", - "{user} hasn't added any info yet" : "{user}が、まだ情報を追加していません", "Error opening the user status modal, try hard refreshing the page" : "ユーザーステータスモーダルを開くときにエラーが発生しました。ページを更新してみてください", "Reset search" : "検索をリセットする", "Search for {name} only" : "{name}のみを検索", diff --git a/core/l10n/ja.json b/core/l10n/ja.json index 7499f0fbfb1..be3529d36f5 100644 --- a/core/l10n/ja.json +++ b/core/l10n/ja.json @@ -178,8 +178,6 @@ "Login form is disabled." : "ログインフォームは無効です。", "Edit Profile" : "プロフィールを編集", "The headline and about sections will show up here" : "見出しと概要セクションがここに表示されます", - "You haven't added any info yet" : "まだ情報が追加されていません", - "{user} hasn't added any info yet" : "{user}が、まだ情報を追加していません", "Error opening the user status modal, try hard refreshing the page" : "ユーザーステータスモーダルを開くときにエラーが発生しました。ページを更新してみてください", "Reset search" : "検索をリセットする", "Search for {name} only" : "{name}のみを検索", diff --git a/core/l10n/ko.js b/core/l10n/ko.js index 9a7a3aa1bdb..b2200b3876e 100644 --- a/core/l10n/ko.js +++ b/core/l10n/ko.js @@ -161,8 +161,6 @@ OC.L10N.register( "Login form is disabled." : "로그인 양식이 비활성화 되었습니다.", "Edit Profile" : "프로파일 수정", "The headline and about sections will show up here" : "머리말과 about section이 여기에 보일것입니다.", - "You haven't added any info yet" : "아직 아무 정보도 추가하지 않았습니다.", - "{user} hasn't added any info yet" : "{user} 아직 아무정보도 추가하지 않았습니다.", "Reset search" : "검색 초기화", "Search for {name} only" : "{name}(으)로만 검색", "No results for {query}" : "{query}에 대한 결과가 없음", diff --git a/core/l10n/ko.json b/core/l10n/ko.json index de922545f8c..23e8d58851b 100644 --- a/core/l10n/ko.json +++ b/core/l10n/ko.json @@ -159,8 +159,6 @@ "Login form is disabled." : "로그인 양식이 비활성화 되었습니다.", "Edit Profile" : "프로파일 수정", "The headline and about sections will show up here" : "머리말과 about section이 여기에 보일것입니다.", - "You haven't added any info yet" : "아직 아무 정보도 추가하지 않았습니다.", - "{user} hasn't added any info yet" : "{user} 아직 아무정보도 추가하지 않았습니다.", "Reset search" : "검색 초기화", "Search for {name} only" : "{name}(으)로만 검색", "No results for {query}" : "{query}에 대한 결과가 없음", diff --git a/core/l10n/nl.js b/core/l10n/nl.js index 8dbbbfdf650..4ab83e235cb 100644 --- a/core/l10n/nl.js +++ b/core/l10n/nl.js @@ -180,8 +180,6 @@ OC.L10N.register( "Login form is disabled." : "Inlogscherm uitgeschakeld", "Edit Profile" : "Wijzig Profiel", "The headline and about sections will show up here" : "De koplijn- en oversectie zal hier verschijnen", - "You haven't added any info yet" : "Je hebt nog geen info toegevoegd", - "{user} hasn't added any info yet" : "{user} heeft nog geen info toegevoegd", "Error opening the user status modal, try hard refreshing the page" : "Fout bij het openen van het gebruiker status model, probeer een harde refresh van de pagina", "Reset search" : "Zoekopdracht wissen", "Search for {name} only" : "Zoek alleen naar {name}", diff --git a/core/l10n/nl.json b/core/l10n/nl.json index 53cbb8369d6..6cf5fc5e02e 100644 --- a/core/l10n/nl.json +++ b/core/l10n/nl.json @@ -178,8 +178,6 @@ "Login form is disabled." : "Inlogscherm uitgeschakeld", "Edit Profile" : "Wijzig Profiel", "The headline and about sections will show up here" : "De koplijn- en oversectie zal hier verschijnen", - "You haven't added any info yet" : "Je hebt nog geen info toegevoegd", - "{user} hasn't added any info yet" : "{user} heeft nog geen info toegevoegd", "Error opening the user status modal, try hard refreshing the page" : "Fout bij het openen van het gebruiker status model, probeer een harde refresh van de pagina", "Reset search" : "Zoekopdracht wissen", "Search for {name} only" : "Zoek alleen naar {name}", diff --git a/core/l10n/pl.js b/core/l10n/pl.js index 6b9da227746..9fa0dd3f6b2 100644 --- a/core/l10n/pl.js +++ b/core/l10n/pl.js @@ -180,8 +180,8 @@ OC.L10N.register( "Login form is disabled." : "Formularz logowania jest wyłączony.", "Edit Profile" : "Edytuj profil", "The headline and about sections will show up here" : "Tutaj pojawi się nagłówek i informacje o sekcjach", - "You haven't added any info yet" : "Nie dodałeś jeszcze żadnych informacji", - "{user} hasn't added any info yet" : "{user} nie dodał jeszcze żadnych informacji", + "You have not added any info yet" : "Nie dodałeś jeszcze żadnych informacji", + "{user} has not added any info yet" : "{user} nie dodał jeszcze żadnych informacji", "Error opening the user status modal, try hard refreshing the page" : "Błąd podczas otwierania modalnego statusu użytkownika, spróbuj bardziej odświeżyć stronę", "Reset search" : "Zresetuj wyszukiwanie", "Search for {name} only" : "Wyszukaj tylko {name}", diff --git a/core/l10n/pl.json b/core/l10n/pl.json index e63b4142856..1083a5efbf1 100644 --- a/core/l10n/pl.json +++ b/core/l10n/pl.json @@ -178,8 +178,8 @@ "Login form is disabled." : "Formularz logowania jest wyłączony.", "Edit Profile" : "Edytuj profil", "The headline and about sections will show up here" : "Tutaj pojawi się nagłówek i informacje o sekcjach", - "You haven't added any info yet" : "Nie dodałeś jeszcze żadnych informacji", - "{user} hasn't added any info yet" : "{user} nie dodał jeszcze żadnych informacji", + "You have not added any info yet" : "Nie dodałeś jeszcze żadnych informacji", + "{user} has not added any info yet" : "{user} nie dodał jeszcze żadnych informacji", "Error opening the user status modal, try hard refreshing the page" : "Błąd podczas otwierania modalnego statusu użytkownika, spróbuj bardziej odświeżyć stronę", "Reset search" : "Zresetuj wyszukiwanie", "Search for {name} only" : "Wyszukaj tylko {name}", diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js index 6231e07ad4e..32751c95fa6 100644 --- a/core/l10n/pt_BR.js +++ b/core/l10n/pt_BR.js @@ -180,8 +180,8 @@ OC.L10N.register( "Login form is disabled." : "O formulário de login está desativado.", "Edit Profile" : "Editar Perfil ", "The headline and about sections will show up here" : "O título e as seções sobre serão exibidos aqui", - "You haven't added any info yet" : "Você ainda não adicionou nenhuma informação", - "{user} hasn't added any info yet" : "{user} ainda não adicionou nenhuma informação", + "You have not added any info yet" : "Você ainda não adicionou nenhuma informação", + "{user} has not added any info yet" : "{usuário} ainda não adicionou nenhuma informação", "Error opening the user status modal, try hard refreshing the page" : "Erro ao abrir o modal de status do usuário, tente atualizar a página", "Reset search" : "Redefinir pesquisa", "Search for {name} only" : "Pesquisar somente por {nome}", @@ -317,6 +317,8 @@ OC.L10N.register( "You chose SQLite as database." : "Você escolheu o SQLite como banco de dados.", "SQLite should only be used for minimal and development instances. For production we recommend a different database backend." : "O SQLite deve ser usado apenas para instâncias mínimas e de desenvolvimento. Para produção, recomendamos um banco de dados diferente.", "If you use clients for file syncing, the use of SQLite is highly discouraged." : "Se você usa clientes para sincronização de arquivos, o SQLite é altamente desencorajado.", + "Install" : "Instalar", + "Installing …" : "Instalando ...", "Need help?" : "Precisa de ajuda?", "See the documentation" : "Veja a documentação", "It looks like you are trying to reinstall your Nextcloud. However the file CAN_INSTALL is missing from your config directory. Please create the file CAN_INSTALL in your config folder to continue." : "Parece que você está tentando reinstalar o Nextcloud. No entanto, o arquivo CAN_INSTALL está faltando no diretório de configuração. Crie o arquivo CAN_INSTALL na pasta de configuração para continuar.", diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json index b1698a94ca9..1256d1674e2 100644 --- a/core/l10n/pt_BR.json +++ b/core/l10n/pt_BR.json @@ -178,8 +178,8 @@ "Login form is disabled." : "O formulário de login está desativado.", "Edit Profile" : "Editar Perfil ", "The headline and about sections will show up here" : "O título e as seções sobre serão exibidos aqui", - "You haven't added any info yet" : "Você ainda não adicionou nenhuma informação", - "{user} hasn't added any info yet" : "{user} ainda não adicionou nenhuma informação", + "You have not added any info yet" : "Você ainda não adicionou nenhuma informação", + "{user} has not added any info yet" : "{usuário} ainda não adicionou nenhuma informação", "Error opening the user status modal, try hard refreshing the page" : "Erro ao abrir o modal de status do usuário, tente atualizar a página", "Reset search" : "Redefinir pesquisa", "Search for {name} only" : "Pesquisar somente por {nome}", @@ -315,6 +315,8 @@ "You chose SQLite as database." : "Você escolheu o SQLite como banco de dados.", "SQLite should only be used for minimal and development instances. For production we recommend a different database backend." : "O SQLite deve ser usado apenas para instâncias mínimas e de desenvolvimento. Para produção, recomendamos um banco de dados diferente.", "If you use clients for file syncing, the use of SQLite is highly discouraged." : "Se você usa clientes para sincronização de arquivos, o SQLite é altamente desencorajado.", + "Install" : "Instalar", + "Installing …" : "Instalando ...", "Need help?" : "Precisa de ajuda?", "See the documentation" : "Veja a documentação", "It looks like you are trying to reinstall your Nextcloud. However the file CAN_INSTALL is missing from your config directory. Please create the file CAN_INSTALL in your config folder to continue." : "Parece que você está tentando reinstalar o Nextcloud. No entanto, o arquivo CAN_INSTALL está faltando no diretório de configuração. Crie o arquivo CAN_INSTALL na pasta de configuração para continuar.", diff --git a/core/l10n/ru.js b/core/l10n/ru.js index 9959247ed2b..c9aace37b6c 100644 --- a/core/l10n/ru.js +++ b/core/l10n/ru.js @@ -26,6 +26,7 @@ OC.L10N.register( "Invalid app password" : "Неверный пароль приложения", "Could not complete login" : "Не удалось завершить вход в систему", "Your login token is invalid or has expired" : "Ваш токен неверен или истёк", + "This community release of Nextcloud is unsupported and instant notifications are unavailable." : "Эта сборка Nextcloud для сообщества не обслуживается, мгновенные уведомления недоступны.", "Password reset is disabled" : "Сброс пароля отключён", "Could not reset password because the token is expired" : "Не было возможности сбросить пароль в связи с просроченным токеном", "Could not reset password because the token is invalid" : "Не было возможности сбросить пароль в связи с неверным токеном", @@ -85,6 +86,7 @@ OC.L10N.register( "The reverse proxy header configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If not, this is a security issue and can allow an attacker to spoof their IP address as visible to the Nextcloud. Further information can be found in the {linkstart}documentation ↗{linkend}." : "Заголовки обратного прокси настроены неправильно, либо вы подключены к серверу Nextcloud через доверенный прокси. Если Nextcloud открыт не через доверенный прокси, то это проблема безопасности, которая может позволить атакующему подделать IP-адрес, определяемый сервером Nextcloud. Дополнительная информация содержится в {linkstart}документации ↗{linkend}.", "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 {linkstart}memcached wiki about both modules ↗{linkend}." : "Memcached настроен на распределенный кеш, но установлен не поддерживаемый модуль PHP \"memcache\". \\OC\\Memcache\\Memcached поддерживает только модуль \"memcached\", но не \"memcache\". См. {linkstart}вики-страницу memcached об обоих модулях ↗{linkend}.", "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in the {linkstart1}documentation ↗{linkend}. ({linkstart2}List of invalid files…{linkend} / {linkstart3}Rescan…{linkend})" : "Некоторые файлы не прошли проверку целостности. Для получения дополнительной информации о том, как устранить данную проблему, смотрите нашу {linkstart1}документацию ↗{linkend}. ({linkstart2}Список проблемных файлов…{linkend} / {linkstart3}Сканировать ещё раз…{linkend})", + "The PHP OPcache module is not properly configured:" : "Модуль PHP OPcache настроен некорректно:", "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. Enabling this function is strongly recommended." : "Недоступна функция PHP «set_time_limit». В случае остановки выполнения сценариев во время работы это может привести к повреждению установки сервера Nextcloud. Настоятельно рекомендуется включить эту функцию.", "Your PHP does not have FreeType support, resulting in breakage of profile pictures and the settings interface." : "Установленная версия PHP не поддерживает библиотеку FreeType, что приводит к неверному отображению изображений профиля и интерфейса настроек.", "Missing index \"{indexName}\" in table \"{tableName}\"." : "В таблице «{tableName}» отсутствует индекс «{indexName}».", @@ -178,7 +180,6 @@ OC.L10N.register( "Login form is disabled." : "Форма входа отключена.", "Edit Profile" : "Редактирование профиля", "The headline and about sections will show up here" : "Разделы \"Заголовок\" и \"О вас\" будут отображаться здесь", - "You haven't added any info yet" : "Вы еще не добавили никакой информации", "Error opening the user status modal, try hard refreshing the page" : "Произошла ошибка при открытии модального окна пользователя, попробуйте обновить страницу", "Reset search" : "Очистить поиск", "Search for {name} only" : "Искать только для «{name}»", @@ -314,6 +315,8 @@ OC.L10N.register( "You chose SQLite as database." : "Вы выбрали SQLite в качестве базы данных.", "SQLite should only be used for minimal and development instances. For production we recommend a different database backend." : "SQLite следует использовать только для минимальных и разрабатываемых экземпляров. Для производства мы рекомендуем другую базу данных.", "If you use clients for file syncing, the use of SQLite is highly discouraged." : "Настоятельно не рекомендуется использовать механизм баз данных SQLite при использовании синхронизации файлов с использованием приложений-клиентов.", + "Install" : "Установить", + "Installing …" : "Установка ...", "Need help?" : "Требуется помощь?", "See the documentation" : "Посмотреть документацию", "It looks like you are trying to reinstall your Nextcloud. However the file CAN_INSTALL is missing from your config directory. Please create the file CAN_INSTALL in your config folder to continue." : "Похоже, вы пытаетесь переустановить Nextcloud. Однако файл «CAN_INSTALL» отсутствует в вашем каталоге конфигурации. Чтобы продолжить создайте файл «CAN_INSTALL» в каталоге конфигурации.", diff --git a/core/l10n/ru.json b/core/l10n/ru.json index a437b148242..7c12a233bca 100644 --- a/core/l10n/ru.json +++ b/core/l10n/ru.json @@ -24,6 +24,7 @@ "Invalid app password" : "Неверный пароль приложения", "Could not complete login" : "Не удалось завершить вход в систему", "Your login token is invalid or has expired" : "Ваш токен неверен или истёк", + "This community release of Nextcloud is unsupported and instant notifications are unavailable." : "Эта сборка Nextcloud для сообщества не обслуживается, мгновенные уведомления недоступны.", "Password reset is disabled" : "Сброс пароля отключён", "Could not reset password because the token is expired" : "Не было возможности сбросить пароль в связи с просроченным токеном", "Could not reset password because the token is invalid" : "Не было возможности сбросить пароль в связи с неверным токеном", @@ -83,6 +84,7 @@ "The reverse proxy header configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If not, this is a security issue and can allow an attacker to spoof their IP address as visible to the Nextcloud. Further information can be found in the {linkstart}documentation ↗{linkend}." : "Заголовки обратного прокси настроены неправильно, либо вы подключены к серверу Nextcloud через доверенный прокси. Если Nextcloud открыт не через доверенный прокси, то это проблема безопасности, которая может позволить атакующему подделать IP-адрес, определяемый сервером Nextcloud. Дополнительная информация содержится в {linkstart}документации ↗{linkend}.", "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 {linkstart}memcached wiki about both modules ↗{linkend}." : "Memcached настроен на распределенный кеш, но установлен не поддерживаемый модуль PHP \"memcache\". \\OC\\Memcache\\Memcached поддерживает только модуль \"memcached\", но не \"memcache\". См. {linkstart}вики-страницу memcached об обоих модулях ↗{linkend}.", "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in the {linkstart1}documentation ↗{linkend}. ({linkstart2}List of invalid files…{linkend} / {linkstart3}Rescan…{linkend})" : "Некоторые файлы не прошли проверку целостности. Для получения дополнительной информации о том, как устранить данную проблему, смотрите нашу {linkstart1}документацию ↗{linkend}. ({linkstart2}Список проблемных файлов…{linkend} / {linkstart3}Сканировать ещё раз…{linkend})", + "The PHP OPcache module is not properly configured:" : "Модуль PHP OPcache настроен некорректно:", "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. Enabling this function is strongly recommended." : "Недоступна функция PHP «set_time_limit». В случае остановки выполнения сценариев во время работы это может привести к повреждению установки сервера Nextcloud. Настоятельно рекомендуется включить эту функцию.", "Your PHP does not have FreeType support, resulting in breakage of profile pictures and the settings interface." : "Установленная версия PHP не поддерживает библиотеку FreeType, что приводит к неверному отображению изображений профиля и интерфейса настроек.", "Missing index \"{indexName}\" in table \"{tableName}\"." : "В таблице «{tableName}» отсутствует индекс «{indexName}».", @@ -176,7 +178,6 @@ "Login form is disabled." : "Форма входа отключена.", "Edit Profile" : "Редактирование профиля", "The headline and about sections will show up here" : "Разделы \"Заголовок\" и \"О вас\" будут отображаться здесь", - "You haven't added any info yet" : "Вы еще не добавили никакой информации", "Error opening the user status modal, try hard refreshing the page" : "Произошла ошибка при открытии модального окна пользователя, попробуйте обновить страницу", "Reset search" : "Очистить поиск", "Search for {name} only" : "Искать только для «{name}»", @@ -312,6 +313,8 @@ "You chose SQLite as database." : "Вы выбрали SQLite в качестве базы данных.", "SQLite should only be used for minimal and development instances. For production we recommend a different database backend." : "SQLite следует использовать только для минимальных и разрабатываемых экземпляров. Для производства мы рекомендуем другую базу данных.", "If you use clients for file syncing, the use of SQLite is highly discouraged." : "Настоятельно не рекомендуется использовать механизм баз данных SQLite при использовании синхронизации файлов с использованием приложений-клиентов.", + "Install" : "Установить", + "Installing …" : "Установка ...", "Need help?" : "Требуется помощь?", "See the documentation" : "Посмотреть документацию", "It looks like you are trying to reinstall your Nextcloud. However the file CAN_INSTALL is missing from your config directory. Please create the file CAN_INSTALL in your config folder to continue." : "Похоже, вы пытаетесь переустановить Nextcloud. Однако файл «CAN_INSTALL» отсутствует в вашем каталоге конфигурации. Чтобы продолжить создайте файл «CAN_INSTALL» в каталоге конфигурации.", diff --git a/core/l10n/sk.js b/core/l10n/sk.js index 2354d5dfd55..24b432f0bc1 100644 --- a/core/l10n/sk.js +++ b/core/l10n/sk.js @@ -180,8 +180,6 @@ OC.L10N.register( "Login form is disabled." : "Prihlasovací formulár je vypnutý.", "Edit Profile" : "Upraviť Profil", "The headline and about sections will show up here" : "Tu sa zobrazí nadpis a sekcia Informácie", - "You haven't added any info yet" : "Zatiaľ ste nepridali žiadne informácie", - "{user} hasn't added any info yet" : "{user} zatiaľ nepridal žiadne informácie", "Error opening the user status modal, try hard refreshing the page" : "Chyba pri otváraní modálneho okna stavu používateľa, skúste stránku obnoviť", "Reset search" : "Vynuluj vyhľadávanie", "Search for {name} only" : "Hľadať iba {name}", diff --git a/core/l10n/sk.json b/core/l10n/sk.json index 1896e0ac620..8b884316f82 100644 --- a/core/l10n/sk.json +++ b/core/l10n/sk.json @@ -178,8 +178,6 @@ "Login form is disabled." : "Prihlasovací formulár je vypnutý.", "Edit Profile" : "Upraviť Profil", "The headline and about sections will show up here" : "Tu sa zobrazí nadpis a sekcia Informácie", - "You haven't added any info yet" : "Zatiaľ ste nepridali žiadne informácie", - "{user} hasn't added any info yet" : "{user} zatiaľ nepridal žiadne informácie", "Error opening the user status modal, try hard refreshing the page" : "Chyba pri otváraní modálneho okna stavu používateľa, skúste stránku obnoviť", "Reset search" : "Vynuluj vyhľadávanie", "Search for {name} only" : "Hľadať iba {name}", diff --git a/core/l10n/tr.js b/core/l10n/tr.js index 867d1b07b2f..3afa278b08d 100644 --- a/core/l10n/tr.js +++ b/core/l10n/tr.js @@ -180,8 +180,6 @@ OC.L10N.register( "Login form is disabled." : "Oturum açma formu devre dışı bırakılmış.", "Edit Profile" : "Profili düzenle", "The headline and about sections will show up here" : "Başlık ve hakkında bölümleri burada görüntülenir", - "You haven't added any info yet" : "Henüz herhangi bir bilgi eklememişsiniz", - "{user} hasn't added any info yet" : "{user} henüz herhangi bir bilgi eklememiş", "Error opening the user status modal, try hard refreshing the page" : "Üste açılan kullanıcı durumu penceresinde sorun çıktı. Sayfası temizleyerek yenilemeyi deneyin ", "Reset search" : "Aramayı sıfırla", "Search for {name} only" : "Yalnız {name} için aransın", diff --git a/core/l10n/tr.json b/core/l10n/tr.json index 12611e6a138..a68ae404b52 100644 --- a/core/l10n/tr.json +++ b/core/l10n/tr.json @@ -178,8 +178,6 @@ "Login form is disabled." : "Oturum açma formu devre dışı bırakılmış.", "Edit Profile" : "Profili düzenle", "The headline and about sections will show up here" : "Başlık ve hakkında bölümleri burada görüntülenir", - "You haven't added any info yet" : "Henüz herhangi bir bilgi eklememişsiniz", - "{user} hasn't added any info yet" : "{user} henüz herhangi bir bilgi eklememiş", "Error opening the user status modal, try hard refreshing the page" : "Üste açılan kullanıcı durumu penceresinde sorun çıktı. Sayfası temizleyerek yenilemeyi deneyin ", "Reset search" : "Aramayı sıfırla", "Search for {name} only" : "Yalnız {name} için aransın", diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js index af2f7265c5c..afbf14090cd 100644 --- a/core/l10n/zh_CN.js +++ b/core/l10n/zh_CN.js @@ -180,8 +180,6 @@ OC.L10N.register( "Login form is disabled." : "登录表单被禁用", "Edit Profile" : "编辑个人资料", "The headline and about sections will show up here" : "标题和关于部分将显示在此处", - "You haven't added any info yet" : "你尚未添加任何信息", - "{user} hasn't added any info yet" : "{user} 尚未添加任何信息", "Error opening the user status modal, try hard refreshing the page" : "打开用户状态模块时出错,请努力刷新页面", "Reset search" : "重置搜索", "Search for {name} only" : "仅搜索 {name}", diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json index fa506d48000..9032e2a1d07 100644 --- a/core/l10n/zh_CN.json +++ b/core/l10n/zh_CN.json @@ -178,8 +178,6 @@ "Login form is disabled." : "登录表单被禁用", "Edit Profile" : "编辑个人资料", "The headline and about sections will show up here" : "标题和关于部分将显示在此处", - "You haven't added any info yet" : "你尚未添加任何信息", - "{user} hasn't added any info yet" : "{user} 尚未添加任何信息", "Error opening the user status modal, try hard refreshing the page" : "打开用户状态模块时出错,请努力刷新页面", "Reset search" : "重置搜索", "Search for {name} only" : "仅搜索 {name}", diff --git a/core/l10n/zh_HK.js b/core/l10n/zh_HK.js index f164574212c..c6e4f0599fa 100644 --- a/core/l10n/zh_HK.js +++ b/core/l10n/zh_HK.js @@ -180,8 +180,8 @@ OC.L10N.register( "Login form is disabled." : "登入表格已停用", "Edit Profile" : "編輯個人設定", "The headline and about sections will show up here" : "標題與關於部份將在此顯示", - "You haven't added any info yet" : "您尚未新增任何資訊", - "{user} hasn't added any info yet" : "{user} 尚未新增任何資訊", + "You have not added any info yet" : "您尚未新增任何資訊", + "{user} has not added any info yet" : "{user} 尚未新增任何資訊", "Error opening the user status modal, try hard refreshing the page" : "打開用戶狀態模式時出錯,請嘗試刷新頁面", "Reset search" : "重置搜尋", "Search for {name} only" : "只搜尋 {name}", diff --git a/core/l10n/zh_HK.json b/core/l10n/zh_HK.json index f170d259c41..e3c0fa35c12 100644 --- a/core/l10n/zh_HK.json +++ b/core/l10n/zh_HK.json @@ -178,8 +178,8 @@ "Login form is disabled." : "登入表格已停用", "Edit Profile" : "編輯個人設定", "The headline and about sections will show up here" : "標題與關於部份將在此顯示", - "You haven't added any info yet" : "您尚未新增任何資訊", - "{user} hasn't added any info yet" : "{user} 尚未新增任何資訊", + "You have not added any info yet" : "您尚未新增任何資訊", + "{user} has not added any info yet" : "{user} 尚未新增任何資訊", "Error opening the user status modal, try hard refreshing the page" : "打開用戶狀態模式時出錯,請嘗試刷新頁面", "Reset search" : "重置搜尋", "Search for {name} only" : "只搜尋 {name}", diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js index 5927789881e..e1c62ab83b1 100644 --- a/core/l10n/zh_TW.js +++ b/core/l10n/zh_TW.js @@ -180,8 +180,6 @@ OC.L10N.register( "Login form is disabled." : "登入表單已停用。", "Edit Profile" : "編輯個人檔案", "The headline and about sections will show up here" : "標題與關於部份將在此顯示", - "You haven't added any info yet" : "您尚未新增任何資訊", - "{user} hasn't added any info yet" : "{user} 尚未新增任何資訊", "Error opening the user status modal, try hard refreshing the page" : "開啟使用者狀態模式時發生問題,嘗試重新整理頁面", "Reset search" : "重置搜尋", "Search for {name} only" : "僅搜尋 {name}", diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json index 822accf4b59..6002eb61e7d 100644 --- a/core/l10n/zh_TW.json +++ b/core/l10n/zh_TW.json @@ -178,8 +178,6 @@ "Login form is disabled." : "登入表單已停用。", "Edit Profile" : "編輯個人檔案", "The headline and about sections will show up here" : "標題與關於部份將在此顯示", - "You haven't added any info yet" : "您尚未新增任何資訊", - "{user} hasn't added any info yet" : "{user} 尚未新增任何資訊", "Error opening the user status modal, try hard refreshing the page" : "開啟使用者狀態模式時發生問題,嘗試重新整理頁面", "Reset search" : "重置搜尋", "Search for {name} only" : "僅搜尋 {name}", diff --git a/core/src/views/Profile.vue b/core/src/views/Profile.vue index eb78e760709..a8d6522b435 100644 --- a/core/src/views/Profile.vue +++ b/core/src/views/Profile.vue @@ -252,8 +252,8 @@ export default { emptyProfileMessage() { return this.isCurrentUser - ? t('core', 'You haven\'t added any info yet') - : t('core', '{user} hasn\'t added any info yet', { user: (this.displayname || this.userId) }) + ? t('core', 'You have not added any info yet') + : t('core', '{user} has not added any info yet', { user: (this.displayname || this.userId) }) }, }, diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index 8bdb4811df9..c9ca4e23110 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -56,7 +56,7 @@ $getUserAvatar = static function (int $size) use ($_): string { </div> <header role="banner" id="header"> <div class="header-left"> - <a href="<?php print_unescaped(link_to('', 'index.php')); ?>" + <a href="<?php print_unescaped($_['logoUrl'] ?: link_to('', 'index.php')); ?>" id="nextcloud"> <div class="logo logo-icon"> <h1 class="hidden-visually"> diff --git a/dist/settings-vue-settings-personal-security.js b/dist/settings-vue-settings-personal-security.js index 11e20d2e950..b02d882e548 100644 --- a/dist/settings-vue-settings-personal-security.js +++ b/dist/settings-vue-settings-personal-security.js @@ -1,3 +1,3 @@ /*! For license information please see settings-vue-settings-personal-security.js.LICENSE.txt */ -!function(){"use strict";var n,e={77906:function(n,e,o){var i=o(16453),a=o(20144),r=o(72268),s=o.n(r),c=o(34741),p=o(4820),l=o(10128),d=o.n(l),u=o(79753),A=o(33476),h={ie:/(?:MSIE|Trident|Trident\/7.0; rv)[ :](\d+)/,edge:/^Mozilla\/5\.0 \([^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+ Edge\/[0-9.]+$/,firefox:/^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) Gecko\/[0-9.]+ Firefox\/(\d+)(?:\.\d)?$/,chrome:/^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/(\d+)[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+$/,safari:/^Mozilla\/5\.0 \([^)]*(Windows|OS X)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\)(?: Version\/([0-9]+)[0-9.]+)? Safari\/[0-9.A-Z]+$/,androidChrome:/Android.*(?:; (.*) Build\/).*Chrome\/(\d+)[0-9.]+/,iphone:/ *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,ipad:/\(iPad; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,iosClient:/^Mozilla\/5\.0 \(iOS\) (?:ownCloud|Nextcloud)-iOS.*$/,androidClient:/^Mozilla\/5\.0 \(Android\) ownCloud-android.*$/,iosTalkClient:/^Mozilla\/5\.0 \(iOS\) Nextcloud-Talk.*$/,androidTalkClient:/^Mozilla\/5\.0 \(Android\) Nextcloud-Talk.*$/,davx5:/DAV(?:droid|x5)\/([^ ]+)/,webPirate:/(Sailfish).*WebPirate\/(\d+)/,sailfishBrowser:/(Sailfish).*SailfishBrowser\/(\d+)/},m={ie:t("setting","Internet Explorer"),edge:t("setting","Edge"),firefox:t("setting","Firefox"),chrome:t("setting","Google Chrome"),safari:t("setting","Safari"),androidChrome:t("setting","Google Chrome for Android"),iphone:t("setting","iPhone"),ipad:t("setting","iPad"),iosClient:t("setting","{productName} iOS app",{productName:window.oc_defaults.productName}),androidClient:t("setting","{productName} Android app",{productName:window.oc_defaults.productName}),iosTalkClient:t("setting","{productName} Talk for iOS",{productName:window.oc_defaults.productName}),androidTalkClient:t("setting","{productName} Talk for Android",{productName:window.oc_defaults.productName}),davx5:"DAVx5",webPirate:"WebPirate",sailfishBrowser:"SailfishBrowser"},g={ie:"icon-desktop",edge:"icon-desktop",firefox:"icon-desktop",chrome:"icon-desktop",safari:"icon-desktop",androidChrome:"icon-phone",iphone:"icon-phone",ipad:"icon-tablet",iosClient:"icon-phone",androidClient:"icon-phone",iosTalkClient:"icon-phone",androidTalkClient:"icon-phone",davx5:"icon-phone",webPirate:"icon-link",sailfishBrowser:"icon-link"},v={name:"AuthToken",components:{Actions:A.Actions,ActionButton:A.ActionButton,ActionCheckbox:A.ActionCheckbox},props:{token:{type:Object,required:!0}},data:function(){return{showMore:this.token.canScope||this.token.canDelete,renaming:!1,newName:"",actionOpen:!1}},computed:{lastActivityRelative:function(){return OC.Util.relativeModifiedDate(1e3*this.token.lastActivity)},lastActivity:function(){return OC.Util.formatDate(1e3*this.token.lastActivity,"LLL")},iconName:function(){var n=this.token.name.match(/Mozilla\/5\.0 \((\w+)\) (?:mirall|csyncoC)\/(\d+\.\d+\.\d+)/),e="";n&&(this.token.name=t("settings","Sync client - {os}",{os:n[1],version:n[2]}),e="icon-desktop");var o=this.token.name,i=this.token.name;for(var a in h){var r=o.match(h[a]);r&&(i=r[2]&&r[1]?m[a]+" "+r[2]+" - "+r[1]:r[1]?m[a]+" "+r[1]:m[a],e=g[a])}return this.token.current&&(i=t("settings","This session")),{icon:e,name:i}},wiping:function(){return 2===this.token.type}},methods:{startRename:function(){var n=this;this.actionOpen=!1,this.newName=this.token.name,this.renaming=!0,this.$nextTick((function(){n.$refs.input.select()}))},cancelRename:function(){this.renaming=!1},revoke:function(){this.actionOpen=!1,this.$emit("delete",this.token)},rename:function(){this.renaming=!1,this.$emit("rename",this.token,this.newName)},wipe:function(){this.actionOpen=!1,this.$emit("wipe",this.token)}}},f=o(93379),C=o.n(f),k=o(7795),w=o.n(k),y=o(90569),b=o.n(y),x=o(3565),_=o.n(x),T=o(19216),O=o.n(T),P=o(44589),N=o.n(P),S=o(22209),B={};B.styleTagTransform=N(),B.setAttributes=_(),B.insert=b().bind(null,"head"),B.domAPI=w(),B.insertStyleElement=O(),C()(S.Z,B),S.Z&&S.Z.locals&&S.Z.locals;var D=o(51900),E=(0,D.Z)(v,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("tr",{class:n.wiping,attrs:{"data-id":n.token.id}},[e("td",{staticClass:"client"},[e("div",{class:n.iconName.icon})]),n._v(" "),e("td",{staticClass:"token-name"},[n.token.canRename&&n.renaming?e("input",{directives:[{name:"model",rawName:"v-model",value:n.newName,expression:"newName"}],ref:"input",attrs:{type:"text"},domProps:{value:n.newName},on:{keyup:[function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.rename.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:n.cancelRename.apply(null,arguments)}],blur:n.cancelRename,input:function(t){t.target.composing||(n.newName=t.target.value)}}}):e("span",[n._v(n._s(n.iconName.name))]),n._v(" "),n.wiping?e("span",{staticClass:"wiping-warning"},[n._v("("+n._s(n.t("settings","Marked for remote wipe"))+")")]):n._e()]),n._v(" "),e("td",[e("span",{directives:[{name:"tooltip",rawName:"v-tooltip",value:n.lastActivity,expression:"lastActivity"}],staticClass:"last-activity"},[n._v(n._s(n.lastActivityRelative))])]),n._v(" "),e("td",{staticClass:"more"},[n.token.current?n._e():e("Actions",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:{content:n.t("settings","Device settings"),container:"body"},expression:"{\n\t\t\t\tcontent: t('settings', 'Device settings'),\n\t\t\t\tcontainer: 'body'\n\t\t\t}",modifiers:{auto:!0}}],attrs:{open:n.actionOpen},on:{"update:open":function(t){n.actionOpen=t}}},[1===n.token.type?e("ActionCheckbox",{attrs:{checked:n.token.scope.filesystem},on:{change:function(t){return t.stopPropagation(),t.preventDefault(),n.$emit("toggle-scope",n.token,"filesystem",!n.token.scope.filesystem)}}},[n._v("\n\t\t\t\t"+n._s(n.t("settings","Allow filesystem access"))+"\n\t\t\t")]):n._e(),n._v(" "),n.token.canRename?e("ActionButton",{attrs:{icon:"icon-rename"},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),n.startRename.apply(null,arguments)}}},[n._v("\n\t\t\t\t"+n._s(n.t("settings","Rename"))+"\n\t\t\t")]):n._e(),n._v(" "),n.token.canDelete?[2!==n.token.type?[e("ActionButton",{attrs:{icon:"icon-delete"},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),n.revoke.apply(null,arguments)}}},[n._v("\n\t\t\t\t\t\t"+n._s(n.t("settings","Revoke"))+"\n\t\t\t\t\t")]),n._v(" "),e("ActionButton",{attrs:{icon:"icon-delete"},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),n.wipe.apply(null,arguments)}}},[n._v("\n\t\t\t\t\t\t"+n._s(n.t("settings","Wipe device"))+"\n\t\t\t\t\t")])]:2===n.token.type?e("ActionButton",{attrs:{icon:"icon-delete",title:n.t("settings","Revoke")},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),n.revoke.apply(null,arguments)}}},[n._v("\n\t\t\t\t\t"+n._s(n.t("settings","Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet."))+"\n\t\t\t\t")]):n._e()]:n._e()],2)],1)])}),[],!1,null,"3280a606",null),R={name:"AuthTokenList",components:{AuthToken:E.exports},props:{tokens:{type:Array,required:!0}},computed:{sortedTokens:function(){return this.tokens.slice().sort((function(n,t){var e=parseInt(n.lastActivity,10);return parseInt(t.lastActivity,10)-e}))}},methods:{toggleScope:function(n,t,e){this.$emit("toggle-scope",n,t,e)},rename:function(n,t){this.$emit("rename",n,t)},onDelete:function(n){this.$emit("delete",n)},onWipe:function(n){this.$emit("wipe",n)}}},$=o(61468),Z={};Z.styleTagTransform=N(),Z.setAttributes=_(),Z.insert=b().bind(null,"head"),Z.domAPI=w(),Z.insertStyleElement=O(),C()($.Z,Z),$.Z&&$.Z.locals&&$.Z.locals;var M=o(47719),U={};U.styleTagTransform=N(),U.setAttributes=_(),U.insert=b().bind(null,"head"),U.domAPI=w(),U.insertStyleElement=O(),C()(M.Z,U),M.Z&&M.Z.locals&&M.Z.locals;var j=(0,D.Z)(R,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("table",{attrs:{id:"app-tokens-table"}},[n.tokens.length?e("thead",[e("tr",[e("th"),n._v(" "),e("th",[n._v(n._s(n.t("settings","Device")))]),n._v(" "),e("th",[n._v(n._s(n.t("settings","Last activity")))]),n._v(" "),e("th")])]):n._e(),n._v(" "),e("tbody",{staticClass:"token-list"},n._l(n.sortedTokens,(function(t){return e("AuthToken",{key:t.id,attrs:{token:t},on:{toggleScope:n.toggleScope,rename:n.rename,delete:n.onDelete,wipe:n.onWipe}})})),1)])}),[],!1,null,"0459b3e6",null).exports,q=o(147);function W(n,t){var e=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable}))),e.push.apply(e,o)}return e}function G(n){for(var t=1;t<arguments.length;t++){var e=null!=arguments[t]?arguments[t]:{};t%2?W(Object(e),!0).forEach((function(t){L(n,t,e[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(e)):W(Object(e)).forEach((function(t){Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(e,t))}))}return n}function L(n,t,e){return t in n?Object.defineProperty(n,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):n[t]=e,n}var z={name:"AuthTokenSetupDialogue",components:{QR:o.n(q)()},props:{add:{type:Function,required:!0}},data:function(){return{adding:!1,loading:!1,deviceName:"",appPassword:"",loginName:"",passwordCopied:!1,showQR:!1,qrUrl:"",hoveringCopyButton:!1}},computed:{copyTooltipOptions:function(){var n={hideOnTargetClick:!1,trigger:"manual"};return this.passwordCopied?G(G({},n),{},{content:t("settings","Copied!"),show:!0}):G(G({},n),{},{content:t("settings","Copy"),show:this.hoveringCopyButton})}},methods:{selectInput:function(n){n.currentTarget.select()},submit:function(){var n=this;d()().then((function(){return n.loading=!0,n.add(n.deviceName)})).then((function(t){n.adding=!0,n.loginName=t.loginName,n.appPassword=t.token;var e=window.location.protocol+"//"+window.location.host+(0,u.getRootUrl)();n.qrUrl="nc://login/user:".concat(t.loginName,"&password:").concat(t.token,"&server:").concat(e),n.$nextTick((function(){n.$refs.appPassword.select()}))})).catch((function(e){console.error("could not create a new app password",e),OC.Notification.showTemporary(t("settings","Error while creating device token")),n.reset()}))},onCopyPassword:function(){var n=this;this.passwordCopied=!0,this.$refs.clipboardButton.blur(),setTimeout((function(){n.passwordCopied=!1}),3e3)},onCopyPasswordFailed:function(){OC.Notification.showTemporary(t("settings","Could not copy app password. Please copy it manually."))},reset:function(){this.adding=!1,this.loading=!1,this.showQR=!1,this.qrUrl="",this.deviceName="",this.appPassword="",this.loginName=""}}},I=o(82e3),F={};F.styleTagTransform=N(),F.setAttributes=_(),F.insert=b().bind(null,"head"),F.domAPI=w(),F.insertStyleElement=O(),C()(I.Z,F),I.Z&&I.Z.locals&&I.Z.locals;var Q=(0,D.Z)(z,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return n.adding?e("div",[n._v("\n\t"+n._s(n.t("settings","Use the credentials below to configure your app or device."))+"\n\t"+n._s(n.t("settings","For security reasons this password will only be shown once."))+"\n\t"),e("div",{staticClass:"app-password-row"},[e("span",{staticClass:"app-password-label"},[n._v(n._s(n.t("settings","Username")))]),n._v(" "),e("input",{staticClass:"monospaced",attrs:{type:"text",readonly:"readonly"},domProps:{value:n.loginName},on:{focus:n.selectInput}})]),n._v(" "),e("div",{staticClass:"app-password-row"},[e("span",{staticClass:"app-password-label"},[n._v(n._s(n.t("settings","Password")))]),n._v(" "),e("input",{ref:"appPassword",staticClass:"monospaced",attrs:{type:"text",readonly:"readonly"},domProps:{value:n.appPassword},on:{focus:n.selectInput}}),n._v(" "),e("a",{directives:[{name:"tooltip",rawName:"v-tooltip",value:n.copyTooltipOptions,expression:"copyTooltipOptions"},{name:"clipboard",rawName:"v-clipboard:copy",value:n.appPassword,expression:"appPassword",arg:"copy"},{name:"clipboard",rawName:"v-clipboard:success",value:n.onCopyPassword,expression:"onCopyPassword",arg:"success"},{name:"clipboard",rawName:"v-clipboard:error",value:n.onCopyPasswordFailed,expression:"onCopyPasswordFailed",arg:"error"}],ref:"clipboardButton",staticClass:"icon icon-clippy",on:{mouseover:function(t){n.hoveringCopyButton=!0},mouseleave:function(t){n.hoveringCopyButton=!1}}}),n._v(" "),e("button",{staticClass:"button",on:{click:n.reset}},[n._v("\n\t\t\t"+n._s(n.t("settings","Done"))+"\n\t\t")])]),n._v(" "),e("div",{staticClass:"app-password-row"},[e("span",{staticClass:"app-password-label"}),n._v(" "),n.showQR?e("QR",{attrs:{value:n.qrUrl}}):e("a",{on:{click:function(t){n.showQR=!0}}},[n._v("\n\t\t\t"+n._s(n.t("settings","Show QR code for mobile apps"))+"\n\t\t")])],1)]):e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:n.deviceName,expression:"deviceName"}],attrs:{type:"text",disabled:n.loading,placeholder:n.t("settings","App name")},domProps:{value:n.deviceName},on:{keydown:function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.submit.apply(null,arguments)},input:function(t){t.target.composing||(n.deviceName=t.target.value)}}}),n._v(" "),e("button",{staticClass:"button",attrs:{disabled:n.loading},on:{click:n.submit}},[n._v("\n\t\t"+n._s(n.t("settings","Create new app password"))+"\n\t")])])}),[],!1,null,"56d907f7",null),K=Q.exports;function H(n,t,e,o,i,a,r){try{var s=n[a](r),c=s.value}catch(n){return void e(n)}s.done?t(c):Promise.resolve(c).then(o,i)}var X=function(n){return function(t){return n(t),t}},V={name:"AuthTokenSection",components:{AuthTokenSetupDialogue:K,AuthTokenList:j},props:{tokens:{type:Array,required:!0},canCreateToken:{type:Boolean,required:!0}},data:function(){return{baseUrl:(0,u.generateUrl)("/settings/personal/authtokens")}},methods:{addNewToken:function(n){var e=this;console.debug("creating a new app token",n);var o={name:n};return p.default.post(this.baseUrl,o).then((function(n){return n.data})).then(X((function(){return console.debug("app token created")}))).then(X((function(n){return e.tokens.push(n.deviceToken)}))).catch((function(n){throw console.error.bind("could not create app password",n),OC.Notification.showTemporary(t("settings","Error while creating device token")),n}))},toggleTokenScope:function(n,e,o){console.debug("updating app token scope",n.id,e,o);var i=n.scope[e];return n.scope[e]=o,this.updateToken(n).then(X((function(){return console.debug("app token scope updated")}))).catch((function(o){throw console.error.bind("could not update app token scope",o),OC.Notification.showTemporary(t("settings","Error while updating device token scope")),n.scope[e]=i,o}))},rename:function(n,e){console.debug("renaming app token",n.id,n.name,e);var o=n.name;return n.name=e,this.updateToken(n).then(X((function(){return console.debug("app token name updated")}))).catch((function(e){console.error.bind("could not update app token name",e),OC.Notification.showTemporary(t("settings","Error while updating device token name")),n.name=o}))},updateToken:function(n){return p.default.put(this.baseUrl+"/"+n.id,n).then((function(n){return n.data}))},deleteToken:function(n){var e=this;return console.debug("deleting app token",n),this.tokens=this.tokens.filter((function(t){return t!==n})),p.default.delete(this.baseUrl+"/"+n.id).then((function(n){return n.data})).then(X((function(){return console.debug("app token deleted")}))).catch((function(o){console.error.bind("could not delete app token",o),OC.Notification.showTemporary(t("settings","Error while deleting the token")),e.tokens.push(n)}))},wipeToken:function(n){var e,o=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return console.debug("wiping app token",n),e.prev=1,e.next=4,d()();case 4:return e.next=6,new Promise((function(n){OC.dialogs.confirm(t("settings","Do you really want to wipe your data from this device?"),t("settings","Confirm wipe"),n,!0)}));case 6:if(e.sent){e.next=9;break}return console.debug("wipe aborted by user"),e.abrupt("return");case 9:return e.next=11,p.default.post(o.baseUrl+"/wipe/"+n.id);case 11:console.debug("app token marked for wipe"),n.type=2,e.next=19;break;case 15:e.prev=15,e.t0=e.catch(1),console.error("could not wipe app token",e.t0),OC.Notification.showTemporary(t("settings","Error while wiping the device with the token"));case 19:case"end":return e.stop()}}),e,null,[[1,15]])})),function(){var n=this,t=arguments;return new Promise((function(o,i){var a=e.apply(n,t);function r(n){H(a,o,i,r,s,"next",n)}function s(n){H(a,o,i,r,s,"throw",n)}r(void 0)}))})()}}},J=V,Y=(0,D.Z)(J,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"section",attrs:{id:"security"}},[e("h2",[n._v(n._s(n.t("settings","Devices & sessions",{},void 0,{sanitize:!1})))]),n._v(" "),e("p",{staticClass:"settings-hint hidden-when-empty"},[n._v("\n\t\t"+n._s(n.t("settings","Web, desktop and mobile clients currently logged in to your account."))+"\n\t")]),n._v(" "),e("AuthTokenList",{attrs:{tokens:n.tokens},on:{toggleScope:n.toggleTokenScope,rename:n.rename,delete:n.deleteToken,wipe:n.wipeToken}}),n._v(" "),n.canCreateToken?e("AuthTokenSetupDialogue",{attrs:{add:n.addNewToken}}):n._e()],1)}),[],!1,null,"27872b36",null).exports;o.nc=btoa(OC.requestToken),a.default.use(s()),a.default.use(c.default,{defaultHtml:!1}),a.default.prototype.t=t,new(a.default.extend(Y))({propsData:{tokens:(0,i.loadState)("settings","app_tokens"),canCreateToken:(0,i.loadState)("settings","can_create_app_token")}}).$mount("#security-authtokens")},22209:function(n,t,e){var o=e(94015),i=e.n(o),a=e(23645),r=e.n(a)()(i());r.push([n.id,".wiping[data-v-3280a606]{background-color:var(--color-background-darker)}td[data-v-3280a606]{border-top:1px solid var(--color-border);max-width:200px;white-space:normal;vertical-align:middle;position:relative}td.client[data-v-3280a606],td.more[data-v-3280a606]{overflow:visible;position:relative;width:44px;height:44px}td.token-name[data-v-3280a606]{padding:10px 6px}td.token-name.token-rename[data-v-3280a606]{padding:0}td.token-name input[data-v-3280a606]{width:100%;margin:0}td.token-name .wiping-warning[data-v-3280a606]{color:var(--color-text-lighter)}td.more[data-v-3280a606]{padding:0 10px}td.client div[data-v-3280a606]{opacity:.57;width:44px;height:44px}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthToken.vue"],names:[],mappings:"AAiQA,yBACC,+CAAA,CAGD,oBACC,wCAAA,CACA,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,oDACC,gBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CAGD,+BACC,gBAAA,CAEA,4CACC,SAAA,CAGD,qCACC,UAAA,CACA,QAAA,CAGF,+CACC,+BAAA,CAGD,yBAEC,cAAA,CAMA,+BACC,WAAA,CACA,UAAA,CACA,WAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.wiping {\n\tbackground-color: var(--color-background-darker);\n}\n\ntd {\n\tborder-top: 1px solid var(--color-border);\n\tmax-width: 200px;\n\twhite-space: normal;\n\tvertical-align: middle;\n\tposition: relative;\n\n\t&%icon {\n\t\toverflow: visible;\n\t\tposition: relative;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\n\t&.token-name {\n\t\tpadding: 10px 6px;\n\n\t\t&.token-rename {\n\t\t\tpadding: 0;\n\t\t}\n\n\t\tinput {\n\t\t\twidth: 100%;\n\t\t\tmargin: 0;\n\t\t}\n\t}\n\t&.token-name .wiping-warning {\n\t\tcolor: var(--color-text-lighter);\n\t}\n\n\t&.more {\n\t\t@extend %icon;\n\t\tpadding: 0 10px;\n\t}\n\n\t&.client {\n\t\t@extend %icon;\n\n\t\tdiv {\n\t\t\topacity: 0.57;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),t.Z=r},61468:function(n,t,e){var o=e(94015),i=e.n(o),a=e(23645),r=e.n(a)()(i());r.push([n.id,"table[data-v-0459b3e6]{width:100%;min-height:50px;padding-top:5px;max-width:580px}table th[data-v-0459b3e6]{opacity:.5;padding:10px 0}.token-list td>a.icon-more[data-v-0459b3e6]{transition:opacity var(--animation-quick)}.token-list a.icon-more[data-v-0459b3e6]{padding:14px;display:block;width:44px;height:44px;opacity:.5}.token-list tr:hover td>a.icon[data-v-0459b3e6],.token-list tr td>a.icon[data-v-0459b3e6]:focus,.token-list tr.active td>a.icon[data-v-0459b3e6]{opacity:1}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenList.vue"],names:[],mappings:"AAwFA,uBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CAEA,0BACC,UAAA,CACA,cAAA,CAKD,4CACC,yCAAA,CAGD,yCACC,YAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CAIA,iJAGC,SAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ntable {\n\twidth: 100%;\n\tmin-height: 50px;\n\tpadding-top: 5px;\n\tmax-width: 580px;\n\n\tth {\n\t\topacity: .5;\n\t\tpadding: 10px 0;\n\t}\n}\n\n.token-list {\n\ttd > a.icon-more {\n\t\ttransition: opacity var(--animation-quick);\n\t}\n\n\ta.icon-more {\n\t\tpadding: 14px;\n\t\tdisplay: block;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t\topacity: .5;\n\t}\n\n\ttr {\n\t\t&:hover td > a.icon,\n\t\ttd > a.icon:focus,\n\t\t&.active td > a.icon {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),t.Z=r},47719:function(n,t,e){var o=e(94015),i=e.n(o),a=e(23645),r=e.n(a)()(i());r.push([n.id,"#app-tokens-table tr>*:nth-child(2){padding-left:6px}#app-tokens-table tr>*:nth-child(3){text-align:right}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenList.vue"],names:[],mappings:"AA8HC,oCACC,gBAAA,CAGD,oCACC,gBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n#app-tokens-table {\n\ttr > *:nth-child(2) {\n\t\tpadding-left: 6px;\n\t}\n\n\ttr > *:nth-child(3) {\n\t\ttext-align: right;\n\t}\n}\n"],sourceRoot:""}]),t.Z=r},82e3:function(n,t,e){var o=e(94015),i=e.n(o),a=e(23645),r=e.n(a)()(i());r.push([n.id,".app-password-row[data-v-56d907f7]{display:table-row}.app-password-row .icon[data-v-56d907f7]{background-size:16px 16px;display:inline-block;position:relative;top:3px;margin-left:5px;margin-right:8px}.app-password-label[data-v-56d907f7]{display:table-cell;padding-right:1em;text-align:right;vertical-align:middle}.monospaced[data-v-56d907f7]{width:245px;font-family:monospace}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenSetupDialogue.vue"],names:[],mappings:"AAoLA,mCACC,iBAAA,CAEA,yCACC,yBAAA,CACA,oBAAA,CACA,iBAAA,CACA,OAAA,CACA,eAAA,CACA,gBAAA,CAKF,qCACC,kBAAA,CACA,iBAAA,CACA,gBAAA,CACA,qBAAA,CAGD,6BACC,WAAA,CACA,qBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.app-password-row {\n\tdisplay: table-row;\n\n\t.icon {\n\t\tbackground-size: 16px 16px;\n\t\tdisplay: inline-block;\n\t\tposition: relative;\n\t\ttop: 3px;\n\t\tmargin-left: 5px;\n\t\tmargin-right: 8px;\n\t}\n\n}\n\n.app-password-label {\n\tdisplay: table-cell;\n\tpadding-right: 1em;\n\ttext-align: right;\n\tvertical-align: middle;\n}\n\n.monospaced {\n\twidth: 245px;\n\tfont-family: monospace;\n}\n"],sourceRoot:""}]),t.Z=r}},o={};function i(n){var t=o[n];if(void 0!==t)return t.exports;var a=o[n]={id:n,loaded:!1,exports:{}};return e[n].call(a.exports,a,a.exports,i),a.loaded=!0,a.exports}i.m=e,i.amdD=function(){throw new Error("define cannot be used indirect")},i.amdO={},n=[],i.O=function(t,e,o,a){if(!e){var r=1/0;for(l=0;l<n.length;l++){e=n[l][0],o=n[l][1],a=n[l][2];for(var s=!0,c=0;c<e.length;c++)(!1&a||r>=a)&&Object.keys(i.O).every((function(n){return i.O[n](e[c])}))?e.splice(c--,1):(s=!1,a<r&&(r=a));if(s){n.splice(l--,1);var p=o();void 0!==p&&(t=p)}}return t}a=a||0;for(var l=n.length;l>0&&n[l-1][2]>a;l--)n[l]=n[l-1];n[l]=[e,o,a]},i.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return i.d(t,{a:t}),t},i.d=function(n,t){for(var e in t)i.o(t,e)&&!i.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:t[e]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),i.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},i.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},i.nmd=function(n){return n.paths=[],n.children||(n.children=[]),n},i.j=783,function(){var n={783:0};i.O.j=function(t){return 0===n[t]};var t=function(t,e){var o,a,r=e[0],s=e[1],c=e[2],p=0;if(r.some((function(t){return 0!==n[t]}))){for(o in s)i.o(s,o)&&(i.m[o]=s[o]);if(c)var l=c(i)}for(t&&t(e);p<r.length;p++)a=r[p],i.o(n,a)&&n[a]&&n[a][0](),n[a]=0;return i.O(l)},e=self.webpackChunknextcloud=self.webpackChunknextcloud||[];e.forEach(t.bind(null,0)),e.push=t.bind(null,e.push.bind(e))}();var a=i.O(void 0,[874],(function(){return i(77906)}));a=i.O(a)}(); -//# sourceMappingURL=settings-vue-settings-personal-security.js.map?v=3a01666cf5330aff3745
\ No newline at end of file +!function(){"use strict";var n,e={46448:function(n,e,o){var i=o(16453),a=o(20144),r=o(72268),s=o.n(r),c=o(34741),p=o(4820),l=o(10128),d=o.n(l),u=o(79753),A=o(33476),h={ie:/(?:MSIE|Trident|Trident\/7.0; rv)[ :](\d+)/,edge:/^Mozilla\/5\.0 \([^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+ Edge\/[0-9.]+$/,firefox:/^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) Gecko\/[0-9.]+ Firefox\/(\d+)(?:\.\d)?$/,chrome:/^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/(\d+)[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+$/,safari:/^Mozilla\/5\.0 \([^)]*(Windows|OS X)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\)(?: Version\/([0-9]+)[0-9.]+)? Safari\/[0-9.A-Z]+$/,androidChrome:/Android.*(?:; (.*) Build\/).*Chrome\/(\d+)[0-9.]+/,iphone:/ *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,ipad:/\(iPad; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,iosClient:/^Mozilla\/5\.0 \(iOS\) (?:ownCloud|Nextcloud)-iOS.*$/,androidClient:/^Mozilla\/5\.0 \(Android\) ownCloud-android.*$/,iosTalkClient:/^Mozilla\/5\.0 \(iOS\) Nextcloud-Talk.*$/,androidTalkClient:/^Mozilla\/5\.0 \(Android\) Nextcloud-Talk.*$/,davx5:/DAV(?:droid|x5)\/([^ ]+)/,webPirate:/(Sailfish).*WebPirate\/(\d+)/,sailfishBrowser:/(Sailfish).*SailfishBrowser\/(\d+)/},m={ie:t("setting","Internet Explorer"),edge:t("setting","Edge"),firefox:t("setting","Firefox"),chrome:t("setting","Google Chrome"),safari:t("setting","Safari"),androidChrome:t("setting","Google Chrome for Android"),iphone:t("setting","iPhone"),ipad:t("setting","iPad"),iosClient:t("setting","{productName} iOS app",{productName:window.oc_defaults.productName}),androidClient:t("setting","{productName} Android app",{productName:window.oc_defaults.productName}),iosTalkClient:t("setting","{productName} Talk for iOS",{productName:window.oc_defaults.productName}),androidTalkClient:t("setting","{productName} Talk for Android",{productName:window.oc_defaults.productName}),davx5:"DAVx5",webPirate:"WebPirate",sailfishBrowser:"SailfishBrowser"},g={ie:"icon-desktop",edge:"icon-desktop",firefox:"icon-desktop",chrome:"icon-desktop",safari:"icon-desktop",androidChrome:"icon-phone",iphone:"icon-phone",ipad:"icon-tablet",iosClient:"icon-phone",androidClient:"icon-phone",iosTalkClient:"icon-phone",androidTalkClient:"icon-phone",davx5:"icon-phone",webPirate:"icon-link",sailfishBrowser:"icon-link"},v={name:"AuthToken",components:{Actions:A.Actions,ActionButton:A.ActionButton,ActionCheckbox:A.ActionCheckbox},props:{token:{type:Object,required:!0}},data:function(){return{showMore:this.token.canScope||this.token.canDelete,renaming:!1,newName:"",actionOpen:!1}},computed:{lastActivityRelative:function(){return OC.Util.relativeModifiedDate(1e3*this.token.lastActivity)},lastActivity:function(){return OC.Util.formatDate(1e3*this.token.lastActivity,"LLL")},iconName:function(){var n=this.token.name.match(/Mozilla\/5\.0 \((\w+)\) (?:mirall|csyncoC)\/(\d+\.\d+\.\d+)/),e="";n&&(this.token.name=t("settings","Sync client - {os}",{os:n[1],version:n[2]}),e="icon-desktop");var o=this.token.name,i=this.token.name;for(var a in h){var r=o.match(h[a]);r&&(i=r[2]&&r[1]?m[a]+" "+r[2]+" - "+r[1]:r[1]?m[a]+" "+r[1]:m[a],e=g[a])}return this.token.current&&(i=t("settings","This session")),{icon:e,name:i}},wiping:function(){return 2===this.token.type}},methods:{startRename:function(){var n=this;this.actionOpen=!1,this.newName=this.token.name,this.renaming=!0,this.$nextTick((function(){n.$refs.input.select()}))},cancelRename:function(){this.renaming=!1},revoke:function(){this.actionOpen=!1,this.$emit("delete",this.token)},rename:function(){this.renaming=!1,this.$emit("rename",this.token,this.newName)},wipe:function(){this.actionOpen=!1,this.$emit("wipe",this.token)}}},f=o(93379),C=o.n(f),k=o(7795),w=o.n(k),y=o(90569),b=o.n(y),x=o(3565),_=o.n(x),T=o(19216),O=o.n(T),P=o(44589),N=o.n(P),S=o(40708),B={};B.styleTagTransform=N(),B.setAttributes=_(),B.insert=b().bind(null,"head"),B.domAPI=w(),B.insertStyleElement=O(),C()(S.Z,B),S.Z&&S.Z.locals&&S.Z.locals;var D=o(51900),E=(0,D.Z)(v,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("tr",{class:n.wiping,attrs:{"data-id":n.token.id}},[e("td",{staticClass:"client"},[e("div",{class:n.iconName.icon})]),n._v(" "),e("td",{staticClass:"token-name"},[n.token.canRename&&n.renaming?e("input",{directives:[{name:"model",rawName:"v-model",value:n.newName,expression:"newName"}],ref:"input",attrs:{type:"text"},domProps:{value:n.newName},on:{keyup:[function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.rename.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:n.cancelRename.apply(null,arguments)}],blur:n.cancelRename,input:function(t){t.target.composing||(n.newName=t.target.value)}}}):e("span",[n._v(n._s(n.iconName.name))]),n._v(" "),n.wiping?e("span",{staticClass:"wiping-warning"},[n._v("("+n._s(n.t("settings","Marked for remote wipe"))+")")]):n._e()]),n._v(" "),e("td",[e("span",{directives:[{name:"tooltip",rawName:"v-tooltip",value:n.lastActivity,expression:"lastActivity"}],staticClass:"last-activity"},[n._v(n._s(n.lastActivityRelative))])]),n._v(" "),e("td",{staticClass:"more"},[n.token.current?n._e():e("Actions",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:{content:n.t("settings","Device settings"),container:"body"},expression:"{\n\t\t\t\tcontent: t('settings', 'Device settings'),\n\t\t\t\tcontainer: 'body'\n\t\t\t}",modifiers:{auto:!0}}],attrs:{open:n.actionOpen},on:{"update:open":function(t){n.actionOpen=t}}},[1===n.token.type?e("ActionCheckbox",{attrs:{checked:n.token.scope.filesystem},on:{change:function(t){return t.stopPropagation(),t.preventDefault(),n.$emit("toggle-scope",n.token,"filesystem",!n.token.scope.filesystem)}}},[n._v("\n\t\t\t\t"+n._s(n.t("settings","Allow filesystem access"))+"\n\t\t\t")]):n._e(),n._v(" "),n.token.canRename?e("ActionButton",{attrs:{icon:"icon-rename"},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),n.startRename.apply(null,arguments)}}},[n._v("\n\t\t\t\t"+n._s(n.t("settings","Rename"))+"\n\t\t\t")]):n._e(),n._v(" "),n.token.canDelete?[2!==n.token.type?[e("ActionButton",{attrs:{icon:"icon-delete"},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),n.revoke.apply(null,arguments)}}},[n._v("\n\t\t\t\t\t\t"+n._s(n.t("settings","Revoke"))+"\n\t\t\t\t\t")]),n._v(" "),e("ActionButton",{attrs:{icon:"icon-delete"},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),n.wipe.apply(null,arguments)}}},[n._v("\n\t\t\t\t\t\t"+n._s(n.t("settings","Wipe device"))+"\n\t\t\t\t\t")])]:2===n.token.type?e("ActionButton",{attrs:{icon:"icon-delete",title:n.t("settings","Revoke")},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),n.revoke.apply(null,arguments)}}},[n._v("\n\t\t\t\t\t"+n._s(n.t("settings","Revoking this token might prevent the wiping of your device if it has not started the wipe yet."))+"\n\t\t\t\t")]):n._e()]:n._e()],2)],1)])}),[],!1,null,"6852e55e",null),R={name:"AuthTokenList",components:{AuthToken:E.exports},props:{tokens:{type:Array,required:!0}},computed:{sortedTokens:function(){return this.tokens.slice().sort((function(n,t){var e=parseInt(n.lastActivity,10);return parseInt(t.lastActivity,10)-e}))}},methods:{toggleScope:function(n,t,e){this.$emit("toggle-scope",n,t,e)},rename:function(n,t){this.$emit("rename",n,t)},onDelete:function(n){this.$emit("delete",n)},onWipe:function(n){this.$emit("wipe",n)}}},$=o(61468),Z={};Z.styleTagTransform=N(),Z.setAttributes=_(),Z.insert=b().bind(null,"head"),Z.domAPI=w(),Z.insertStyleElement=O(),C()($.Z,Z),$.Z&&$.Z.locals&&$.Z.locals;var M=o(47719),U={};U.styleTagTransform=N(),U.setAttributes=_(),U.insert=b().bind(null,"head"),U.domAPI=w(),U.insertStyleElement=O(),C()(M.Z,U),M.Z&&M.Z.locals&&M.Z.locals;var j=(0,D.Z)(R,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("table",{attrs:{id:"app-tokens-table"}},[n.tokens.length?e("thead",[e("tr",[e("th"),n._v(" "),e("th",[n._v(n._s(n.t("settings","Device")))]),n._v(" "),e("th",[n._v(n._s(n.t("settings","Last activity")))]),n._v(" "),e("th")])]):n._e(),n._v(" "),e("tbody",{staticClass:"token-list"},n._l(n.sortedTokens,(function(t){return e("AuthToken",{key:t.id,attrs:{token:t},on:{toggleScope:n.toggleScope,rename:n.rename,delete:n.onDelete,wipe:n.onWipe}})})),1)])}),[],!1,null,"0459b3e6",null).exports,q=o(147);function W(n,t){var e=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable}))),e.push.apply(e,o)}return e}function G(n){for(var t=1;t<arguments.length;t++){var e=null!=arguments[t]?arguments[t]:{};t%2?W(Object(e),!0).forEach((function(t){L(n,t,e[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(e)):W(Object(e)).forEach((function(t){Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(e,t))}))}return n}function L(n,t,e){return t in n?Object.defineProperty(n,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):n[t]=e,n}var z={name:"AuthTokenSetupDialogue",components:{QR:o.n(q)()},props:{add:{type:Function,required:!0}},data:function(){return{adding:!1,loading:!1,deviceName:"",appPassword:"",loginName:"",passwordCopied:!1,showQR:!1,qrUrl:"",hoveringCopyButton:!1}},computed:{copyTooltipOptions:function(){var n={hideOnTargetClick:!1,trigger:"manual"};return this.passwordCopied?G(G({},n),{},{content:t("settings","Copied!"),show:!0}):G(G({},n),{},{content:t("settings","Copy"),show:this.hoveringCopyButton})}},methods:{selectInput:function(n){n.currentTarget.select()},submit:function(){var n=this;d()().then((function(){return n.loading=!0,n.add(n.deviceName)})).then((function(t){n.adding=!0,n.loginName=t.loginName,n.appPassword=t.token;var e=window.location.protocol+"//"+window.location.host+(0,u.getRootUrl)();n.qrUrl="nc://login/user:".concat(t.loginName,"&password:").concat(t.token,"&server:").concat(e),n.$nextTick((function(){n.$refs.appPassword.select()}))})).catch((function(e){console.error("could not create a new app password",e),OC.Notification.showTemporary(t("settings","Error while creating device token")),n.reset()}))},onCopyPassword:function(){var n=this;this.passwordCopied=!0,this.$refs.clipboardButton.blur(),setTimeout((function(){n.passwordCopied=!1}),3e3)},onCopyPasswordFailed:function(){OC.Notification.showTemporary(t("settings","Could not copy app password. Please copy it manually."))},reset:function(){this.adding=!1,this.loading=!1,this.showQR=!1,this.qrUrl="",this.deviceName="",this.appPassword="",this.loginName=""}}},I=o(82e3),F={};F.styleTagTransform=N(),F.setAttributes=_(),F.insert=b().bind(null,"head"),F.domAPI=w(),F.insertStyleElement=O(),C()(I.Z,F),I.Z&&I.Z.locals&&I.Z.locals;var Q=(0,D.Z)(z,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return n.adding?e("div",[n._v("\n\t"+n._s(n.t("settings","Use the credentials below to configure your app or device."))+"\n\t"+n._s(n.t("settings","For security reasons this password will only be shown once."))+"\n\t"),e("div",{staticClass:"app-password-row"},[e("span",{staticClass:"app-password-label"},[n._v(n._s(n.t("settings","Username")))]),n._v(" "),e("input",{staticClass:"monospaced",attrs:{type:"text",readonly:"readonly"},domProps:{value:n.loginName},on:{focus:n.selectInput}})]),n._v(" "),e("div",{staticClass:"app-password-row"},[e("span",{staticClass:"app-password-label"},[n._v(n._s(n.t("settings","Password")))]),n._v(" "),e("input",{ref:"appPassword",staticClass:"monospaced",attrs:{type:"text",readonly:"readonly"},domProps:{value:n.appPassword},on:{focus:n.selectInput}}),n._v(" "),e("a",{directives:[{name:"tooltip",rawName:"v-tooltip",value:n.copyTooltipOptions,expression:"copyTooltipOptions"},{name:"clipboard",rawName:"v-clipboard:copy",value:n.appPassword,expression:"appPassword",arg:"copy"},{name:"clipboard",rawName:"v-clipboard:success",value:n.onCopyPassword,expression:"onCopyPassword",arg:"success"},{name:"clipboard",rawName:"v-clipboard:error",value:n.onCopyPasswordFailed,expression:"onCopyPasswordFailed",arg:"error"}],ref:"clipboardButton",staticClass:"icon icon-clippy",on:{mouseover:function(t){n.hoveringCopyButton=!0},mouseleave:function(t){n.hoveringCopyButton=!1}}}),n._v(" "),e("button",{staticClass:"button",on:{click:n.reset}},[n._v("\n\t\t\t"+n._s(n.t("settings","Done"))+"\n\t\t")])]),n._v(" "),e("div",{staticClass:"app-password-row"},[e("span",{staticClass:"app-password-label"}),n._v(" "),n.showQR?e("QR",{attrs:{value:n.qrUrl}}):e("a",{on:{click:function(t){n.showQR=!0}}},[n._v("\n\t\t\t"+n._s(n.t("settings","Show QR code for mobile apps"))+"\n\t\t")])],1)]):e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:n.deviceName,expression:"deviceName"}],attrs:{type:"text",disabled:n.loading,placeholder:n.t("settings","App name")},domProps:{value:n.deviceName},on:{keydown:function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.submit.apply(null,arguments)},input:function(t){t.target.composing||(n.deviceName=t.target.value)}}}),n._v(" "),e("button",{staticClass:"button",attrs:{disabled:n.loading},on:{click:n.submit}},[n._v("\n\t\t"+n._s(n.t("settings","Create new app password"))+"\n\t")])])}),[],!1,null,"56d907f7",null),K=Q.exports;function H(n,t,e,o,i,a,r){try{var s=n[a](r),c=s.value}catch(n){return void e(n)}s.done?t(c):Promise.resolve(c).then(o,i)}var X=function(n){return function(t){return n(t),t}},V={name:"AuthTokenSection",components:{AuthTokenSetupDialogue:K,AuthTokenList:j},props:{tokens:{type:Array,required:!0},canCreateToken:{type:Boolean,required:!0}},data:function(){return{baseUrl:(0,u.generateUrl)("/settings/personal/authtokens")}},methods:{addNewToken:function(n){var e=this;console.debug("creating a new app token",n);var o={name:n};return p.default.post(this.baseUrl,o).then((function(n){return n.data})).then(X((function(){return console.debug("app token created")}))).then(X((function(n){return e.tokens.push(n.deviceToken)}))).catch((function(n){throw console.error.bind("could not create app password",n),OC.Notification.showTemporary(t("settings","Error while creating device token")),n}))},toggleTokenScope:function(n,e,o){console.debug("updating app token scope",n.id,e,o);var i=n.scope[e];return n.scope[e]=o,this.updateToken(n).then(X((function(){return console.debug("app token scope updated")}))).catch((function(o){throw console.error.bind("could not update app token scope",o),OC.Notification.showTemporary(t("settings","Error while updating device token scope")),n.scope[e]=i,o}))},rename:function(n,e){console.debug("renaming app token",n.id,n.name,e);var o=n.name;return n.name=e,this.updateToken(n).then(X((function(){return console.debug("app token name updated")}))).catch((function(e){console.error.bind("could not update app token name",e),OC.Notification.showTemporary(t("settings","Error while updating device token name")),n.name=o}))},updateToken:function(n){return p.default.put(this.baseUrl+"/"+n.id,n).then((function(n){return n.data}))},deleteToken:function(n){var e=this;return console.debug("deleting app token",n),this.tokens=this.tokens.filter((function(t){return t!==n})),p.default.delete(this.baseUrl+"/"+n.id).then((function(n){return n.data})).then(X((function(){return console.debug("app token deleted")}))).catch((function(o){console.error.bind("could not delete app token",o),OC.Notification.showTemporary(t("settings","Error while deleting the token")),e.tokens.push(n)}))},wipeToken:function(n){var e,o=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return console.debug("wiping app token",n),e.prev=1,e.next=4,d()();case 4:return e.next=6,new Promise((function(n){OC.dialogs.confirm(t("settings","Do you really want to wipe your data from this device?"),t("settings","Confirm wipe"),n,!0)}));case 6:if(e.sent){e.next=9;break}return console.debug("wipe aborted by user"),e.abrupt("return");case 9:return e.next=11,p.default.post(o.baseUrl+"/wipe/"+n.id);case 11:console.debug("app token marked for wipe"),n.type=2,e.next=19;break;case 15:e.prev=15,e.t0=e.catch(1),console.error("could not wipe app token",e.t0),OC.Notification.showTemporary(t("settings","Error while wiping the device with the token"));case 19:case"end":return e.stop()}}),e,null,[[1,15]])})),function(){var n=this,t=arguments;return new Promise((function(o,i){var a=e.apply(n,t);function r(n){H(a,o,i,r,s,"next",n)}function s(n){H(a,o,i,r,s,"throw",n)}r(void 0)}))})()}}},J=V,Y=(0,D.Z)(J,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"section",attrs:{id:"security"}},[e("h2",[n._v(n._s(n.t("settings","Devices & sessions",{},void 0,{sanitize:!1})))]),n._v(" "),e("p",{staticClass:"settings-hint hidden-when-empty"},[n._v("\n\t\t"+n._s(n.t("settings","Web, desktop and mobile clients currently logged in to your account."))+"\n\t")]),n._v(" "),e("AuthTokenList",{attrs:{tokens:n.tokens},on:{toggleScope:n.toggleTokenScope,rename:n.rename,delete:n.deleteToken,wipe:n.wipeToken}}),n._v(" "),n.canCreateToken?e("AuthTokenSetupDialogue",{attrs:{add:n.addNewToken}}):n._e()],1)}),[],!1,null,"27872b36",null).exports;o.nc=btoa(OC.requestToken),a.default.use(s()),a.default.use(c.default,{defaultHtml:!1}),a.default.prototype.t=t,new(a.default.extend(Y))({propsData:{tokens:(0,i.loadState)("settings","app_tokens"),canCreateToken:(0,i.loadState)("settings","can_create_app_token")}}).$mount("#security-authtokens")},40708:function(n,t,e){var o=e(94015),i=e.n(o),a=e(23645),r=e.n(a)()(i());r.push([n.id,".wiping[data-v-6852e55e]{background-color:var(--color-background-darker)}td[data-v-6852e55e]{border-top:1px solid var(--color-border);max-width:200px;white-space:normal;vertical-align:middle;position:relative}td.client[data-v-6852e55e],td.more[data-v-6852e55e]{overflow:visible;position:relative;width:44px;height:44px}td.token-name[data-v-6852e55e]{padding:10px 6px}td.token-name.token-rename[data-v-6852e55e]{padding:0}td.token-name input[data-v-6852e55e]{width:100%;margin:0}td.token-name .wiping-warning[data-v-6852e55e]{color:var(--color-text-lighter)}td.more[data-v-6852e55e]{padding:0 10px}td.client div[data-v-6852e55e]{opacity:.57;width:44px;height:44px}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthToken.vue"],names:[],mappings:"AAiQA,yBACC,+CAAA,CAGD,oBACC,wCAAA,CACA,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,oDACC,gBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CAGD,+BACC,gBAAA,CAEA,4CACC,SAAA,CAGD,qCACC,UAAA,CACA,QAAA,CAGF,+CACC,+BAAA,CAGD,yBAEC,cAAA,CAMA,+BACC,WAAA,CACA,UAAA,CACA,WAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.wiping {\n\tbackground-color: var(--color-background-darker);\n}\n\ntd {\n\tborder-top: 1px solid var(--color-border);\n\tmax-width: 200px;\n\twhite-space: normal;\n\tvertical-align: middle;\n\tposition: relative;\n\n\t&%icon {\n\t\toverflow: visible;\n\t\tposition: relative;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\n\t&.token-name {\n\t\tpadding: 10px 6px;\n\n\t\t&.token-rename {\n\t\t\tpadding: 0;\n\t\t}\n\n\t\tinput {\n\t\t\twidth: 100%;\n\t\t\tmargin: 0;\n\t\t}\n\t}\n\t&.token-name .wiping-warning {\n\t\tcolor: var(--color-text-lighter);\n\t}\n\n\t&.more {\n\t\t@extend %icon;\n\t\tpadding: 0 10px;\n\t}\n\n\t&.client {\n\t\t@extend %icon;\n\n\t\tdiv {\n\t\t\topacity: 0.57;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),t.Z=r},61468:function(n,t,e){var o=e(94015),i=e.n(o),a=e(23645),r=e.n(a)()(i());r.push([n.id,"table[data-v-0459b3e6]{width:100%;min-height:50px;padding-top:5px;max-width:580px}table th[data-v-0459b3e6]{opacity:.5;padding:10px 0}.token-list td>a.icon-more[data-v-0459b3e6]{transition:opacity var(--animation-quick)}.token-list a.icon-more[data-v-0459b3e6]{padding:14px;display:block;width:44px;height:44px;opacity:.5}.token-list tr:hover td>a.icon[data-v-0459b3e6],.token-list tr td>a.icon[data-v-0459b3e6]:focus,.token-list tr.active td>a.icon[data-v-0459b3e6]{opacity:1}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenList.vue"],names:[],mappings:"AAwFA,uBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CAEA,0BACC,UAAA,CACA,cAAA,CAKD,4CACC,yCAAA,CAGD,yCACC,YAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CAIA,iJAGC,SAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ntable {\n\twidth: 100%;\n\tmin-height: 50px;\n\tpadding-top: 5px;\n\tmax-width: 580px;\n\n\tth {\n\t\topacity: .5;\n\t\tpadding: 10px 0;\n\t}\n}\n\n.token-list {\n\ttd > a.icon-more {\n\t\ttransition: opacity var(--animation-quick);\n\t}\n\n\ta.icon-more {\n\t\tpadding: 14px;\n\t\tdisplay: block;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t\topacity: .5;\n\t}\n\n\ttr {\n\t\t&:hover td > a.icon,\n\t\ttd > a.icon:focus,\n\t\t&.active td > a.icon {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),t.Z=r},47719:function(n,t,e){var o=e(94015),i=e.n(o),a=e(23645),r=e.n(a)()(i());r.push([n.id,"#app-tokens-table tr>*:nth-child(2){padding-left:6px}#app-tokens-table tr>*:nth-child(3){text-align:right}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenList.vue"],names:[],mappings:"AA8HC,oCACC,gBAAA,CAGD,oCACC,gBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n#app-tokens-table {\n\ttr > *:nth-child(2) {\n\t\tpadding-left: 6px;\n\t}\n\n\ttr > *:nth-child(3) {\n\t\ttext-align: right;\n\t}\n}\n"],sourceRoot:""}]),t.Z=r},82e3:function(n,t,e){var o=e(94015),i=e.n(o),a=e(23645),r=e.n(a)()(i());r.push([n.id,".app-password-row[data-v-56d907f7]{display:table-row}.app-password-row .icon[data-v-56d907f7]{background-size:16px 16px;display:inline-block;position:relative;top:3px;margin-left:5px;margin-right:8px}.app-password-label[data-v-56d907f7]{display:table-cell;padding-right:1em;text-align:right;vertical-align:middle}.monospaced[data-v-56d907f7]{width:245px;font-family:monospace}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenSetupDialogue.vue"],names:[],mappings:"AAoLA,mCACC,iBAAA,CAEA,yCACC,yBAAA,CACA,oBAAA,CACA,iBAAA,CACA,OAAA,CACA,eAAA,CACA,gBAAA,CAKF,qCACC,kBAAA,CACA,iBAAA,CACA,gBAAA,CACA,qBAAA,CAGD,6BACC,WAAA,CACA,qBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.app-password-row {\n\tdisplay: table-row;\n\n\t.icon {\n\t\tbackground-size: 16px 16px;\n\t\tdisplay: inline-block;\n\t\tposition: relative;\n\t\ttop: 3px;\n\t\tmargin-left: 5px;\n\t\tmargin-right: 8px;\n\t}\n\n}\n\n.app-password-label {\n\tdisplay: table-cell;\n\tpadding-right: 1em;\n\ttext-align: right;\n\tvertical-align: middle;\n}\n\n.monospaced {\n\twidth: 245px;\n\tfont-family: monospace;\n}\n"],sourceRoot:""}]),t.Z=r}},o={};function i(n){var t=o[n];if(void 0!==t)return t.exports;var a=o[n]={id:n,loaded:!1,exports:{}};return e[n].call(a.exports,a,a.exports,i),a.loaded=!0,a.exports}i.m=e,i.amdD=function(){throw new Error("define cannot be used indirect")},i.amdO={},n=[],i.O=function(t,e,o,a){if(!e){var r=1/0;for(l=0;l<n.length;l++){e=n[l][0],o=n[l][1],a=n[l][2];for(var s=!0,c=0;c<e.length;c++)(!1&a||r>=a)&&Object.keys(i.O).every((function(n){return i.O[n](e[c])}))?e.splice(c--,1):(s=!1,a<r&&(r=a));if(s){n.splice(l--,1);var p=o();void 0!==p&&(t=p)}}return t}a=a||0;for(var l=n.length;l>0&&n[l-1][2]>a;l--)n[l]=n[l-1];n[l]=[e,o,a]},i.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return i.d(t,{a:t}),t},i.d=function(n,t){for(var e in t)i.o(t,e)&&!i.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:t[e]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),i.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},i.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},i.nmd=function(n){return n.paths=[],n.children||(n.children=[]),n},i.j=783,function(){var n={783:0};i.O.j=function(t){return 0===n[t]};var t=function(t,e){var o,a,r=e[0],s=e[1],c=e[2],p=0;if(r.some((function(t){return 0!==n[t]}))){for(o in s)i.o(s,o)&&(i.m[o]=s[o]);if(c)var l=c(i)}for(t&&t(e);p<r.length;p++)a=r[p],i.o(n,a)&&n[a]&&n[a][0](),n[a]=0;return i.O(l)},e=self.webpackChunknextcloud=self.webpackChunknextcloud||[];e.forEach(t.bind(null,0)),e.push=t.bind(null,e.push.bind(e))}();var a=i.O(void 0,[874],(function(){return i(46448)}));a=i.O(a)}(); +//# sourceMappingURL=settings-vue-settings-personal-security.js.map?v=8f0b9a74f787bbf71a69
\ No newline at end of file diff --git a/dist/settings-vue-settings-personal-security.js.map b/dist/settings-vue-settings-personal-security.js.map index d0b5f902381..4831e7a84f6 100644 --- a/dist/settings-vue-settings-personal-security.js.map +++ b/dist/settings-vue-settings-personal-security.js.map @@ -1 +1 @@ -{"version":3,"file":"settings-vue-settings-personal-security.js?v=3a01666cf5330aff3745","mappings":";6BAAIA,wIC8FJ,GACA,gDAEA,4IAEA,oGAEA,8JAEA,kJAEA,kEACA,qEACA,kEACA,iEACA,+DACA,yDACA,iEAEA,iCAEA,yCAEA,sDAEA,GACA,oCACA,yBACA,+BACA,oCACA,6BACA,uDACA,6BACA,yBACA,4FACA,oGACA,qGACA,6GACA,cACA,sBACA,mCAEA,GACA,kBACA,oBACA,uBACA,sBACA,sBACA,2BACA,oBACA,mBACA,uBACA,2BACA,2BACA,+BACA,mBACA,sBACA,6BCvJsL,ED0JtL,CACA,iBACA,YACA,kBACA,4BACA,iCAEA,OACA,OACA,YACA,cAGA,KAbA,WAcA,OACA,mDACA,YACA,WACA,gBAGA,UACA,qBADA,WAEA,kEAEA,aAJA,WAKA,8DAEA,SAPA,WASA,2FAEA,KACA,IAEA,mDACA,QACA,eAEA,kBAIA,sBACA,kBACA,gBACA,oBACA,IAEA,EADA,WACA,yBACA,KACA,cAEA,KAGA,QAOA,OAJA,qBACA,gCAGA,CACA,OACA,SAGA,OA/CA,WAgDA,6BAGA,SACA,YADA,WACA,WAEA,mBAEA,6BACA,iBACA,2BACA,2BAGA,aAXA,WAYA,kBAEA,OAdA,WAeA,mBACA,iCAEA,OAlBA,WAmBA,iBACA,8CAEA,KAtBA,WAuBA,mBACA,kKE/OIC,EAAU,GAEdA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IAElBF,EAAQG,OAAS,SAAc,KAAM,QAE3CH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKJ,KAAW,YAAiB,WALlD,eCbIM,GAAY,OACd,GCTW,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,KAAK,CAACE,MAAMN,EAAIO,OAAOC,MAAM,CAAC,UAAUR,EAAIS,MAAMC,KAAK,CAACN,EAAG,KAAK,CAACO,YAAY,UAAU,CAACP,EAAG,MAAM,CAACE,MAAMN,EAAIY,SAASC,SAASb,EAAIc,GAAG,KAAKV,EAAG,KAAK,CAACO,YAAY,cAAc,CAAEX,EAAIS,MAAMM,WAAaf,EAAIgB,SAAUZ,EAAG,QAAQ,CAACa,WAAW,CAAC,CAACC,KAAK,QAAQC,QAAQ,UAAUC,MAAOpB,EAAW,QAAEqB,WAAW,YAAYC,IAAI,QAAQd,MAAM,CAAC,KAAO,QAAQe,SAAS,CAAC,MAASvB,EAAW,SAAGwB,GAAG,CAAC,MAAQ,CAAC,SAASC,GAAQ,OAAIA,EAAOC,KAAKC,QAAQ,QAAQ3B,EAAI4B,GAAGH,EAAOI,QAAQ,QAAQ,GAAGJ,EAAOK,IAAI,SAAkB,KAAc9B,EAAI+B,OAAOC,MAAM,KAAMC,YAAY,SAASR,GAAQ,OAAIA,EAAOC,KAAKC,QAAQ,QAAQ3B,EAAI4B,GAAGH,EAAOI,QAAQ,MAAM,GAAGJ,EAAOK,IAAI,CAAC,MAAM,WAAoB,KAAc9B,EAAIkC,aAAaF,MAAM,KAAMC,aAAa,KAAOjC,EAAIkC,aAAa,MAAQ,SAAST,GAAWA,EAAOU,OAAOC,YAAqBpC,EAAIqC,QAAQZ,EAAOU,OAAOf,WAAUhB,EAAG,OAAO,CAACJ,EAAIc,GAAGd,EAAIsC,GAAGtC,EAAIY,SAASM,SAASlB,EAAIc,GAAG,KAAMd,EAAU,OAAEI,EAAG,OAAO,CAACO,YAAY,kBAAkB,CAACX,EAAIc,GAAG,IAAId,EAAIsC,GAAGtC,EAAIuC,EAAE,WAAY,2BAA2B,OAAOvC,EAAIwC,OAAOxC,EAAIc,GAAG,KAAKV,EAAG,KAAK,CAACA,EAAG,OAAO,CAACa,WAAW,CAAC,CAACC,KAAK,UAAUC,QAAQ,YAAYC,MAAOpB,EAAgB,aAAEqB,WAAW,iBAAiBV,YAAY,iBAAiB,CAACX,EAAIc,GAAGd,EAAIsC,GAAGtC,EAAIyC,2BAA2BzC,EAAIc,GAAG,KAAKV,EAAG,KAAK,CAACO,YAAY,QAAQ,CAAGX,EAAIS,MAAMiC,QAGuc1C,EAAIwC,KAHlcpC,EAAG,UAAU,CAACa,WAAW,CAAC,CAACC,KAAK,UAAUC,QAAQ,iBAAiBC,MAAM,CAC18CuB,QAAS3C,EAAIuC,EAAE,WAAY,mBAC3BK,UAAW,QACTvB,WAAW,4FAA4FwB,UAAU,CAAC,MAAO,KAAQrC,MAAM,CAAC,KAAOR,EAAI8C,YAAYtB,GAAG,CAAC,cAAc,SAASC,GAAQzB,EAAI8C,WAAWrB,KAAU,CAAqB,IAAnBzB,EAAIS,MAAMiB,KAAYtB,EAAG,iBAAiB,CAACI,MAAM,CAAC,QAAUR,EAAIS,MAAMsC,MAAMC,YAAYxB,GAAG,CAAC,OAAS,SAASC,GAAyD,OAAjDA,EAAOwB,kBAAkBxB,EAAOyB,iBAAwBlD,EAAImD,MAAM,eAAgBnD,EAAIS,MAAO,cAAeT,EAAIS,MAAMsC,MAAMC,eAAe,CAAChD,EAAIc,GAAG,aAAad,EAAIsC,GAAGtC,EAAIuC,EAAE,WAAY,4BAA4B,cAAcvC,EAAIwC,KAAKxC,EAAIc,GAAG,KAAMd,EAAIS,MAAe,UAAEL,EAAG,eAAe,CAACI,MAAM,CAAC,KAAO,eAAegB,GAAG,CAAC,MAAQ,SAASC,GAAyD,OAAjDA,EAAOwB,kBAAkBxB,EAAOyB,iBAAwBlD,EAAIoD,YAAYpB,MAAM,KAAMC,cAAc,CAACjC,EAAIc,GAAG,aAAad,EAAIsC,GAAGtC,EAAIuC,EAAE,WAAY,WAAW,cAAcvC,EAAIwC,KAAKxC,EAAIc,GAAG,KAAMd,EAAIS,MAAe,UAAE,CAAqB,IAAnBT,EAAIS,MAAMiB,KAAY,CAACtB,EAAG,eAAe,CAACI,MAAM,CAAC,KAAO,eAAegB,GAAG,CAAC,MAAQ,SAASC,GAAyD,OAAjDA,EAAOwB,kBAAkBxB,EAAOyB,iBAAwBlD,EAAIqD,OAAOrB,MAAM,KAAMC,cAAc,CAACjC,EAAIc,GAAG,iBAAiBd,EAAIsC,GAAGtC,EAAIuC,EAAE,WAAY,WAAW,kBAAkBvC,EAAIc,GAAG,KAAKV,EAAG,eAAe,CAACI,MAAM,CAAC,KAAO,eAAegB,GAAG,CAAC,MAAQ,SAASC,GAAyD,OAAjDA,EAAOwB,kBAAkBxB,EAAOyB,iBAAwBlD,EAAIsD,KAAKtB,MAAM,KAAMC,cAAc,CAACjC,EAAIc,GAAG,iBAAiBd,EAAIsC,GAAGtC,EAAIuC,EAAE,WAAY,gBAAgB,mBAAuC,IAAnBvC,EAAIS,MAAMiB,KAAYtB,EAAG,eAAe,CAACI,MAAM,CAAC,KAAO,cAAc,MAAQR,EAAIuC,EAAE,WAAY,WAAWf,GAAG,CAAC,MAAQ,SAASC,GAAyD,OAAjDA,EAAOwB,kBAAkBxB,EAAOyB,iBAAwBlD,EAAIqD,OAAOrB,MAAM,KAAMC,cAAc,CAACjC,EAAIc,GAAG,eAAed,EAAIsC,GAAGtC,EAAIuC,EAAE,WAAY,mGAAoG,gBAAgBvC,EAAIwC,MAAMxC,EAAIwC,MAAM,IAAa,OACvzD,IDQpB,EACA,KACA,WACA,MEfwL,EC8C1L,CACA,qBACA,YACA,UH9BezC,EAAiB,SGgChC,OACA,QACA,WACA,cAGA,UACA,aADA,WAEA,+CACA,kCAEA,OADA,4BACA,OAIA,SACA,YADA,SACA,OAEA,kCAEA,OALA,SAKA,KAEA,0BAEA,SATA,SASA,GAEA,wBAEA,OAbA,SAaA,GAEA,mCCtEI,EAAU,GAEd,EAAQL,kBAAoB,IAC5B,EAAQC,cAAgB,IAElB,EAAQC,OAAS,SAAc,KAAM,QAE3C,EAAQC,OAAS,IACjB,EAAQC,mBAAqB,IAEhB,IAAI,IAAS,GAKJ,KAAW,YAAiB,WALlD,eCVI,EAAU,GAEd,EAAQJ,kBAAoB,IAC5B,EAAQC,cAAgB,IAElB,EAAQC,OAAS,SAAc,KAAM,QAE3C,EAAQC,OAAS,IACjB,EAAQC,mBAAqB,IAEhB,IAAI,IAAS,GAKJ,KAAW,YAAiB,WALlD,ICDA,GAXgB,OACd,GCVW,WAAa,IAAIE,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,QAAQ,CAACI,MAAM,CAAC,GAAK,qBAAqB,CAAER,EAAIuD,OAAa,OAAEnD,EAAG,QAAQ,CAACA,EAAG,KAAK,CAACA,EAAG,MAAMJ,EAAIc,GAAG,KAAKV,EAAG,KAAK,CAACJ,EAAIc,GAAGd,EAAIsC,GAAGtC,EAAIuC,EAAE,WAAY,cAAcvC,EAAIc,GAAG,KAAKV,EAAG,KAAK,CAACJ,EAAIc,GAAGd,EAAIsC,GAAGtC,EAAIuC,EAAE,WAAY,qBAAqBvC,EAAIc,GAAG,KAAKV,EAAG,UAAUJ,EAAIwC,KAAKxC,EAAIc,GAAG,KAAKV,EAAG,QAAQ,CAACO,YAAY,cAAcX,EAAIwD,GAAIxD,EAAgB,cAAE,SAASS,GAAO,OAAOL,EAAG,YAAY,CAAC0B,IAAIrB,EAAMC,GAAGF,MAAM,CAAC,MAAQC,GAAOe,GAAG,CAAC,YAAcxB,EAAIyD,YAAY,OAASzD,EAAI+B,OAAO,OAAS/B,EAAI0D,SAAS,KAAO1D,EAAI2D,aAAY,OACllB,IDYpB,EACA,KACA,WACA,MAI8B,wsBE+DhC,ICnFmM,EDmFnM,CACA,8BACA,YACA,aAEA,OACA,KACA,cACA,cAGA,KAXA,WAYA,OACA,UACA,WACA,cACA,eACA,aACA,kBACA,UACA,SACA,wBAGA,UACA,mBADA,WAEA,OACA,qBACA,kBAGA,2BACA,OACA,GADA,IAEA,gCACA,UAGA,OACA,GADA,IAEA,6BACA,iCAKA,SACA,YADA,SACA,GACA,0BAEA,OAJA,WAIA,WACA,MACA,iBAEA,OADA,aACA,uBAEA,kBACA,YACA,wBACA,sBAEA,4EACA,iGAEA,wBACA,mCAGA,mBACA,uDACA,iFAEA,cAGA,eA7BA,WA6BA,WACA,uBACA,kCACA,mDAEA,qBAlCA,WAmCA,sGAEA,MArCA,WAsCA,eACA,gBACA,eACA,cACA,mBACA,oBACA,+BElKI,EAAU,GAEd,EAAQjE,kBAAoB,IAC5B,EAAQC,cAAgB,IAElB,EAAQC,OAAS,SAAc,KAAM,QAE3C,EAAQC,OAAS,IACjB,EAAQC,mBAAqB,IAEhB,IAAI,IAAS,GAKJ,KAAW,YAAiB,WALlD,ICbI,GAAY,OACd,GCTW,WAAa,IAAIE,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAASF,EAAI4D,OAAosBxD,EAAG,MAAM,CAACJ,EAAIc,GAAG,OAAOd,EAAIsC,GAAGtC,EAAIuC,EAAE,WAAY,+DAA+D,OAAOvC,EAAIsC,GAAGtC,EAAIuC,EAAE,WAAY,gEAAgE,QAAQnC,EAAG,MAAM,CAACO,YAAY,oBAAoB,CAACP,EAAG,OAAO,CAACO,YAAY,sBAAsB,CAACX,EAAIc,GAAGd,EAAIsC,GAAGtC,EAAIuC,EAAE,WAAY,gBAAgBvC,EAAIc,GAAG,KAAKV,EAAG,QAAQ,CAACO,YAAY,aAAaH,MAAM,CAAC,KAAO,OAAO,SAAW,YAAYe,SAAS,CAAC,MAAQvB,EAAI6D,WAAWrC,GAAG,CAAC,MAAQxB,EAAI8D,iBAAiB9D,EAAIc,GAAG,KAAKV,EAAG,MAAM,CAACO,YAAY,oBAAoB,CAACP,EAAG,OAAO,CAACO,YAAY,sBAAsB,CAACX,EAAIc,GAAGd,EAAIsC,GAAGtC,EAAIuC,EAAE,WAAY,gBAAgBvC,EAAIc,GAAG,KAAKV,EAAG,QAAQ,CAACkB,IAAI,cAAcX,YAAY,aAAaH,MAAM,CAAC,KAAO,OAAO,SAAW,YAAYe,SAAS,CAAC,MAAQvB,EAAI+D,aAAavC,GAAG,CAAC,MAAQxB,EAAI8D,eAAe9D,EAAIc,GAAG,KAAKV,EAAG,IAAI,CAACa,WAAW,CAAC,CAACC,KAAK,UAAUC,QAAQ,YAAYC,MAAOpB,EAAsB,mBAAEqB,WAAW,sBAAsB,CAACH,KAAK,YAAYC,QAAQ,mBAAmBC,MAAOpB,EAAe,YAAEqB,WAAW,cAAc2C,IAAI,QAAQ,CAAC9C,KAAK,YAAYC,QAAQ,sBAAsBC,MAAOpB,EAAkB,eAAEqB,WAAW,iBAAiB2C,IAAI,WAAW,CAAC9C,KAAK,YAAYC,QAAQ,oBAAoBC,MAAOpB,EAAwB,qBAAEqB,WAAW,uBAAuB2C,IAAI,UAAU1C,IAAI,kBAAkBX,YAAY,mBAAmBa,GAAG,CAAC,UAAY,SAASC,GAAQzB,EAAIiE,oBAAqB,GAAM,WAAa,SAASxC,GAAQzB,EAAIiE,oBAAqB,MAAUjE,EAAIc,GAAG,KAAKV,EAAG,SAAS,CAACO,YAAY,SAASa,GAAG,CAAC,MAAQxB,EAAIkE,QAAQ,CAAClE,EAAIc,GAAG,WAAWd,EAAIsC,GAAGtC,EAAIuC,EAAE,WAAY,SAAS,cAAcvC,EAAIc,GAAG,KAAKV,EAAG,MAAM,CAACO,YAAY,oBAAoB,CAACP,EAAG,OAAO,CAACO,YAAY,uBAAuBX,EAAIc,GAAG,KAAOd,EAAImE,OAA2J/D,EAAG,KAAK,CAACI,MAAM,CAAC,MAAQR,EAAIoE,SAA/KhE,EAAG,IAAI,CAACoB,GAAG,CAAC,MAAQ,SAASC,GAAQzB,EAAImE,QAAS,KAAQ,CAACnE,EAAIc,GAAG,WAAWd,EAAIsC,GAAGtC,EAAIuC,EAAE,WAAY,iCAAiC,aAAkD,KAA5lFnC,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACa,WAAW,CAAC,CAACC,KAAK,QAAQC,QAAQ,UAAUC,MAAOpB,EAAc,WAAEqB,WAAW,eAAeb,MAAM,CAAC,KAAO,OAAO,SAAWR,EAAIqE,QAAQ,YAAcrE,EAAIuC,EAAE,WAAY,aAAahB,SAAS,CAAC,MAASvB,EAAc,YAAGwB,GAAG,CAAC,QAAU,SAASC,GAAQ,OAAIA,EAAOC,KAAKC,QAAQ,QAAQ3B,EAAI4B,GAAGH,EAAOI,QAAQ,QAAQ,GAAGJ,EAAOK,IAAI,SAAkB,KAAc9B,EAAIsE,OAAOtC,MAAM,KAAMC,YAAY,MAAQ,SAASR,GAAWA,EAAOU,OAAOC,YAAqBpC,EAAIuE,WAAW9C,EAAOU,OAAOf,WAAUpB,EAAIc,GAAG,KAAKV,EAAG,SAAS,CAACO,YAAY,SAASH,MAAM,CAAC,SAAWR,EAAIqE,SAAS7C,GAAG,CAAC,MAAQxB,EAAIsE,SAAS,CAACtE,EAAIc,GAAG,SAASd,EAAIsC,GAAGtC,EAAIuC,EAAE,WAAY,4BAA4B,cACxwB,IDWpB,EACA,KACA,WACA,MAIF,EAAe,EAAiB,iIEyBhC,IAiBA,iCAEA,OADA,KACA,IAGA,GACA,wBACA,YACA,yBACA,iBAEA,OACA,QACA,WACA,aAEA,gBACA,aACA,cAGA,KAhBA,WAiBA,OACA,6DAGA,SACA,YADA,SACA,cACA,4CAEA,OACA,QAEA,sCACA,mCACA,iEAEA,4DACA,mBAGA,MAFA,sDACA,iFACA,MAGA,iBAlBA,SAkBA,OACA,mDAEA,iBAGA,OAFA,aAEA,oBACA,uEACA,mBAOA,MANA,yDACA,uFAGA,aAEA,MAGA,OApCA,SAoCA,KACA,kDAEA,aAGA,OAFA,SAEA,oBACA,sEACA,mBACA,wDACA,sFAGA,aAGA,YApDA,SAoDA,GACA,8CACA,oCAEA,YAxDA,SAwDA,cAMA,OALA,sCAGA,4DAEA,wCACA,mCACA,iEACA,mBACA,mDACA,8EAIA,qBAGA,UA1EA,SA0EA,sJACA,oCADA,kBAIA,MAJA,uBApHA,yBACA,mBACA,uEACA,6BACA,GACA,MA+GA,wCAOA,sCAPA,2CAUA,wCAVA,QAWA,2CAEA,SAbA,kDAeA,+CACA,4FAhBA,6OCjK6L,ICkB7L,GAXgB,OACd,GCRW,WAAa,IAAIvC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACO,YAAY,UAAUH,MAAM,CAAC,GAAK,aAAa,CAACJ,EAAG,KAAK,CAACJ,EAAIc,GAAGd,EAAIsC,GAAGtC,EAAIuC,EAAE,WAAY,qBAAsB,QAAIiC,EAAW,CAACC,UAAU,QAAYzE,EAAIc,GAAG,KAAKV,EAAG,IAAI,CAACO,YAAY,mCAAmC,CAACX,EAAIc,GAAG,SAASd,EAAIsC,GAAGtC,EAAIuC,EAAE,WAAY,yEAAyE,UAAUvC,EAAIc,GAAG,KAAKV,EAAG,gBAAgB,CAACI,MAAM,CAAC,OAASR,EAAIuD,QAAQ/B,GAAG,CAAC,YAAcxB,EAAI0E,iBAAiB,OAAS1E,EAAI+B,OAAO,OAAS/B,EAAI2E,YAAY,KAAO3E,EAAI4E,aAAa5E,EAAIc,GAAG,KAAMd,EAAkB,eAAEI,EAAG,yBAAyB,CAACI,MAAM,CAAC,IAAMR,EAAI6E,eAAe7E,EAAIwC,MAAM,KACzrB,IDUpB,EACA,KACA,WACA,MAI8B,QEahCsC,EAAAA,GAAoBC,KAAKC,GAAGC,cAE5BC,EAAAA,QAAAA,IAAQC,KACRD,EAAAA,QAAAA,IAAQE,EAAAA,QAAU,CAAEC,aAAa,IACjCH,EAAAA,QAAAA,UAAAA,EAAkB3C,EAGlB,IADa2C,EAAAA,QAAAA,OAAWI,GACxB,CAAS,CACRC,UAAW,CACVhC,QAAQiC,EAAAA,EAAAA,WAAU,WAAY,cAC9BC,gBAAgBD,EAAAA,EAAAA,WAAU,WAAY,2BAErCE,OAAO,kFCxCNC,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOnF,GAAI,0pBAA2pB,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,0DAA0D,MAAQ,GAAG,SAAW,gQAAgQ,eAAiB,CAAC,gvCAAgvC,WAAa,MAE9zE,gECJIiF,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOnF,GAAI,geAAie,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,8DAA8D,MAAQ,GAAG,SAAW,oKAAoK,eAAiB,CAAC,qpBAAqpB,WAAa,MAEj9C,gECJIiF,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOnF,GAAI,6GAA8G,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,8DAA8D,MAAQ,GAAG,SAAW,qCAAqC,eAAiB,CAAC,oYAAoY,WAAa,MAE9sB,+DCJIiF,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOnF,GAAI,2XAA4X,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uEAAuE,MAAQ,GAAG,SAAW,uKAAuK,eAAiB,CAAC,+vBAA+vB,WAAa,MAEl+C,QCNIoF,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBxB,IAAjByB,EACH,OAAOA,EAAaC,QAGrB,IAAIL,EAASC,EAAyBE,GAAY,CACjDtF,GAAIsF,EACJG,QAAQ,EACRD,QAAS,IAUV,OANAE,EAAoBJ,GAAUK,KAAKR,EAAOK,QAASL,EAAQA,EAAOK,QAASH,GAG3EF,EAAOM,QAAS,EAGTN,EAAOK,QAIfH,EAAoBO,EAAIF,EC5BxBL,EAAoBQ,KAAO,WAC1B,MAAM,IAAIC,MAAM,mCCDjBT,EAAoBU,KAAO,G5BAvBjH,EAAW,GACfuG,EAAoBW,EAAI,SAASC,EAAQC,EAAUC,EAAIC,GACtD,IAAGF,EAAH,CAMA,IAAIG,EAAeC,EAAAA,EACnB,IAASC,EAAI,EAAGA,EAAIzH,EAAS0H,OAAQD,IAAK,CACrCL,EAAWpH,EAASyH,GAAG,GACvBJ,EAAKrH,EAASyH,GAAG,GACjBH,EAAWtH,EAASyH,GAAG,GAE3B,IAJA,IAGIE,GAAY,EACPC,EAAI,EAAGA,EAAIR,EAASM,OAAQE,MACpB,EAAXN,GAAsBC,GAAgBD,IAAaO,OAAOC,KAAKvB,EAAoBW,GAAGa,OAAM,SAASzF,GAAO,OAAOiE,EAAoBW,EAAE5E,GAAK8E,EAASQ,OAC3JR,EAASY,OAAOJ,IAAK,IAErBD,GAAY,EACTL,EAAWC,IAAcA,EAAeD,IAG7C,GAAGK,EAAW,CACb3H,EAASgI,OAAOP,IAAK,GACrB,IAAIQ,EAAIZ,SACErC,IAANiD,IAAiBd,EAASc,IAGhC,OAAOd,EAzBNG,EAAWA,GAAY,EACvB,IAAI,IAAIG,EAAIzH,EAAS0H,OAAQD,EAAI,GAAKzH,EAASyH,EAAI,GAAG,GAAKH,EAAUG,IAAKzH,EAASyH,GAAKzH,EAASyH,EAAI,GACrGzH,EAASyH,GAAK,CAACL,EAAUC,EAAIC,I6BJ/Bf,EAAoB2B,EAAI,SAAS7B,GAChC,IAAI8B,EAAS9B,GAAUA,EAAO+B,WAC7B,WAAa,OAAO/B,EAAgB,SACpC,WAAa,OAAOA,GAErB,OADAE,EAAoB8B,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,GCLR5B,EAAoB8B,EAAI,SAAS3B,EAAS6B,GACzC,IAAI,IAAIjG,KAAOiG,EACXhC,EAAoBiC,EAAED,EAAYjG,KAASiE,EAAoBiC,EAAE9B,EAASpE,IAC5EuF,OAAOY,eAAe/B,EAASpE,EAAK,CAAEoG,YAAY,EAAMC,IAAKJ,EAAWjG,MCJ3EiE,EAAoBqC,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOpI,MAAQ,IAAIqI,SAAS,cAAb,GACd,MAAOC,GACR,GAAsB,iBAAXC,OAAqB,OAAOA,QALjB,GCAxBzC,EAAoBiC,EAAI,SAASS,EAAKC,GAAQ,OAAOrB,OAAOsB,UAAUC,eAAevC,KAAKoC,EAAKC,ICC/F3C,EAAoB0B,EAAI,SAASvB,GACX,oBAAX2C,QAA0BA,OAAOC,aAC1CzB,OAAOY,eAAe/B,EAAS2C,OAAOC,YAAa,CAAE1H,MAAO,WAE7DiG,OAAOY,eAAe/B,EAAS,aAAc,CAAE9E,OAAO,KCLvD2E,EAAoBgD,IAAM,SAASlD,GAGlC,OAFAA,EAAOmD,MAAQ,GACVnD,EAAOoD,WAAUpD,EAAOoD,SAAW,IACjCpD,GCHRE,EAAoBqB,EAAI,eCKxB,IAAI8B,EAAkB,CACrB,IAAK,GAaNnD,EAAoBW,EAAEU,EAAI,SAAS+B,GAAW,OAAoC,IAA7BD,EAAgBC,IAGrE,IAAIC,EAAuB,SAASC,EAA4BC,GAC/D,IAKItD,EAAUmD,EALVvC,EAAW0C,EAAK,GAChBC,EAAcD,EAAK,GACnBE,EAAUF,EAAK,GAGIrC,EAAI,EAC3B,GAAGL,EAAS6C,MAAK,SAAS/I,GAAM,OAA+B,IAAxBwI,EAAgBxI,MAAe,CACrE,IAAIsF,KAAYuD,EACZxD,EAAoBiC,EAAEuB,EAAavD,KACrCD,EAAoBO,EAAEN,GAAYuD,EAAYvD,IAGhD,GAAGwD,EAAS,IAAI7C,EAAS6C,EAAQzD,GAGlC,IADGsD,GAA4BA,EAA2BC,GACrDrC,EAAIL,EAASM,OAAQD,IACzBkC,EAAUvC,EAASK,GAChBlB,EAAoBiC,EAAEkB,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBC,GAAW,EAE5B,OAAOpD,EAAoBW,EAAEC,IAG1B+C,EAAqBC,KAA4B,sBAAIA,KAA4B,uBAAK,GAC1FD,EAAmBE,QAAQR,EAAqBS,KAAK,KAAM,IAC3DH,EAAmB9D,KAAOwD,EAAqBS,KAAK,KAAMH,EAAmB9D,KAAKiE,KAAKH,OC/CvF,IAAII,EAAsB/D,EAAoBW,OAAElC,EAAW,CAAC,MAAM,WAAa,OAAOuB,EAAoB,UAC1G+D,EAAsB/D,EAAoBW,EAAEoD","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?7bdc","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?1338","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=template&id=3280a606&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?05ad","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?515d","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?90cb","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=template&id=0459b3e6&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?e265","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?521c","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=template&id=56d907f7&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthTokenSection.vue?e9d0","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue?vue&type=template&id=27872b36&scoped=true&","webpack:///nextcloud/apps/settings/src/main-personal-security.js","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=style&index=0&id=3280a606&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=style&index=0&id=0459b3e6&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=style&index=1&lang=scss&","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=56d907f7&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<tr :data-id=\"token.id\"\n\t\t:class=\"wiping\">\n\t\t<td class=\"client\">\n\t\t\t<div :class=\"iconName.icon\" />\n\t\t</td>\n\t\t<td class=\"token-name\">\n\t\t\t<input v-if=\"token.canRename && renaming\"\n\t\t\t\tref=\"input\"\n\t\t\t\tv-model=\"newName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t@keyup.enter=\"rename\"\n\t\t\t\t@blur=\"cancelRename\"\n\t\t\t\t@keyup.esc=\"cancelRename\">\n\t\t\t<span v-else>{{ iconName.name }}</span>\n\t\t\t<span v-if=\"wiping\" class=\"wiping-warning\">({{ t('settings', 'Marked for remote wipe') }})</span>\n\t\t</td>\n\t\t<td>\n\t\t\t<span v-tooltip=\"lastActivity\" class=\"last-activity\">{{ lastActivityRelative }}</span>\n\t\t</td>\n\t\t<td class=\"more\">\n\t\t\t<Actions v-if=\"!token.current\"\n\t\t\t\tv-tooltip.auto=\"{\n\t\t\t\t\tcontent: t('settings', 'Device settings'),\n\t\t\t\t\tcontainer: 'body'\n\t\t\t\t}\"\n\t\t\t\t:open.sync=\"actionOpen\">\n\t\t\t\t<ActionCheckbox v-if=\"token.type === 1\"\n\t\t\t\t\t:checked=\"token.scope.filesystem\"\n\t\t\t\t\t@change.stop.prevent=\"$emit('toggle-scope', token, 'filesystem', !token.scope.filesystem)\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Allow filesystem access') }}\n\t\t\t\t</ActionCheckbox>\n\t\t\t\t<ActionButton v-if=\"token.canRename\"\n\t\t\t\t\ticon=\"icon-rename\"\n\t\t\t\t\t@click.stop.prevent=\"startRename\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Rename') }}\n\t\t\t\t</ActionButton>\n\n\t\t\t\t<!-- revoke & wipe -->\n\t\t\t\t<template v-if=\"token.canDelete\">\n\t\t\t\t\t<template v-if=\"token.type !== 2\">\n\t\t\t\t\t\t<ActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t\t\t{{ t('settings', 'Revoke') }}\n\t\t\t\t\t\t</ActionButton>\n\t\t\t\t\t\t<ActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"wipe\">\n\t\t\t\t\t\t\t{{ t('settings', 'Wipe device') }}\n\t\t\t\t\t\t</ActionButton>\n\t\t\t\t\t</template>\n\t\t\t\t\t<ActionButton v-else-if=\"token.type === 2\"\n\t\t\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t\t\t:title=\"t('settings', 'Revoke')\"\n\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t{{ t('settings', 'Revoking this token might prevent the wiping of your device if it hasn\\'t started the wipe yet.') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</template>\n\t\t\t</Actions>\n\t\t</td>\n\t</tr>\n</template>\n\n<script>\nimport {\n\tActions,\n\tActionButton,\n\tActionCheckbox,\n} from '@nextcloud/vue'\n\n// When using capture groups the following parts are extracted the first is used as the version number, the second as the OS\nconst userAgentMap = {\n\tie: /(?:MSIE|Trident|Trident\\/7.0; rv)[ :](\\d+)/,\n\t// Microsoft Edge User Agent from https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx\n\tedge: /^Mozilla\\/5\\.0 \\([^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+ Edge\\/[0-9.]+$/,\n\t// Firefox User Agent from https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference\n\tfirefox: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) Gecko\\/[0-9.]+ Firefox\\/(\\d+)(?:\\.\\d)?$/,\n\t// Chrome User Agent from https://developer.chrome.com/multidevice/user-agent\n\tchrome: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/(\\d+)[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+$/,\n\t// Safari User Agent from http://www.useragentstring.com/pages/Safari/\n\tsafari: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\)(?: Version\\/([0-9]+)[0-9.]+)? Safari\\/[0-9.A-Z]+$/,\n\t// Android Chrome user agent: https://developers.google.com/chrome/mobile/docs/user-agent\n\tandroidChrome: /Android.*(?:; (.*) Build\\/).*Chrome\\/(\\d+)[0-9.]+/,\n\tiphone: / *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tipad: /\\(iPad; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tiosClient: /^Mozilla\\/5\\.0 \\(iOS\\) (?:ownCloud|Nextcloud)-iOS.*$/,\n\tandroidClient: /^Mozilla\\/5\\.0 \\(Android\\) ownCloud-android.*$/,\n\tiosTalkClient: /^Mozilla\\/5\\.0 \\(iOS\\) Nextcloud-Talk.*$/,\n\tandroidTalkClient: /^Mozilla\\/5\\.0 \\(Android\\) Nextcloud-Talk.*$/,\n\t// DAVx5/3.3.8-beta2-gplay (2021/01/02; dav4jvm; okhttp/4.9.0) Android/10\n\tdavx5: /DAV(?:droid|x5)\\/([^ ]+)/,\n\t// Mozilla/5.0 (U; Linux; Maemo; Jolla; Sailfish; like Android 4.3) AppleWebKit/538.1 (KHTML, like Gecko) WebPirate/2.0 like Mobile Safari/538.1 (compatible)\n\twebPirate: /(Sailfish).*WebPirate\\/(\\d+)/,\n\t// Mozilla/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:31.0) Gecko/31.0 Firefox/31.0 SailfishBrowser/1.0\n\tsailfishBrowser: /(Sailfish).*SailfishBrowser\\/(\\d+)/,\n}\nconst nameMap = {\n\tie: t('setting', 'Internet Explorer'),\n\tedge: t('setting', 'Edge'),\n\tfirefox: t('setting', 'Firefox'),\n\tchrome: t('setting', 'Google Chrome'),\n\tsafari: t('setting', 'Safari'),\n\tandroidChrome: t('setting', 'Google Chrome for Android'),\n\tiphone: t('setting', 'iPhone'),\n\tipad: t('setting', 'iPad'),\n\tiosClient: t('setting', '{productName} iOS app', { productName: window.oc_defaults.productName }),\n\tandroidClient: t('setting', '{productName} Android app', { productName: window.oc_defaults.productName }),\n\tiosTalkClient: t('setting', '{productName} Talk for iOS', { productName: window.oc_defaults.productName }),\n\tandroidTalkClient: t('setting', '{productName} Talk for Android', { productName: window.oc_defaults.productName }),\n\tdavx5: 'DAVx5',\n\twebPirate: 'WebPirate',\n\tsailfishBrowser: 'SailfishBrowser',\n}\nconst iconMap = {\n\tie: 'icon-desktop',\n\tedge: 'icon-desktop',\n\tfirefox: 'icon-desktop',\n\tchrome: 'icon-desktop',\n\tsafari: 'icon-desktop',\n\tandroidChrome: 'icon-phone',\n\tiphone: 'icon-phone',\n\tipad: 'icon-tablet',\n\tiosClient: 'icon-phone',\n\tandroidClient: 'icon-phone',\n\tiosTalkClient: 'icon-phone',\n\tandroidTalkClient: 'icon-phone',\n\tdavx5: 'icon-phone',\n\twebPirate: 'icon-link',\n\tsailfishBrowser: 'icon-link',\n}\n\nexport default {\n\tname: 'AuthToken',\n\tcomponents: {\n\t\tActions,\n\t\tActionButton,\n\t\tActionCheckbox,\n\t},\n\tprops: {\n\t\ttoken: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowMore: this.token.canScope || this.token.canDelete,\n\t\t\trenaming: false,\n\t\t\tnewName: '',\n\t\t\tactionOpen: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tlastActivityRelative() {\n\t\t\treturn OC.Util.relativeModifiedDate(this.token.lastActivity * 1000)\n\t\t},\n\t\tlastActivity() {\n\t\t\treturn OC.Util.formatDate(this.token.lastActivity * 1000, 'LLL')\n\t\t},\n\t\ticonName() {\n\t\t\t// pretty format sync client user agent\n\t\t\tconst matches = this.token.name.match(/Mozilla\\/5\\.0 \\((\\w+)\\) (?:mirall|csyncoC)\\/(\\d+\\.\\d+\\.\\d+)/)\n\n\t\t\tlet icon = ''\n\t\t\tif (matches) {\n\t\t\t\t/* eslint-disable-next-line */\n\t\t\t\tthis.token.name = t('settings', 'Sync client - {os}', {\n\t\t\t\t\tos: matches[1],\n\t\t\t\t\tversion: matches[2],\n\t\t\t\t})\n\t\t\t\ticon = 'icon-desktop'\n\t\t\t}\n\n\t\t\t// preserve title for cases where we format it further\n\t\t\tconst title = this.token.name\n\t\t\tlet name = this.token.name\n\t\t\tfor (const client in userAgentMap) {\n\t\t\t\tconst matches = title.match(userAgentMap[client])\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (matches[2] && matches[1]) { // version number and os\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[2] + ' - ' + matches[1]\n\t\t\t\t\t} else if (matches[1]) { // only version number\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[1]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = nameMap[client]\n\t\t\t\t\t}\n\n\t\t\t\t\ticon = iconMap[client]\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.token.current) {\n\t\t\t\tname = t('settings', 'This session')\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ticon,\n\t\t\t\tname,\n\t\t\t}\n\t\t},\n\t\twiping() {\n\t\t\treturn this.token.type === 2\n\t\t},\n\t},\n\tmethods: {\n\t\tstartRename() {\n\t\t\t// Close action (popover menu)\n\t\t\tthis.actionOpen = false\n\n\t\t\tthis.newName = this.token.name\n\t\t\tthis.renaming = true\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.input.select()\n\t\t\t})\n\t\t},\n\t\tcancelRename() {\n\t\t\tthis.renaming = false\n\t\t},\n\t\trevoke() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('delete', this.token)\n\t\t},\n\t\trename() {\n\t\t\tthis.renaming = false\n\t\t\tthis.$emit('rename', this.token, this.newName)\n\t\t},\n\t\twipe() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('wipe', this.token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wiping {\n\t\tbackground-color: var(--color-background-darker);\n\t}\n\n\ttd {\n\t\tborder-top: 1px solid var(--color-border);\n\t\tmax-width: 200px;\n\t\twhite-space: normal;\n\t\tvertical-align: middle;\n\t\tposition: relative;\n\n\t\t&%icon {\n\t\t\toverflow: visible;\n\t\t\tposition: relative;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\n\t\t&.token-name {\n\t\t\tpadding: 10px 6px;\n\n\t\t\t&.token-rename {\n\t\t\t\tpadding: 0;\n\t\t\t}\n\n\t\t\tinput {\n\t\t\t\twidth: 100%;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\t\t&.token-name .wiping-warning {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t}\n\n\t\t&.more {\n\t\t\t@extend %icon;\n\t\t\tpadding: 0 10px;\n\t\t}\n\n\t\t&.client {\n\t\t\t@extend %icon;\n\n\t\t\tdiv {\n\t\t\t\topacity: 0.57;\n\t\t\t\twidth: 44px;\n\t\t\t\theight: 44px;\n\t\t\t}\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.vue?vue&type=style&index=0&id=3280a606&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.vue?vue&type=style&index=0&id=3280a606&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthToken.vue?vue&type=template&id=3280a606&scoped=true&\"\nimport script from \"./AuthToken.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthToken.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthToken.vue?vue&type=style&index=0&id=3280a606&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3280a606\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',{class:_vm.wiping,attrs:{\"data-id\":_vm.token.id}},[_c('td',{staticClass:\"client\"},[_c('div',{class:_vm.iconName.icon})]),_vm._v(\" \"),_c('td',{staticClass:\"token-name\"},[(_vm.token.canRename && _vm.renaming)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newName),expression:\"newName\"}],ref:\"input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.newName)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.rename.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.cancelRename.apply(null, arguments)}],\"blur\":_vm.cancelRename,\"input\":function($event){if($event.target.composing){ return; }_vm.newName=$event.target.value}}}):_c('span',[_vm._v(_vm._s(_vm.iconName.name))]),_vm._v(\" \"),(_vm.wiping)?_c('span',{staticClass:\"wiping-warning\"},[_vm._v(\"(\"+_vm._s(_vm.t('settings', 'Marked for remote wipe'))+\")\")]):_vm._e()]),_vm._v(\" \"),_c('td',[_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.lastActivity),expression:\"lastActivity\"}],staticClass:\"last-activity\"},[_vm._v(_vm._s(_vm.lastActivityRelative))])]),_vm._v(\" \"),_c('td',{staticClass:\"more\"},[(!_vm.token.current)?_c('Actions',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:({\n\t\t\t\tcontent: _vm.t('settings', 'Device settings'),\n\t\t\t\tcontainer: 'body'\n\t\t\t}),expression:\"{\\n\\t\\t\\t\\tcontent: t('settings', 'Device settings'),\\n\\t\\t\\t\\tcontainer: 'body'\\n\\t\\t\\t}\",modifiers:{\"auto\":true}}],attrs:{\"open\":_vm.actionOpen},on:{\"update:open\":function($event){_vm.actionOpen=$event}}},[(_vm.token.type === 1)?_c('ActionCheckbox',{attrs:{\"checked\":_vm.token.scope.filesystem},on:{\"change\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.$emit('toggle-scope', _vm.token, 'filesystem', !_vm.token.scope.filesystem)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Allow filesystem access'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canRename)?_c('ActionButton',{attrs:{\"icon\":\"icon-rename\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.startRename.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Rename'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canDelete)?[(_vm.token.type !== 2)?[_c('ActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoke'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('ActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.wipe.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Wipe device'))+\"\\n\\t\\t\\t\\t\\t\")])]:(_vm.token.type === 2)?_c('ActionButton',{attrs:{\"icon\":\"icon-delete\",\"title\":_vm.t('settings', 'Revoke')},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoking this token might prevent the wiping of your device if it hasn\\'t started the wipe yet.'))+\"\\n\\t\\t\\t\\t\")]):_vm._e()]:_vm._e()],2):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<table id=\"app-tokens-table\">\n\t\t<thead v-if=\"tokens.length\">\n\t\t\t<tr>\n\t\t\t\t<th />\n\t\t\t\t<th>{{ t('settings', 'Device') }}</th>\n\t\t\t\t<th>{{ t('settings', 'Last activity') }}</th>\n\t\t\t\t<th />\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody class=\"token-list\">\n\t\t\t<AuthToken v-for=\"token in sortedTokens\"\n\t\t\t\t:key=\"token.id\"\n\t\t\t\t:token=\"token\"\n\t\t\t\t@toggleScope=\"toggleScope\"\n\t\t\t\t@rename=\"rename\"\n\t\t\t\t@delete=\"onDelete\"\n\t\t\t\t@wipe=\"onWipe\" />\n\t\t</tbody>\n\t</table>\n</template>\n\n<script>\nimport AuthToken from './AuthToken'\n\nexport default {\n\tname: 'AuthTokenList',\n\tcomponents: {\n\t\tAuthToken,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tsortedTokens() {\n\t\t\treturn this.tokens.slice().sort((t1, t2) => {\n\t\t\t\tconst ts1 = parseInt(t1.lastActivity, 10)\n\t\t\t\tconst ts2 = parseInt(t2.lastActivity, 10)\n\t\t\t\treturn ts2 - ts1\n\t\t\t})\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleScope(token, scope, value) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('toggle-scope', token, scope, value)\n\t\t},\n\t\trename(token, newName) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('rename', token, newName)\n\t\t},\n\t\tonDelete(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('delete', token)\n\t\t},\n\t\tonWipe(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('wipe', token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\ttable {\n\t\twidth: 100%;\n\t\tmin-height: 50px;\n\t\tpadding-top: 5px;\n\t\tmax-width: 580px;\n\n\t\tth {\n\t\t\topacity: .5;\n\t\t\tpadding: 10px 0;\n\t\t}\n\t}\n\n\t.token-list {\n\t\ttd > a.icon-more {\n\t\t\ttransition: opacity var(--animation-quick);\n\t\t}\n\n\t\ta.icon-more {\n\t\t\tpadding: 14px;\n\t\t\tdisplay: block;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t\topacity: .5;\n\t\t}\n\n\t\ttr {\n\t\t\t&:hover td > a.icon,\n\t\t\ttd > a.icon:focus,\n\t\t\t&.active td > a.icon {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t}\n</style>\n\n<!-- some styles are not scoped to make them work on subcomponents -->\n<style lang=\"scss\">\n\t#app-tokens-table {\n\t\ttr > *:nth-child(2) {\n\t\t\tpadding-left: 6px;\n\t\t}\n\n\t\ttr > *:nth-child(3) {\n\t\t\ttext-align: right;\n\t\t}\n\t}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=0&id=0459b3e6&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=0&id=0459b3e6&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=1&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=1&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthTokenList.vue?vue&type=template&id=0459b3e6&scoped=true&\"\nimport script from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenList.vue?vue&type=style&index=0&id=0459b3e6&lang=scss&scoped=true&\"\nimport style1 from \"./AuthTokenList.vue?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0459b3e6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('table',{attrs:{\"id\":\"app-tokens-table\"}},[(_vm.tokens.length)?_c('thead',[_c('tr',[_c('th'),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Device')))]),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Last activity')))]),_vm._v(\" \"),_c('th')])]):_vm._e(),_vm._v(\" \"),_c('tbody',{staticClass:\"token-list\"},_vm._l((_vm.sortedTokens),function(token){return _c('AuthToken',{key:token.id,attrs:{\"token\":token},on:{\"toggleScope\":_vm.toggleScope,\"rename\":_vm.rename,\"delete\":_vm.onDelete,\"wipe\":_vm.onWipe}})}),1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div v-if=\"!adding\">\n\t\t<input v-model=\"deviceName\"\n\t\t\ttype=\"text\"\n\t\t\t:disabled=\"loading\"\n\t\t\t:placeholder=\"t('settings', 'App name')\"\n\t\t\t@keydown.enter=\"submit\">\n\t\t<button class=\"button\"\n\t\t\t:disabled=\"loading\"\n\t\t\t@click=\"submit\">\n\t\t\t{{ t('settings', 'Create new app password') }}\n\t\t</button>\n\t</div>\n\t<div v-else>\n\t\t{{ t('settings', 'Use the credentials below to configure your app or device.') }}\n\t\t{{ t('settings', 'For security reasons this password will only be shown once.') }}\n\t\t<div class=\"app-password-row\">\n\t\t\t<span class=\"app-password-label\">{{ t('settings', 'Username') }}</span>\n\t\t\t<input :value=\"loginName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<span class=\"app-password-label\">{{ t('settings', 'Password') }}</span>\n\t\t\t<input ref=\"appPassword\"\n\t\t\t\t:value=\"appPassword\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t\t<a ref=\"clipboardButton\"\n\t\t\t\tv-tooltip=\"copyTooltipOptions\"\n\t\t\t\tv-clipboard:copy=\"appPassword\"\n\t\t\t\tv-clipboard:success=\"onCopyPassword\"\n\t\t\t\tv-clipboard:error=\"onCopyPasswordFailed\"\n\t\t\t\tclass=\"icon icon-clippy\"\n\t\t\t\t@mouseover=\"hoveringCopyButton = true\"\n\t\t\t\t@mouseleave=\"hoveringCopyButton = false\" />\n\t\t\t<button class=\"button\"\n\t\t\t\t@click=\"reset\">\n\t\t\t\t{{ t('settings', 'Done') }}\n\t\t\t</button>\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<span class=\"app-password-label\" />\n\t\t\t<a v-if=\"!showQR\"\n\t\t\t\t@click=\"showQR = true\">\n\t\t\t\t{{ t('settings', 'Show QR code for mobile apps') }}\n\t\t\t</a>\n\t\t\t<QR v-else\n\t\t\t\t:value=\"qrUrl\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport QR from '@chenfengyuan/vue-qrcode'\nimport confirmPassword from '@nextcloud/password-confirmation'\nimport { getRootUrl } from '@nextcloud/router'\n\nexport default {\n\tname: 'AuthTokenSetupDialogue',\n\tcomponents: {\n\t\tQR,\n\t},\n\tprops: {\n\t\tadd: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tadding: false,\n\t\t\tloading: false,\n\t\t\tdeviceName: '',\n\t\t\tappPassword: '',\n\t\t\tloginName: '',\n\t\t\tpasswordCopied: false,\n\t\t\tshowQR: false,\n\t\t\tqrUrl: '',\n\t\t\thoveringCopyButton: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tcopyTooltipOptions() {\n\t\t\tconst base = {\n\t\t\t\thideOnTargetClick: false,\n\t\t\t\ttrigger: 'manual',\n\t\t\t}\n\n\t\t\tif (this.passwordCopied) {\n\t\t\t\treturn {\n\t\t\t\t\t...base,\n\t\t\t\t\tcontent: t('settings', 'Copied!'),\n\t\t\t\t\tshow: true,\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\t...base,\n\t\t\t\t\tcontent: t('settings', 'Copy'),\n\t\t\t\t\tshow: this.hoveringCopyButton,\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tselectInput(e) {\n\t\t\te.currentTarget.select()\n\t\t},\n\t\tsubmit() {\n\t\t\tconfirmPassword()\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading = true\n\t\t\t\t\treturn this.add(this.deviceName)\n\t\t\t\t})\n\t\t\t\t.then(token => {\n\t\t\t\t\tthis.adding = true\n\t\t\t\t\tthis.loginName = token.loginName\n\t\t\t\t\tthis.appPassword = token.token\n\n\t\t\t\t\tconst server = window.location.protocol + '//' + window.location.host + getRootUrl()\n\t\t\t\t\tthis.qrUrl = `nc://login/user:${token.loginName}&password:${token.token}&server:${server}`\n\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.$refs.appPassword.select()\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error('could not create a new app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while creating device token'))\n\n\t\t\t\t\tthis.reset()\n\t\t\t\t})\n\t\t},\n\t\tonCopyPassword() {\n\t\t\tthis.passwordCopied = true\n\t\t\tthis.$refs.clipboardButton.blur()\n\t\t\tsetTimeout(() => { this.passwordCopied = false }, 3000)\n\t\t},\n\t\tonCopyPasswordFailed() {\n\t\t\tOC.Notification.showTemporary(t('settings', 'Could not copy app password. Please copy it manually.'))\n\t\t},\n\t\treset() {\n\t\t\tthis.adding = false\n\t\t\tthis.loading = false\n\t\t\tthis.showQR = false\n\t\t\tthis.qrUrl = ''\n\t\t\tthis.deviceName = ''\n\t\t\tthis.appPassword = ''\n\t\t\tthis.loginName = ''\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.app-password-row {\n\t\tdisplay: table-row;\n\n\t\t.icon {\n\t\t\tbackground-size: 16px 16px;\n\t\t\tdisplay: inline-block;\n\t\t\tposition: relative;\n\t\t\ttop: 3px;\n\t\t\tmargin-left: 5px;\n\t\t\tmargin-right: 8px;\n\t\t}\n\n\t}\n\n\t.app-password-label {\n\t\tdisplay: table-cell;\n\t\tpadding-right: 1em;\n\t\ttext-align: right;\n\t\tvertical-align: middle;\n\t}\n\n\t.monospaced {\n\t\twidth: 245px;\n\t\tfont-family: monospace;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=56d907f7&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=56d907f7&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthTokenSetupDialogue.vue?vue&type=template&id=56d907f7&scoped=true&\"\nimport script from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=56d907f7&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"56d907f7\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.adding)?_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.deviceName),expression:\"deviceName\"}],attrs:{\"type\":\"text\",\"disabled\":_vm.loading,\"placeholder\":_vm.t('settings', 'App name')},domProps:{\"value\":(_vm.deviceName)},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.submit.apply(null, arguments)},\"input\":function($event){if($event.target.composing){ return; }_vm.deviceName=$event.target.value}}}),_vm._v(\" \"),_c('button',{staticClass:\"button\",attrs:{\"disabled\":_vm.loading},on:{\"click\":_vm.submit}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Create new app password'))+\"\\n\\t\")])]):_c('div',[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('settings', 'Use the credentials below to configure your app or device.'))+\"\\n\\t\"+_vm._s(_vm.t('settings', 'For security reasons this password will only be shown once.'))+\"\\n\\t\"),_c('div',{staticClass:\"app-password-row\"},[_c('span',{staticClass:\"app-password-label\"},[_vm._v(_vm._s(_vm.t('settings', 'Username')))]),_vm._v(\" \"),_c('input',{staticClass:\"monospaced\",attrs:{\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.loginName},on:{\"focus\":_vm.selectInput}})]),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('span',{staticClass:\"app-password-label\"},[_vm._v(_vm._s(_vm.t('settings', 'Password')))]),_vm._v(\" \"),_c('input',{ref:\"appPassword\",staticClass:\"monospaced\",attrs:{\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.appPassword},on:{\"focus\":_vm.selectInput}}),_vm._v(\" \"),_c('a',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.copyTooltipOptions),expression:\"copyTooltipOptions\"},{name:\"clipboard\",rawName:\"v-clipboard:copy\",value:(_vm.appPassword),expression:\"appPassword\",arg:\"copy\"},{name:\"clipboard\",rawName:\"v-clipboard:success\",value:(_vm.onCopyPassword),expression:\"onCopyPassword\",arg:\"success\"},{name:\"clipboard\",rawName:\"v-clipboard:error\",value:(_vm.onCopyPasswordFailed),expression:\"onCopyPasswordFailed\",arg:\"error\"}],ref:\"clipboardButton\",staticClass:\"icon icon-clippy\",on:{\"mouseover\":function($event){_vm.hoveringCopyButton = true},\"mouseleave\":function($event){_vm.hoveringCopyButton = false}}}),_vm._v(\" \"),_c('button',{staticClass:\"button\",on:{\"click\":_vm.reset}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Done'))+\"\\n\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('span',{staticClass:\"app-password-label\"}),_vm._v(\" \"),(!_vm.showQR)?_c('a',{on:{\"click\":function($event){_vm.showQR = true}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Show QR code for mobile apps'))+\"\\n\\t\\t\")]):_c('QR',{attrs:{\"value\":_vm.qrUrl}})],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div id=\"security\" class=\"section\">\n\t\t<h2>{{ t('settings', 'Devices & sessions', {}, undefined, {sanitize: false}) }}</h2>\n\t\t<p class=\"settings-hint hidden-when-empty\">\n\t\t\t{{ t('settings', 'Web, desktop and mobile clients currently logged in to your account.') }}\n\t\t</p>\n\t\t<AuthTokenList :tokens=\"tokens\"\n\t\t\t@toggleScope=\"toggleTokenScope\"\n\t\t\t@rename=\"rename\"\n\t\t\t@delete=\"deleteToken\"\n\t\t\t@wipe=\"wipeToken\" />\n\t\t<AuthTokenSetupDialogue v-if=\"canCreateToken\" :add=\"addNewToken\" />\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport confirmPassword from '@nextcloud/password-confirmation'\nimport { generateUrl } from '@nextcloud/router'\n\nimport AuthTokenList from './AuthTokenList'\nimport AuthTokenSetupDialogue from './AuthTokenSetupDialogue'\n\nconst confirm = () => {\n\treturn new Promise(resolve => {\n\t\tOC.dialogs.confirm(\n\t\t\tt('settings', 'Do you really want to wipe your data from this device?'),\n\t\t\tt('settings', 'Confirm wipe'),\n\t\t\tresolve,\n\t\t\ttrue\n\t\t)\n\t})\n}\n\n/**\n * Tap into a promise without losing the value\n *\n * @param {Function} cb the callback\n * @return {any} val the value\n */\nconst tap = cb => val => {\n\tcb(val)\n\treturn val\n}\n\nexport default {\n\tname: 'AuthTokenSection',\n\tcomponents: {\n\t\tAuthTokenSetupDialogue,\n\t\tAuthTokenList,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tcanCreateToken: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tbaseUrl: generateUrl('/settings/personal/authtokens'),\n\t\t}\n\t},\n\tmethods: {\n\t\taddNewToken(name) {\n\t\t\tconsole.debug('creating a new app token', name)\n\n\t\t\tconst data = {\n\t\t\t\tname,\n\t\t\t}\n\t\t\treturn axios.post(this.baseUrl, data)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token created')))\n\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t.then(tap(data => this.tokens.push(data.deviceToken)))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not create app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while creating device token'))\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\ttoggleTokenScope(token, scope, value) {\n\t\t\tconsole.debug('updating app token scope', token.id, scope, value)\n\n\t\t\tconst oldVal = token.scope[scope]\n\t\t\ttoken.scope[scope] = value\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token scope updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token scope', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while updating device token scope'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.scope[scope] = oldVal\n\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\trename(token, newName) {\n\t\t\tconsole.debug('renaming app token', token.id, token.name, newName)\n\n\t\t\tconst oldName = token.name\n\t\t\ttoken.name = newName\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token name updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token name', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while updating device token name'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.name = oldName\n\t\t\t\t})\n\t\t},\n\t\tupdateToken(token) {\n\t\t\treturn axios.put(this.baseUrl + '/' + token.id, token)\n\t\t\t\t.then(resp => resp.data)\n\t\t},\n\t\tdeleteToken(token) {\n\t\t\tconsole.debug('deleting app token', token)\n\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.tokens = this.tokens.filter(t => t !== token)\n\n\t\t\treturn axios.delete(this.baseUrl + '/' + token.id)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token deleted')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not delete app token', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while deleting the token'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t\tthis.tokens.push(token)\n\t\t\t\t})\n\t\t},\n\t\tasync wipeToken(token) {\n\t\t\tconsole.debug('wiping app token', token)\n\n\t\t\ttry {\n\t\t\t\tawait confirmPassword()\n\n\t\t\t\tif (!(await confirm())) {\n\t\t\t\t\tconsole.debug('wipe aborted by user')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tawait axios.post(this.baseUrl + '/wipe/' + token.id)\n\t\t\t\tconsole.debug('app token marked for wipe')\n\n\t\t\t\ttoken.type = 2\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error('could not wipe app token', err)\n\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while wiping the device with the token'))\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AuthTokenSection.vue?vue&type=template&id=27872b36&scoped=true&\"\nimport script from \"./AuthTokenSection.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"27872b36\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"section\",attrs:{\"id\":\"security\"}},[_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'Devices & sessions', {}, undefined, {sanitize: false})))]),_vm._v(\" \"),_c('p',{staticClass:\"settings-hint hidden-when-empty\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Web, desktop and mobile clients currently logged in to your account.'))+\"\\n\\t\")]),_vm._v(\" \"),_c('AuthTokenList',{attrs:{\"tokens\":_vm.tokens},on:{\"toggleScope\":_vm.toggleTokenScope,\"rename\":_vm.rename,\"delete\":_vm.deleteToken,\"wipe\":_vm.wipeToken}}),_vm._v(\" \"),(_vm.canCreateToken)?_c('AuthTokenSetupDialogue',{attrs:{\"add\":_vm.addNewToken}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport Vue from 'vue'\nimport VueClipboard from 'vue-clipboard2'\nimport VTooltip from 'v-tooltip'\n\nimport AuthTokenSection from './components/AuthTokenSection'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(OC.requestToken)\n\nVue.use(VueClipboard)\nVue.use(VTooltip, { defaultHtml: false })\nVue.prototype.t = t\n\nconst View = Vue.extend(AuthTokenSection)\nnew View({\n\tpropsData: {\n\t\ttokens: loadState('settings', 'app_tokens'),\n\t\tcanCreateToken: loadState('settings', 'can_create_app_token'),\n\t},\n}).$mount('#security-authtokens')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".wiping[data-v-3280a606]{background-color:var(--color-background-darker)}td[data-v-3280a606]{border-top:1px solid var(--color-border);max-width:200px;white-space:normal;vertical-align:middle;position:relative}td.client[data-v-3280a606],td.more[data-v-3280a606]{overflow:visible;position:relative;width:44px;height:44px}td.token-name[data-v-3280a606]{padding:10px 6px}td.token-name.token-rename[data-v-3280a606]{padding:0}td.token-name input[data-v-3280a606]{width:100%;margin:0}td.token-name .wiping-warning[data-v-3280a606]{color:var(--color-text-lighter)}td.more[data-v-3280a606]{padding:0 10px}td.client div[data-v-3280a606]{opacity:.57;width:44px;height:44px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthToken.vue\"],\"names\":[],\"mappings\":\"AAiQA,yBACC,+CAAA,CAGD,oBACC,wCAAA,CACA,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,oDACC,gBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CAGD,+BACC,gBAAA,CAEA,4CACC,SAAA,CAGD,qCACC,UAAA,CACA,QAAA,CAGF,+CACC,+BAAA,CAGD,yBAEC,cAAA,CAMA,+BACC,WAAA,CACA,UAAA,CACA,WAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.wiping {\\n\\tbackground-color: var(--color-background-darker);\\n}\\n\\ntd {\\n\\tborder-top: 1px solid var(--color-border);\\n\\tmax-width: 200px;\\n\\twhite-space: normal;\\n\\tvertical-align: middle;\\n\\tposition: relative;\\n\\n\\t&%icon {\\n\\t\\toverflow: visible;\\n\\t\\tposition: relative;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t}\\n\\n\\t&.token-name {\\n\\t\\tpadding: 10px 6px;\\n\\n\\t\\t&.token-rename {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\n\\t\\tinput {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tmargin: 0;\\n\\t\\t}\\n\\t}\\n\\t&.token-name .wiping-warning {\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n\\n\\t&.more {\\n\\t\\t@extend %icon;\\n\\t\\tpadding: 0 10px;\\n\\t}\\n\\n\\t&.client {\\n\\t\\t@extend %icon;\\n\\n\\t\\tdiv {\\n\\t\\t\\topacity: 0.57;\\n\\t\\t\\twidth: 44px;\\n\\t\\t\\theight: 44px;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"table[data-v-0459b3e6]{width:100%;min-height:50px;padding-top:5px;max-width:580px}table th[data-v-0459b3e6]{opacity:.5;padding:10px 0}.token-list td>a.icon-more[data-v-0459b3e6]{transition:opacity var(--animation-quick)}.token-list a.icon-more[data-v-0459b3e6]{padding:14px;display:block;width:44px;height:44px;opacity:.5}.token-list tr:hover td>a.icon[data-v-0459b3e6],.token-list tr td>a.icon[data-v-0459b3e6]:focus,.token-list tr.active td>a.icon[data-v-0459b3e6]{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AAwFA,uBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CAEA,0BACC,UAAA,CACA,cAAA,CAKD,4CACC,yCAAA,CAGD,yCACC,YAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CAIA,iJAGC,SAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\ntable {\\n\\twidth: 100%;\\n\\tmin-height: 50px;\\n\\tpadding-top: 5px;\\n\\tmax-width: 580px;\\n\\n\\tth {\\n\\t\\topacity: .5;\\n\\t\\tpadding: 10px 0;\\n\\t}\\n}\\n\\n.token-list {\\n\\ttd > a.icon-more {\\n\\t\\ttransition: opacity var(--animation-quick);\\n\\t}\\n\\n\\ta.icon-more {\\n\\t\\tpadding: 14px;\\n\\t\\tdisplay: block;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t\\topacity: .5;\\n\\t}\\n\\n\\ttr {\\n\\t\\t&:hover td > a.icon,\\n\\t\\ttd > a.icon:focus,\\n\\t\\t&.active td > a.icon {\\n\\t\\t\\topacity: 1;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#app-tokens-table tr>*:nth-child(2){padding-left:6px}#app-tokens-table tr>*:nth-child(3){text-align:right}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AA8HC,oCACC,gBAAA,CAGD,oCACC,gBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n#app-tokens-table {\\n\\ttr > *:nth-child(2) {\\n\\t\\tpadding-left: 6px;\\n\\t}\\n\\n\\ttr > *:nth-child(3) {\\n\\t\\ttext-align: right;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-password-row[data-v-56d907f7]{display:table-row}.app-password-row .icon[data-v-56d907f7]{background-size:16px 16px;display:inline-block;position:relative;top:3px;margin-left:5px;margin-right:8px}.app-password-label[data-v-56d907f7]{display:table-cell;padding-right:1em;text-align:right;vertical-align:middle}.monospaced[data-v-56d907f7]{width:245px;font-family:monospace}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenSetupDialogue.vue\"],\"names\":[],\"mappings\":\"AAoLA,mCACC,iBAAA,CAEA,yCACC,yBAAA,CACA,oBAAA,CACA,iBAAA,CACA,OAAA,CACA,eAAA,CACA,gBAAA,CAKF,qCACC,kBAAA,CACA,iBAAA,CACA,gBAAA,CACA,qBAAA,CAGD,6BACC,WAAA,CACA,qBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.app-password-row {\\n\\tdisplay: table-row;\\n\\n\\t.icon {\\n\\t\\tbackground-size: 16px 16px;\\n\\t\\tdisplay: inline-block;\\n\\t\\tposition: relative;\\n\\t\\ttop: 3px;\\n\\t\\tmargin-left: 5px;\\n\\t\\tmargin-right: 8px;\\n\\t}\\n\\n}\\n\\n.app-password-label {\\n\\tdisplay: table-cell;\\n\\tpadding-right: 1em;\\n\\ttext-align: right;\\n\\tvertical-align: middle;\\n}\\n\\n.monospaced {\\n\\twidth: 245px;\\n\\tfont-family: monospace;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 783;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t783: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(77906); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_h","$createElement","_c","_self","class","wiping","attrs","token","id","staticClass","iconName","icon","_v","canRename","renaming","directives","name","rawName","value","expression","ref","domProps","on","$event","type","indexOf","_k","keyCode","key","rename","apply","arguments","cancelRename","target","composing","newName","_s","t","_e","lastActivityRelative","current","content","container","modifiers","actionOpen","scope","filesystem","stopPropagation","preventDefault","$emit","startRename","revoke","wipe","tokens","_l","toggleScope","onDelete","onWipe","adding","loginName","selectInput","appPassword","arg","hoveringCopyButton","reset","showQR","qrUrl","loading","submit","deviceName","undefined","sanitize","toggleTokenScope","deleteToken","wipeToken","addNewToken","__webpack_nonce__","btoa","OC","requestToken","Vue","VueClipboard","VTooltip","defaultHtml","AuthTokenSection","propsData","loadState","canCreateToken","$mount","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","call","m","amdD","Error","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","data","moreModules","runtime","some","chunkLoadingGlobal","self","forEach","bind","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"settings-vue-settings-personal-security.js?v=8f0b9a74f787bbf71a69","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?a4c8","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?1338","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=template&id=6852e55e&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?05ad","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?515d","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?90cb","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=template&id=0459b3e6&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?e265","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?521c","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=template&id=56d907f7&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthTokenSection.vue?e9d0","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue?vue&type=template&id=27872b36&scoped=true&","webpack:///nextcloud/apps/settings/src/main-personal-security.js","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=style&index=0&id=6852e55e&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=style&index=0&id=0459b3e6&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=style&index=1&lang=scss&","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=56d907f7&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<tr :data-id=\"token.id\"\n\t\t:class=\"wiping\">\n\t\t<td class=\"client\">\n\t\t\t<div :class=\"iconName.icon\" />\n\t\t</td>\n\t\t<td class=\"token-name\">\n\t\t\t<input v-if=\"token.canRename && renaming\"\n\t\t\t\tref=\"input\"\n\t\t\t\tv-model=\"newName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t@keyup.enter=\"rename\"\n\t\t\t\t@blur=\"cancelRename\"\n\t\t\t\t@keyup.esc=\"cancelRename\">\n\t\t\t<span v-else>{{ iconName.name }}</span>\n\t\t\t<span v-if=\"wiping\" class=\"wiping-warning\">({{ t('settings', 'Marked for remote wipe') }})</span>\n\t\t</td>\n\t\t<td>\n\t\t\t<span v-tooltip=\"lastActivity\" class=\"last-activity\">{{ lastActivityRelative }}</span>\n\t\t</td>\n\t\t<td class=\"more\">\n\t\t\t<Actions v-if=\"!token.current\"\n\t\t\t\tv-tooltip.auto=\"{\n\t\t\t\t\tcontent: t('settings', 'Device settings'),\n\t\t\t\t\tcontainer: 'body'\n\t\t\t\t}\"\n\t\t\t\t:open.sync=\"actionOpen\">\n\t\t\t\t<ActionCheckbox v-if=\"token.type === 1\"\n\t\t\t\t\t:checked=\"token.scope.filesystem\"\n\t\t\t\t\t@change.stop.prevent=\"$emit('toggle-scope', token, 'filesystem', !token.scope.filesystem)\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Allow filesystem access') }}\n\t\t\t\t</ActionCheckbox>\n\t\t\t\t<ActionButton v-if=\"token.canRename\"\n\t\t\t\t\ticon=\"icon-rename\"\n\t\t\t\t\t@click.stop.prevent=\"startRename\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Rename') }}\n\t\t\t\t</ActionButton>\n\n\t\t\t\t<!-- revoke & wipe -->\n\t\t\t\t<template v-if=\"token.canDelete\">\n\t\t\t\t\t<template v-if=\"token.type !== 2\">\n\t\t\t\t\t\t<ActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t\t\t{{ t('settings', 'Revoke') }}\n\t\t\t\t\t\t</ActionButton>\n\t\t\t\t\t\t<ActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"wipe\">\n\t\t\t\t\t\t\t{{ t('settings', 'Wipe device') }}\n\t\t\t\t\t\t</ActionButton>\n\t\t\t\t\t</template>\n\t\t\t\t\t<ActionButton v-else-if=\"token.type === 2\"\n\t\t\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t\t\t:title=\"t('settings', 'Revoke')\"\n\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t{{ t('settings', 'Revoking this token might prevent the wiping of your device if it has not started the wipe yet.') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</template>\n\t\t\t</Actions>\n\t\t</td>\n\t</tr>\n</template>\n\n<script>\nimport {\n\tActions,\n\tActionButton,\n\tActionCheckbox,\n} from '@nextcloud/vue'\n\n// When using capture groups the following parts are extracted the first is used as the version number, the second as the OS\nconst userAgentMap = {\n\tie: /(?:MSIE|Trident|Trident\\/7.0; rv)[ :](\\d+)/,\n\t// Microsoft Edge User Agent from https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx\n\tedge: /^Mozilla\\/5\\.0 \\([^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+ Edge\\/[0-9.]+$/,\n\t// Firefox User Agent from https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference\n\tfirefox: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) Gecko\\/[0-9.]+ Firefox\\/(\\d+)(?:\\.\\d)?$/,\n\t// Chrome User Agent from https://developer.chrome.com/multidevice/user-agent\n\tchrome: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/(\\d+)[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+$/,\n\t// Safari User Agent from http://www.useragentstring.com/pages/Safari/\n\tsafari: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\)(?: Version\\/([0-9]+)[0-9.]+)? Safari\\/[0-9.A-Z]+$/,\n\t// Android Chrome user agent: https://developers.google.com/chrome/mobile/docs/user-agent\n\tandroidChrome: /Android.*(?:; (.*) Build\\/).*Chrome\\/(\\d+)[0-9.]+/,\n\tiphone: / *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tipad: /\\(iPad; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tiosClient: /^Mozilla\\/5\\.0 \\(iOS\\) (?:ownCloud|Nextcloud)-iOS.*$/,\n\tandroidClient: /^Mozilla\\/5\\.0 \\(Android\\) ownCloud-android.*$/,\n\tiosTalkClient: /^Mozilla\\/5\\.0 \\(iOS\\) Nextcloud-Talk.*$/,\n\tandroidTalkClient: /^Mozilla\\/5\\.0 \\(Android\\) Nextcloud-Talk.*$/,\n\t// DAVx5/3.3.8-beta2-gplay (2021/01/02; dav4jvm; okhttp/4.9.0) Android/10\n\tdavx5: /DAV(?:droid|x5)\\/([^ ]+)/,\n\t// Mozilla/5.0 (U; Linux; Maemo; Jolla; Sailfish; like Android 4.3) AppleWebKit/538.1 (KHTML, like Gecko) WebPirate/2.0 like Mobile Safari/538.1 (compatible)\n\twebPirate: /(Sailfish).*WebPirate\\/(\\d+)/,\n\t// Mozilla/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:31.0) Gecko/31.0 Firefox/31.0 SailfishBrowser/1.0\n\tsailfishBrowser: /(Sailfish).*SailfishBrowser\\/(\\d+)/,\n}\nconst nameMap = {\n\tie: t('setting', 'Internet Explorer'),\n\tedge: t('setting', 'Edge'),\n\tfirefox: t('setting', 'Firefox'),\n\tchrome: t('setting', 'Google Chrome'),\n\tsafari: t('setting', 'Safari'),\n\tandroidChrome: t('setting', 'Google Chrome for Android'),\n\tiphone: t('setting', 'iPhone'),\n\tipad: t('setting', 'iPad'),\n\tiosClient: t('setting', '{productName} iOS app', { productName: window.oc_defaults.productName }),\n\tandroidClient: t('setting', '{productName} Android app', { productName: window.oc_defaults.productName }),\n\tiosTalkClient: t('setting', '{productName} Talk for iOS', { productName: window.oc_defaults.productName }),\n\tandroidTalkClient: t('setting', '{productName} Talk for Android', { productName: window.oc_defaults.productName }),\n\tdavx5: 'DAVx5',\n\twebPirate: 'WebPirate',\n\tsailfishBrowser: 'SailfishBrowser',\n}\nconst iconMap = {\n\tie: 'icon-desktop',\n\tedge: 'icon-desktop',\n\tfirefox: 'icon-desktop',\n\tchrome: 'icon-desktop',\n\tsafari: 'icon-desktop',\n\tandroidChrome: 'icon-phone',\n\tiphone: 'icon-phone',\n\tipad: 'icon-tablet',\n\tiosClient: 'icon-phone',\n\tandroidClient: 'icon-phone',\n\tiosTalkClient: 'icon-phone',\n\tandroidTalkClient: 'icon-phone',\n\tdavx5: 'icon-phone',\n\twebPirate: 'icon-link',\n\tsailfishBrowser: 'icon-link',\n}\n\nexport default {\n\tname: 'AuthToken',\n\tcomponents: {\n\t\tActions,\n\t\tActionButton,\n\t\tActionCheckbox,\n\t},\n\tprops: {\n\t\ttoken: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowMore: this.token.canScope || this.token.canDelete,\n\t\t\trenaming: false,\n\t\t\tnewName: '',\n\t\t\tactionOpen: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tlastActivityRelative() {\n\t\t\treturn OC.Util.relativeModifiedDate(this.token.lastActivity * 1000)\n\t\t},\n\t\tlastActivity() {\n\t\t\treturn OC.Util.formatDate(this.token.lastActivity * 1000, 'LLL')\n\t\t},\n\t\ticonName() {\n\t\t\t// pretty format sync client user agent\n\t\t\tconst matches = this.token.name.match(/Mozilla\\/5\\.0 \\((\\w+)\\) (?:mirall|csyncoC)\\/(\\d+\\.\\d+\\.\\d+)/)\n\n\t\t\tlet icon = ''\n\t\t\tif (matches) {\n\t\t\t\t/* eslint-disable-next-line */\n\t\t\t\tthis.token.name = t('settings', 'Sync client - {os}', {\n\t\t\t\t\tos: matches[1],\n\t\t\t\t\tversion: matches[2],\n\t\t\t\t})\n\t\t\t\ticon = 'icon-desktop'\n\t\t\t}\n\n\t\t\t// preserve title for cases where we format it further\n\t\t\tconst title = this.token.name\n\t\t\tlet name = this.token.name\n\t\t\tfor (const client in userAgentMap) {\n\t\t\t\tconst matches = title.match(userAgentMap[client])\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (matches[2] && matches[1]) { // version number and os\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[2] + ' - ' + matches[1]\n\t\t\t\t\t} else if (matches[1]) { // only version number\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[1]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = nameMap[client]\n\t\t\t\t\t}\n\n\t\t\t\t\ticon = iconMap[client]\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.token.current) {\n\t\t\t\tname = t('settings', 'This session')\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ticon,\n\t\t\t\tname,\n\t\t\t}\n\t\t},\n\t\twiping() {\n\t\t\treturn this.token.type === 2\n\t\t},\n\t},\n\tmethods: {\n\t\tstartRename() {\n\t\t\t// Close action (popover menu)\n\t\t\tthis.actionOpen = false\n\n\t\t\tthis.newName = this.token.name\n\t\t\tthis.renaming = true\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.input.select()\n\t\t\t})\n\t\t},\n\t\tcancelRename() {\n\t\t\tthis.renaming = false\n\t\t},\n\t\trevoke() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('delete', this.token)\n\t\t},\n\t\trename() {\n\t\t\tthis.renaming = false\n\t\t\tthis.$emit('rename', this.token, this.newName)\n\t\t},\n\t\twipe() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('wipe', this.token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wiping {\n\t\tbackground-color: var(--color-background-darker);\n\t}\n\n\ttd {\n\t\tborder-top: 1px solid var(--color-border);\n\t\tmax-width: 200px;\n\t\twhite-space: normal;\n\t\tvertical-align: middle;\n\t\tposition: relative;\n\n\t\t&%icon {\n\t\t\toverflow: visible;\n\t\t\tposition: relative;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\n\t\t&.token-name {\n\t\t\tpadding: 10px 6px;\n\n\t\t\t&.token-rename {\n\t\t\t\tpadding: 0;\n\t\t\t}\n\n\t\t\tinput {\n\t\t\t\twidth: 100%;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\t\t&.token-name .wiping-warning {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t}\n\n\t\t&.more {\n\t\t\t@extend %icon;\n\t\t\tpadding: 0 10px;\n\t\t}\n\n\t\t&.client {\n\t\t\t@extend %icon;\n\n\t\t\tdiv {\n\t\t\t\topacity: 0.57;\n\t\t\t\twidth: 44px;\n\t\t\t\theight: 44px;\n\t\t\t}\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.vue?vue&type=style&index=0&id=6852e55e&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.vue?vue&type=style&index=0&id=6852e55e&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthToken.vue?vue&type=template&id=6852e55e&scoped=true&\"\nimport script from \"./AuthToken.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthToken.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthToken.vue?vue&type=style&index=0&id=6852e55e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6852e55e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',{class:_vm.wiping,attrs:{\"data-id\":_vm.token.id}},[_c('td',{staticClass:\"client\"},[_c('div',{class:_vm.iconName.icon})]),_vm._v(\" \"),_c('td',{staticClass:\"token-name\"},[(_vm.token.canRename && _vm.renaming)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newName),expression:\"newName\"}],ref:\"input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.newName)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.rename.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.cancelRename.apply(null, arguments)}],\"blur\":_vm.cancelRename,\"input\":function($event){if($event.target.composing){ return; }_vm.newName=$event.target.value}}}):_c('span',[_vm._v(_vm._s(_vm.iconName.name))]),_vm._v(\" \"),(_vm.wiping)?_c('span',{staticClass:\"wiping-warning\"},[_vm._v(\"(\"+_vm._s(_vm.t('settings', 'Marked for remote wipe'))+\")\")]):_vm._e()]),_vm._v(\" \"),_c('td',[_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.lastActivity),expression:\"lastActivity\"}],staticClass:\"last-activity\"},[_vm._v(_vm._s(_vm.lastActivityRelative))])]),_vm._v(\" \"),_c('td',{staticClass:\"more\"},[(!_vm.token.current)?_c('Actions',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:({\n\t\t\t\tcontent: _vm.t('settings', 'Device settings'),\n\t\t\t\tcontainer: 'body'\n\t\t\t}),expression:\"{\\n\\t\\t\\t\\tcontent: t('settings', 'Device settings'),\\n\\t\\t\\t\\tcontainer: 'body'\\n\\t\\t\\t}\",modifiers:{\"auto\":true}}],attrs:{\"open\":_vm.actionOpen},on:{\"update:open\":function($event){_vm.actionOpen=$event}}},[(_vm.token.type === 1)?_c('ActionCheckbox',{attrs:{\"checked\":_vm.token.scope.filesystem},on:{\"change\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.$emit('toggle-scope', _vm.token, 'filesystem', !_vm.token.scope.filesystem)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Allow filesystem access'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canRename)?_c('ActionButton',{attrs:{\"icon\":\"icon-rename\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.startRename.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Rename'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canDelete)?[(_vm.token.type !== 2)?[_c('ActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoke'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('ActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.wipe.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Wipe device'))+\"\\n\\t\\t\\t\\t\\t\")])]:(_vm.token.type === 2)?_c('ActionButton',{attrs:{\"icon\":\"icon-delete\",\"title\":_vm.t('settings', 'Revoke')},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoking this token might prevent the wiping of your device if it has not started the wipe yet.'))+\"\\n\\t\\t\\t\\t\")]):_vm._e()]:_vm._e()],2):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<table id=\"app-tokens-table\">\n\t\t<thead v-if=\"tokens.length\">\n\t\t\t<tr>\n\t\t\t\t<th />\n\t\t\t\t<th>{{ t('settings', 'Device') }}</th>\n\t\t\t\t<th>{{ t('settings', 'Last activity') }}</th>\n\t\t\t\t<th />\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody class=\"token-list\">\n\t\t\t<AuthToken v-for=\"token in sortedTokens\"\n\t\t\t\t:key=\"token.id\"\n\t\t\t\t:token=\"token\"\n\t\t\t\t@toggleScope=\"toggleScope\"\n\t\t\t\t@rename=\"rename\"\n\t\t\t\t@delete=\"onDelete\"\n\t\t\t\t@wipe=\"onWipe\" />\n\t\t</tbody>\n\t</table>\n</template>\n\n<script>\nimport AuthToken from './AuthToken'\n\nexport default {\n\tname: 'AuthTokenList',\n\tcomponents: {\n\t\tAuthToken,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tsortedTokens() {\n\t\t\treturn this.tokens.slice().sort((t1, t2) => {\n\t\t\t\tconst ts1 = parseInt(t1.lastActivity, 10)\n\t\t\t\tconst ts2 = parseInt(t2.lastActivity, 10)\n\t\t\t\treturn ts2 - ts1\n\t\t\t})\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleScope(token, scope, value) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('toggle-scope', token, scope, value)\n\t\t},\n\t\trename(token, newName) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('rename', token, newName)\n\t\t},\n\t\tonDelete(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('delete', token)\n\t\t},\n\t\tonWipe(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('wipe', token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\ttable {\n\t\twidth: 100%;\n\t\tmin-height: 50px;\n\t\tpadding-top: 5px;\n\t\tmax-width: 580px;\n\n\t\tth {\n\t\t\topacity: .5;\n\t\t\tpadding: 10px 0;\n\t\t}\n\t}\n\n\t.token-list {\n\t\ttd > a.icon-more {\n\t\t\ttransition: opacity var(--animation-quick);\n\t\t}\n\n\t\ta.icon-more {\n\t\t\tpadding: 14px;\n\t\t\tdisplay: block;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t\topacity: .5;\n\t\t}\n\n\t\ttr {\n\t\t\t&:hover td > a.icon,\n\t\t\ttd > a.icon:focus,\n\t\t\t&.active td > a.icon {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t}\n</style>\n\n<!-- some styles are not scoped to make them work on subcomponents -->\n<style lang=\"scss\">\n\t#app-tokens-table {\n\t\ttr > *:nth-child(2) {\n\t\t\tpadding-left: 6px;\n\t\t}\n\n\t\ttr > *:nth-child(3) {\n\t\t\ttext-align: right;\n\t\t}\n\t}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=0&id=0459b3e6&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=0&id=0459b3e6&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=1&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=1&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthTokenList.vue?vue&type=template&id=0459b3e6&scoped=true&\"\nimport script from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenList.vue?vue&type=style&index=0&id=0459b3e6&lang=scss&scoped=true&\"\nimport style1 from \"./AuthTokenList.vue?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0459b3e6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('table',{attrs:{\"id\":\"app-tokens-table\"}},[(_vm.tokens.length)?_c('thead',[_c('tr',[_c('th'),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Device')))]),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Last activity')))]),_vm._v(\" \"),_c('th')])]):_vm._e(),_vm._v(\" \"),_c('tbody',{staticClass:\"token-list\"},_vm._l((_vm.sortedTokens),function(token){return _c('AuthToken',{key:token.id,attrs:{\"token\":token},on:{\"toggleScope\":_vm.toggleScope,\"rename\":_vm.rename,\"delete\":_vm.onDelete,\"wipe\":_vm.onWipe}})}),1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div v-if=\"!adding\">\n\t\t<input v-model=\"deviceName\"\n\t\t\ttype=\"text\"\n\t\t\t:disabled=\"loading\"\n\t\t\t:placeholder=\"t('settings', 'App name')\"\n\t\t\t@keydown.enter=\"submit\">\n\t\t<button class=\"button\"\n\t\t\t:disabled=\"loading\"\n\t\t\t@click=\"submit\">\n\t\t\t{{ t('settings', 'Create new app password') }}\n\t\t</button>\n\t</div>\n\t<div v-else>\n\t\t{{ t('settings', 'Use the credentials below to configure your app or device.') }}\n\t\t{{ t('settings', 'For security reasons this password will only be shown once.') }}\n\t\t<div class=\"app-password-row\">\n\t\t\t<span class=\"app-password-label\">{{ t('settings', 'Username') }}</span>\n\t\t\t<input :value=\"loginName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<span class=\"app-password-label\">{{ t('settings', 'Password') }}</span>\n\t\t\t<input ref=\"appPassword\"\n\t\t\t\t:value=\"appPassword\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t\t<a ref=\"clipboardButton\"\n\t\t\t\tv-tooltip=\"copyTooltipOptions\"\n\t\t\t\tv-clipboard:copy=\"appPassword\"\n\t\t\t\tv-clipboard:success=\"onCopyPassword\"\n\t\t\t\tv-clipboard:error=\"onCopyPasswordFailed\"\n\t\t\t\tclass=\"icon icon-clippy\"\n\t\t\t\t@mouseover=\"hoveringCopyButton = true\"\n\t\t\t\t@mouseleave=\"hoveringCopyButton = false\" />\n\t\t\t<button class=\"button\"\n\t\t\t\t@click=\"reset\">\n\t\t\t\t{{ t('settings', 'Done') }}\n\t\t\t</button>\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<span class=\"app-password-label\" />\n\t\t\t<a v-if=\"!showQR\"\n\t\t\t\t@click=\"showQR = true\">\n\t\t\t\t{{ t('settings', 'Show QR code for mobile apps') }}\n\t\t\t</a>\n\t\t\t<QR v-else\n\t\t\t\t:value=\"qrUrl\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport QR from '@chenfengyuan/vue-qrcode'\nimport confirmPassword from '@nextcloud/password-confirmation'\nimport { getRootUrl } from '@nextcloud/router'\n\nexport default {\n\tname: 'AuthTokenSetupDialogue',\n\tcomponents: {\n\t\tQR,\n\t},\n\tprops: {\n\t\tadd: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tadding: false,\n\t\t\tloading: false,\n\t\t\tdeviceName: '',\n\t\t\tappPassword: '',\n\t\t\tloginName: '',\n\t\t\tpasswordCopied: false,\n\t\t\tshowQR: false,\n\t\t\tqrUrl: '',\n\t\t\thoveringCopyButton: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tcopyTooltipOptions() {\n\t\t\tconst base = {\n\t\t\t\thideOnTargetClick: false,\n\t\t\t\ttrigger: 'manual',\n\t\t\t}\n\n\t\t\tif (this.passwordCopied) {\n\t\t\t\treturn {\n\t\t\t\t\t...base,\n\t\t\t\t\tcontent: t('settings', 'Copied!'),\n\t\t\t\t\tshow: true,\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\t...base,\n\t\t\t\t\tcontent: t('settings', 'Copy'),\n\t\t\t\t\tshow: this.hoveringCopyButton,\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tselectInput(e) {\n\t\t\te.currentTarget.select()\n\t\t},\n\t\tsubmit() {\n\t\t\tconfirmPassword()\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading = true\n\t\t\t\t\treturn this.add(this.deviceName)\n\t\t\t\t})\n\t\t\t\t.then(token => {\n\t\t\t\t\tthis.adding = true\n\t\t\t\t\tthis.loginName = token.loginName\n\t\t\t\t\tthis.appPassword = token.token\n\n\t\t\t\t\tconst server = window.location.protocol + '//' + window.location.host + getRootUrl()\n\t\t\t\t\tthis.qrUrl = `nc://login/user:${token.loginName}&password:${token.token}&server:${server}`\n\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.$refs.appPassword.select()\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error('could not create a new app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while creating device token'))\n\n\t\t\t\t\tthis.reset()\n\t\t\t\t})\n\t\t},\n\t\tonCopyPassword() {\n\t\t\tthis.passwordCopied = true\n\t\t\tthis.$refs.clipboardButton.blur()\n\t\t\tsetTimeout(() => { this.passwordCopied = false }, 3000)\n\t\t},\n\t\tonCopyPasswordFailed() {\n\t\t\tOC.Notification.showTemporary(t('settings', 'Could not copy app password. Please copy it manually.'))\n\t\t},\n\t\treset() {\n\t\t\tthis.adding = false\n\t\t\tthis.loading = false\n\t\t\tthis.showQR = false\n\t\t\tthis.qrUrl = ''\n\t\t\tthis.deviceName = ''\n\t\t\tthis.appPassword = ''\n\t\t\tthis.loginName = ''\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.app-password-row {\n\t\tdisplay: table-row;\n\n\t\t.icon {\n\t\t\tbackground-size: 16px 16px;\n\t\t\tdisplay: inline-block;\n\t\t\tposition: relative;\n\t\t\ttop: 3px;\n\t\t\tmargin-left: 5px;\n\t\t\tmargin-right: 8px;\n\t\t}\n\n\t}\n\n\t.app-password-label {\n\t\tdisplay: table-cell;\n\t\tpadding-right: 1em;\n\t\ttext-align: right;\n\t\tvertical-align: middle;\n\t}\n\n\t.monospaced {\n\t\twidth: 245px;\n\t\tfont-family: monospace;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=56d907f7&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=56d907f7&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthTokenSetupDialogue.vue?vue&type=template&id=56d907f7&scoped=true&\"\nimport script from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=56d907f7&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"56d907f7\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.adding)?_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.deviceName),expression:\"deviceName\"}],attrs:{\"type\":\"text\",\"disabled\":_vm.loading,\"placeholder\":_vm.t('settings', 'App name')},domProps:{\"value\":(_vm.deviceName)},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.submit.apply(null, arguments)},\"input\":function($event){if($event.target.composing){ return; }_vm.deviceName=$event.target.value}}}),_vm._v(\" \"),_c('button',{staticClass:\"button\",attrs:{\"disabled\":_vm.loading},on:{\"click\":_vm.submit}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Create new app password'))+\"\\n\\t\")])]):_c('div',[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('settings', 'Use the credentials below to configure your app or device.'))+\"\\n\\t\"+_vm._s(_vm.t('settings', 'For security reasons this password will only be shown once.'))+\"\\n\\t\"),_c('div',{staticClass:\"app-password-row\"},[_c('span',{staticClass:\"app-password-label\"},[_vm._v(_vm._s(_vm.t('settings', 'Username')))]),_vm._v(\" \"),_c('input',{staticClass:\"monospaced\",attrs:{\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.loginName},on:{\"focus\":_vm.selectInput}})]),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('span',{staticClass:\"app-password-label\"},[_vm._v(_vm._s(_vm.t('settings', 'Password')))]),_vm._v(\" \"),_c('input',{ref:\"appPassword\",staticClass:\"monospaced\",attrs:{\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.appPassword},on:{\"focus\":_vm.selectInput}}),_vm._v(\" \"),_c('a',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.copyTooltipOptions),expression:\"copyTooltipOptions\"},{name:\"clipboard\",rawName:\"v-clipboard:copy\",value:(_vm.appPassword),expression:\"appPassword\",arg:\"copy\"},{name:\"clipboard\",rawName:\"v-clipboard:success\",value:(_vm.onCopyPassword),expression:\"onCopyPassword\",arg:\"success\"},{name:\"clipboard\",rawName:\"v-clipboard:error\",value:(_vm.onCopyPasswordFailed),expression:\"onCopyPasswordFailed\",arg:\"error\"}],ref:\"clipboardButton\",staticClass:\"icon icon-clippy\",on:{\"mouseover\":function($event){_vm.hoveringCopyButton = true},\"mouseleave\":function($event){_vm.hoveringCopyButton = false}}}),_vm._v(\" \"),_c('button',{staticClass:\"button\",on:{\"click\":_vm.reset}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Done'))+\"\\n\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('span',{staticClass:\"app-password-label\"}),_vm._v(\" \"),(!_vm.showQR)?_c('a',{on:{\"click\":function($event){_vm.showQR = true}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Show QR code for mobile apps'))+\"\\n\\t\\t\")]):_c('QR',{attrs:{\"value\":_vm.qrUrl}})],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div id=\"security\" class=\"section\">\n\t\t<h2>{{ t('settings', 'Devices & sessions', {}, undefined, {sanitize: false}) }}</h2>\n\t\t<p class=\"settings-hint hidden-when-empty\">\n\t\t\t{{ t('settings', 'Web, desktop and mobile clients currently logged in to your account.') }}\n\t\t</p>\n\t\t<AuthTokenList :tokens=\"tokens\"\n\t\t\t@toggleScope=\"toggleTokenScope\"\n\t\t\t@rename=\"rename\"\n\t\t\t@delete=\"deleteToken\"\n\t\t\t@wipe=\"wipeToken\" />\n\t\t<AuthTokenSetupDialogue v-if=\"canCreateToken\" :add=\"addNewToken\" />\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport confirmPassword from '@nextcloud/password-confirmation'\nimport { generateUrl } from '@nextcloud/router'\n\nimport AuthTokenList from './AuthTokenList'\nimport AuthTokenSetupDialogue from './AuthTokenSetupDialogue'\n\nconst confirm = () => {\n\treturn new Promise(resolve => {\n\t\tOC.dialogs.confirm(\n\t\t\tt('settings', 'Do you really want to wipe your data from this device?'),\n\t\t\tt('settings', 'Confirm wipe'),\n\t\t\tresolve,\n\t\t\ttrue\n\t\t)\n\t})\n}\n\n/**\n * Tap into a promise without losing the value\n *\n * @param {Function} cb the callback\n * @return {any} val the value\n */\nconst tap = cb => val => {\n\tcb(val)\n\treturn val\n}\n\nexport default {\n\tname: 'AuthTokenSection',\n\tcomponents: {\n\t\tAuthTokenSetupDialogue,\n\t\tAuthTokenList,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tcanCreateToken: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tbaseUrl: generateUrl('/settings/personal/authtokens'),\n\t\t}\n\t},\n\tmethods: {\n\t\taddNewToken(name) {\n\t\t\tconsole.debug('creating a new app token', name)\n\n\t\t\tconst data = {\n\t\t\t\tname,\n\t\t\t}\n\t\t\treturn axios.post(this.baseUrl, data)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token created')))\n\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t.then(tap(data => this.tokens.push(data.deviceToken)))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not create app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while creating device token'))\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\ttoggleTokenScope(token, scope, value) {\n\t\t\tconsole.debug('updating app token scope', token.id, scope, value)\n\n\t\t\tconst oldVal = token.scope[scope]\n\t\t\ttoken.scope[scope] = value\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token scope updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token scope', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while updating device token scope'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.scope[scope] = oldVal\n\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\trename(token, newName) {\n\t\t\tconsole.debug('renaming app token', token.id, token.name, newName)\n\n\t\t\tconst oldName = token.name\n\t\t\ttoken.name = newName\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token name updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token name', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while updating device token name'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.name = oldName\n\t\t\t\t})\n\t\t},\n\t\tupdateToken(token) {\n\t\t\treturn axios.put(this.baseUrl + '/' + token.id, token)\n\t\t\t\t.then(resp => resp.data)\n\t\t},\n\t\tdeleteToken(token) {\n\t\t\tconsole.debug('deleting app token', token)\n\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.tokens = this.tokens.filter(t => t !== token)\n\n\t\t\treturn axios.delete(this.baseUrl + '/' + token.id)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token deleted')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not delete app token', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while deleting the token'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t\tthis.tokens.push(token)\n\t\t\t\t})\n\t\t},\n\t\tasync wipeToken(token) {\n\t\t\tconsole.debug('wiping app token', token)\n\n\t\t\ttry {\n\t\t\t\tawait confirmPassword()\n\n\t\t\t\tif (!(await confirm())) {\n\t\t\t\t\tconsole.debug('wipe aborted by user')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tawait axios.post(this.baseUrl + '/wipe/' + token.id)\n\t\t\t\tconsole.debug('app token marked for wipe')\n\n\t\t\t\ttoken.type = 2\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error('could not wipe app token', err)\n\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while wiping the device with the token'))\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AuthTokenSection.vue?vue&type=template&id=27872b36&scoped=true&\"\nimport script from \"./AuthTokenSection.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"27872b36\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"section\",attrs:{\"id\":\"security\"}},[_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'Devices & sessions', {}, undefined, {sanitize: false})))]),_vm._v(\" \"),_c('p',{staticClass:\"settings-hint hidden-when-empty\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Web, desktop and mobile clients currently logged in to your account.'))+\"\\n\\t\")]),_vm._v(\" \"),_c('AuthTokenList',{attrs:{\"tokens\":_vm.tokens},on:{\"toggleScope\":_vm.toggleTokenScope,\"rename\":_vm.rename,\"delete\":_vm.deleteToken,\"wipe\":_vm.wipeToken}}),_vm._v(\" \"),(_vm.canCreateToken)?_c('AuthTokenSetupDialogue',{attrs:{\"add\":_vm.addNewToken}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport Vue from 'vue'\nimport VueClipboard from 'vue-clipboard2'\nimport VTooltip from 'v-tooltip'\n\nimport AuthTokenSection from './components/AuthTokenSection'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(OC.requestToken)\n\nVue.use(VueClipboard)\nVue.use(VTooltip, { defaultHtml: false })\nVue.prototype.t = t\n\nconst View = Vue.extend(AuthTokenSection)\nnew View({\n\tpropsData: {\n\t\ttokens: loadState('settings', 'app_tokens'),\n\t\tcanCreateToken: loadState('settings', 'can_create_app_token'),\n\t},\n}).$mount('#security-authtokens')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".wiping[data-v-6852e55e]{background-color:var(--color-background-darker)}td[data-v-6852e55e]{border-top:1px solid var(--color-border);max-width:200px;white-space:normal;vertical-align:middle;position:relative}td.client[data-v-6852e55e],td.more[data-v-6852e55e]{overflow:visible;position:relative;width:44px;height:44px}td.token-name[data-v-6852e55e]{padding:10px 6px}td.token-name.token-rename[data-v-6852e55e]{padding:0}td.token-name input[data-v-6852e55e]{width:100%;margin:0}td.token-name .wiping-warning[data-v-6852e55e]{color:var(--color-text-lighter)}td.more[data-v-6852e55e]{padding:0 10px}td.client div[data-v-6852e55e]{opacity:.57;width:44px;height:44px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthToken.vue\"],\"names\":[],\"mappings\":\"AAiQA,yBACC,+CAAA,CAGD,oBACC,wCAAA,CACA,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,oDACC,gBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CAGD,+BACC,gBAAA,CAEA,4CACC,SAAA,CAGD,qCACC,UAAA,CACA,QAAA,CAGF,+CACC,+BAAA,CAGD,yBAEC,cAAA,CAMA,+BACC,WAAA,CACA,UAAA,CACA,WAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.wiping {\\n\\tbackground-color: var(--color-background-darker);\\n}\\n\\ntd {\\n\\tborder-top: 1px solid var(--color-border);\\n\\tmax-width: 200px;\\n\\twhite-space: normal;\\n\\tvertical-align: middle;\\n\\tposition: relative;\\n\\n\\t&%icon {\\n\\t\\toverflow: visible;\\n\\t\\tposition: relative;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t}\\n\\n\\t&.token-name {\\n\\t\\tpadding: 10px 6px;\\n\\n\\t\\t&.token-rename {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\n\\t\\tinput {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tmargin: 0;\\n\\t\\t}\\n\\t}\\n\\t&.token-name .wiping-warning {\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n\\n\\t&.more {\\n\\t\\t@extend %icon;\\n\\t\\tpadding: 0 10px;\\n\\t}\\n\\n\\t&.client {\\n\\t\\t@extend %icon;\\n\\n\\t\\tdiv {\\n\\t\\t\\topacity: 0.57;\\n\\t\\t\\twidth: 44px;\\n\\t\\t\\theight: 44px;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"table[data-v-0459b3e6]{width:100%;min-height:50px;padding-top:5px;max-width:580px}table th[data-v-0459b3e6]{opacity:.5;padding:10px 0}.token-list td>a.icon-more[data-v-0459b3e6]{transition:opacity var(--animation-quick)}.token-list a.icon-more[data-v-0459b3e6]{padding:14px;display:block;width:44px;height:44px;opacity:.5}.token-list tr:hover td>a.icon[data-v-0459b3e6],.token-list tr td>a.icon[data-v-0459b3e6]:focus,.token-list tr.active td>a.icon[data-v-0459b3e6]{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AAwFA,uBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CAEA,0BACC,UAAA,CACA,cAAA,CAKD,4CACC,yCAAA,CAGD,yCACC,YAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CAIA,iJAGC,SAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\ntable {\\n\\twidth: 100%;\\n\\tmin-height: 50px;\\n\\tpadding-top: 5px;\\n\\tmax-width: 580px;\\n\\n\\tth {\\n\\t\\topacity: .5;\\n\\t\\tpadding: 10px 0;\\n\\t}\\n}\\n\\n.token-list {\\n\\ttd > a.icon-more {\\n\\t\\ttransition: opacity var(--animation-quick);\\n\\t}\\n\\n\\ta.icon-more {\\n\\t\\tpadding: 14px;\\n\\t\\tdisplay: block;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t\\topacity: .5;\\n\\t}\\n\\n\\ttr {\\n\\t\\t&:hover td > a.icon,\\n\\t\\ttd > a.icon:focus,\\n\\t\\t&.active td > a.icon {\\n\\t\\t\\topacity: 1;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#app-tokens-table tr>*:nth-child(2){padding-left:6px}#app-tokens-table tr>*:nth-child(3){text-align:right}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AA8HC,oCACC,gBAAA,CAGD,oCACC,gBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n#app-tokens-table {\\n\\ttr > *:nth-child(2) {\\n\\t\\tpadding-left: 6px;\\n\\t}\\n\\n\\ttr > *:nth-child(3) {\\n\\t\\ttext-align: right;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-password-row[data-v-56d907f7]{display:table-row}.app-password-row .icon[data-v-56d907f7]{background-size:16px 16px;display:inline-block;position:relative;top:3px;margin-left:5px;margin-right:8px}.app-password-label[data-v-56d907f7]{display:table-cell;padding-right:1em;text-align:right;vertical-align:middle}.monospaced[data-v-56d907f7]{width:245px;font-family:monospace}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenSetupDialogue.vue\"],\"names\":[],\"mappings\":\"AAoLA,mCACC,iBAAA,CAEA,yCACC,yBAAA,CACA,oBAAA,CACA,iBAAA,CACA,OAAA,CACA,eAAA,CACA,gBAAA,CAKF,qCACC,kBAAA,CACA,iBAAA,CACA,gBAAA,CACA,qBAAA,CAGD,6BACC,WAAA,CACA,qBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.app-password-row {\\n\\tdisplay: table-row;\\n\\n\\t.icon {\\n\\t\\tbackground-size: 16px 16px;\\n\\t\\tdisplay: inline-block;\\n\\t\\tposition: relative;\\n\\t\\ttop: 3px;\\n\\t\\tmargin-left: 5px;\\n\\t\\tmargin-right: 8px;\\n\\t}\\n\\n}\\n\\n.app-password-label {\\n\\tdisplay: table-cell;\\n\\tpadding-right: 1em;\\n\\ttext-align: right;\\n\\tvertical-align: middle;\\n}\\n\\n.monospaced {\\n\\twidth: 245px;\\n\\tfont-family: monospace;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 783;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t783: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(46448); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_h","$createElement","_c","_self","class","wiping","attrs","token","id","staticClass","iconName","icon","_v","canRename","renaming","directives","name","rawName","value","expression","ref","domProps","on","$event","type","indexOf","_k","keyCode","key","rename","apply","arguments","cancelRename","target","composing","newName","_s","t","_e","lastActivityRelative","current","content","container","modifiers","actionOpen","scope","filesystem","stopPropagation","preventDefault","$emit","startRename","revoke","wipe","tokens","_l","toggleScope","onDelete","onWipe","adding","loginName","selectInput","appPassword","arg","hoveringCopyButton","reset","showQR","qrUrl","loading","submit","deviceName","undefined","sanitize","toggleTokenScope","deleteToken","wipeToken","addNewToken","__webpack_nonce__","btoa","OC","requestToken","Vue","VueClipboard","VTooltip","defaultHtml","AuthTokenSection","propsData","loadState","canCreateToken","$mount","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","call","m","amdD","Error","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","data","moreModules","runtime","some","chunkLoadingGlobal","self","forEach","bind","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/updatenotification-updatenotification.js b/dist/updatenotification-updatenotification.js index 6bccfe14c3e..f09c01eade2 100644 --- a/dist/updatenotification-updatenotification.js +++ b/dist/updatenotification-updatenotification.js @@ -1,3 +1,3 @@ /*! For license information please see updatenotification-updatenotification.js.LICENSE.txt */ -!function(){"use strict";var e,a={45571:function(e,a,i){var o=i(20144),s=i(79753),r=i(26533),l=i.n(r),p=i(7811),c=i.n(p),d=i(34741),u=i(2649),h=i.n(u);d.VTooltip.options.defaultHtml=!1;var f={name:"UpdateNotification",components:{Multiselect:c(),PopoverMenu:l()},directives:{ClickOutside:h(),tooltip:d.VTooltip},data:function(){return{newVersionString:"",lastCheckedDate:"",isUpdateChecked:!1,webUpdaterEnabled:!0,updaterEnabled:!0,versionIsEol:!1,downloadLink:"",isNewVersionAvailable:!1,hasValidSubscription:!1,updateServerURL:"",changelogURL:"",whatsNewData:[],currentChannel:"",channels:[],notifyGroups:"",availableGroups:[],isDefaultUpdateServerURL:!0,enableChangeWatcher:!1,availableAppUpdates:[],missingAppUpdates:[],appStoreFailed:!1,appStoreDisabled:!1,isListFetched:!1,hideMissingUpdates:!1,hideAvailableUpdates:!0,openedWhatsNew:!1,openedUpdateChannelMenu:!1}},_$el:null,_$notifyGroups:null,computed:{newVersionAvailableString:function(){return t("updatenotification","A new version is available: <strong>{newVersionString}</strong>",{newVersionString:this.newVersionString})},noteDelayedStableString:function(){return t("updatenotification","Note that after a new release the update only shows up after the first minor release or later. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found. Learn more about updates and release channels at {link}").replace("{link}",'<a href="https://nextcloud.com/release-channels/">https://nextcloud.com/release-channels/</a>')},lastCheckedOnString:function(){return t("updatenotification","Checked on {lastCheckedDate}",{lastCheckedDate:this.lastCheckedDate})},statusText:function(){return this.isListFetched?this.appStoreDisabled?t("updatenotification","Please make sure your config.php does not set <samp>appstoreenabled</samp> to false."):this.appStoreFailed?t("updatenotification","Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store."):0===this.missingAppUpdates.length?t("updatenotification","<strong>All</strong> apps have a compatible version for this Nextcloud version available",this):n("updatenotification","<strong>%n</strong> app has no compatible version for this Nextcloud version available","<strong>%n</strong> apps have no compatible version for this Nextcloud version available",this.missingAppUpdates.length):t("updatenotification","Checking apps for compatible versions")},whatsNew:function(){if(0===this.whatsNewData.length)return null;var n=[];for(var e in this.whatsNewData)n[e]={icon:"icon-checkmark",longtext:this.whatsNewData[e]};return this.changelogURL&&n.push({href:this.changelogURL,text:t("updatenotification","View changelog"),icon:"icon-link",target:"_blank",action:""}),n},channelList:function(){var n=[];return n.push({text:t("updatenotification","Enterprise"),longtext:t("updatenotification","For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package."),icon:"icon-star",active:"enterprise"===this.currentChannel,disabled:!this.hasValidSubscription,action:this.changeReleaseChannelToEnterprise}),n.push({text:t("updatenotification","Stable"),longtext:t("updatenotification","The most recent stable version. It is suited for regular use and will always update to the latest major version."),icon:"icon-checkmark",active:"stable"===this.currentChannel,action:this.changeReleaseChannelToStable}),n.push({text:t("updatenotification","Beta"),longtext:t("updatenotification","A pre-release version only for testing new features, not for production environments."),icon:"icon-category-customization",active:"beta"===this.currentChannel,action:this.changeReleaseChannelToBeta}),this.isNonDefaultChannel&&n.push({text:this.currentChannel,icon:"icon-rename",active:!0}),n},isNonDefaultChannel:function(){return"enterprise"!==this.currentChannel&&"stable"!==this.currentChannel&&"beta"!==this.currentChannel},localizedChannelName:function(){switch(this.currentChannel){case"enterprise":return t("updatenotification","Enterprise");case"stable":return t("updatenotification","Stable");case"beta":return t("updatenotification","Beta");default:return this.currentChannel}}},watch:{notifyGroups:function(n){if(this.enableChangeWatcher){var t=[];_.each(n,(function(n){t.push(n.value)})),OCP.AppConfig.setValue("updatenotification","notify_groups",JSON.stringify(t))}},isNewVersionAvailable:function(){this.isNewVersionAvailable&&$.ajax({url:(0,s.generateOcsUrl)("apps/updatenotification/api/v1/applist/{newVersion}",{newVersion:this.newVersion}),type:"GET",beforeSend:function(n){n.setRequestHeader("Accept","application/json")},success:function(n){this.availableAppUpdates=n.ocs.data.available,this.missingAppUpdates=n.ocs.data.missing,this.isListFetched=!0,this.appStoreFailed=!1}.bind(this),error:function(n){this.availableAppUpdates=[],this.missingAppUpdates=[],this.appStoreDisabled=n.responseJSON.ocs.data.appstore_disabled,this.isListFetched=!0,this.appStoreFailed=!0}.bind(this)})}},beforeMount:function(){var n=JSON.parse($("#updatenotification").attr("data-json"));this.newVersion=n.newVersion,this.newVersionString=n.newVersionString,this.lastCheckedDate=n.lastChecked,this.isUpdateChecked=n.isUpdateChecked,this.webUpdaterEnabled=n.webUpdaterEnabled,this.updaterEnabled=n.updaterEnabled,this.downloadLink=n.downloadLink,this.isNewVersionAvailable=n.isNewVersionAvailable,this.updateServerURL=n.updateServerURL,this.currentChannel=n.currentChannel,this.channels=n.channels,this.notifyGroups=n.notifyGroups,this.isDefaultUpdateServerURL=n.isDefaultUpdateServerURL,this.versionIsEol=n.versionIsEol,this.hasValidSubscription=n.hasValidSubscription,n.changes&&n.changes.changelogURL&&(this.changelogURL=n.changes.changelogURL),n.changes&&n.changes.whatsNew&&(n.changes.whatsNew.admin&&(this.whatsNewData=this.whatsNewData.concat(n.changes.whatsNew.admin)),this.whatsNewData=this.whatsNewData.concat(n.changes.whatsNew.regular))},mounted:function(){this._$el=$(this.$el),this._$notifyGroups=this._$el.find("#oca_updatenotification_groups_list"),this._$notifyGroups.on("change",function(){this.$emit("input")}.bind(this)),$.ajax({url:(0,s.generateOcsUrl)("cloud/groups"),dataType:"json",success:function(n){var t=[];$.each(n.ocs.data.groups,(function(n,e){t.push({value:e,label:e})})),this.availableGroups=t,this.enableChangeWatcher=!0}.bind(this)})},methods:{clickUpdaterButton:function(){$.ajax({url:(0,s.generateUrl)("/apps/updatenotification/credentials")}).success((function(n){var t=document.createElement("form");t.setAttribute("method","post"),t.setAttribute("action",(0,s.getRootUrl)()+"/updater/");var e=document.createElement("input");e.setAttribute("type","hidden"),e.setAttribute("name","updater-secret-input"),e.setAttribute("value",n),t.appendChild(e),document.body.appendChild(t),t.submit()}))},changeReleaseChannelToEnterprise:function(){this.changeReleaseChannel("enterprise")},changeReleaseChannelToStable:function(){this.changeReleaseChannel("stable")},changeReleaseChannelToBeta:function(){this.changeReleaseChannel("beta")},changeReleaseChannel:function(n){this.currentChannel=n,$.ajax({url:(0,s.generateUrl)("/apps/updatenotification/channel"),type:"POST",data:{channel:this.currentChannel},success:function(n){OC.msg.finishedAction("#channel_save_msg",n)}}),this.openedUpdateChannelMenu=!1},toggleUpdateChannelMenu:function(){this.openedUpdateChannelMenu=!this.openedUpdateChannelMenu},toggleHideMissingUpdates:function(){this.hideMissingUpdates=!this.hideMissingUpdates},toggleHideAvailableUpdates:function(){this.hideAvailableUpdates=!this.hideAvailableUpdates},toggleMenu:function(){this.openedWhatsNew=!this.openedWhatsNew},closeUpdateChannelMenu:function(){this.openedUpdateChannelMenu=!1},hideMenu:function(){this.openedWhatsNew=!1}}},A=i(93379),v=i.n(A),g=i(7795),C=i.n(g),m=i(90569),b=i.n(m),w=i(3565),k=i.n(w),y=i(19216),U=i.n(y),x=i(44589),N=i.n(x),S=i(62131),D={};D.styleTagTransform=N(),D.setAttributes=k(),D.insert=b().bind(null,"head"),D.domAPI=C(),D.insertStyleElement=U(),v()(S.Z,D),S.Z&&S.Z.locals&&S.Z.locals;var E=i(16722),M={};M.styleTagTransform=N(),M.setAttributes=k(),M.insert=b().bind(null,"head"),M.domAPI=C(),M.insertStyleElement=U(),v()(E.Z,M),E.Z&&E.Z.locals&&E.Z.locals;var L=(0,i(51900).Z)(f,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"followupsection",attrs:{id:"updatenotification"}},[e("div",{staticClass:"update"},[n.isNewVersionAvailable?[n.versionIsEol?e("p",[e("span",{staticClass:"warning"},[e("span",{staticClass:"icon icon-error-white"}),n._v("\n\t\t\t\t\t"+n._s(n.t("updatenotification","The version you are running is not maintained anymore. Please make sure to update to a supported version as soon as possible."))+"\n\t\t\t\t")])]):n._e(),n._v(" "),e("p",[e("span",{domProps:{innerHTML:n._s(n.newVersionAvailableString)}}),e("br"),n._v(" "),n.isListFetched?n._e():e("span",{staticClass:"icon icon-loading-small"}),n._v(" "),e("span",{domProps:{innerHTML:n._s(n.statusText)}})]),n._v(" "),n.missingAppUpdates.length?[e("h3",{on:{click:n.toggleHideMissingUpdates}},[n._v("\n\t\t\t\t\t"+n._s(n.t("updatenotification","Apps missing compatible version"))+"\n\t\t\t\t\t"),n.hideMissingUpdates?n._e():e("span",{staticClass:"icon icon-triangle-n"}),n._v(" "),n.hideMissingUpdates?e("span",{staticClass:"icon icon-triangle-s"}):n._e()]),n._v(" "),n.hideMissingUpdates?n._e():e("ul",{staticClass:"applist"},n._l(n.missingAppUpdates,(function(t,a){return e("li",{key:a},[e("a",{attrs:{href:"https://apps.nextcloud.com/apps/"+t.appId,title:n.t("settings","View in store")}},[n._v(n._s(t.appName)+" ↗")])])})),0)]:n._e(),n._v(" "),n.availableAppUpdates.length?[e("h3",{on:{click:n.toggleHideAvailableUpdates}},[n._v("\n\t\t\t\t\t"+n._s(n.t("updatenotification","Apps with compatible version"))+"\n\t\t\t\t\t"),n.hideAvailableUpdates?n._e():e("span",{staticClass:"icon icon-triangle-n"}),n._v(" "),n.hideAvailableUpdates?e("span",{staticClass:"icon icon-triangle-s"}):n._e()]),n._v(" "),n.hideAvailableUpdates?n._e():e("ul",{staticClass:"applist"},n._l(n.availableAppUpdates,(function(t,a){return e("li",{key:a},[e("a",{attrs:{href:"https://apps.nextcloud.com/apps/"+t.appId,title:n.t("settings","View in store")}},[n._v(n._s(t.appName)+" ↗")])])})),0)]:n._e(),n._v(" "),e("div",[n.updaterEnabled&&n.webUpdaterEnabled?e("a",{staticClass:"button primary",attrs:{href:"#"},on:{click:n.clickUpdaterButton}},[n._v(n._s(n.t("updatenotification","Open updater")))]):n._e(),n._v(" "),n.downloadLink?e("a",{staticClass:"button",class:{hidden:!n.updaterEnabled},attrs:{href:n.downloadLink}},[n._v(n._s(n.t("updatenotification","Download now")))]):n._e(),n._v(" "),n.updaterEnabled&&!n.webUpdaterEnabled?e("span",[n._v("\n\t\t\t\t\t"+n._s(n.t("updatenotification","Please use the command line updater to update."))+"\n\t\t\t\t")]):n._e(),n._v(" "),n.whatsNew?e("div",{staticClass:"whatsNew"},[e("div",{staticClass:"toggleWhatsNew"},[e("a",{directives:[{name:"click-outside",rawName:"v-click-outside",value:n.hideMenu,expression:"hideMenu"}],staticClass:"button",on:{click:n.toggleMenu}},[n._v(n._s(n.t("updatenotification","What's new?")))]),n._v(" "),e("div",{staticClass:"popovermenu",class:{"menu-center":!0,open:n.openedWhatsNew}},[e("PopoverMenu",{attrs:{menu:n.whatsNew}})],1)])]):n._e()])]:n.isUpdateChecked?[n._v("\n\t\t\t"+n._s(n.t("updatenotification","Your version is up to date."))+"\n\t\t\t"),e("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:n.lastCheckedOnString,expression:"lastCheckedOnString",modifiers:{auto:!0}}],staticClass:"icon-info svg"})]:[n._v("\n\t\t\t"+n._s(n.t("updatenotification","The update check is not yet finished. Please refresh the page."))+"\n\t\t")],n._v(" "),n.isDefaultUpdateServerURL?n._e():[e("p",{staticClass:"topMargin"},[e("em",[n._v(n._s(n.t("updatenotification","A non-default update server is in use to be checked for updates:"))+" "),e("code",[n._v(n._s(n.updateServerURL))])])])]],2),n._v(" "),e("h3",{staticClass:"update-channel-selector"},[n._v("\n\t\t"+n._s(n.t("updatenotification","Update channel:"))+"\n\t\t"),e("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:n.closeUpdateChannelMenu,expression:"closeUpdateChannelMenu"}],staticClass:"update-menu"},[e("span",{staticClass:"icon-update-menu",on:{click:n.toggleUpdateChannelMenu}},[n._v("\n\t\t\t\t"+n._s(n.localizedChannelName)+"\n\t\t\t\t"),e("span",{staticClass:"icon-triangle-s"})]),n._v(" "),e("div",{staticClass:"popovermenu menu menu-center",class:{"show-menu":n.openedUpdateChannelMenu}},[e("PopoverMenu",{attrs:{menu:n.channelList}})],1)])]),n._v(" "),e("span",{staticClass:"msg",attrs:{id:"channel_save_msg"}}),e("br"),n._v(" "),e("p",[e("em",[n._v(n._s(n.t("updatenotification","You can always update to a newer version. But you can never downgrade to a more stable version.")))]),e("br"),n._v(" "),e("em",{domProps:{innerHTML:n._s(n.noteDelayedStableString)}})]),n._v(" "),e("p",{attrs:{id:"oca_updatenotification_groups"}},[n._v("\n\t\t"+n._s(n.t("updatenotification","Notify members of the following groups about available updates:"))+"\n\t\t"),e("Multiselect",{attrs:{options:n.availableGroups,multiple:!0,label:"label","track-by":"value","tag-width":75},model:{value:n.notifyGroups,callback:function(t){n.notifyGroups=t},expression:"notifyGroups"}}),e("br"),n._v(" "),"daily"===n.currentChannel||"git"===n.currentChannel?e("em",[n._v(n._s(n.t("updatenotification","Only notifications for app updates are available.")))]):n._e(),n._v(" "),"daily"===n.currentChannel?e("em",[n._v(n._s(n.t("updatenotification","The selected update channel makes dedicated notifications for the server obsolete.")))]):n._e(),n._v(" "),"git"===n.currentChannel?e("em",[n._v(n._s(n.t("updatenotification","The selected update channel does not support updates of the server.")))]):n._e()],1)])}),[],!1,null,"7a4f5dee",null).exports;o.default.mixin({methods:{t:function(n,t,e,a,i){return OC.L10N.translate(n,t,e,a,i)},n:function(n,t,e,a,i,o){return OC.L10N.translatePlural(n,t,e,a,i,o)}}}),new o.default({el:"#updatenotification",render:function(n){return n(L)}})},62131:function(n,t,e){var a=e(94015),i=e.n(a),o=e(23645),s=e.n(o)()(i());s.push([n.id,"#updatenotification[data-v-7a4f5dee]{margin-top:-25px;margin-bottom:200px}#updatenotification div.update[data-v-7a4f5dee],#updatenotification p[data-v-7a4f5dee]:not(.inlineblock){margin-bottom:25px}#updatenotification h2.inlineblock[data-v-7a4f5dee]{margin-top:25px}#updatenotification h3[data-v-7a4f5dee]{cursor:pointer}#updatenotification h3 .icon[data-v-7a4f5dee]{cursor:pointer}#updatenotification h3[data-v-7a4f5dee]:first-of-type{margin-top:0}#updatenotification h3.update-channel-selector[data-v-7a4f5dee]{display:inline-block;cursor:inherit}#updatenotification .icon[data-v-7a4f5dee]{display:inline-block;margin-bottom:-3px}#updatenotification .icon-triangle-s[data-v-7a4f5dee],#updatenotification .icon-triangle-n[data-v-7a4f5dee]{opacity:.5}#updatenotification .whatsNew[data-v-7a4f5dee]{display:inline-block}#updatenotification .toggleWhatsNew[data-v-7a4f5dee]{position:relative}#updatenotification .popovermenu[data-v-7a4f5dee]{margin-top:5px;width:300px}#updatenotification .popovermenu p[data-v-7a4f5dee]{margin-bottom:0;width:100%}#updatenotification .applist[data-v-7a4f5dee]{margin-bottom:25px}#updatenotification .update-menu[data-v-7a4f5dee]{position:relative;cursor:pointer;margin-left:3px;display:inline-block}#updatenotification .update-menu .icon-update-menu[data-v-7a4f5dee]{cursor:inherit}#updatenotification .update-menu .icon-update-menu .icon-triangle-s[data-v-7a4f5dee]{display:inline-block;vertical-align:middle;cursor:inherit;opacity:1}#updatenotification .update-menu .popovermenu[data-v-7a4f5dee]{display:none;top:28px}#updatenotification .update-menu .popovermenu.show-menu[data-v-7a4f5dee]{display:block}","",{version:3,sources:["webpack://./apps/updatenotification/src/components/UpdateNotification.vue"],names:[],mappings:"AA4bA,qCACC,gBAAA,CACA,mBAAA,CACA,yGAEC,kBAAA,CAED,oDACC,eAAA,CAED,wCACC,cAAA,CACA,8CACC,cAAA,CAED,sDACC,YAAA,CAED,gEACC,oBAAA,CACA,cAAA,CAGF,2CACC,oBAAA,CACA,kBAAA,CAED,4GACC,UAAA,CAED,+CACC,oBAAA,CAED,qDACC,iBAAA,CAED,kDAKC,cAAA,CACA,WAAA,CALA,oDACC,eAAA,CACA,UAAA,CAKF,8CACC,kBAAA,CAGD,kDACC,iBAAA,CACA,cAAA,CACA,eAAA,CACA,oBAAA,CACA,oEACC,cAAA,CACA,qFACC,oBAAA,CACA,qBAAA,CACA,cAAA,CACA,SAAA,CAGF,+DACC,YAAA,CACA,QAAA,CACA,yEACC,aAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n#updatenotification {\n\tmargin-top: -25px;\n\tmargin-bottom: 200px;\n\tdiv.update,\n\tp:not(.inlineblock) {\n\t\tmargin-bottom: 25px;\n\t}\n\th2.inlineblock {\n\t\tmargin-top: 25px;\n\t}\n\th3 {\n\t\tcursor: pointer;\n\t\t.icon {\n\t\t\tcursor: pointer;\n\t\t}\n\t\t&:first-of-type {\n\t\t\tmargin-top: 0;\n\t\t}\n\t\t&.update-channel-selector {\n\t\t\tdisplay: inline-block;\n\t\t\tcursor: inherit;\n\t\t}\n\t}\n\t.icon {\n\t\tdisplay: inline-block;\n\t\tmargin-bottom: -3px;\n\t}\n\t.icon-triangle-s, .icon-triangle-n {\n\t\topacity: 0.5;\n\t}\n\t.whatsNew {\n\t\tdisplay: inline-block;\n\t}\n\t.toggleWhatsNew {\n\t\tposition: relative;\n\t}\n\t.popovermenu {\n\t\tp {\n\t\t\tmargin-bottom: 0;\n\t\t\twidth: 100%;\n\t\t}\n\t\tmargin-top: 5px;\n\t\twidth: 300px;\n\t}\n\t.applist {\n\t\tmargin-bottom: 25px;\n\t}\n\n\t.update-menu {\n\t\tposition: relative;\n\t\tcursor: pointer;\n\t\tmargin-left: 3px;\n\t\tdisplay: inline-block;\n\t\t.icon-update-menu {\n\t\t\tcursor: inherit;\n\t\t\t.icon-triangle-s {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tvertical-align: middle;\n\t\t\t\tcursor: inherit;\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t\t.popovermenu {\n\t\t\tdisplay: none;\n\t\t\ttop: 28px;\n\t\t\t&.show-menu {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),t.Z=s},16722:function(n,t,e){var a=e(94015),i=e.n(a),o=e(23645),s=e.n(o)()(i());s.push([n.id,"#updatenotification .popovermenu{margin-top:5px;width:300px}#updatenotification .popovermenu p{margin-top:5px;width:100%}#updatenotification .update-menu .icon-star:hover,#updatenotification .update-menu .icon-star:focus{background-image:var(--icon-star-000)}#updatenotification .topMargin{margin-top:15px}","",{version:3,sources:["webpack://./apps/updatenotification/src/components/UpdateNotification.vue"],names:[],mappings:"AAsgBA,iCAKC,cAAA,CACA,WAAA,CALA,mCACC,cAAA,CACA,UAAA,CAMF,oGAEC,qCAAA,CAED,+BACC,eAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* override needed to make menu wider */\n#updatenotification .popovermenu {\n\tp {\n\t\tmargin-top: 5px;\n\t\twidth: 100%;\n\t}\n\tmargin-top: 5px;\n\twidth: 300px;\n}\n/* override needed to replace yellow hover state with a dark one */\n#updatenotification .update-menu .icon-star:hover,\n#updatenotification .update-menu .icon-star:focus {\n\tbackground-image: var(--icon-star-000);\n}\n#updatenotification .topMargin {\n\tmargin-top: 15px;\n}\n"],sourceRoot:""}]),t.Z=s}},i={};function o(n){var t=i[n];if(void 0!==t)return t.exports;var e=i[n]={id:n,loaded:!1,exports:{}};return a[n].call(e.exports,e,e.exports,o),e.loaded=!0,e.exports}o.m=a,o.amdD=function(){throw new Error("define cannot be used indirect")},o.amdO={},e=[],o.O=function(n,t,a,i){if(!t){var s=1/0;for(c=0;c<e.length;c++){t=e[c][0],a=e[c][1],i=e[c][2];for(var r=!0,l=0;l<t.length;l++)(!1&i||s>=i)&&Object.keys(o.O).every((function(n){return o.O[n](t[l])}))?t.splice(l--,1):(r=!1,i<s&&(s=i));if(r){e.splice(c--,1);var p=a();void 0!==p&&(n=p)}}return n}i=i||0;for(var c=e.length;c>0&&e[c-1][2]>i;c--)e[c]=e[c-1];e[c]=[t,a,i]},o.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return o.d(t,{a:t}),t},o.d=function(n,t){for(var e in t)o.o(t,e)&&!o.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:t[e]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),o.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},o.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},o.nmd=function(n){return n.paths=[],n.children||(n.children=[]),n},o.j=292,function(){var n={292:0};o.O.j=function(t){return 0===n[t]};var t=function(t,e){var a,i,s=e[0],r=e[1],l=e[2],p=0;if(s.some((function(t){return 0!==n[t]}))){for(a in r)o.o(r,a)&&(o.m[a]=r[a]);if(l)var c=l(o)}for(t&&t(e);p<s.length;p++)i=s[p],o.o(n,i)&&n[i]&&n[i][0](),n[i]=0;return o.O(c)},e=self.webpackChunknextcloud=self.webpackChunknextcloud||[];e.forEach(t.bind(null,0)),e.push=t.bind(null,e.push.bind(e))}();var s=o.O(void 0,[874],(function(){return o(45571)}));s=o.O(s)}(); -//# sourceMappingURL=updatenotification-updatenotification.js.map?v=1820c5876f3aea565607
\ No newline at end of file +!function(){"use strict";var e,a={26951:function(e,a,i){var o=i(20144),s=i(79753),r=i(26533),l=i.n(r),p=i(7811),c=i.n(p),d=i(34741),u=i(2649),h=i.n(u);d.VTooltip.options.defaultHtml=!1;var f={name:"UpdateNotification",components:{Multiselect:c(),PopoverMenu:l()},directives:{ClickOutside:h(),tooltip:d.VTooltip},data:function(){return{newVersionString:"",lastCheckedDate:"",isUpdateChecked:!1,webUpdaterEnabled:!0,updaterEnabled:!0,versionIsEol:!1,downloadLink:"",isNewVersionAvailable:!1,hasValidSubscription:!1,updateServerURL:"",changelogURL:"",whatsNewData:[],currentChannel:"",channels:[],notifyGroups:"",availableGroups:[],isDefaultUpdateServerURL:!0,enableChangeWatcher:!1,availableAppUpdates:[],missingAppUpdates:[],appStoreFailed:!1,appStoreDisabled:!1,isListFetched:!1,hideMissingUpdates:!1,hideAvailableUpdates:!0,openedWhatsNew:!1,openedUpdateChannelMenu:!1}},_$el:null,_$notifyGroups:null,computed:{newVersionAvailableString:function(){return t("updatenotification","A new version is available: <strong>{newVersionString}</strong>",{newVersionString:this.newVersionString})},noteDelayedStableString:function(){return t("updatenotification","Note that after a new release the update only shows up after the first minor release or later. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found. Learn more about updates and release channels at {link}").replace("{link}",'<a href="https://nextcloud.com/release-channels/">https://nextcloud.com/release-channels/</a>')},lastCheckedOnString:function(){return t("updatenotification","Checked on {lastCheckedDate}",{lastCheckedDate:this.lastCheckedDate})},statusText:function(){return this.isListFetched?this.appStoreDisabled?t("updatenotification","Please make sure your config.php does not set <samp>appstoreenabled</samp> to false."):this.appStoreFailed?t("updatenotification","Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store."):0===this.missingAppUpdates.length?t("updatenotification","<strong>All</strong> apps have a compatible version for this Nextcloud version available.",this):n("updatenotification","<strong>%n</strong> app has no compatible version for this Nextcloud version available.","<strong>%n</strong> apps have no compatible version for this Nextcloud version available.",this.missingAppUpdates.length):t("updatenotification","Checking apps for compatible versions")},whatsNew:function(){if(0===this.whatsNewData.length)return null;var n=[];for(var e in this.whatsNewData)n[e]={icon:"icon-checkmark",longtext:this.whatsNewData[e]};return this.changelogURL&&n.push({href:this.changelogURL,text:t("updatenotification","View changelog"),icon:"icon-link",target:"_blank",action:""}),n},channelList:function(){var n=[];return n.push({text:t("updatenotification","Enterprise"),longtext:t("updatenotification","For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package."),icon:"icon-star",active:"enterprise"===this.currentChannel,disabled:!this.hasValidSubscription,action:this.changeReleaseChannelToEnterprise}),n.push({text:t("updatenotification","Stable"),longtext:t("updatenotification","The most recent stable version. It is suited for regular use and will always update to the latest major version."),icon:"icon-checkmark",active:"stable"===this.currentChannel,action:this.changeReleaseChannelToStable}),n.push({text:t("updatenotification","Beta"),longtext:t("updatenotification","A pre-release version only for testing new features, not for production environments."),icon:"icon-category-customization",active:"beta"===this.currentChannel,action:this.changeReleaseChannelToBeta}),this.isNonDefaultChannel&&n.push({text:this.currentChannel,icon:"icon-rename",active:!0}),n},isNonDefaultChannel:function(){return"enterprise"!==this.currentChannel&&"stable"!==this.currentChannel&&"beta"!==this.currentChannel},localizedChannelName:function(){switch(this.currentChannel){case"enterprise":return t("updatenotification","Enterprise");case"stable":return t("updatenotification","Stable");case"beta":return t("updatenotification","Beta");default:return this.currentChannel}}},watch:{notifyGroups:function(n){if(this.enableChangeWatcher){var t=[];_.each(n,(function(n){t.push(n.value)})),OCP.AppConfig.setValue("updatenotification","notify_groups",JSON.stringify(t))}},isNewVersionAvailable:function(){this.isNewVersionAvailable&&$.ajax({url:(0,s.generateOcsUrl)("apps/updatenotification/api/v1/applist/{newVersion}",{newVersion:this.newVersion}),type:"GET",beforeSend:function(n){n.setRequestHeader("Accept","application/json")},success:function(n){this.availableAppUpdates=n.ocs.data.available,this.missingAppUpdates=n.ocs.data.missing,this.isListFetched=!0,this.appStoreFailed=!1}.bind(this),error:function(n){this.availableAppUpdates=[],this.missingAppUpdates=[],this.appStoreDisabled=n.responseJSON.ocs.data.appstore_disabled,this.isListFetched=!0,this.appStoreFailed=!0}.bind(this)})}},beforeMount:function(){var n=JSON.parse($("#updatenotification").attr("data-json"));this.newVersion=n.newVersion,this.newVersionString=n.newVersionString,this.lastCheckedDate=n.lastChecked,this.isUpdateChecked=n.isUpdateChecked,this.webUpdaterEnabled=n.webUpdaterEnabled,this.updaterEnabled=n.updaterEnabled,this.downloadLink=n.downloadLink,this.isNewVersionAvailable=n.isNewVersionAvailable,this.updateServerURL=n.updateServerURL,this.currentChannel=n.currentChannel,this.channels=n.channels,this.notifyGroups=n.notifyGroups,this.isDefaultUpdateServerURL=n.isDefaultUpdateServerURL,this.versionIsEol=n.versionIsEol,this.hasValidSubscription=n.hasValidSubscription,n.changes&&n.changes.changelogURL&&(this.changelogURL=n.changes.changelogURL),n.changes&&n.changes.whatsNew&&(n.changes.whatsNew.admin&&(this.whatsNewData=this.whatsNewData.concat(n.changes.whatsNew.admin)),this.whatsNewData=this.whatsNewData.concat(n.changes.whatsNew.regular))},mounted:function(){this._$el=$(this.$el),this._$notifyGroups=this._$el.find("#oca_updatenotification_groups_list"),this._$notifyGroups.on("change",function(){this.$emit("input")}.bind(this)),$.ajax({url:(0,s.generateOcsUrl)("cloud/groups"),dataType:"json",success:function(n){var t=[];$.each(n.ocs.data.groups,(function(n,e){t.push({value:e,label:e})})),this.availableGroups=t,this.enableChangeWatcher=!0}.bind(this)})},methods:{clickUpdaterButton:function(){$.ajax({url:(0,s.generateUrl)("/apps/updatenotification/credentials")}).success((function(n){var t=document.createElement("form");t.setAttribute("method","post"),t.setAttribute("action",(0,s.getRootUrl)()+"/updater/");var e=document.createElement("input");e.setAttribute("type","hidden"),e.setAttribute("name","updater-secret-input"),e.setAttribute("value",n),t.appendChild(e),document.body.appendChild(t),t.submit()}))},changeReleaseChannelToEnterprise:function(){this.changeReleaseChannel("enterprise")},changeReleaseChannelToStable:function(){this.changeReleaseChannel("stable")},changeReleaseChannelToBeta:function(){this.changeReleaseChannel("beta")},changeReleaseChannel:function(n){this.currentChannel=n,$.ajax({url:(0,s.generateUrl)("/apps/updatenotification/channel"),type:"POST",data:{channel:this.currentChannel},success:function(n){OC.msg.finishedAction("#channel_save_msg",n)}}),this.openedUpdateChannelMenu=!1},toggleUpdateChannelMenu:function(){this.openedUpdateChannelMenu=!this.openedUpdateChannelMenu},toggleHideMissingUpdates:function(){this.hideMissingUpdates=!this.hideMissingUpdates},toggleHideAvailableUpdates:function(){this.hideAvailableUpdates=!this.hideAvailableUpdates},toggleMenu:function(){this.openedWhatsNew=!this.openedWhatsNew},closeUpdateChannelMenu:function(){this.openedUpdateChannelMenu=!1},hideMenu:function(){this.openedWhatsNew=!1}}},A=i(93379),v=i.n(A),g=i(7795),C=i.n(g),m=i(90569),b=i.n(m),w=i(3565),k=i.n(w),y=i(19216),U=i.n(y),x=i(44589),N=i.n(x),S=i(90074),D={};D.styleTagTransform=N(),D.setAttributes=k(),D.insert=b().bind(null,"head"),D.domAPI=C(),D.insertStyleElement=U(),v()(S.Z,D),S.Z&&S.Z.locals&&S.Z.locals;var E=i(16722),M={};M.styleTagTransform=N(),M.setAttributes=k(),M.insert=b().bind(null,"head"),M.domAPI=C(),M.insertStyleElement=U(),v()(E.Z,M),E.Z&&E.Z.locals&&E.Z.locals;var L=(0,i(51900).Z)(f,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"followupsection",attrs:{id:"updatenotification"}},[e("div",{staticClass:"update"},[n.isNewVersionAvailable?[n.versionIsEol?e("p",[e("span",{staticClass:"warning"},[e("span",{staticClass:"icon icon-error-white"}),n._v("\n\t\t\t\t\t"+n._s(n.t("updatenotification","The version you are running is not maintained anymore. Please make sure to update to a supported version as soon as possible."))+"\n\t\t\t\t")])]):n._e(),n._v(" "),e("p",[e("span",{domProps:{innerHTML:n._s(n.newVersionAvailableString)}}),e("br"),n._v(" "),n.isListFetched?n._e():e("span",{staticClass:"icon icon-loading-small"}),n._v(" "),e("span",{domProps:{innerHTML:n._s(n.statusText)}})]),n._v(" "),n.missingAppUpdates.length?[e("h3",{on:{click:n.toggleHideMissingUpdates}},[n._v("\n\t\t\t\t\t"+n._s(n.t("updatenotification","Apps missing compatible version"))+"\n\t\t\t\t\t"),n.hideMissingUpdates?n._e():e("span",{staticClass:"icon icon-triangle-n"}),n._v(" "),n.hideMissingUpdates?e("span",{staticClass:"icon icon-triangle-s"}):n._e()]),n._v(" "),n.hideMissingUpdates?n._e():e("ul",{staticClass:"applist"},n._l(n.missingAppUpdates,(function(t,a){return e("li",{key:a},[e("a",{attrs:{href:"https://apps.nextcloud.com/apps/"+t.appId,title:n.t("settings","View in store")}},[n._v(n._s(t.appName)+" ↗")])])})),0)]:n._e(),n._v(" "),n.availableAppUpdates.length?[e("h3",{on:{click:n.toggleHideAvailableUpdates}},[n._v("\n\t\t\t\t\t"+n._s(n.t("updatenotification","Apps with compatible version"))+"\n\t\t\t\t\t"),n.hideAvailableUpdates?n._e():e("span",{staticClass:"icon icon-triangle-n"}),n._v(" "),n.hideAvailableUpdates?e("span",{staticClass:"icon icon-triangle-s"}):n._e()]),n._v(" "),n.hideAvailableUpdates?n._e():e("ul",{staticClass:"applist"},n._l(n.availableAppUpdates,(function(t,a){return e("li",{key:a},[e("a",{attrs:{href:"https://apps.nextcloud.com/apps/"+t.appId,title:n.t("settings","View in store")}},[n._v(n._s(t.appName)+" ↗")])])})),0)]:n._e(),n._v(" "),e("div",[n.updaterEnabled&&n.webUpdaterEnabled?e("a",{staticClass:"button primary",attrs:{href:"#"},on:{click:n.clickUpdaterButton}},[n._v(n._s(n.t("updatenotification","Open updater")))]):n._e(),n._v(" "),n.downloadLink?e("a",{staticClass:"button",class:{hidden:!n.updaterEnabled},attrs:{href:n.downloadLink}},[n._v(n._s(n.t("updatenotification","Download now")))]):n._e(),n._v(" "),n.updaterEnabled&&!n.webUpdaterEnabled?e("span",[n._v("\n\t\t\t\t\t"+n._s(n.t("updatenotification","Please use the command line updater to update."))+"\n\t\t\t\t")]):n._e(),n._v(" "),n.whatsNew?e("div",{staticClass:"whatsNew"},[e("div",{staticClass:"toggleWhatsNew"},[e("a",{directives:[{name:"click-outside",rawName:"v-click-outside",value:n.hideMenu,expression:"hideMenu"}],staticClass:"button",on:{click:n.toggleMenu}},[n._v(n._s(n.t("updatenotification","What's new?")))]),n._v(" "),e("div",{staticClass:"popovermenu",class:{"menu-center":!0,open:n.openedWhatsNew}},[e("PopoverMenu",{attrs:{menu:n.whatsNew}})],1)])]):n._e()])]:n.isUpdateChecked?[n._v("\n\t\t\t"+n._s(n.t("updatenotification","Your version is up to date."))+"\n\t\t\t"),e("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:n.lastCheckedOnString,expression:"lastCheckedOnString",modifiers:{auto:!0}}],staticClass:"icon-info svg"})]:[n._v("\n\t\t\t"+n._s(n.t("updatenotification","The update check is not yet finished. Please refresh the page."))+"\n\t\t")],n._v(" "),n.isDefaultUpdateServerURL?n._e():[e("p",{staticClass:"topMargin"},[e("em",[n._v(n._s(n.t("updatenotification","A non-default update server is in use to be checked for updates:"))+" "),e("code",[n._v(n._s(n.updateServerURL))])])])]],2),n._v(" "),e("h3",{staticClass:"update-channel-selector"},[n._v("\n\t\t"+n._s(n.t("updatenotification","Update channel:"))+"\n\t\t"),e("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:n.closeUpdateChannelMenu,expression:"closeUpdateChannelMenu"}],staticClass:"update-menu"},[e("span",{staticClass:"icon-update-menu",on:{click:n.toggleUpdateChannelMenu}},[n._v("\n\t\t\t\t"+n._s(n.localizedChannelName)+"\n\t\t\t\t"),e("span",{staticClass:"icon-triangle-s"})]),n._v(" "),e("div",{staticClass:"popovermenu menu menu-center",class:{"show-menu":n.openedUpdateChannelMenu}},[e("PopoverMenu",{attrs:{menu:n.channelList}})],1)])]),n._v(" "),e("span",{staticClass:"msg",attrs:{id:"channel_save_msg"}}),e("br"),n._v(" "),e("p",[e("em",[n._v(n._s(n.t("updatenotification","You can always update to a newer version. But you can never downgrade to a more stable version.")))]),e("br"),n._v(" "),e("em",{domProps:{innerHTML:n._s(n.noteDelayedStableString)}})]),n._v(" "),e("p",{attrs:{id:"oca_updatenotification_groups"}},[n._v("\n\t\t"+n._s(n.t("updatenotification","Notify members of the following groups about available updates:"))+"\n\t\t"),e("Multiselect",{attrs:{options:n.availableGroups,multiple:!0,label:"label","track-by":"value","tag-width":75},model:{value:n.notifyGroups,callback:function(t){n.notifyGroups=t},expression:"notifyGroups"}}),e("br"),n._v(" "),"daily"===n.currentChannel||"git"===n.currentChannel?e("em",[n._v(n._s(n.t("updatenotification","Only notifications for app updates are available.")))]):n._e(),n._v(" "),"daily"===n.currentChannel?e("em",[n._v(n._s(n.t("updatenotification","The selected update channel makes dedicated notifications for the server obsolete.")))]):n._e(),n._v(" "),"git"===n.currentChannel?e("em",[n._v(n._s(n.t("updatenotification","The selected update channel does not support updates of the server.")))]):n._e()],1)])}),[],!1,null,"2dab2e3a",null).exports;o.default.mixin({methods:{t:function(n,t,e,a,i){return OC.L10N.translate(n,t,e,a,i)},n:function(n,t,e,a,i,o){return OC.L10N.translatePlural(n,t,e,a,i,o)}}}),new o.default({el:"#updatenotification",render:function(n){return n(L)}})},90074:function(n,t,e){var a=e(94015),i=e.n(a),o=e(23645),s=e.n(o)()(i());s.push([n.id,"#updatenotification[data-v-2dab2e3a]{margin-top:-25px;margin-bottom:200px}#updatenotification div.update[data-v-2dab2e3a],#updatenotification p[data-v-2dab2e3a]:not(.inlineblock){margin-bottom:25px}#updatenotification h2.inlineblock[data-v-2dab2e3a]{margin-top:25px}#updatenotification h3[data-v-2dab2e3a]{cursor:pointer}#updatenotification h3 .icon[data-v-2dab2e3a]{cursor:pointer}#updatenotification h3[data-v-2dab2e3a]:first-of-type{margin-top:0}#updatenotification h3.update-channel-selector[data-v-2dab2e3a]{display:inline-block;cursor:inherit}#updatenotification .icon[data-v-2dab2e3a]{display:inline-block;margin-bottom:-3px}#updatenotification .icon-triangle-s[data-v-2dab2e3a],#updatenotification .icon-triangle-n[data-v-2dab2e3a]{opacity:.5}#updatenotification .whatsNew[data-v-2dab2e3a]{display:inline-block}#updatenotification .toggleWhatsNew[data-v-2dab2e3a]{position:relative}#updatenotification .popovermenu[data-v-2dab2e3a]{margin-top:5px;width:300px}#updatenotification .popovermenu p[data-v-2dab2e3a]{margin-bottom:0;width:100%}#updatenotification .applist[data-v-2dab2e3a]{margin-bottom:25px}#updatenotification .update-menu[data-v-2dab2e3a]{position:relative;cursor:pointer;margin-left:3px;display:inline-block}#updatenotification .update-menu .icon-update-menu[data-v-2dab2e3a]{cursor:inherit}#updatenotification .update-menu .icon-update-menu .icon-triangle-s[data-v-2dab2e3a]{display:inline-block;vertical-align:middle;cursor:inherit;opacity:1}#updatenotification .update-menu .popovermenu[data-v-2dab2e3a]{display:none;top:28px}#updatenotification .update-menu .popovermenu.show-menu[data-v-2dab2e3a]{display:block}","",{version:3,sources:["webpack://./apps/updatenotification/src/components/UpdateNotification.vue"],names:[],mappings:"AA4bA,qCACC,gBAAA,CACA,mBAAA,CACA,yGAEC,kBAAA,CAED,oDACC,eAAA,CAED,wCACC,cAAA,CACA,8CACC,cAAA,CAED,sDACC,YAAA,CAED,gEACC,oBAAA,CACA,cAAA,CAGF,2CACC,oBAAA,CACA,kBAAA,CAED,4GACC,UAAA,CAED,+CACC,oBAAA,CAED,qDACC,iBAAA,CAED,kDAKC,cAAA,CACA,WAAA,CALA,oDACC,eAAA,CACA,UAAA,CAKF,8CACC,kBAAA,CAGD,kDACC,iBAAA,CACA,cAAA,CACA,eAAA,CACA,oBAAA,CACA,oEACC,cAAA,CACA,qFACC,oBAAA,CACA,qBAAA,CACA,cAAA,CACA,SAAA,CAGF,+DACC,YAAA,CACA,QAAA,CACA,yEACC,aAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n#updatenotification {\n\tmargin-top: -25px;\n\tmargin-bottom: 200px;\n\tdiv.update,\n\tp:not(.inlineblock) {\n\t\tmargin-bottom: 25px;\n\t}\n\th2.inlineblock {\n\t\tmargin-top: 25px;\n\t}\n\th3 {\n\t\tcursor: pointer;\n\t\t.icon {\n\t\t\tcursor: pointer;\n\t\t}\n\t\t&:first-of-type {\n\t\t\tmargin-top: 0;\n\t\t}\n\t\t&.update-channel-selector {\n\t\t\tdisplay: inline-block;\n\t\t\tcursor: inherit;\n\t\t}\n\t}\n\t.icon {\n\t\tdisplay: inline-block;\n\t\tmargin-bottom: -3px;\n\t}\n\t.icon-triangle-s, .icon-triangle-n {\n\t\topacity: 0.5;\n\t}\n\t.whatsNew {\n\t\tdisplay: inline-block;\n\t}\n\t.toggleWhatsNew {\n\t\tposition: relative;\n\t}\n\t.popovermenu {\n\t\tp {\n\t\t\tmargin-bottom: 0;\n\t\t\twidth: 100%;\n\t\t}\n\t\tmargin-top: 5px;\n\t\twidth: 300px;\n\t}\n\t.applist {\n\t\tmargin-bottom: 25px;\n\t}\n\n\t.update-menu {\n\t\tposition: relative;\n\t\tcursor: pointer;\n\t\tmargin-left: 3px;\n\t\tdisplay: inline-block;\n\t\t.icon-update-menu {\n\t\t\tcursor: inherit;\n\t\t\t.icon-triangle-s {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tvertical-align: middle;\n\t\t\t\tcursor: inherit;\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t\t.popovermenu {\n\t\t\tdisplay: none;\n\t\t\ttop: 28px;\n\t\t\t&.show-menu {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),t.Z=s},16722:function(n,t,e){var a=e(94015),i=e.n(a),o=e(23645),s=e.n(o)()(i());s.push([n.id,"#updatenotification .popovermenu{margin-top:5px;width:300px}#updatenotification .popovermenu p{margin-top:5px;width:100%}#updatenotification .update-menu .icon-star:hover,#updatenotification .update-menu .icon-star:focus{background-image:var(--icon-star-000)}#updatenotification .topMargin{margin-top:15px}","",{version:3,sources:["webpack://./apps/updatenotification/src/components/UpdateNotification.vue"],names:[],mappings:"AAsgBA,iCAKC,cAAA,CACA,WAAA,CALA,mCACC,cAAA,CACA,UAAA,CAMF,oGAEC,qCAAA,CAED,+BACC,eAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* override needed to make menu wider */\n#updatenotification .popovermenu {\n\tp {\n\t\tmargin-top: 5px;\n\t\twidth: 100%;\n\t}\n\tmargin-top: 5px;\n\twidth: 300px;\n}\n/* override needed to replace yellow hover state with a dark one */\n#updatenotification .update-menu .icon-star:hover,\n#updatenotification .update-menu .icon-star:focus {\n\tbackground-image: var(--icon-star-000);\n}\n#updatenotification .topMargin {\n\tmargin-top: 15px;\n}\n"],sourceRoot:""}]),t.Z=s}},i={};function o(n){var t=i[n];if(void 0!==t)return t.exports;var e=i[n]={id:n,loaded:!1,exports:{}};return a[n].call(e.exports,e,e.exports,o),e.loaded=!0,e.exports}o.m=a,o.amdD=function(){throw new Error("define cannot be used indirect")},o.amdO={},e=[],o.O=function(n,t,a,i){if(!t){var s=1/0;for(c=0;c<e.length;c++){t=e[c][0],a=e[c][1],i=e[c][2];for(var r=!0,l=0;l<t.length;l++)(!1&i||s>=i)&&Object.keys(o.O).every((function(n){return o.O[n](t[l])}))?t.splice(l--,1):(r=!1,i<s&&(s=i));if(r){e.splice(c--,1);var p=a();void 0!==p&&(n=p)}}return n}i=i||0;for(var c=e.length;c>0&&e[c-1][2]>i;c--)e[c]=e[c-1];e[c]=[t,a,i]},o.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return o.d(t,{a:t}),t},o.d=function(n,t){for(var e in t)o.o(t,e)&&!o.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:t[e]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),o.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},o.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},o.nmd=function(n){return n.paths=[],n.children||(n.children=[]),n},o.j=292,function(){var n={292:0};o.O.j=function(t){return 0===n[t]};var t=function(t,e){var a,i,s=e[0],r=e[1],l=e[2],p=0;if(s.some((function(t){return 0!==n[t]}))){for(a in r)o.o(r,a)&&(o.m[a]=r[a]);if(l)var c=l(o)}for(t&&t(e);p<s.length;p++)i=s[p],o.o(n,i)&&n[i]&&n[i][0](),n[i]=0;return o.O(c)},e=self.webpackChunknextcloud=self.webpackChunknextcloud||[];e.forEach(t.bind(null,0)),e.push=t.bind(null,e.push.bind(e))}();var s=o.O(void 0,[874],(function(){return o(26951)}));s=o.O(s)}(); +//# sourceMappingURL=updatenotification-updatenotification.js.map?v=81a255a2d5b5168b0d12
\ No newline at end of file diff --git a/dist/updatenotification-updatenotification.js.map b/dist/updatenotification-updatenotification.js.map index 02132e5c170..f15148d3a49 100644 --- a/dist/updatenotification-updatenotification.js.map +++ b/dist/updatenotification-updatenotification.js.map @@ -1 +1 @@ -{"version":3,"file":"updatenotification-updatenotification.js?v=1820c5876f3aea565607","mappings":";6BAAIA,0HCwHJ,EAAAC,SAAA,uBAEA,IC1H+L,ED0H/L,CACA,0BACA,YACA,gBACA,iBAEA,YACA,iBACA,oBAEA,KAVA,WAWA,OACA,oBACA,mBACA,mBACA,qBACA,kBACA,gBACA,gBACA,yBACA,wBACA,mBACA,gBACA,gBACA,kBACA,YACA,gBACA,mBACA,4BACA,uBAEA,uBACA,qBACA,kBACA,oBACA,iBACA,sBACA,wBACA,kBACA,6BAIA,UACA,oBAEA,UACA,0BADA,WAEA,iGACA,0CAIA,wBAPA,WAQA,uSACA,mHAGA,oBAZA,WAaA,8DACA,wCAIA,WAlBA,WAmBA,0BAIA,sBACA,+GAGA,oBACA,wNAGA,kCACA,wHACA,0OAbA,iEAgBA,SApCA,WAqCA,gCACA,YAEA,SACA,+BACA,2DAWA,OATA,mBACA,QACA,uBACA,8CACA,iBACA,gBACA,YAGA,GAGA,YAxDA,WAyDA,SAmCA,OAjCA,QACA,0CACA,yXACA,iBACA,0CACA,oCACA,+CAGA,QACA,sCACA,oJACA,sBACA,sCACA,2CAGA,QACA,oCACA,yHACA,mCACA,oCACA,yCAGA,0BACA,QACA,yBACA,mBACA,YAIA,GAGA,oBA/FA,WAgGA,wGAGA,qBAnGA,WAoGA,4BACA,iBACA,4CACA,aACA,wCACA,WACA,sCACA,QACA,8BAKA,OACA,aADA,SACA,GACA,6BAIA,SACA,sBACA,mBAGA,iFAEA,sBAbA,WAcA,4BAIA,QACA,6GACA,WACA,WAHA,SAGA,GACA,iDAEA,oBACA,8CACA,0CACA,sBACA,wBACA,WACA,kBACA,4BACA,0BACA,gEACA,sBACA,wBACA,eAIA,YAvMA,WAyMA,6DAEA,6BACA,yCACA,mCACA,uCACA,2CACA,qCACA,iCACA,mDACA,uCACA,qCACA,yBACA,iCACA,yDACA,iCACA,iDACA,oCACA,0CAEA,gCACA,2BACA,sEAEA,yEAGA,QApOA,WAqOA,sBACA,0EACA,2CACA,qBACA,YAEA,QACA,yCACA,gBACA,oBACA,SACA,wCACA,6BAGA,uBACA,6BACA,cAIA,SAIA,mBAJA,WAKA,QAC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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/updatenotification/src/components/UpdateNotification.vue","webpack:///nextcloud/apps/updatenotification/src/components/UpdateNotification.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/updatenotification/src/components/UpdateNotification.vue?ddc4","webpack://nextcloud/./apps/updatenotification/src/components/UpdateNotification.vue?fbe8","webpack://nextcloud/./apps/updatenotification/src/components/UpdateNotification.vue?1fb0","webpack:///nextcloud/apps/updatenotification/src/components/UpdateNotification.vue?vue&type=template&id=7a4f5dee&scoped=true&","webpack:///nextcloud/apps/updatenotification/src/init.js","webpack:///nextcloud/apps/updatenotification/src/components/UpdateNotification.vue?vue&type=style&index=0&id=7a4f5dee&lang=scss&scoped=true&","webpack:///nextcloud/apps/updatenotification/src/components/UpdateNotification.vue?vue&type=style&index=1&lang=scss&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","<template>\n\t<div id=\"updatenotification\" class=\"followupsection\">\n\t\t<div class=\"update\">\n\t\t\t<template v-if=\"isNewVersionAvailable\">\n\t\t\t\t<p v-if=\"versionIsEol\">\n\t\t\t\t\t<span class=\"warning\">\n\t\t\t\t\t\t<span class=\"icon icon-error-white\" />\n\t\t\t\t\t\t{{ t('updatenotification', 'The version you are running is not maintained anymore. Please make sure to update to a supported version as soon as possible.') }}\n\t\t\t\t\t</span>\n\t\t\t\t</p>\n\n\t\t\t\t<p>\n\t\t\t\t\t<span v-html=\"newVersionAvailableString\" /><br>\n\t\t\t\t\t<span v-if=\"!isListFetched\" class=\"icon icon-loading-small\" />\n\t\t\t\t\t<span v-html=\"statusText\" />\n\t\t\t\t</p>\n\n\t\t\t\t<template v-if=\"missingAppUpdates.length\">\n\t\t\t\t\t<h3 @click=\"toggleHideMissingUpdates\">\n\t\t\t\t\t\t{{ t('updatenotification', 'Apps missing compatible version') }}\n\t\t\t\t\t\t<span v-if=\"!hideMissingUpdates\" class=\"icon icon-triangle-n\" />\n\t\t\t\t\t\t<span v-if=\"hideMissingUpdates\" class=\"icon icon-triangle-s\" />\n\t\t\t\t\t</h3>\n\t\t\t\t\t<ul v-if=\"!hideMissingUpdates\" class=\"applist\">\n\t\t\t\t\t\t<li v-for=\"(app, index) in missingAppUpdates\" :key=\"index\">\n\t\t\t\t\t\t\t<a :href=\"'https://apps.nextcloud.com/apps/' + app.appId\" :title=\"t('settings', 'View in store')\">{{ app.appName }} ↗</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</template>\n\n\t\t\t\t<template v-if=\"availableAppUpdates.length\">\n\t\t\t\t\t<h3 @click=\"toggleHideAvailableUpdates\">\n\t\t\t\t\t\t{{ t('updatenotification', 'Apps with compatible version') }}\n\t\t\t\t\t\t<span v-if=\"!hideAvailableUpdates\" class=\"icon icon-triangle-n\" />\n\t\t\t\t\t\t<span v-if=\"hideAvailableUpdates\" class=\"icon icon-triangle-s\" />\n\t\t\t\t\t</h3>\n\t\t\t\t\t<ul v-if=\"!hideAvailableUpdates\" class=\"applist\">\n\t\t\t\t\t\t<li v-for=\"(app, index) in availableAppUpdates\" :key=\"index\">\n\t\t\t\t\t\t\t<a :href=\"'https://apps.nextcloud.com/apps/' + app.appId\" :title=\"t('settings', 'View in store')\">{{ app.appName }} ↗</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</template>\n\n\t\t\t\t<div>\n\t\t\t\t\t<a v-if=\"updaterEnabled && webUpdaterEnabled\"\n\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\tclass=\"button primary\"\n\t\t\t\t\t\t@click=\"clickUpdaterButton\">{{ t('updatenotification', 'Open updater') }}</a>\n\t\t\t\t\t<a v-if=\"downloadLink\"\n\t\t\t\t\t\t:href=\"downloadLink\"\n\t\t\t\t\t\tclass=\"button\"\n\t\t\t\t\t\t:class=\"{ hidden: !updaterEnabled }\">{{ t('updatenotification', 'Download now') }}</a>\n\t\t\t\t\t<span v-if=\"updaterEnabled && !webUpdaterEnabled\">\n\t\t\t\t\t\t{{ t('updatenotification', 'Please use the command line updater to update.') }}\n\t\t\t\t\t</span>\n\t\t\t\t\t<div v-if=\"whatsNew\" class=\"whatsNew\">\n\t\t\t\t\t\t<div class=\"toggleWhatsNew\">\n\t\t\t\t\t\t\t<a v-click-outside=\"hideMenu\" class=\"button\" @click=\"toggleMenu\">{{ t('updatenotification', 'What\\'s new?') }}</a>\n\t\t\t\t\t\t\t<div class=\"popovermenu\" :class=\"{ 'menu-center': true, open: openedWhatsNew }\">\n\t\t\t\t\t\t\t\t<PopoverMenu :menu=\"whatsNew\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<template v-else-if=\"!isUpdateChecked\">\n\t\t\t\t{{ t('updatenotification', 'The update check is not yet finished. Please refresh the page.') }}\n\t\t\t</template>\n\t\t\t<template v-else>\n\t\t\t\t{{ t('updatenotification', 'Your version is up to date.') }}\n\t\t\t\t<span v-tooltip.auto=\"lastCheckedOnString\" class=\"icon-info svg\" />\n\t\t\t</template>\n\n\t\t\t<template v-if=\"!isDefaultUpdateServerURL\">\n\t\t\t\t<p class=\"topMargin\">\n\t\t\t\t\t<em>{{ t('updatenotification', 'A non-default update server is in use to be checked for updates:') }} <code>{{ updateServerURL }}</code></em>\n\t\t\t\t</p>\n\t\t\t</template>\n\t\t</div>\n\n\t\t<h3 class=\"update-channel-selector\">\n\t\t\t{{ t('updatenotification', 'Update channel:') }}\n\t\t\t<div v-click-outside=\"closeUpdateChannelMenu\" class=\"update-menu\">\n\t\t\t\t<span class=\"icon-update-menu\" @click=\"toggleUpdateChannelMenu\">\n\t\t\t\t\t{{ localizedChannelName }}\n\t\t\t\t\t<span class=\"icon-triangle-s\" />\n\t\t\t\t</span>\n\t\t\t\t<div class=\"popovermenu menu menu-center\" :class=\"{ 'show-menu': openedUpdateChannelMenu}\">\n\t\t\t\t\t<PopoverMenu :menu=\"channelList\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</h3>\n\t\t<span id=\"channel_save_msg\" class=\"msg\" /><br>\n\t\t<p>\n\t\t\t<em>{{ t('updatenotification', 'You can always update to a newer version. But you can never downgrade to a more stable version.') }}</em><br>\n\t\t\t<em v-html=\"noteDelayedStableString\" />\n\t\t</p>\n\n\t\t<p id=\"oca_updatenotification_groups\">\n\t\t\t{{ t('updatenotification', 'Notify members of the following groups about available updates:') }}\n\t\t\t<Multiselect v-model=\"notifyGroups\"\n\t\t\t\t:options=\"availableGroups\"\n\t\t\t\t:multiple=\"true\"\n\t\t\t\tlabel=\"label\"\n\t\t\t\ttrack-by=\"value\"\n\t\t\t\t:tag-width=\"75\" /><br>\n\t\t\t<em v-if=\"currentChannel === 'daily' || currentChannel === 'git'\">{{ t('updatenotification', 'Only notifications for app updates are available.') }}</em>\n\t\t\t<em v-if=\"currentChannel === 'daily'\">{{ t('updatenotification', 'The selected update channel makes dedicated notifications for the server obsolete.') }}</em>\n\t\t\t<em v-if=\"currentChannel === 'git'\">{{ t('updatenotification', 'The selected update channel does not support updates of the server.') }}</em>\n\t\t</p>\n\t</div>\n</template>\n\n<script>\nimport { generateUrl, getRootUrl, generateOcsUrl } from '@nextcloud/router'\nimport PopoverMenu from '@nextcloud/vue/dist/Components/PopoverMenu'\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport { VTooltip } from 'v-tooltip'\nimport ClickOutside from 'vue-click-outside'\n\nVTooltip.options.defaultHtml = false\n\nexport default {\n\tname: 'UpdateNotification',\n\tcomponents: {\n\t\tMultiselect,\n\t\tPopoverMenu,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t\ttooltip: VTooltip,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tnewVersionString: '',\n\t\t\tlastCheckedDate: '',\n\t\t\tisUpdateChecked: false,\n\t\t\twebUpdaterEnabled: true,\n\t\t\tupdaterEnabled: true,\n\t\t\tversionIsEol: false,\n\t\t\tdownloadLink: '',\n\t\t\tisNewVersionAvailable: false,\n\t\t\thasValidSubscription: false,\n\t\t\tupdateServerURL: '',\n\t\t\tchangelogURL: '',\n\t\t\twhatsNewData: [],\n\t\t\tcurrentChannel: '',\n\t\t\tchannels: [],\n\t\t\tnotifyGroups: '',\n\t\t\tavailableGroups: [],\n\t\t\tisDefaultUpdateServerURL: true,\n\t\t\tenableChangeWatcher: false,\n\n\t\t\tavailableAppUpdates: [],\n\t\t\tmissingAppUpdates: [],\n\t\t\tappStoreFailed: false,\n\t\t\tappStoreDisabled: false,\n\t\t\tisListFetched: false,\n\t\t\thideMissingUpdates: false,\n\t\t\thideAvailableUpdates: true,\n\t\t\topenedWhatsNew: false,\n\t\t\topenedUpdateChannelMenu: false,\n\t\t}\n\t},\n\n\t_$el: null,\n\t_$notifyGroups: null,\n\n\tcomputed: {\n\t\tnewVersionAvailableString() {\n\t\t\treturn t('updatenotification', 'A new version is available: <strong>{newVersionString}</strong>', {\n\t\t\t\tnewVersionString: this.newVersionString,\n\t\t\t})\n\t\t},\n\n\t\tnoteDelayedStableString() {\n\t\t\treturn t('updatenotification', 'Note that after a new release the update only shows up after the first minor release or later. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found. Learn more about updates and release channels at {link}')\n\t\t\t\t.replace('{link}', '<a href=\"https://nextcloud.com/release-channels/\">https://nextcloud.com/release-channels/</a>')\n\t\t},\n\n\t\tlastCheckedOnString() {\n\t\t\treturn t('updatenotification', 'Checked on {lastCheckedDate}', {\n\t\t\t\tlastCheckedDate: this.lastCheckedDate,\n\t\t\t})\n\t\t},\n\n\t\tstatusText() {\n\t\t\tif (!this.isListFetched) {\n\t\t\t\treturn t('updatenotification', 'Checking apps for compatible versions')\n\t\t\t}\n\n\t\t\tif (this.appStoreDisabled) {\n\t\t\t\treturn t('updatenotification', 'Please make sure your config.php does not set <samp>appstoreenabled</samp> to false.')\n\t\t\t}\n\n\t\t\tif (this.appStoreFailed) {\n\t\t\t\treturn t('updatenotification', 'Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store.')\n\t\t\t}\n\n\t\t\treturn this.missingAppUpdates.length === 0\n\t\t\t\t? t('updatenotification', '<strong>All</strong> apps have a compatible version for this Nextcloud version available', this)\n\t\t\t\t: n('updatenotification', '<strong>%n</strong> app has no compatible version for this Nextcloud version available', '<strong>%n</strong> apps have no compatible version for this Nextcloud version available', this.missingAppUpdates.length)\n\t\t},\n\n\t\twhatsNew() {\n\t\t\tif (this.whatsNewData.length === 0) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst whatsNew = []\n\t\t\tfor (const i in this.whatsNewData) {\n\t\t\t\twhatsNew[i] = { icon: 'icon-checkmark', longtext: this.whatsNewData[i] }\n\t\t\t}\n\t\t\tif (this.changelogURL) {\n\t\t\t\twhatsNew.push({\n\t\t\t\t\thref: this.changelogURL,\n\t\t\t\t\ttext: t('updatenotification', 'View changelog'),\n\t\t\t\t\ticon: 'icon-link',\n\t\t\t\t\ttarget: '_blank',\n\t\t\t\t\taction: '',\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn whatsNew\n\t\t},\n\n\t\tchannelList() {\n\t\t\tconst channelList = []\n\n\t\t\tchannelList.push({\n\t\t\t\ttext: t('updatenotification', 'Enterprise'),\n\t\t\t\tlongtext: t('updatenotification', 'For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package.'),\n\t\t\t\ticon: 'icon-star',\n\t\t\t\tactive: this.currentChannel === 'enterprise',\n\t\t\t\tdisabled: !this.hasValidSubscription,\n\t\t\t\taction: this.changeReleaseChannelToEnterprise,\n\t\t\t})\n\n\t\t\tchannelList.push({\n\t\t\t\ttext: t('updatenotification', 'Stable'),\n\t\t\t\tlongtext: t('updatenotification', 'The most recent stable version. It is suited for regular use and will always update to the latest major version.'),\n\t\t\t\ticon: 'icon-checkmark',\n\t\t\t\tactive: this.currentChannel === 'stable',\n\t\t\t\taction: this.changeReleaseChannelToStable,\n\t\t\t})\n\n\t\t\tchannelList.push({\n\t\t\t\ttext: t('updatenotification', 'Beta'),\n\t\t\t\tlongtext: t('updatenotification', 'A pre-release version only for testing new features, not for production environments.'),\n\t\t\t\ticon: 'icon-category-customization',\n\t\t\t\tactive: this.currentChannel === 'beta',\n\t\t\t\taction: this.changeReleaseChannelToBeta,\n\t\t\t})\n\n\t\t\tif (this.isNonDefaultChannel) {\n\t\t\t\tchannelList.push({\n\t\t\t\t\ttext: this.currentChannel,\n\t\t\t\t\ticon: 'icon-rename',\n\t\t\t\t\tactive: true,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn channelList\n\t\t},\n\n\t\tisNonDefaultChannel() {\n\t\t\treturn this.currentChannel !== 'enterprise' && this.currentChannel !== 'stable' && this.currentChannel !== 'beta'\n\t\t},\n\n\t\tlocalizedChannelName() {\n\t\t\tswitch (this.currentChannel) {\n\t\t\tcase 'enterprise':\n\t\t\t\treturn t('updatenotification', 'Enterprise')\n\t\t\tcase 'stable':\n\t\t\t\treturn t('updatenotification', 'Stable')\n\t\t\tcase 'beta':\n\t\t\t\treturn t('updatenotification', 'Beta')\n\t\t\tdefault:\n\t\t\t\treturn this.currentChannel\n\t\t\t}\n\t\t},\n\t},\n\n\twatch: {\n\t\tnotifyGroups(selectedOptions) {\n\t\t\tif (!this.enableChangeWatcher) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst selectedGroups = []\n\t\t\t_.each(selectedOptions, function(group) {\n\t\t\t\tselectedGroups.push(group.value)\n\t\t\t})\n\n\t\t\tOCP.AppConfig.setValue('updatenotification', 'notify_groups', JSON.stringify(selectedGroups))\n\t\t},\n\t\tisNewVersionAvailable() {\n\t\t\tif (!this.isNewVersionAvailable) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t$.ajax({\n\t\t\t\turl: generateOcsUrl('apps/updatenotification/api/v1/applist/{newVersion}', { newVersion: this.newVersion }),\n\t\t\t\ttype: 'GET',\n\t\t\t\tbeforeSend(request) {\n\t\t\t\t\trequest.setRequestHeader('Accept', 'application/json')\n\t\t\t\t},\n\t\t\t\tsuccess: function(response) {\n\t\t\t\t\tthis.availableAppUpdates = response.ocs.data.available\n\t\t\t\t\tthis.missingAppUpdates = response.ocs.data.missing\n\t\t\t\t\tthis.isListFetched = true\n\t\t\t\t\tthis.appStoreFailed = false\n\t\t\t\t}.bind(this),\n\t\t\t\terror: function(xhr) {\n\t\t\t\t\tthis.availableAppUpdates = []\n\t\t\t\t\tthis.missingAppUpdates = []\n\t\t\t\t\tthis.appStoreDisabled = xhr.responseJSON.ocs.data.appstore_disabled\n\t\t\t\t\tthis.isListFetched = true\n\t\t\t\t\tthis.appStoreFailed = true\n\t\t\t\t}.bind(this),\n\t\t\t})\n\t\t},\n\t},\n\tbeforeMount() {\n\t\t// Parse server data\n\t\tconst data = JSON.parse($('#updatenotification').attr('data-json'))\n\n\t\tthis.newVersion = data.newVersion\n\t\tthis.newVersionString = data.newVersionString\n\t\tthis.lastCheckedDate = data.lastChecked\n\t\tthis.isUpdateChecked = data.isUpdateChecked\n\t\tthis.webUpdaterEnabled = data.webUpdaterEnabled\n\t\tthis.updaterEnabled = data.updaterEnabled\n\t\tthis.downloadLink = data.downloadLink\n\t\tthis.isNewVersionAvailable = data.isNewVersionAvailable\n\t\tthis.updateServerURL = data.updateServerURL\n\t\tthis.currentChannel = data.currentChannel\n\t\tthis.channels = data.channels\n\t\tthis.notifyGroups = data.notifyGroups\n\t\tthis.isDefaultUpdateServerURL = data.isDefaultUpdateServerURL\n\t\tthis.versionIsEol = data.versionIsEol\n\t\tthis.hasValidSubscription = data.hasValidSubscription\n\t\tif (data.changes && data.changes.changelogURL) {\n\t\t\tthis.changelogURL = data.changes.changelogURL\n\t\t}\n\t\tif (data.changes && data.changes.whatsNew) {\n\t\t\tif (data.changes.whatsNew.admin) {\n\t\t\t\tthis.whatsNewData = this.whatsNewData.concat(data.changes.whatsNew.admin)\n\t\t\t}\n\t\t\tthis.whatsNewData = this.whatsNewData.concat(data.changes.whatsNew.regular)\n\t\t}\n\t},\n\tmounted() {\n\t\tthis._$el = $(this.$el)\n\t\tthis._$notifyGroups = this._$el.find('#oca_updatenotification_groups_list')\n\t\tthis._$notifyGroups.on('change', function() {\n\t\t\tthis.$emit('input')\n\t\t}.bind(this))\n\n\t\t$.ajax({\n\t\t\turl: generateOcsUrl('cloud/groups'),\n\t\t\tdataType: 'json',\n\t\t\tsuccess: function(data) {\n\t\t\t\tconst results = []\n\t\t\t\t$.each(data.ocs.data.groups, function(i, group) {\n\t\t\t\t\tresults.push({ value: group, label: group })\n\t\t\t\t})\n\n\t\t\t\tthis.availableGroups = results\n\t\t\t\tthis.enableChangeWatcher = true\n\t\t\t}.bind(this),\n\t\t})\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Creates a new authentication token and loads the updater URL\n\t\t */\n\t\tclickUpdaterButton() {\n\t\t\t$.ajax({\n\t\t\t\turl: generateUrl('/apps/updatenotification/credentials'),\n\t\t\t}).success(function(token) {\n\t\t\t\t// create a form to send a proper post request to the updater\n\t\t\t\tconst form = document.createElement('form')\n\t\t\t\tform.setAttribute('method', 'post')\n\t\t\t\tform.setAttribute('action', getRootUrl() + '/updater/')\n\n\t\t\t\tconst hiddenField = document.createElement('input')\n\t\t\t\thiddenField.setAttribute('type', 'hidden')\n\t\t\t\thiddenField.setAttribute('name', 'updater-secret-input')\n\t\t\t\thiddenField.setAttribute('value', token)\n\n\t\t\t\tform.appendChild(hiddenField)\n\n\t\t\t\tdocument.body.appendChild(form)\n\t\t\t\tform.submit()\n\t\t\t})\n\t\t},\n\t\tchangeReleaseChannelToEnterprise() {\n\t\t\tthis.changeReleaseChannel('enterprise')\n\t\t},\n\t\tchangeReleaseChannelToStable() {\n\t\t\tthis.changeReleaseChannel('stable')\n\t\t},\n\t\tchangeReleaseChannelToBeta() {\n\t\t\tthis.changeReleaseChannel('beta')\n\t\t},\n\t\tchangeReleaseChannel(channel) {\n\t\t\tthis.currentChannel = channel\n\n\t\t\t$.ajax({\n\t\t\t\turl: generateUrl('/apps/updatenotification/channel'),\n\t\t\t\ttype: 'POST',\n\t\t\t\tdata: {\n\t\t\t\t\tchannel: this.currentChannel,\n\t\t\t\t},\n\t\t\t\tsuccess(data) {\n\t\t\t\t\tOC.msg.finishedAction('#channel_save_msg', data)\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tthis.openedUpdateChannelMenu = false\n\t\t},\n\t\ttoggleUpdateChannelMenu() {\n\t\t\tthis.openedUpdateChannelMenu = !this.openedUpdateChannelMenu\n\t\t},\n\t\ttoggleHideMissingUpdates() {\n\t\t\tthis.hideMissingUpdates = !this.hideMissingUpdates\n\t\t},\n\t\ttoggleHideAvailableUpdates() {\n\t\t\tthis.hideAvailableUpdates = !this.hideAvailableUpdates\n\t\t},\n\t\ttoggleMenu() {\n\t\t\tthis.openedWhatsNew = !this.openedWhatsNew\n\t\t},\n\t\tcloseUpdateChannelMenu() {\n\t\t\tthis.openedUpdateChannelMenu = false\n\t\t},\n\t\thideMenu() {\n\t\t\tthis.openedWhatsNew = false\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t#updatenotification {\n\t\tmargin-top: -25px;\n\t\tmargin-bottom: 200px;\n\t\tdiv.update,\n\t\tp:not(.inlineblock) {\n\t\t\tmargin-bottom: 25px;\n\t\t}\n\t\th2.inlineblock {\n\t\t\tmargin-top: 25px;\n\t\t}\n\t\th3 {\n\t\t\tcursor: pointer;\n\t\t\t.icon {\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t\t&:first-of-type {\n\t\t\t\tmargin-top: 0;\n\t\t\t}\n\t\t\t&.update-channel-selector {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tcursor: inherit;\n\t\t\t}\n\t\t}\n\t\t.icon {\n\t\t\tdisplay: inline-block;\n\t\t\tmargin-bottom: -3px;\n\t\t}\n\t\t.icon-triangle-s, .icon-triangle-n {\n\t\t\topacity: 0.5;\n\t\t}\n\t\t.whatsNew {\n\t\t\tdisplay: inline-block;\n\t\t}\n\t\t.toggleWhatsNew {\n\t\t\tposition: relative;\n\t\t}\n\t\t.popovermenu {\n\t\t\tp {\n\t\t\t\tmargin-bottom: 0;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\tmargin-top: 5px;\n\t\t\twidth: 300px;\n\t\t}\n\t\t.applist {\n\t\t\tmargin-bottom: 25px;\n\t\t}\n\n\t\t.update-menu {\n\t\t\tposition: relative;\n\t\t\tcursor: pointer;\n\t\t\tmargin-left: 3px;\n\t\t\tdisplay: inline-block;\n\t\t\t.icon-update-menu {\n\t\t\t\tcursor: inherit;\n\t\t\t\t.icon-triangle-s {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\tcursor: inherit;\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.popovermenu {\n\t\t\t\tdisplay: none;\n\t\t\t\ttop: 28px;\n\t\t\t\t&.show-menu {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n</style>\n<style lang=\"scss\">\n\t/* override needed to make menu wider */\n\t#updatenotification .popovermenu {\n\t\tp {\n\t\t\tmargin-top: 5px;\n\t\t\twidth: 100%;\n\t\t}\n\t\tmargin-top: 5px;\n\t\twidth: 300px;\n\t}\n\t/* override needed to replace yellow hover state with a dark one */\n\t#updatenotification .update-menu .icon-star:hover,\n\t#updatenotification .update-menu .icon-star:focus {\n\t\tbackground-image: var(--icon-star-000);\n\t}\n\t#updatenotification .topMargin {\n\t\tmargin-top: 15px;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateNotification.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateNotification.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateNotification.vue?vue&type=style&index=0&id=7a4f5dee&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateNotification.vue?vue&type=style&index=0&id=7a4f5dee&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateNotification.vue?vue&type=style&index=1&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateNotification.vue?vue&type=style&index=1&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UpdateNotification.vue?vue&type=template&id=7a4f5dee&scoped=true&\"\nimport script from \"./UpdateNotification.vue?vue&type=script&lang=js&\"\nexport * from \"./UpdateNotification.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UpdateNotification.vue?vue&type=style&index=0&id=7a4f5dee&lang=scss&scoped=true&\"\nimport style1 from \"./UpdateNotification.vue?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7a4f5dee\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"followupsection\",attrs:{\"id\":\"updatenotification\"}},[_c('div',{staticClass:\"update\"},[(_vm.isNewVersionAvailable)?[(_vm.versionIsEol)?_c('p',[_c('span',{staticClass:\"warning\"},[_c('span',{staticClass:\"icon icon-error-white\"}),_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('updatenotification', 'The version you are running is not maintained anymore. Please make sure to update to a supported version as soon as possible.'))+\"\\n\\t\\t\\t\\t\")])]):_vm._e(),_vm._v(\" \"),_c('p',[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.newVersionAvailableString)}}),_c('br'),_vm._v(\" \"),(!_vm.isListFetched)?_c('span',{staticClass:\"icon icon-loading-small\"}):_vm._e(),_vm._v(\" \"),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.statusText)}})]),_vm._v(\" \"),(_vm.missingAppUpdates.length)?[_c('h3',{on:{\"click\":_vm.toggleHideMissingUpdates}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('updatenotification', 'Apps missing compatible version'))+\"\\n\\t\\t\\t\\t\\t\"),(!_vm.hideMissingUpdates)?_c('span',{staticClass:\"icon icon-triangle-n\"}):_vm._e(),_vm._v(\" \"),(_vm.hideMissingUpdates)?_c('span',{staticClass:\"icon icon-triangle-s\"}):_vm._e()]),_vm._v(\" \"),(!_vm.hideMissingUpdates)?_c('ul',{staticClass:\"applist\"},_vm._l((_vm.missingAppUpdates),function(app,index){return _c('li',{key:index},[_c('a',{attrs:{\"href\":'https://apps.nextcloud.com/apps/' + app.appId,\"title\":_vm.t('settings', 'View in store')}},[_vm._v(_vm._s(app.appName)+\" ↗\")])])}),0):_vm._e()]:_vm._e(),_vm._v(\" \"),(_vm.availableAppUpdates.length)?[_c('h3',{on:{\"click\":_vm.toggleHideAvailableUpdates}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('updatenotification', 'Apps with compatible version'))+\"\\n\\t\\t\\t\\t\\t\"),(!_vm.hideAvailableUpdates)?_c('span',{staticClass:\"icon icon-triangle-n\"}):_vm._e(),_vm._v(\" \"),(_vm.hideAvailableUpdates)?_c('span',{staticClass:\"icon icon-triangle-s\"}):_vm._e()]),_vm._v(\" \"),(!_vm.hideAvailableUpdates)?_c('ul',{staticClass:\"applist\"},_vm._l((_vm.availableAppUpdates),function(app,index){return _c('li',{key:index},[_c('a',{attrs:{\"href\":'https://apps.nextcloud.com/apps/' + app.appId,\"title\":_vm.t('settings', 'View in store')}},[_vm._v(_vm._s(app.appName)+\" ↗\")])])}),0):_vm._e()]:_vm._e(),_vm._v(\" \"),_c('div',[(_vm.updaterEnabled && _vm.webUpdaterEnabled)?_c('a',{staticClass:\"button primary\",attrs:{\"href\":\"#\"},on:{\"click\":_vm.clickUpdaterButton}},[_vm._v(_vm._s(_vm.t('updatenotification', 'Open updater')))]):_vm._e(),_vm._v(\" \"),(_vm.downloadLink)?_c('a',{staticClass:\"button\",class:{ hidden: !_vm.updaterEnabled },attrs:{\"href\":_vm.downloadLink}},[_vm._v(_vm._s(_vm.t('updatenotification', 'Download now')))]):_vm._e(),_vm._v(\" \"),(_vm.updaterEnabled && !_vm.webUpdaterEnabled)?_c('span',[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('updatenotification', 'Please use the command line updater to update.'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.whatsNew)?_c('div',{staticClass:\"whatsNew\"},[_c('div',{staticClass:\"toggleWhatsNew\"},[_c('a',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideMenu),expression:\"hideMenu\"}],staticClass:\"button\",on:{\"click\":_vm.toggleMenu}},[_vm._v(_vm._s(_vm.t('updatenotification', 'What\\'s new?')))]),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu\",class:{ 'menu-center': true, open: _vm.openedWhatsNew }},[_c('PopoverMenu',{attrs:{\"menu\":_vm.whatsNew}})],1)])]):_vm._e()])]:(!_vm.isUpdateChecked)?[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('updatenotification', 'The update check is not yet finished. Please refresh the page.'))+\"\\n\\t\\t\")]:[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('updatenotification', 'Your version is up to date.'))+\"\\n\\t\\t\\t\"),_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.lastCheckedOnString),expression:\"lastCheckedOnString\",modifiers:{\"auto\":true}}],staticClass:\"icon-info svg\"})],_vm._v(\" \"),(!_vm.isDefaultUpdateServerURL)?[_c('p',{staticClass:\"topMargin\"},[_c('em',[_vm._v(_vm._s(_vm.t('updatenotification', 'A non-default update server is in use to be checked for updates:'))+\" \"),_c('code',[_vm._v(_vm._s(_vm.updateServerURL))])])])]:_vm._e()],2),_vm._v(\" \"),_c('h3',{staticClass:\"update-channel-selector\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('updatenotification', 'Update channel:'))+\"\\n\\t\\t\"),_c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.closeUpdateChannelMenu),expression:\"closeUpdateChannelMenu\"}],staticClass:\"update-menu\"},[_c('span',{staticClass:\"icon-update-menu\",on:{\"click\":_vm.toggleUpdateChannelMenu}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.localizedChannelName)+\"\\n\\t\\t\\t\\t\"),_c('span',{staticClass:\"icon-triangle-s\"})]),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu menu menu-center\",class:{ 'show-menu': _vm.openedUpdateChannelMenu}},[_c('PopoverMenu',{attrs:{\"menu\":_vm.channelList}})],1)])]),_vm._v(\" \"),_c('span',{staticClass:\"msg\",attrs:{\"id\":\"channel_save_msg\"}}),_c('br'),_vm._v(\" \"),_c('p',[_c('em',[_vm._v(_vm._s(_vm.t('updatenotification', 'You can always update to a newer version. But you can never downgrade to a more stable version.')))]),_c('br'),_vm._v(\" \"),_c('em',{domProps:{\"innerHTML\":_vm._s(_vm.noteDelayedStableString)}})]),_vm._v(\" \"),_c('p',{attrs:{\"id\":\"oca_updatenotification_groups\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('updatenotification', 'Notify members of the following groups about available updates:'))+\"\\n\\t\\t\"),_c('Multiselect',{attrs:{\"options\":_vm.availableGroups,\"multiple\":true,\"label\":\"label\",\"track-by\":\"value\",\"tag-width\":75},model:{value:(_vm.notifyGroups),callback:function ($$v) {_vm.notifyGroups=$$v},expression:\"notifyGroups\"}}),_c('br'),_vm._v(\" \"),(_vm.currentChannel === 'daily' || _vm.currentChannel === 'git')?_c('em',[_vm._v(_vm._s(_vm.t('updatenotification', 'Only notifications for app updates are available.')))]):_vm._e(),_vm._v(\" \"),(_vm.currentChannel === 'daily')?_c('em',[_vm._v(_vm._s(_vm.t('updatenotification', 'The selected update channel makes dedicated notifications for the server obsolete.')))]):_vm._e(),_vm._v(\" \"),(_vm.currentChannel === 'git')?_c('em',[_vm._v(_vm._s(_vm.t('updatenotification', 'The selected update channel does not support updates of the server.')))]):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2018 Joas Schilling <coding@schilljs.com>\n *\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Root from './components/UpdateNotification'\n\nVue.mixin({\n\tmethods: {\n\t\tt(app, text, vars, count, options) {\n\t\t\treturn OC.L10N.translate(app, text, vars, count, options)\n\t\t},\n\t\tn(app, textSingular, textPlural, count, vars, options) {\n\t\t\treturn OC.L10N.translatePlural(app, textSingular, textPlural, count, vars, options)\n\t\t},\n\t},\n})\n\n// eslint-disable-next-line no-new\nnew Vue({\n\tel: '#updatenotification',\n\trender: h => h(Root),\n})\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#updatenotification[data-v-7a4f5dee]{margin-top:-25px;margin-bottom:200px}#updatenotification div.update[data-v-7a4f5dee],#updatenotification p[data-v-7a4f5dee]:not(.inlineblock){margin-bottom:25px}#updatenotification h2.inlineblock[data-v-7a4f5dee]{margin-top:25px}#updatenotification h3[data-v-7a4f5dee]{cursor:pointer}#updatenotification h3 .icon[data-v-7a4f5dee]{cursor:pointer}#updatenotification h3[data-v-7a4f5dee]:first-of-type{margin-top:0}#updatenotification h3.update-channel-selector[data-v-7a4f5dee]{display:inline-block;cursor:inherit}#updatenotification .icon[data-v-7a4f5dee]{display:inline-block;margin-bottom:-3px}#updatenotification .icon-triangle-s[data-v-7a4f5dee],#updatenotification .icon-triangle-n[data-v-7a4f5dee]{opacity:.5}#updatenotification .whatsNew[data-v-7a4f5dee]{display:inline-block}#updatenotification .toggleWhatsNew[data-v-7a4f5dee]{position:relative}#updatenotification .popovermenu[data-v-7a4f5dee]{margin-top:5px;width:300px}#updatenotification .popovermenu p[data-v-7a4f5dee]{margin-bottom:0;width:100%}#updatenotification .applist[data-v-7a4f5dee]{margin-bottom:25px}#updatenotification .update-menu[data-v-7a4f5dee]{position:relative;cursor:pointer;margin-left:3px;display:inline-block}#updatenotification .update-menu .icon-update-menu[data-v-7a4f5dee]{cursor:inherit}#updatenotification .update-menu .icon-update-menu .icon-triangle-s[data-v-7a4f5dee]{display:inline-block;vertical-align:middle;cursor:inherit;opacity:1}#updatenotification .update-menu .popovermenu[data-v-7a4f5dee]{display:none;top:28px}#updatenotification .update-menu .popovermenu.show-menu[data-v-7a4f5dee]{display:block}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/updatenotification/src/components/UpdateNotification.vue\"],\"names\":[],\"mappings\":\"AA4bA,qCACC,gBAAA,CACA,mBAAA,CACA,yGAEC,kBAAA,CAED,oDACC,eAAA,CAED,wCACC,cAAA,CACA,8CACC,cAAA,CAED,sDACC,YAAA,CAED,gEACC,oBAAA,CACA,cAAA,CAGF,2CACC,oBAAA,CACA,kBAAA,CAED,4GACC,UAAA,CAED,+CACC,oBAAA,CAED,qDACC,iBAAA,CAED,kDAKC,cAAA,CACA,WAAA,CALA,oDACC,eAAA,CACA,UAAA,CAKF,8CACC,kBAAA,CAGD,kDACC,iBAAA,CACA,cAAA,CACA,eAAA,CACA,oBAAA,CACA,oEACC,cAAA,CACA,qFACC,oBAAA,CACA,qBAAA,CACA,cAAA,CACA,SAAA,CAGF,+DACC,YAAA,CACA,QAAA,CACA,yEACC,aAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n#updatenotification {\\n\\tmargin-top: -25px;\\n\\tmargin-bottom: 200px;\\n\\tdiv.update,\\n\\tp:not(.inlineblock) {\\n\\t\\tmargin-bottom: 25px;\\n\\t}\\n\\th2.inlineblock {\\n\\t\\tmargin-top: 25px;\\n\\t}\\n\\th3 {\\n\\t\\tcursor: pointer;\\n\\t\\t.icon {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t}\\n\\t\\t&:first-of-type {\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t}\\n\\t\\t&.update-channel-selector {\\n\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\tcursor: inherit;\\n\\t\\t}\\n\\t}\\n\\t.icon {\\n\\t\\tdisplay: inline-block;\\n\\t\\tmargin-bottom: -3px;\\n\\t}\\n\\t.icon-triangle-s, .icon-triangle-n {\\n\\t\\topacity: 0.5;\\n\\t}\\n\\t.whatsNew {\\n\\t\\tdisplay: inline-block;\\n\\t}\\n\\t.toggleWhatsNew {\\n\\t\\tposition: relative;\\n\\t}\\n\\t.popovermenu {\\n\\t\\tp {\\n\\t\\t\\tmargin-bottom: 0;\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\t\\tmargin-top: 5px;\\n\\t\\twidth: 300px;\\n\\t}\\n\\t.applist {\\n\\t\\tmargin-bottom: 25px;\\n\\t}\\n\\n\\t.update-menu {\\n\\t\\tposition: relative;\\n\\t\\tcursor: pointer;\\n\\t\\tmargin-left: 3px;\\n\\t\\tdisplay: inline-block;\\n\\t\\t.icon-update-menu {\\n\\t\\t\\tcursor: inherit;\\n\\t\\t\\t.icon-triangle-s {\\n\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t\\tvertical-align: middle;\\n\\t\\t\\t\\tcursor: inherit;\\n\\t\\t\\t\\topacity: 1;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t.popovermenu {\\n\\t\\t\\tdisplay: none;\\n\\t\\t\\ttop: 28px;\\n\\t\\t\\t&.show-menu {\\n\\t\\t\\t\\tdisplay: block;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#updatenotification .popovermenu{margin-top:5px;width:300px}#updatenotification .popovermenu p{margin-top:5px;width:100%}#updatenotification .update-menu .icon-star:hover,#updatenotification .update-menu .icon-star:focus{background-image:var(--icon-star-000)}#updatenotification .topMargin{margin-top:15px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/updatenotification/src/components/UpdateNotification.vue\"],\"names\":[],\"mappings\":\"AAsgBA,iCAKC,cAAA,CACA,WAAA,CALA,mCACC,cAAA,CACA,UAAA,CAMF,oGAEC,qCAAA,CAED,+BACC,eAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n/* override needed to make menu wider */\\n#updatenotification .popovermenu {\\n\\tp {\\n\\t\\tmargin-top: 5px;\\n\\t\\twidth: 100%;\\n\\t}\\n\\tmargin-top: 5px;\\n\\twidth: 300px;\\n}\\n/* override needed to replace yellow hover state with a dark one */\\n#updatenotification .update-menu .icon-star:hover,\\n#updatenotification .update-menu .icon-star:focus {\\n\\tbackground-image: var(--icon-star-000);\\n}\\n#updatenotification .topMargin {\\n\\tmargin-top: 15px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 292;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t292: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(45571); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","VTooltip","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","_v","_s","t","_e","domProps","newVersionAvailableString","isListFetched","statusText","missingAppUpdates","on","toggleHideMissingUpdates","hideMissingUpdates","_l","app","index","key","appId","appName","availableAppUpdates","toggleHideAvailableUpdates","hideAvailableUpdates","updaterEnabled","webUpdaterEnabled","clickUpdaterButton","class","hidden","downloadLink","directives","name","rawName","value","expression","toggleMenu","open","openedWhatsNew","whatsNew","isUpdateChecked","modifiers","isDefaultUpdateServerURL","updateServerURL","toggleUpdateChannelMenu","localizedChannelName","openedUpdateChannelMenu","channelList","noteDelayedStableString","availableGroups","model","callback","$$v","notifyGroups","currentChannel","Vue","methods","text","vars","count","OC","L10N","translate","n","textSingular","textPlural","translatePlural","el","render","h","Root","___CSS_LOADER_EXPORT___","push","module","id","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","amdD","Error","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","splice","r","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","data","moreModules","runtime","some","chunkLoadingGlobal","self","forEach","bind","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"updatenotification-updatenotification.js?v=81a255a2d5b5168b0d12","mappings":";6BAAIA,0HCwHJ,EAAAC,SAAA,uBAEA,IC1H+L,ED0H/L,CACA,0BACA,YACA,gBACA,iBAEA,YACA,iBACA,oBAEA,KAVA,WAWA,OACA,oBACA,mBACA,mBACA,qBACA,kBACA,gBACA,gBACA,yBACA,wBACA,mBACA,gBACA,gBACA,kBACA,YACA,gBACA,mBACA,4BACA,uBAEA,uBACA,qBACA,kBACA,oBACA,iBACA,sBACA,wBACA,kBACA,6BAIA,UACA,oBAEA,UACA,0BADA,WAEA,iGACA,0CAIA,wBAPA,WAQA,uSACA,mHAGA,oBAZA,WAaA,8DACA,wCAIA,WAlBA,WAmBA,0BAIA,sBACA,+GAGA,oBACA,wNAGA,kCACA,yHACA,4OAbA,iEAgBA,SApCA,WAqCA,gCACA,YAEA,SACA,+BACA,2DAWA,OATA,mBACA,QACA,uBACA,8CACA,iBACA,gBACA,YAGA,GAGA,YAxDA,WAyDA,SAmCA,OAjCA,QACA,0CACA,yXACA,iBACA,0CACA,oCACA,+CAGA,QACA,sCACA,oJACA,sBACA,sCACA,2CAGA,QACA,oCACA,yHACA,mCACA,oCACA,yCAGA,0BACA,QACA,yBACA,mBACA,YAIA,GAGA,oBA/FA,WAgGA,wGAGA,qBAnGA,WAoGA,4BACA,iBACA,4CACA,aACA,wCACA,WACA,sCACA,QACA,8BAKA,OACA,aADA,SACA,GACA,6BAIA,SACA,sBACA,mBAGA,iFAEA,sBAbA,WAcA,4BAIA,QACA,6GACA,WACA,WAHA,SAGA,GACA,iDAEA,oBACA,8CACA,0CACA,sBACA,wBACA,WACA,kBACA,4BACA,0BACA,gEACA,sBACA,wBACA,eAIA,YAvMA,WAyMA,6DAEA,6BACA,yCACA,mCACA,uCACA,2CACA,qCACA,iCACA,mDACA,uCACA,qCACA,yBACA,iCACA,yDACA,iCACA,iDACA,oCACA,0CAEA,gCACA,2BACA,sEAEA,yEAGA,QApOA,WAqOA,sBACA,0EACA,2CACA,qBACA,YAEA,QACA,yCACA,gBACA,oBACA,SACA,wCACA,6BAGA,uBACA,6BACA,cAIA,SAIA,mBAJA,WAKA,QAC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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/updatenotification/src/components/UpdateNotification.vue","webpack:///nextcloud/apps/updatenotification/src/components/UpdateNotification.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/updatenotification/src/components/UpdateNotification.vue?6a36","webpack://nextcloud/./apps/updatenotification/src/components/UpdateNotification.vue?fbe8","webpack://nextcloud/./apps/updatenotification/src/components/UpdateNotification.vue?1fb0","webpack:///nextcloud/apps/updatenotification/src/components/UpdateNotification.vue?vue&type=template&id=2dab2e3a&scoped=true&","webpack:///nextcloud/apps/updatenotification/src/init.js","webpack:///nextcloud/apps/updatenotification/src/components/UpdateNotification.vue?vue&type=style&index=0&id=2dab2e3a&lang=scss&scoped=true&","webpack:///nextcloud/apps/updatenotification/src/components/UpdateNotification.vue?vue&type=style&index=1&lang=scss&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","<template>\n\t<div id=\"updatenotification\" class=\"followupsection\">\n\t\t<div class=\"update\">\n\t\t\t<template v-if=\"isNewVersionAvailable\">\n\t\t\t\t<p v-if=\"versionIsEol\">\n\t\t\t\t\t<span class=\"warning\">\n\t\t\t\t\t\t<span class=\"icon icon-error-white\" />\n\t\t\t\t\t\t{{ t('updatenotification', 'The version you are running is not maintained anymore. Please make sure to update to a supported version as soon as possible.') }}\n\t\t\t\t\t</span>\n\t\t\t\t</p>\n\n\t\t\t\t<p>\n\t\t\t\t\t<span v-html=\"newVersionAvailableString\" /><br>\n\t\t\t\t\t<span v-if=\"!isListFetched\" class=\"icon icon-loading-small\" />\n\t\t\t\t\t<span v-html=\"statusText\" />\n\t\t\t\t</p>\n\n\t\t\t\t<template v-if=\"missingAppUpdates.length\">\n\t\t\t\t\t<h3 @click=\"toggleHideMissingUpdates\">\n\t\t\t\t\t\t{{ t('updatenotification', 'Apps missing compatible version') }}\n\t\t\t\t\t\t<span v-if=\"!hideMissingUpdates\" class=\"icon icon-triangle-n\" />\n\t\t\t\t\t\t<span v-if=\"hideMissingUpdates\" class=\"icon icon-triangle-s\" />\n\t\t\t\t\t</h3>\n\t\t\t\t\t<ul v-if=\"!hideMissingUpdates\" class=\"applist\">\n\t\t\t\t\t\t<li v-for=\"(app, index) in missingAppUpdates\" :key=\"index\">\n\t\t\t\t\t\t\t<a :href=\"'https://apps.nextcloud.com/apps/' + app.appId\" :title=\"t('settings', 'View in store')\">{{ app.appName }} ↗</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</template>\n\n\t\t\t\t<template v-if=\"availableAppUpdates.length\">\n\t\t\t\t\t<h3 @click=\"toggleHideAvailableUpdates\">\n\t\t\t\t\t\t{{ t('updatenotification', 'Apps with compatible version') }}\n\t\t\t\t\t\t<span v-if=\"!hideAvailableUpdates\" class=\"icon icon-triangle-n\" />\n\t\t\t\t\t\t<span v-if=\"hideAvailableUpdates\" class=\"icon icon-triangle-s\" />\n\t\t\t\t\t</h3>\n\t\t\t\t\t<ul v-if=\"!hideAvailableUpdates\" class=\"applist\">\n\t\t\t\t\t\t<li v-for=\"(app, index) in availableAppUpdates\" :key=\"index\">\n\t\t\t\t\t\t\t<a :href=\"'https://apps.nextcloud.com/apps/' + app.appId\" :title=\"t('settings', 'View in store')\">{{ app.appName }} ↗</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</template>\n\n\t\t\t\t<div>\n\t\t\t\t\t<a v-if=\"updaterEnabled && webUpdaterEnabled\"\n\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\tclass=\"button primary\"\n\t\t\t\t\t\t@click=\"clickUpdaterButton\">{{ t('updatenotification', 'Open updater') }}</a>\n\t\t\t\t\t<a v-if=\"downloadLink\"\n\t\t\t\t\t\t:href=\"downloadLink\"\n\t\t\t\t\t\tclass=\"button\"\n\t\t\t\t\t\t:class=\"{ hidden: !updaterEnabled }\">{{ t('updatenotification', 'Download now') }}</a>\n\t\t\t\t\t<span v-if=\"updaterEnabled && !webUpdaterEnabled\">\n\t\t\t\t\t\t{{ t('updatenotification', 'Please use the command line updater to update.') }}\n\t\t\t\t\t</span>\n\t\t\t\t\t<div v-if=\"whatsNew\" class=\"whatsNew\">\n\t\t\t\t\t\t<div class=\"toggleWhatsNew\">\n\t\t\t\t\t\t\t<a v-click-outside=\"hideMenu\" class=\"button\" @click=\"toggleMenu\">{{ t('updatenotification', 'What\\'s new?') }}</a>\n\t\t\t\t\t\t\t<div class=\"popovermenu\" :class=\"{ 'menu-center': true, open: openedWhatsNew }\">\n\t\t\t\t\t\t\t\t<PopoverMenu :menu=\"whatsNew\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<template v-else-if=\"!isUpdateChecked\">\n\t\t\t\t{{ t('updatenotification', 'The update check is not yet finished. Please refresh the page.') }}\n\t\t\t</template>\n\t\t\t<template v-else>\n\t\t\t\t{{ t('updatenotification', 'Your version is up to date.') }}\n\t\t\t\t<span v-tooltip.auto=\"lastCheckedOnString\" class=\"icon-info svg\" />\n\t\t\t</template>\n\n\t\t\t<template v-if=\"!isDefaultUpdateServerURL\">\n\t\t\t\t<p class=\"topMargin\">\n\t\t\t\t\t<em>{{ t('updatenotification', 'A non-default update server is in use to be checked for updates:') }} <code>{{ updateServerURL }}</code></em>\n\t\t\t\t</p>\n\t\t\t</template>\n\t\t</div>\n\n\t\t<h3 class=\"update-channel-selector\">\n\t\t\t{{ t('updatenotification', 'Update channel:') }}\n\t\t\t<div v-click-outside=\"closeUpdateChannelMenu\" class=\"update-menu\">\n\t\t\t\t<span class=\"icon-update-menu\" @click=\"toggleUpdateChannelMenu\">\n\t\t\t\t\t{{ localizedChannelName }}\n\t\t\t\t\t<span class=\"icon-triangle-s\" />\n\t\t\t\t</span>\n\t\t\t\t<div class=\"popovermenu menu menu-center\" :class=\"{ 'show-menu': openedUpdateChannelMenu}\">\n\t\t\t\t\t<PopoverMenu :menu=\"channelList\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</h3>\n\t\t<span id=\"channel_save_msg\" class=\"msg\" /><br>\n\t\t<p>\n\t\t\t<em>{{ t('updatenotification', 'You can always update to a newer version. But you can never downgrade to a more stable version.') }}</em><br>\n\t\t\t<em v-html=\"noteDelayedStableString\" />\n\t\t</p>\n\n\t\t<p id=\"oca_updatenotification_groups\">\n\t\t\t{{ t('updatenotification', 'Notify members of the following groups about available updates:') }}\n\t\t\t<Multiselect v-model=\"notifyGroups\"\n\t\t\t\t:options=\"availableGroups\"\n\t\t\t\t:multiple=\"true\"\n\t\t\t\tlabel=\"label\"\n\t\t\t\ttrack-by=\"value\"\n\t\t\t\t:tag-width=\"75\" /><br>\n\t\t\t<em v-if=\"currentChannel === 'daily' || currentChannel === 'git'\">{{ t('updatenotification', 'Only notifications for app updates are available.') }}</em>\n\t\t\t<em v-if=\"currentChannel === 'daily'\">{{ t('updatenotification', 'The selected update channel makes dedicated notifications for the server obsolete.') }}</em>\n\t\t\t<em v-if=\"currentChannel === 'git'\">{{ t('updatenotification', 'The selected update channel does not support updates of the server.') }}</em>\n\t\t</p>\n\t</div>\n</template>\n\n<script>\nimport { generateUrl, getRootUrl, generateOcsUrl } from '@nextcloud/router'\nimport PopoverMenu from '@nextcloud/vue/dist/Components/PopoverMenu'\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport { VTooltip } from 'v-tooltip'\nimport ClickOutside from 'vue-click-outside'\n\nVTooltip.options.defaultHtml = false\n\nexport default {\n\tname: 'UpdateNotification',\n\tcomponents: {\n\t\tMultiselect,\n\t\tPopoverMenu,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t\ttooltip: VTooltip,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tnewVersionString: '',\n\t\t\tlastCheckedDate: '',\n\t\t\tisUpdateChecked: false,\n\t\t\twebUpdaterEnabled: true,\n\t\t\tupdaterEnabled: true,\n\t\t\tversionIsEol: false,\n\t\t\tdownloadLink: '',\n\t\t\tisNewVersionAvailable: false,\n\t\t\thasValidSubscription: false,\n\t\t\tupdateServerURL: '',\n\t\t\tchangelogURL: '',\n\t\t\twhatsNewData: [],\n\t\t\tcurrentChannel: '',\n\t\t\tchannels: [],\n\t\t\tnotifyGroups: '',\n\t\t\tavailableGroups: [],\n\t\t\tisDefaultUpdateServerURL: true,\n\t\t\tenableChangeWatcher: false,\n\n\t\t\tavailableAppUpdates: [],\n\t\t\tmissingAppUpdates: [],\n\t\t\tappStoreFailed: false,\n\t\t\tappStoreDisabled: false,\n\t\t\tisListFetched: false,\n\t\t\thideMissingUpdates: false,\n\t\t\thideAvailableUpdates: true,\n\t\t\topenedWhatsNew: false,\n\t\t\topenedUpdateChannelMenu: false,\n\t\t}\n\t},\n\n\t_$el: null,\n\t_$notifyGroups: null,\n\n\tcomputed: {\n\t\tnewVersionAvailableString() {\n\t\t\treturn t('updatenotification', 'A new version is available: <strong>{newVersionString}</strong>', {\n\t\t\t\tnewVersionString: this.newVersionString,\n\t\t\t})\n\t\t},\n\n\t\tnoteDelayedStableString() {\n\t\t\treturn t('updatenotification', 'Note that after a new release the update only shows up after the first minor release or later. We roll out new versions spread out over time to our users and sometimes skip a version when issues are found. Learn more about updates and release channels at {link}')\n\t\t\t\t.replace('{link}', '<a href=\"https://nextcloud.com/release-channels/\">https://nextcloud.com/release-channels/</a>')\n\t\t},\n\n\t\tlastCheckedOnString() {\n\t\t\treturn t('updatenotification', 'Checked on {lastCheckedDate}', {\n\t\t\t\tlastCheckedDate: this.lastCheckedDate,\n\t\t\t})\n\t\t},\n\n\t\tstatusText() {\n\t\t\tif (!this.isListFetched) {\n\t\t\t\treturn t('updatenotification', 'Checking apps for compatible versions')\n\t\t\t}\n\n\t\t\tif (this.appStoreDisabled) {\n\t\t\t\treturn t('updatenotification', 'Please make sure your config.php does not set <samp>appstoreenabled</samp> to false.')\n\t\t\t}\n\n\t\t\tif (this.appStoreFailed) {\n\t\t\t\treturn t('updatenotification', 'Could not connect to the App Store or no updates have been returned at all. Search manually for updates or make sure your server has access to the internet and can connect to the App Store.')\n\t\t\t}\n\n\t\t\treturn this.missingAppUpdates.length === 0\n\t\t\t\t? t('updatenotification', '<strong>All</strong> apps have a compatible version for this Nextcloud version available.', this)\n\t\t\t\t: n('updatenotification', '<strong>%n</strong> app has no compatible version for this Nextcloud version available.', '<strong>%n</strong> apps have no compatible version for this Nextcloud version available.', this.missingAppUpdates.length)\n\t\t},\n\n\t\twhatsNew() {\n\t\t\tif (this.whatsNewData.length === 0) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst whatsNew = []\n\t\t\tfor (const i in this.whatsNewData) {\n\t\t\t\twhatsNew[i] = { icon: 'icon-checkmark', longtext: this.whatsNewData[i] }\n\t\t\t}\n\t\t\tif (this.changelogURL) {\n\t\t\t\twhatsNew.push({\n\t\t\t\t\thref: this.changelogURL,\n\t\t\t\t\ttext: t('updatenotification', 'View changelog'),\n\t\t\t\t\ticon: 'icon-link',\n\t\t\t\t\ttarget: '_blank',\n\t\t\t\t\taction: '',\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn whatsNew\n\t\t},\n\n\t\tchannelList() {\n\t\t\tconst channelList = []\n\n\t\t\tchannelList.push({\n\t\t\t\ttext: t('updatenotification', 'Enterprise'),\n\t\t\t\tlongtext: t('updatenotification', 'For enterprise use. Provides always the latest patch level, but will not update to the next major release immediately. That update happens once Nextcloud GmbH has done additional hardening and testing for large-scale and mission-critical deployments. This channel is only available to customers and provides the Nextcloud Enterprise package.'),\n\t\t\t\ticon: 'icon-star',\n\t\t\t\tactive: this.currentChannel === 'enterprise',\n\t\t\t\tdisabled: !this.hasValidSubscription,\n\t\t\t\taction: this.changeReleaseChannelToEnterprise,\n\t\t\t})\n\n\t\t\tchannelList.push({\n\t\t\t\ttext: t('updatenotification', 'Stable'),\n\t\t\t\tlongtext: t('updatenotification', 'The most recent stable version. It is suited for regular use and will always update to the latest major version.'),\n\t\t\t\ticon: 'icon-checkmark',\n\t\t\t\tactive: this.currentChannel === 'stable',\n\t\t\t\taction: this.changeReleaseChannelToStable,\n\t\t\t})\n\n\t\t\tchannelList.push({\n\t\t\t\ttext: t('updatenotification', 'Beta'),\n\t\t\t\tlongtext: t('updatenotification', 'A pre-release version only for testing new features, not for production environments.'),\n\t\t\t\ticon: 'icon-category-customization',\n\t\t\t\tactive: this.currentChannel === 'beta',\n\t\t\t\taction: this.changeReleaseChannelToBeta,\n\t\t\t})\n\n\t\t\tif (this.isNonDefaultChannel) {\n\t\t\t\tchannelList.push({\n\t\t\t\t\ttext: this.currentChannel,\n\t\t\t\t\ticon: 'icon-rename',\n\t\t\t\t\tactive: true,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn channelList\n\t\t},\n\n\t\tisNonDefaultChannel() {\n\t\t\treturn this.currentChannel !== 'enterprise' && this.currentChannel !== 'stable' && this.currentChannel !== 'beta'\n\t\t},\n\n\t\tlocalizedChannelName() {\n\t\t\tswitch (this.currentChannel) {\n\t\t\tcase 'enterprise':\n\t\t\t\treturn t('updatenotification', 'Enterprise')\n\t\t\tcase 'stable':\n\t\t\t\treturn t('updatenotification', 'Stable')\n\t\t\tcase 'beta':\n\t\t\t\treturn t('updatenotification', 'Beta')\n\t\t\tdefault:\n\t\t\t\treturn this.currentChannel\n\t\t\t}\n\t\t},\n\t},\n\n\twatch: {\n\t\tnotifyGroups(selectedOptions) {\n\t\t\tif (!this.enableChangeWatcher) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst selectedGroups = []\n\t\t\t_.each(selectedOptions, function(group) {\n\t\t\t\tselectedGroups.push(group.value)\n\t\t\t})\n\n\t\t\tOCP.AppConfig.setValue('updatenotification', 'notify_groups', JSON.stringify(selectedGroups))\n\t\t},\n\t\tisNewVersionAvailable() {\n\t\t\tif (!this.isNewVersionAvailable) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t$.ajax({\n\t\t\t\turl: generateOcsUrl('apps/updatenotification/api/v1/applist/{newVersion}', { newVersion: this.newVersion }),\n\t\t\t\ttype: 'GET',\n\t\t\t\tbeforeSend(request) {\n\t\t\t\t\trequest.setRequestHeader('Accept', 'application/json')\n\t\t\t\t},\n\t\t\t\tsuccess: function(response) {\n\t\t\t\t\tthis.availableAppUpdates = response.ocs.data.available\n\t\t\t\t\tthis.missingAppUpdates = response.ocs.data.missing\n\t\t\t\t\tthis.isListFetched = true\n\t\t\t\t\tthis.appStoreFailed = false\n\t\t\t\t}.bind(this),\n\t\t\t\terror: function(xhr) {\n\t\t\t\t\tthis.availableAppUpdates = []\n\t\t\t\t\tthis.missingAppUpdates = []\n\t\t\t\t\tthis.appStoreDisabled = xhr.responseJSON.ocs.data.appstore_disabled\n\t\t\t\t\tthis.isListFetched = true\n\t\t\t\t\tthis.appStoreFailed = true\n\t\t\t\t}.bind(this),\n\t\t\t})\n\t\t},\n\t},\n\tbeforeMount() {\n\t\t// Parse server data\n\t\tconst data = JSON.parse($('#updatenotification').attr('data-json'))\n\n\t\tthis.newVersion = data.newVersion\n\t\tthis.newVersionString = data.newVersionString\n\t\tthis.lastCheckedDate = data.lastChecked\n\t\tthis.isUpdateChecked = data.isUpdateChecked\n\t\tthis.webUpdaterEnabled = data.webUpdaterEnabled\n\t\tthis.updaterEnabled = data.updaterEnabled\n\t\tthis.downloadLink = data.downloadLink\n\t\tthis.isNewVersionAvailable = data.isNewVersionAvailable\n\t\tthis.updateServerURL = data.updateServerURL\n\t\tthis.currentChannel = data.currentChannel\n\t\tthis.channels = data.channels\n\t\tthis.notifyGroups = data.notifyGroups\n\t\tthis.isDefaultUpdateServerURL = data.isDefaultUpdateServerURL\n\t\tthis.versionIsEol = data.versionIsEol\n\t\tthis.hasValidSubscription = data.hasValidSubscription\n\t\tif (data.changes && data.changes.changelogURL) {\n\t\t\tthis.changelogURL = data.changes.changelogURL\n\t\t}\n\t\tif (data.changes && data.changes.whatsNew) {\n\t\t\tif (data.changes.whatsNew.admin) {\n\t\t\t\tthis.whatsNewData = this.whatsNewData.concat(data.changes.whatsNew.admin)\n\t\t\t}\n\t\t\tthis.whatsNewData = this.whatsNewData.concat(data.changes.whatsNew.regular)\n\t\t}\n\t},\n\tmounted() {\n\t\tthis._$el = $(this.$el)\n\t\tthis._$notifyGroups = this._$el.find('#oca_updatenotification_groups_list')\n\t\tthis._$notifyGroups.on('change', function() {\n\t\t\tthis.$emit('input')\n\t\t}.bind(this))\n\n\t\t$.ajax({\n\t\t\turl: generateOcsUrl('cloud/groups'),\n\t\t\tdataType: 'json',\n\t\t\tsuccess: function(data) {\n\t\t\t\tconst results = []\n\t\t\t\t$.each(data.ocs.data.groups, function(i, group) {\n\t\t\t\t\tresults.push({ value: group, label: group })\n\t\t\t\t})\n\n\t\t\t\tthis.availableGroups = results\n\t\t\t\tthis.enableChangeWatcher = true\n\t\t\t}.bind(this),\n\t\t})\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Creates a new authentication token and loads the updater URL\n\t\t */\n\t\tclickUpdaterButton() {\n\t\t\t$.ajax({\n\t\t\t\turl: generateUrl('/apps/updatenotification/credentials'),\n\t\t\t}).success(function(token) {\n\t\t\t\t// create a form to send a proper post request to the updater\n\t\t\t\tconst form = document.createElement('form')\n\t\t\t\tform.setAttribute('method', 'post')\n\t\t\t\tform.setAttribute('action', getRootUrl() + '/updater/')\n\n\t\t\t\tconst hiddenField = document.createElement('input')\n\t\t\t\thiddenField.setAttribute('type', 'hidden')\n\t\t\t\thiddenField.setAttribute('name', 'updater-secret-input')\n\t\t\t\thiddenField.setAttribute('value', token)\n\n\t\t\t\tform.appendChild(hiddenField)\n\n\t\t\t\tdocument.body.appendChild(form)\n\t\t\t\tform.submit()\n\t\t\t})\n\t\t},\n\t\tchangeReleaseChannelToEnterprise() {\n\t\t\tthis.changeReleaseChannel('enterprise')\n\t\t},\n\t\tchangeReleaseChannelToStable() {\n\t\t\tthis.changeReleaseChannel('stable')\n\t\t},\n\t\tchangeReleaseChannelToBeta() {\n\t\t\tthis.changeReleaseChannel('beta')\n\t\t},\n\t\tchangeReleaseChannel(channel) {\n\t\t\tthis.currentChannel = channel\n\n\t\t\t$.ajax({\n\t\t\t\turl: generateUrl('/apps/updatenotification/channel'),\n\t\t\t\ttype: 'POST',\n\t\t\t\tdata: {\n\t\t\t\t\tchannel: this.currentChannel,\n\t\t\t\t},\n\t\t\t\tsuccess(data) {\n\t\t\t\t\tOC.msg.finishedAction('#channel_save_msg', data)\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tthis.openedUpdateChannelMenu = false\n\t\t},\n\t\ttoggleUpdateChannelMenu() {\n\t\t\tthis.openedUpdateChannelMenu = !this.openedUpdateChannelMenu\n\t\t},\n\t\ttoggleHideMissingUpdates() {\n\t\t\tthis.hideMissingUpdates = !this.hideMissingUpdates\n\t\t},\n\t\ttoggleHideAvailableUpdates() {\n\t\t\tthis.hideAvailableUpdates = !this.hideAvailableUpdates\n\t\t},\n\t\ttoggleMenu() {\n\t\t\tthis.openedWhatsNew = !this.openedWhatsNew\n\t\t},\n\t\tcloseUpdateChannelMenu() {\n\t\t\tthis.openedUpdateChannelMenu = false\n\t\t},\n\t\thideMenu() {\n\t\t\tthis.openedWhatsNew = false\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t#updatenotification {\n\t\tmargin-top: -25px;\n\t\tmargin-bottom: 200px;\n\t\tdiv.update,\n\t\tp:not(.inlineblock) {\n\t\t\tmargin-bottom: 25px;\n\t\t}\n\t\th2.inlineblock {\n\t\t\tmargin-top: 25px;\n\t\t}\n\t\th3 {\n\t\t\tcursor: pointer;\n\t\t\t.icon {\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t\t&:first-of-type {\n\t\t\t\tmargin-top: 0;\n\t\t\t}\n\t\t\t&.update-channel-selector {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tcursor: inherit;\n\t\t\t}\n\t\t}\n\t\t.icon {\n\t\t\tdisplay: inline-block;\n\t\t\tmargin-bottom: -3px;\n\t\t}\n\t\t.icon-triangle-s, .icon-triangle-n {\n\t\t\topacity: 0.5;\n\t\t}\n\t\t.whatsNew {\n\t\t\tdisplay: inline-block;\n\t\t}\n\t\t.toggleWhatsNew {\n\t\t\tposition: relative;\n\t\t}\n\t\t.popovermenu {\n\t\t\tp {\n\t\t\t\tmargin-bottom: 0;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\tmargin-top: 5px;\n\t\t\twidth: 300px;\n\t\t}\n\t\t.applist {\n\t\t\tmargin-bottom: 25px;\n\t\t}\n\n\t\t.update-menu {\n\t\t\tposition: relative;\n\t\t\tcursor: pointer;\n\t\t\tmargin-left: 3px;\n\t\t\tdisplay: inline-block;\n\t\t\t.icon-update-menu {\n\t\t\t\tcursor: inherit;\n\t\t\t\t.icon-triangle-s {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\tcursor: inherit;\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.popovermenu {\n\t\t\t\tdisplay: none;\n\t\t\t\ttop: 28px;\n\t\t\t\t&.show-menu {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n</style>\n<style lang=\"scss\">\n\t/* override needed to make menu wider */\n\t#updatenotification .popovermenu {\n\t\tp {\n\t\t\tmargin-top: 5px;\n\t\t\twidth: 100%;\n\t\t}\n\t\tmargin-top: 5px;\n\t\twidth: 300px;\n\t}\n\t/* override needed to replace yellow hover state with a dark one */\n\t#updatenotification .update-menu .icon-star:hover,\n\t#updatenotification .update-menu .icon-star:focus {\n\t\tbackground-image: var(--icon-star-000);\n\t}\n\t#updatenotification .topMargin {\n\t\tmargin-top: 15px;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateNotification.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateNotification.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateNotification.vue?vue&type=style&index=0&id=2dab2e3a&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateNotification.vue?vue&type=style&index=0&id=2dab2e3a&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateNotification.vue?vue&type=style&index=1&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateNotification.vue?vue&type=style&index=1&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UpdateNotification.vue?vue&type=template&id=2dab2e3a&scoped=true&\"\nimport script from \"./UpdateNotification.vue?vue&type=script&lang=js&\"\nexport * from \"./UpdateNotification.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UpdateNotification.vue?vue&type=style&index=0&id=2dab2e3a&lang=scss&scoped=true&\"\nimport style1 from \"./UpdateNotification.vue?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2dab2e3a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"followupsection\",attrs:{\"id\":\"updatenotification\"}},[_c('div',{staticClass:\"update\"},[(_vm.isNewVersionAvailable)?[(_vm.versionIsEol)?_c('p',[_c('span',{staticClass:\"warning\"},[_c('span',{staticClass:\"icon icon-error-white\"}),_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('updatenotification', 'The version you are running is not maintained anymore. Please make sure to update to a supported version as soon as possible.'))+\"\\n\\t\\t\\t\\t\")])]):_vm._e(),_vm._v(\" \"),_c('p',[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.newVersionAvailableString)}}),_c('br'),_vm._v(\" \"),(!_vm.isListFetched)?_c('span',{staticClass:\"icon icon-loading-small\"}):_vm._e(),_vm._v(\" \"),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.statusText)}})]),_vm._v(\" \"),(_vm.missingAppUpdates.length)?[_c('h3',{on:{\"click\":_vm.toggleHideMissingUpdates}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('updatenotification', 'Apps missing compatible version'))+\"\\n\\t\\t\\t\\t\\t\"),(!_vm.hideMissingUpdates)?_c('span',{staticClass:\"icon icon-triangle-n\"}):_vm._e(),_vm._v(\" \"),(_vm.hideMissingUpdates)?_c('span',{staticClass:\"icon icon-triangle-s\"}):_vm._e()]),_vm._v(\" \"),(!_vm.hideMissingUpdates)?_c('ul',{staticClass:\"applist\"},_vm._l((_vm.missingAppUpdates),function(app,index){return _c('li',{key:index},[_c('a',{attrs:{\"href\":'https://apps.nextcloud.com/apps/' + app.appId,\"title\":_vm.t('settings', 'View in store')}},[_vm._v(_vm._s(app.appName)+\" ↗\")])])}),0):_vm._e()]:_vm._e(),_vm._v(\" \"),(_vm.availableAppUpdates.length)?[_c('h3',{on:{\"click\":_vm.toggleHideAvailableUpdates}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('updatenotification', 'Apps with compatible version'))+\"\\n\\t\\t\\t\\t\\t\"),(!_vm.hideAvailableUpdates)?_c('span',{staticClass:\"icon icon-triangle-n\"}):_vm._e(),_vm._v(\" \"),(_vm.hideAvailableUpdates)?_c('span',{staticClass:\"icon icon-triangle-s\"}):_vm._e()]),_vm._v(\" \"),(!_vm.hideAvailableUpdates)?_c('ul',{staticClass:\"applist\"},_vm._l((_vm.availableAppUpdates),function(app,index){return _c('li',{key:index},[_c('a',{attrs:{\"href\":'https://apps.nextcloud.com/apps/' + app.appId,\"title\":_vm.t('settings', 'View in store')}},[_vm._v(_vm._s(app.appName)+\" ↗\")])])}),0):_vm._e()]:_vm._e(),_vm._v(\" \"),_c('div',[(_vm.updaterEnabled && _vm.webUpdaterEnabled)?_c('a',{staticClass:\"button primary\",attrs:{\"href\":\"#\"},on:{\"click\":_vm.clickUpdaterButton}},[_vm._v(_vm._s(_vm.t('updatenotification', 'Open updater')))]):_vm._e(),_vm._v(\" \"),(_vm.downloadLink)?_c('a',{staticClass:\"button\",class:{ hidden: !_vm.updaterEnabled },attrs:{\"href\":_vm.downloadLink}},[_vm._v(_vm._s(_vm.t('updatenotification', 'Download now')))]):_vm._e(),_vm._v(\" \"),(_vm.updaterEnabled && !_vm.webUpdaterEnabled)?_c('span',[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('updatenotification', 'Please use the command line updater to update.'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.whatsNew)?_c('div',{staticClass:\"whatsNew\"},[_c('div',{staticClass:\"toggleWhatsNew\"},[_c('a',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideMenu),expression:\"hideMenu\"}],staticClass:\"button\",on:{\"click\":_vm.toggleMenu}},[_vm._v(_vm._s(_vm.t('updatenotification', 'What\\'s new?')))]),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu\",class:{ 'menu-center': true, open: _vm.openedWhatsNew }},[_c('PopoverMenu',{attrs:{\"menu\":_vm.whatsNew}})],1)])]):_vm._e()])]:(!_vm.isUpdateChecked)?[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('updatenotification', 'The update check is not yet finished. Please refresh the page.'))+\"\\n\\t\\t\")]:[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('updatenotification', 'Your version is up to date.'))+\"\\n\\t\\t\\t\"),_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.lastCheckedOnString),expression:\"lastCheckedOnString\",modifiers:{\"auto\":true}}],staticClass:\"icon-info svg\"})],_vm._v(\" \"),(!_vm.isDefaultUpdateServerURL)?[_c('p',{staticClass:\"topMargin\"},[_c('em',[_vm._v(_vm._s(_vm.t('updatenotification', 'A non-default update server is in use to be checked for updates:'))+\" \"),_c('code',[_vm._v(_vm._s(_vm.updateServerURL))])])])]:_vm._e()],2),_vm._v(\" \"),_c('h3',{staticClass:\"update-channel-selector\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('updatenotification', 'Update channel:'))+\"\\n\\t\\t\"),_c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.closeUpdateChannelMenu),expression:\"closeUpdateChannelMenu\"}],staticClass:\"update-menu\"},[_c('span',{staticClass:\"icon-update-menu\",on:{\"click\":_vm.toggleUpdateChannelMenu}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.localizedChannelName)+\"\\n\\t\\t\\t\\t\"),_c('span',{staticClass:\"icon-triangle-s\"})]),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu menu menu-center\",class:{ 'show-menu': _vm.openedUpdateChannelMenu}},[_c('PopoverMenu',{attrs:{\"menu\":_vm.channelList}})],1)])]),_vm._v(\" \"),_c('span',{staticClass:\"msg\",attrs:{\"id\":\"channel_save_msg\"}}),_c('br'),_vm._v(\" \"),_c('p',[_c('em',[_vm._v(_vm._s(_vm.t('updatenotification', 'You can always update to a newer version. But you can never downgrade to a more stable version.')))]),_c('br'),_vm._v(\" \"),_c('em',{domProps:{\"innerHTML\":_vm._s(_vm.noteDelayedStableString)}})]),_vm._v(\" \"),_c('p',{attrs:{\"id\":\"oca_updatenotification_groups\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('updatenotification', 'Notify members of the following groups about available updates:'))+\"\\n\\t\\t\"),_c('Multiselect',{attrs:{\"options\":_vm.availableGroups,\"multiple\":true,\"label\":\"label\",\"track-by\":\"value\",\"tag-width\":75},model:{value:(_vm.notifyGroups),callback:function ($$v) {_vm.notifyGroups=$$v},expression:\"notifyGroups\"}}),_c('br'),_vm._v(\" \"),(_vm.currentChannel === 'daily' || _vm.currentChannel === 'git')?_c('em',[_vm._v(_vm._s(_vm.t('updatenotification', 'Only notifications for app updates are available.')))]):_vm._e(),_vm._v(\" \"),(_vm.currentChannel === 'daily')?_c('em',[_vm._v(_vm._s(_vm.t('updatenotification', 'The selected update channel makes dedicated notifications for the server obsolete.')))]):_vm._e(),_vm._v(\" \"),(_vm.currentChannel === 'git')?_c('em',[_vm._v(_vm._s(_vm.t('updatenotification', 'The selected update channel does not support updates of the server.')))]):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2018 Joas Schilling <coding@schilljs.com>\n *\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Root from './components/UpdateNotification'\n\nVue.mixin({\n\tmethods: {\n\t\tt(app, text, vars, count, options) {\n\t\t\treturn OC.L10N.translate(app, text, vars, count, options)\n\t\t},\n\t\tn(app, textSingular, textPlural, count, vars, options) {\n\t\t\treturn OC.L10N.translatePlural(app, textSingular, textPlural, count, vars, options)\n\t\t},\n\t},\n})\n\n// eslint-disable-next-line no-new\nnew Vue({\n\tel: '#updatenotification',\n\trender: h => h(Root),\n})\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#updatenotification[data-v-2dab2e3a]{margin-top:-25px;margin-bottom:200px}#updatenotification div.update[data-v-2dab2e3a],#updatenotification p[data-v-2dab2e3a]:not(.inlineblock){margin-bottom:25px}#updatenotification h2.inlineblock[data-v-2dab2e3a]{margin-top:25px}#updatenotification h3[data-v-2dab2e3a]{cursor:pointer}#updatenotification h3 .icon[data-v-2dab2e3a]{cursor:pointer}#updatenotification h3[data-v-2dab2e3a]:first-of-type{margin-top:0}#updatenotification h3.update-channel-selector[data-v-2dab2e3a]{display:inline-block;cursor:inherit}#updatenotification .icon[data-v-2dab2e3a]{display:inline-block;margin-bottom:-3px}#updatenotification .icon-triangle-s[data-v-2dab2e3a],#updatenotification .icon-triangle-n[data-v-2dab2e3a]{opacity:.5}#updatenotification .whatsNew[data-v-2dab2e3a]{display:inline-block}#updatenotification .toggleWhatsNew[data-v-2dab2e3a]{position:relative}#updatenotification .popovermenu[data-v-2dab2e3a]{margin-top:5px;width:300px}#updatenotification .popovermenu p[data-v-2dab2e3a]{margin-bottom:0;width:100%}#updatenotification .applist[data-v-2dab2e3a]{margin-bottom:25px}#updatenotification .update-menu[data-v-2dab2e3a]{position:relative;cursor:pointer;margin-left:3px;display:inline-block}#updatenotification .update-menu .icon-update-menu[data-v-2dab2e3a]{cursor:inherit}#updatenotification .update-menu .icon-update-menu .icon-triangle-s[data-v-2dab2e3a]{display:inline-block;vertical-align:middle;cursor:inherit;opacity:1}#updatenotification .update-menu .popovermenu[data-v-2dab2e3a]{display:none;top:28px}#updatenotification .update-menu .popovermenu.show-menu[data-v-2dab2e3a]{display:block}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/updatenotification/src/components/UpdateNotification.vue\"],\"names\":[],\"mappings\":\"AA4bA,qCACC,gBAAA,CACA,mBAAA,CACA,yGAEC,kBAAA,CAED,oDACC,eAAA,CAED,wCACC,cAAA,CACA,8CACC,cAAA,CAED,sDACC,YAAA,CAED,gEACC,oBAAA,CACA,cAAA,CAGF,2CACC,oBAAA,CACA,kBAAA,CAED,4GACC,UAAA,CAED,+CACC,oBAAA,CAED,qDACC,iBAAA,CAED,kDAKC,cAAA,CACA,WAAA,CALA,oDACC,eAAA,CACA,UAAA,CAKF,8CACC,kBAAA,CAGD,kDACC,iBAAA,CACA,cAAA,CACA,eAAA,CACA,oBAAA,CACA,oEACC,cAAA,CACA,qFACC,oBAAA,CACA,qBAAA,CACA,cAAA,CACA,SAAA,CAGF,+DACC,YAAA,CACA,QAAA,CACA,yEACC,aAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n#updatenotification {\\n\\tmargin-top: -25px;\\n\\tmargin-bottom: 200px;\\n\\tdiv.update,\\n\\tp:not(.inlineblock) {\\n\\t\\tmargin-bottom: 25px;\\n\\t}\\n\\th2.inlineblock {\\n\\t\\tmargin-top: 25px;\\n\\t}\\n\\th3 {\\n\\t\\tcursor: pointer;\\n\\t\\t.icon {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t}\\n\\t\\t&:first-of-type {\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t}\\n\\t\\t&.update-channel-selector {\\n\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\tcursor: inherit;\\n\\t\\t}\\n\\t}\\n\\t.icon {\\n\\t\\tdisplay: inline-block;\\n\\t\\tmargin-bottom: -3px;\\n\\t}\\n\\t.icon-triangle-s, .icon-triangle-n {\\n\\t\\topacity: 0.5;\\n\\t}\\n\\t.whatsNew {\\n\\t\\tdisplay: inline-block;\\n\\t}\\n\\t.toggleWhatsNew {\\n\\t\\tposition: relative;\\n\\t}\\n\\t.popovermenu {\\n\\t\\tp {\\n\\t\\t\\tmargin-bottom: 0;\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\t\\tmargin-top: 5px;\\n\\t\\twidth: 300px;\\n\\t}\\n\\t.applist {\\n\\t\\tmargin-bottom: 25px;\\n\\t}\\n\\n\\t.update-menu {\\n\\t\\tposition: relative;\\n\\t\\tcursor: pointer;\\n\\t\\tmargin-left: 3px;\\n\\t\\tdisplay: inline-block;\\n\\t\\t.icon-update-menu {\\n\\t\\t\\tcursor: inherit;\\n\\t\\t\\t.icon-triangle-s {\\n\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t\\tvertical-align: middle;\\n\\t\\t\\t\\tcursor: inherit;\\n\\t\\t\\t\\topacity: 1;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t.popovermenu {\\n\\t\\t\\tdisplay: none;\\n\\t\\t\\ttop: 28px;\\n\\t\\t\\t&.show-menu {\\n\\t\\t\\t\\tdisplay: block;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#updatenotification .popovermenu{margin-top:5px;width:300px}#updatenotification .popovermenu p{margin-top:5px;width:100%}#updatenotification .update-menu .icon-star:hover,#updatenotification .update-menu .icon-star:focus{background-image:var(--icon-star-000)}#updatenotification .topMargin{margin-top:15px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/updatenotification/src/components/UpdateNotification.vue\"],\"names\":[],\"mappings\":\"AAsgBA,iCAKC,cAAA,CACA,WAAA,CALA,mCACC,cAAA,CACA,UAAA,CAMF,oGAEC,qCAAA,CAED,+BACC,eAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n/* override needed to make menu wider */\\n#updatenotification .popovermenu {\\n\\tp {\\n\\t\\tmargin-top: 5px;\\n\\t\\twidth: 100%;\\n\\t}\\n\\tmargin-top: 5px;\\n\\twidth: 300px;\\n}\\n/* override needed to replace yellow hover state with a dark one */\\n#updatenotification .update-menu .icon-star:hover,\\n#updatenotification .update-menu .icon-star:focus {\\n\\tbackground-image: var(--icon-star-000);\\n}\\n#updatenotification .topMargin {\\n\\tmargin-top: 15px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 292;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t292: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(26951); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","VTooltip","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","_v","_s","t","_e","domProps","newVersionAvailableString","isListFetched","statusText","missingAppUpdates","on","toggleHideMissingUpdates","hideMissingUpdates","_l","app","index","key","appId","appName","availableAppUpdates","toggleHideAvailableUpdates","hideAvailableUpdates","updaterEnabled","webUpdaterEnabled","clickUpdaterButton","class","hidden","downloadLink","directives","name","rawName","value","expression","toggleMenu","open","openedWhatsNew","whatsNew","isUpdateChecked","modifiers","isDefaultUpdateServerURL","updateServerURL","toggleUpdateChannelMenu","localizedChannelName","openedUpdateChannelMenu","channelList","noteDelayedStableString","availableGroups","model","callback","$$v","notifyGroups","currentChannel","Vue","methods","text","vars","count","OC","L10N","translate","n","textSingular","textPlural","translatePlural","el","render","h","Root","___CSS_LOADER_EXPORT___","push","module","id","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","amdD","Error","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","splice","r","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","data","moreModules","runtime","some","chunkLoadingGlobal","self","forEach","bind","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index d8d8dc0fb6b..73aaa10f731 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -992,6 +992,7 @@ return array( 'OC\\Core\\Migrations\\Version23000Date20211203110726' => $baseDir . '/core/Migrations/Version23000Date20211203110726.php', 'OC\\Core\\Migrations\\Version23000Date20211213203940' => $baseDir . '/core/Migrations/Version23000Date20211213203940.php', 'OC\\Core\\Migrations\\Version24000Date20211210141942' => $baseDir . '/core/Migrations/Version24000Date20211210141942.php', + 'OC\\Core\\Migrations\\Version24000Date20211222112246' => $baseDir . '/core/Migrations/Version24000Date20211222112246.php', 'OC\\Core\\Migrations\\Version24000Date20211230140012' => $baseDir . '/core/Migrations/Version24000Date20211230140012.php', 'OC\\Core\\Notification\\CoreNotifier' => $baseDir . '/core/Notification/CoreNotifier.php', 'OC\\Core\\Service\\LoginFlowV2Service' => $baseDir . '/core/Service/LoginFlowV2Service.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index a9ce260d050..96e70bed1a3 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -1021,6 +1021,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OC\\Core\\Migrations\\Version23000Date20211203110726' => __DIR__ . '/../../..' . '/core/Migrations/Version23000Date20211203110726.php', 'OC\\Core\\Migrations\\Version23000Date20211213203940' => __DIR__ . '/../../..' . '/core/Migrations/Version23000Date20211213203940.php', 'OC\\Core\\Migrations\\Version24000Date20211210141942' => __DIR__ . '/../../..' . '/core/Migrations/Version24000Date20211210141942.php', + 'OC\\Core\\Migrations\\Version24000Date20211222112246' => __DIR__ . '/../../..' . '/core/Migrations/Version24000Date20211222112246.php', 'OC\\Core\\Migrations\\Version24000Date20211230140012' => __DIR__ . '/../../..' . '/core/Migrations/Version24000Date20211230140012.php', 'OC\\Core\\Notification\\CoreNotifier' => __DIR__ . '/../../..' . '/core/Notification/CoreNotifier.php', 'OC\\Core\\Service\\LoginFlowV2Service' => __DIR__ . '/../../..' . '/core/Service/LoginFlowV2Service.php', diff --git a/lib/l10n/ru.js b/lib/l10n/ru.js index c7fdc236de5..42b22f64ce6 100644 --- a/lib/l10n/ru.js +++ b/lib/l10n/ru.js @@ -2,6 +2,7 @@ OC.L10N.register( "lib", { "Cannot write into \"config\" directory!" : "Невозможно выполнить запись в каталог «config».", + "This can usually be fixed by giving the web server write access to the config directory." : "Обычно эту ошибку можно исправить, предоставив веб-серверу права на запись в каталог конфигурации.", "But, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it." : "Если для файла «config.php» должен быть установлен режим «только чтение», задайте параметру «config_is_read_only» значение «true».", "See %s" : "Обратитесь к %s.", "The files of the app %1$s were not replaced correctly. Make sure it is a version compatible with the server." : "Файлы приложения %1$s не были заменены корректно. Удостоверьтесь, что устанавливаемая версия этого приложения совместима с версией сервера.", @@ -122,7 +123,7 @@ OC.L10N.register( "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не поддерживается и %s может работать некорректно на данной платформе. Используйте на свой страх и риск!", "For the best results, please consider using a GNU/Linux server instead." : "Для достижения наилучших результатов, рассмотрите вариант использования сервера на GNU/Linux.", "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Кажется что экземпляр этого %s работает в 32-битной среде PHP и в php.ini был настроен open_basedir. Это приведёт к проблемам с файлами более 4 ГБ и настоятельно не рекомендуется.", - "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Пожалуйста, удалите директиву open_basedir из файла php.ini или смените PHP на 64-разрядную сборку.", + "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Удалите директиву open_basedir из файла php.ini или смените PHP на 64-разрядную сборку.", "Set an admin username." : "Задать имя пользователя для администратора.", "Set an admin password." : "Задать пароль для admin.", "Cannot create or write into the data directory %s" : "Не удалось создать или записать в каталог данных «%s»", @@ -211,18 +212,36 @@ OC.L10N.register( "Authentication error" : "Ошибка аутентификации", "Token expired. Please reload page." : "Токен просрочен. Перезагрузите страницу.", "No database drivers (sqlite, mysql, or postgresql) installed." : "Не установлены драйвера баз данных (sqlite, mysql или postgresql)", + "Cannot write into \"config\" directory." : "Невозможно выполнить запись в каталог «config».", + "This can usually be fixed by giving the web server write access to the config directory. See %s" : "Обычно это можно исправить, предоставив веб-серверу права на запись в каталог конфигурации. Обратитесь к %s.", "Or, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it. See %s" : "Если для файла «config.php» должен быть установлен режим «только чтение», задайте параметру \"config_is_read_only\" значение \"true\". Изучите %s.", + "Cannot write into \"apps\" directory." : "Не удалось выполнить запись в каталог «apps».", + "This can usually be fixed by giving the web server write access to the apps directory or disabling the App Store in the config file." : "Обычно это можно исправить, предоставлением веб-серверу права для записи в каталог приложений или отключением магазина приложений в файле конфигурации.", + "Cannot create \"data\" directory." : "Невозможно создать каталог «data».", + "This can usually be fixed by giving the web server write access to the root directory. See %s" : "Обычно это можно исправить, предоставив веб-серверу права на запись в корневой каталог. Обратитесь к %s", + "Permissions can usually be fixed by giving the web server write access to the root directory. See %s." : "Разрешения обычно можно исправить, предоставив веб-серверу право на запись в корневой каталог. Обратитесь к %s.", + "Your data directory is not writable." : "Каталог данных не доступен для записи.", + "Setting locale to %s failed." : "Не удалось настроить локаль %s.", + "Please install one of these locales on your system and restart your web server." : "Установите один из этих языковых пакетов и перезапустите веб-сервер.", "PHP module %s not installed." : "Не установлен PHP-модуль %s.", "Please ask your server administrator to install the module." : "Попросите администратора сервера установить этот модуль.", "PHP setting \"%s\" is not set to \"%s\"." : "Параметру PHP «%s» не присвоено значение «%s».", "Adjusting this setting in php.ini will make Nextcloud run again" : "Настройка этого параметра в файле php.ini восстановит работоспособность Nextcloud", + "<code>mbstring.func_overload</code> is set to <code>%s</code> instead of the expected value <code>0</code>." : "Параметр <code>mbstring.func_overload</code> установлен в <code>%s</code>, но ожидается значение <code>0</code>.", + "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini." : "Чтобы исправить эту проблему установите параметр <code>mbstring.func_overload</code> в значение <code>0</code> в php.ini.", "libxml2 2.7.0 is at least required. Currently %s is installed." : "Требуется как минимум libxml2 версии 2.7.0. На данный момент установлена %s.", "To fix this issue update your libxml2 version and restart your web server." : "Для исправления этой ошибки обновите версию libxml2 и перезапустите ваш веб-сервер.", "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Очевидно, PHP настроен на вычищение блоков встроенной документации. Это сделает несколько центральных приложений недоступными.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Возможно это вызвано кешем/ускорителем вроде Zend OPcache или eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "Модули PHP были установлены, но они все еще перечислены как недостающие?", "Please ask your server administrator to restart the web server." : "Пожалуйста, попросите вашего администратора перезапустить веб-сервер.", + "PostgreSQL >= 9 required." : "Требуется PostgreSQL версии 9 или более новый.", + "Please upgrade your database version." : "Обновите базу данных.", + "Your data directory is readable by other users." : "Каталог данных доступен для чтения другим пользователям.", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Измените права доступа на 0770, чтобы другие пользователи не могли получить список файлов этого каталога.", + "Your data directory must be an absolute path." : "Каталог данных должен быть указан в виде абсолютного пути.", + "Check the value of \"datadirectory\" in your configuration." : "Проверьте в значение параметра «datadirectory» в файле конфигурации.", + "Your data directory is invalid." : "Каталог данных задан неверно.", "Ensure there is a file called \".ocdata\" in the root of the data directory." : "Убедитесь, что в корне каталога данных присутствует файл «.ocdata».", "Action \"%s\" not supported or implemented." : "Действие «%s» не поддерживается или не реализовано.", "Authentication failed, wrong token or provider ID given" : "Ошибка аутентификации, неверный токен или идентификатор провайдера", diff --git a/lib/l10n/ru.json b/lib/l10n/ru.json index 2a0a536377b..00122016849 100644 --- a/lib/l10n/ru.json +++ b/lib/l10n/ru.json @@ -1,5 +1,6 @@ { "translations": { "Cannot write into \"config\" directory!" : "Невозможно выполнить запись в каталог «config».", + "This can usually be fixed by giving the web server write access to the config directory." : "Обычно эту ошибку можно исправить, предоставив веб-серверу права на запись в каталог конфигурации.", "But, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it." : "Если для файла «config.php» должен быть установлен режим «только чтение», задайте параметру «config_is_read_only» значение «true».", "See %s" : "Обратитесь к %s.", "The files of the app %1$s were not replaced correctly. Make sure it is a version compatible with the server." : "Файлы приложения %1$s не были заменены корректно. Удостоверьтесь, что устанавливаемая версия этого приложения совместима с версией сервера.", @@ -120,7 +121,7 @@ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X не поддерживается и %s может работать некорректно на данной платформе. Используйте на свой страх и риск!", "For the best results, please consider using a GNU/Linux server instead." : "Для достижения наилучших результатов, рассмотрите вариант использования сервера на GNU/Linux.", "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Кажется что экземпляр этого %s работает в 32-битной среде PHP и в php.ini был настроен open_basedir. Это приведёт к проблемам с файлами более 4 ГБ и настоятельно не рекомендуется.", - "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Пожалуйста, удалите директиву open_basedir из файла php.ini или смените PHP на 64-разрядную сборку.", + "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Удалите директиву open_basedir из файла php.ini или смените PHP на 64-разрядную сборку.", "Set an admin username." : "Задать имя пользователя для администратора.", "Set an admin password." : "Задать пароль для admin.", "Cannot create or write into the data directory %s" : "Не удалось создать или записать в каталог данных «%s»", @@ -209,18 +210,36 @@ "Authentication error" : "Ошибка аутентификации", "Token expired. Please reload page." : "Токен просрочен. Перезагрузите страницу.", "No database drivers (sqlite, mysql, or postgresql) installed." : "Не установлены драйвера баз данных (sqlite, mysql или postgresql)", + "Cannot write into \"config\" directory." : "Невозможно выполнить запись в каталог «config».", + "This can usually be fixed by giving the web server write access to the config directory. See %s" : "Обычно это можно исправить, предоставив веб-серверу права на запись в каталог конфигурации. Обратитесь к %s.", "Or, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it. See %s" : "Если для файла «config.php» должен быть установлен режим «только чтение», задайте параметру \"config_is_read_only\" значение \"true\". Изучите %s.", + "Cannot write into \"apps\" directory." : "Не удалось выполнить запись в каталог «apps».", + "This can usually be fixed by giving the web server write access to the apps directory or disabling the App Store in the config file." : "Обычно это можно исправить, предоставлением веб-серверу права для записи в каталог приложений или отключением магазина приложений в файле конфигурации.", + "Cannot create \"data\" directory." : "Невозможно создать каталог «data».", + "This can usually be fixed by giving the web server write access to the root directory. See %s" : "Обычно это можно исправить, предоставив веб-серверу права на запись в корневой каталог. Обратитесь к %s", + "Permissions can usually be fixed by giving the web server write access to the root directory. See %s." : "Разрешения обычно можно исправить, предоставив веб-серверу право на запись в корневой каталог. Обратитесь к %s.", + "Your data directory is not writable." : "Каталог данных не доступен для записи.", + "Setting locale to %s failed." : "Не удалось настроить локаль %s.", + "Please install one of these locales on your system and restart your web server." : "Установите один из этих языковых пакетов и перезапустите веб-сервер.", "PHP module %s not installed." : "Не установлен PHP-модуль %s.", "Please ask your server administrator to install the module." : "Попросите администратора сервера установить этот модуль.", "PHP setting \"%s\" is not set to \"%s\"." : "Параметру PHP «%s» не присвоено значение «%s».", "Adjusting this setting in php.ini will make Nextcloud run again" : "Настройка этого параметра в файле php.ini восстановит работоспособность Nextcloud", + "<code>mbstring.func_overload</code> is set to <code>%s</code> instead of the expected value <code>0</code>." : "Параметр <code>mbstring.func_overload</code> установлен в <code>%s</code>, но ожидается значение <code>0</code>.", + "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini." : "Чтобы исправить эту проблему установите параметр <code>mbstring.func_overload</code> в значение <code>0</code> в php.ini.", "libxml2 2.7.0 is at least required. Currently %s is installed." : "Требуется как минимум libxml2 версии 2.7.0. На данный момент установлена %s.", "To fix this issue update your libxml2 version and restart your web server." : "Для исправления этой ошибки обновите версию libxml2 и перезапустите ваш веб-сервер.", "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Очевидно, PHP настроен на вычищение блоков встроенной документации. Это сделает несколько центральных приложений недоступными.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Возможно это вызвано кешем/ускорителем вроде Zend OPcache или eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "Модули PHP были установлены, но они все еще перечислены как недостающие?", "Please ask your server administrator to restart the web server." : "Пожалуйста, попросите вашего администратора перезапустить веб-сервер.", + "PostgreSQL >= 9 required." : "Требуется PostgreSQL версии 9 или более новый.", + "Please upgrade your database version." : "Обновите базу данных.", + "Your data directory is readable by other users." : "Каталог данных доступен для чтения другим пользователям.", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Измените права доступа на 0770, чтобы другие пользователи не могли получить список файлов этого каталога.", + "Your data directory must be an absolute path." : "Каталог данных должен быть указан в виде абсолютного пути.", + "Check the value of \"datadirectory\" in your configuration." : "Проверьте в значение параметра «datadirectory» в файле конфигурации.", + "Your data directory is invalid." : "Каталог данных задан неверно.", "Ensure there is a file called \".ocdata\" in the root of the data directory." : "Убедитесь, что в корне каталога данных присутствует файл «.ocdata».", "Action \"%s\" not supported or implemented." : "Действие «%s» не поддерживается или не реализовано.", "Authentication failed, wrong token or provider ID given" : "Ошибка аутентификации, неверный токен или идентификатор провайдера", diff --git a/lib/private/Comments/Comment.php b/lib/private/Comments/Comment.php index 5cf04092101..2b338efc75f 100644 --- a/lib/private/Comments/Comment.php +++ b/lib/private/Comments/Comment.php @@ -44,6 +44,7 @@ class Comment implements IComment { 'referenceId' => null, 'creationDT' => null, 'latestChildDT' => null, + 'reactions' => null, ]; /** @@ -431,6 +432,21 @@ class Comment implements IComment { } /** + * @inheritDoc + */ + public function getReactions(): array { + return $this->data['reactions'] ?? []; + } + + /** + * @inheritDoc + */ + public function setReactions(?array $reactions): IComment { + $this->data['reactions'] = $reactions; + return $this; + } + + /** * sets the comment data based on an array with keys as taken from the * database. * diff --git a/lib/private/Comments/Manager.php b/lib/private/Comments/Manager.php index d62db2926fb..e87ac5cd5cc 100644 --- a/lib/private/Comments/Manager.php +++ b/lib/private/Comments/Manager.php @@ -41,6 +41,7 @@ use OCP\IConfig; use OCP\IDBConnection; use OCP\IUser; use OCP\IInitialStateService; +use OCP\PreConditionNotMetException; use OCP\Util; use Psr\Log\LoggerInterface; @@ -102,6 +103,20 @@ class Manager implements ICommentsManager { } $data['children_count'] = (int)$data['children_count']; $data['reference_id'] = $data['reference_id'] ?? null; + if ($this->supportReactions()) { + $list = json_decode($data['reactions'], true); + // Ordering does not work on the database with group concat and Oracle, + // So we simply sort on the output. + if (is_array($list)) { + uasort($list, static function ($a, $b) { + if ($a === $b) { + return 0; + } + return ($a > $b) ? -1 : 1; + }); + } + $data['reactions'] = $list; + } return $data; } @@ -133,6 +148,10 @@ class Manager implements ICommentsManager { throw new \UnexpectedValueException('Actor, Object and Verb information must be provided for saving'); } + if ($comment->getVerb() === 'reaction' && mb_strlen($comment->getMessage()) > 2) { + throw new \UnexpectedValueException('Reactions cannot be longer than 2 chars (emoji with skin tone have two chars)'); + } + if ($comment->getId() === '') { $comment->setChildrenCount(0); $comment->setLatestChildDateTime(new \DateTime('0000-00-00 00:00:00', new \DateTimeZone('UTC'))); @@ -899,12 +918,166 @@ class Manager implements ICommentsManager { } if ($affectedRows > 0 && $comment instanceof IComment) { + if ($comment->getVerb() === 'reaction_deleted') { + $this->deleteReaction($comment); + } $this->sendEvent(CommentsEvent::EVENT_DELETE, $comment); } return ($affectedRows > 0); } + private function deleteReaction(IComment $reaction): void { + $qb = $this->dbConn->getQueryBuilder(); + $qb->delete('reactions') + ->where($qb->expr()->eq('parent_id', $qb->createNamedParameter($reaction->getParentId()))) + ->andWhere($qb->expr()->eq('message_id', $qb->createNamedParameter($reaction->getId()))) + ->executeStatement(); + $this->sumReactions($reaction->getParentId()); + } + + /** + * Get comment related with user reaction + * + * Throws PreConditionNotMetException when the system haven't the minimum requirements to + * use reactions + * + * @param integer $parentId + * @param string $actorType + * @param string $actorId + * @param string $reaction + * @return IComment + * @throws NotFoundException + * @throws PreConditionNotMetException + * @since 24.0.0 + */ + public function getReactionComment(int $parentId, string $actorType, string $actorId, string $reaction): IComment { + $this->throwIfNotSupportReactions(); + $qb = $this->dbConn->getQueryBuilder(); + $messageId = $qb + ->select('message_id') + ->from('reactions') + ->where($qb->expr()->eq('parent_id', $qb->createNamedParameter($parentId))) + ->andWhere($qb->expr()->eq('actor_type', $qb->createNamedParameter($actorType))) + ->andWhere($qb->expr()->eq('actor_id', $qb->createNamedParameter($actorId))) + ->andWhere($qb->expr()->eq('reaction', $qb->createNamedParameter($reaction))) + ->executeQuery() + ->fetchOne(); + if (!$messageId) { + throw new NotFoundException('Comment related with reaction not found'); + } + return $this->get($messageId); + } + + /** + * Retrieve all reactions with specific reaction of a message + * + * @param integer $parentId + * @param string $reaction + * @return IComment[] + * @since 24.0.0 + */ + public function retrieveAllReactionsWithSpecificReaction(int $parentId, string $reaction): ?array { + $this->throwIfNotSupportReactions(); + $qb = $this->dbConn->getQueryBuilder(); + $result = $qb + ->select('message_id') + ->from('reactions') + ->where($qb->expr()->eq('parent_id', $qb->createNamedParameter($parentId))) + ->andWhere($qb->expr()->eq('reaction', $qb->createNamedParameter($reaction))) + ->executeQuery(); + + $commentIds = []; + while ($data = $result->fetch()) { + $commentIds[] = $data['message_id']; + } + $comments = []; + if ($commentIds) { + $comments = $this->getCommentsById($commentIds); + } + + return $comments; + } + + /** + * Support reactions + * + * @return boolean + * @since 24.0.0 + */ + public function supportReactions(): bool { + return $this->dbConn->supports4ByteText(); + } + + /** + * @throws PreConditionNotMetException + * @since 24.0.0 + */ + private function throwIfNotSupportReactions() { + if (!$this->supportReactions()) { + throw new PreConditionNotMetException('The database does not support reactions'); + } + } + + /** + * Retrieve all reactions of a message + * + * Throws PreConditionNotMetException when the system haven't the minimum requirements to + * use reactions + * + * @param integer $parentId + * @param string $reaction + * @throws PreConditionNotMetException + * @return IComment[] + * @since 24.0.0 + */ + public function retrieveAllReactions(int $parentId): array { + $this->throwIfNotSupportReactions(); + $qb = $this->dbConn->getQueryBuilder(); + $result = $qb + ->select('message_id') + ->from('reactions') + ->where($qb->expr()->eq('parent_id', $qb->createNamedParameter($parentId))) + ->executeQuery(); + + $commentIds = []; + while ($data = $result->fetch()) { + $commentIds[] = $data['message_id']; + } + + return $this->getCommentsById($commentIds); + } + + /** + * Get all comments on list + * + * @param integer[] $commentIds + * @return IComment[] + * @since 24.0.0 + */ + private function getCommentsById(array $commentIds): array { + if (!$commentIds) { + return []; + } + $query = $this->dbConn->getQueryBuilder(); + + $query->select('*') + ->from('comments') + ->where($query->expr()->in('id', $query->createNamedParameter($commentIds, IQueryBuilder::PARAM_STR_ARRAY))) + ->orderBy('creation_timestamp', 'DESC') + ->addOrderBy('id', 'DESC'); + + $comments = []; + $result = $query->executeQuery(); + while ($data = $result->fetch()) { + $comment = $this->getCommentFromData($data); + $this->cache($comment); + $comments[] = $comment; + } + $result->closeCursor(); + return $comments; + } + /** * saves the comment permanently * @@ -916,12 +1089,20 @@ class Manager implements ICommentsManager { * Throws NotFoundException when a comment that is to be updated does not * exist anymore at this point of time. * + * Throws PreConditionNotMetException when the system haven't the minimum requirements to + * use reactions + * * @param IComment $comment * @return bool * @throws NotFoundException + * @throws PreConditionNotMetException * @since 9.0.0 */ public function save(IComment $comment) { + if ($comment->getVerb() === 'reaction') { + $this->throwIfNotSupportReactions(); + } + if ($this->prepareCommentForDatabaseWrite($comment)->getId() === '') { $result = $this->insert($comment); } else { @@ -988,12 +1169,88 @@ class Manager implements ICommentsManager { if ($affectedRows > 0) { $comment->setId((string)$qb->getLastInsertId()); + if ($comment->getVerb() === 'reaction') { + $this->addReaction($comment); + } $this->sendEvent(CommentsEvent::EVENT_ADD, $comment); } return $affectedRows > 0; } + private function addReaction(IComment $reaction): void { + // Prevent violate constraint + $qb = $this->dbConn->getQueryBuilder(); + $qb->select($qb->func()->count('*')) + ->from('reactions') + ->where($qb->expr()->eq('parent_id', $qb->createNamedParameter($reaction->getParentId()))) + ->andWhere($qb->expr()->eq('actor_type', $qb->createNamedParameter($reaction->getActorType()))) + ->andWhere($qb->expr()->eq('actor_id', $qb->createNamedParameter($reaction->getActorId()))) + ->andWhere($qb->expr()->eq('reaction', $qb->createNamedParameter($reaction->getMessage()))); + $result = $qb->executeQuery(); + $exists = (int) $result->fetchOne(); + if (!$exists) { + $qb = $this->dbConn->getQueryBuilder(); + try { + $qb->insert('reactions') + ->values([ + 'parent_id' => $qb->createNamedParameter($reaction->getParentId()), + 'message_id' => $qb->createNamedParameter($reaction->getId()), + 'actor_type' => $qb->createNamedParameter($reaction->getActorType()), + 'actor_id' => $qb->createNamedParameter($reaction->getActorId()), + 'reaction' => $qb->createNamedParameter($reaction->getMessage()), + ]) + ->executeStatement(); + } catch (\Exception $e) { + $this->logger->error($e->getMessage(), [ + 'exception' => $e, + 'app' => 'core_comments', + ]); + } + } + $this->sumReactions($reaction->getParentId()); + } + + private function sumReactions(string $parentId): void { + $qb = $this->dbConn->getQueryBuilder(); + + $totalQuery = $this->dbConn->getQueryBuilder(); + $totalQuery + ->selectAlias( + $totalQuery->func()->concat( + $totalQuery->expr()->literal('"'), + 'reaction', + $totalQuery->expr()->literal('":'), + $totalQuery->func()->count('id') + ), + 'colonseparatedvalue' + ) + ->selectAlias($totalQuery->func()->count('id'), 'total') + ->from('reactions', 'r') + ->where($totalQuery->expr()->eq('r.parent_id', $qb->createNamedParameter($parentId))) + ->groupBy('r.reaction') + ->orderBy('total', 'DESC') + ->setMaxResults(20); + + $jsonQuery = $this->dbConn->getQueryBuilder(); + $jsonQuery + ->selectAlias( + $jsonQuery->func()->concat( + $jsonQuery->expr()->literal('{'), + $jsonQuery->func()->groupConcat('colonseparatedvalue'), + $jsonQuery->expr()->literal('}') + ), + 'json' + ) + ->from($jsonQuery->createFunction('(' . $totalQuery->getSQL() . ')'), 'json'); + + $qb + ->update('comments') + ->set('reactions', $jsonQuery->createFunction('(' . $jsonQuery->getSQL() . ')')) + ->where($qb->expr()->eq('id', $qb->createNamedParameter($parentId))) + ->executeStatement(); + } + /** * updates a Comment data row * @@ -1015,6 +1272,10 @@ class Manager implements ICommentsManager { $result = $this->updateQuery($comment, false); } + if ($comment->getVerb() === 'reaction_deleted') { + $this->deleteReaction($comment); + } + $this->sendEvent(CommentsEvent::EVENT_UPDATE, $comment); return $result; diff --git a/lib/private/DB/QueryBuilder/ExpressionBuilder/ExpressionBuilder.php b/lib/private/DB/QueryBuilder/ExpressionBuilder/ExpressionBuilder.php index 77a4a02128a..ae4f19f5d18 100644 --- a/lib/private/DB/QueryBuilder/ExpressionBuilder/ExpressionBuilder.php +++ b/lib/private/DB/QueryBuilder/ExpressionBuilder/ExpressionBuilder.php @@ -427,6 +427,7 @@ class ExpressionBuilder implements IExpressionBuilder { * * @param string|IQueryFunction $column * @param mixed $type One of IQueryBuilder::PARAM_* + * @psalm-param IQueryBuilder::PARAM_* $type * @return IQueryFunction */ public function castColumn($column, $type): IQueryFunction { diff --git a/lib/private/DB/QueryBuilder/ExpressionBuilder/MySqlExpressionBuilder.php b/lib/private/DB/QueryBuilder/ExpressionBuilder/MySqlExpressionBuilder.php index e917ad3ad3a..3bb54d4b26e 100644 --- a/lib/private/DB/QueryBuilder/ExpressionBuilder/MySqlExpressionBuilder.php +++ b/lib/private/DB/QueryBuilder/ExpressionBuilder/MySqlExpressionBuilder.php @@ -26,7 +26,9 @@ namespace OC\DB\QueryBuilder\ExpressionBuilder; use OC\DB\ConnectionAdapter; +use OC\DB\QueryBuilder\QueryFunction; use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\DB\QueryBuilder\IQueryFunction; class MySqlExpressionBuilder extends ExpressionBuilder { @@ -52,4 +54,21 @@ class MySqlExpressionBuilder extends ExpressionBuilder { $y = $this->helper->quoteColumnName($y); return $this->expressionBuilder->comparison($x, ' COLLATE ' . $this->collation . ' LIKE', $y); } + + /** + * Returns a IQueryFunction that casts the column to the given type + * + * @param string|IQueryFunction $column + * @param mixed $type One of IQueryBuilder::PARAM_* + * @psalm-param IQueryBuilder::PARAM_* $type + * @return IQueryFunction + */ + public function castColumn($column, $type): IQueryFunction { + switch ($type) { + case IQueryBuilder::PARAM_STR: + return new QueryFunction('CAST(' . $this->helper->quoteColumnName($column) . ' AS CHAR)'); + default: + return parent::castColumn($column, $type); + } + } } diff --git a/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php b/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php index 4cea234779e..f9b58d7d8ed 100644 --- a/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php +++ b/lib/private/DB/QueryBuilder/ExpressionBuilder/OCIExpressionBuilder.php @@ -163,6 +163,7 @@ class OCIExpressionBuilder extends ExpressionBuilder { * * @param string|IQueryFunction $column * @param mixed $type One of IQueryBuilder::PARAM_* + * @psalm-param IQueryBuilder::PARAM_* $type * @return IQueryFunction */ public function castColumn($column, $type): IQueryFunction { diff --git a/lib/private/DB/QueryBuilder/ExpressionBuilder/PgSqlExpressionBuilder.php b/lib/private/DB/QueryBuilder/ExpressionBuilder/PgSqlExpressionBuilder.php index 4e0de5ef42b..0fba5363a28 100644 --- a/lib/private/DB/QueryBuilder/ExpressionBuilder/PgSqlExpressionBuilder.php +++ b/lib/private/DB/QueryBuilder/ExpressionBuilder/PgSqlExpressionBuilder.php @@ -35,6 +35,7 @@ class PgSqlExpressionBuilder extends ExpressionBuilder { * * @param string|IQueryFunction $column * @param mixed $type One of IQueryBuilder::PARAM_* + * @psalm-param IQueryBuilder::PARAM_* $type * @return IQueryFunction */ public function castColumn($column, $type): IQueryFunction { diff --git a/lib/private/DB/QueryBuilder/QueryBuilder.php b/lib/private/DB/QueryBuilder/QueryBuilder.php index a362ff8016e..de326a2a317 100644 --- a/lib/private/DB/QueryBuilder/QueryBuilder.php +++ b/lib/private/DB/QueryBuilder/QueryBuilder.php @@ -694,7 +694,7 @@ class QueryBuilder implements IQueryBuilder { * ->from('users', 'u') * </code> * - * @param string $from The table. + * @param string|IQueryFunction $from The table. * @param string|null $alias The alias of the table. * * @return $this This QueryBuilder instance. @@ -1303,7 +1303,7 @@ class QueryBuilder implements IQueryBuilder { /** * Returns the table name quoted and with database prefix as needed by the implementation * - * @param string $table + * @param string|IQueryFunction $table * @return string */ public function getTableName($table) { diff --git a/lib/private/Memcache/Memcached.php b/lib/private/Memcache/Memcached.php index 50f3fa66ab3..08880451a73 100644 --- a/lib/private/Memcache/Memcached.php +++ b/lib/private/Memcache/Memcached.php @@ -134,27 +134,8 @@ class Memcached extends Cache implements IMemcache { } public function clear($prefix = '') { - $prefix = $this->getNameSpace() . $prefix; - $allKeys = self::$cache->getAllKeys(); - if ($allKeys === false) { - // newer Memcached doesn't like getAllKeys(), flush everything - self::$cache->flush(); - return true; - } - $keys = []; - $prefixLength = strlen($prefix); - foreach ($allKeys as $key) { - if (substr($key, 0, $prefixLength) === $prefix) { - $keys[] = $key; - } - } - if (method_exists(self::$cache, 'deleteMulti')) { - self::$cache->deleteMulti($keys); - } else { - foreach ($keys as $key) { - self::$cache->delete($key); - } - } + // Newer Memcached doesn't like getAllKeys(), flush everything + self::$cache->flush(); return true; } diff --git a/lib/private/TemplateLayout.php b/lib/private/TemplateLayout.php index 9cfc1aec6dd..d7a86ff92bf 100644 --- a/lib/private/TemplateLayout.php +++ b/lib/private/TemplateLayout.php @@ -98,6 +98,10 @@ class TemplateLayout extends \OC_Template { $this->initialState->provideInitialState('unified-search', 'limit-default', SearchQuery::LIMIT_DEFAULT); Util::addScript('core', 'unified-search', 'core'); + // set logo link target + $logoUrl = $this->config->getSystemValueString('logo_url', ''); + $this->assign('logoUrl', $logoUrl); + // Add navigation entry $this->assign('application', ''); $this->assign('appid', $appId); diff --git a/lib/public/Comments/IComment.php b/lib/public/Comments/IComment.php index b9747aefb5b..8465eaf49f4 100644 --- a/lib/public/Comments/IComment.php +++ b/lib/public/Comments/IComment.php @@ -278,4 +278,25 @@ interface IComment { * @since 19.0.0 */ public function setReferenceId(?string $referenceId): IComment; + + /** + * Returns the reactions array if exists + * + * The keys is the emoji of reaction and the value is the total. + * + * @return array<string, integer> e.g. ["👍":1] + * @since 24.0.0 + */ + public function getReactions(): array; + + /** + * Set summarized array of reactions by reaction type + * + * The keys is the emoji of reaction and the value is the total. + * + * @param array<string, integer>|null $reactions e.g. ["👍":1] + * @return IComment + * @since 24.0.0 + */ + public function setReactions(?array $reactions): IComment; } diff --git a/lib/public/DB/QueryBuilder/IExpressionBuilder.php b/lib/public/DB/QueryBuilder/IExpressionBuilder.php index 4758fd06208..53dc1fa5a7f 100644 --- a/lib/public/DB/QueryBuilder/IExpressionBuilder.php +++ b/lib/public/DB/QueryBuilder/IExpressionBuilder.php @@ -433,6 +433,7 @@ interface IExpressionBuilder { * * @param string|IQueryFunction $column * @param mixed $type One of IQueryBuilder::PARAM_* + * @psalm-param IQueryBuilder::PARAM_* $type * @return IQueryFunction * @since 9.0.0 * diff --git a/lib/public/DB/QueryBuilder/IQueryBuilder.php b/lib/public/DB/QueryBuilder/IQueryBuilder.php index 7829696970c..669003246d9 100644 --- a/lib/public/DB/QueryBuilder/IQueryBuilder.php +++ b/lib/public/DB/QueryBuilder/IQueryBuilder.php @@ -470,7 +470,7 @@ interface IQueryBuilder { * ->from('users', 'u') * </code> * - * @param string $from The table. + * @param string|IQueryFunction $from The table. * @param string|null $alias The alias of the table. * * @return $this This QueryBuilder instance. @@ -994,7 +994,7 @@ interface IQueryBuilder { /** * Returns the table name quoted and with database prefix as needed by the implementation * - * @param string $table + * @param string|IQueryFunction $table * @return string * @since 9.0.0 */ diff --git a/tests/lib/Comments/ManagerTest.php b/tests/lib/Comments/ManagerTest.php index 355b1af1347..23a9346909a 100644 --- a/tests/lib/Comments/ManagerTest.php +++ b/tests/lib/Comments/ManagerTest.php @@ -32,6 +32,8 @@ class ManagerTest extends TestCase { $sql = $this->connection->getDatabasePlatform()->getTruncateTableSQL('`*PREFIX*comments`'); $this->connection->prepare($sql)->execute(); + $sql = $this->connection->getDatabasePlatform()->getTruncateTableSQL('`*PREFIX*reactions`'); + $this->connection->prepare($sql)->execute(); } protected function addDatabaseEntry($parentId, $topmostParentId, $creationDT = null, $latestChildDT = null, $objectId = null) { @@ -469,14 +471,21 @@ class ManagerTest extends TestCase { $manager->get($id); } - public function testSaveNew() { + /** + * @dataProvider providerTestSave + */ + public function testSave(string $message, string $actorId, string $verb, ?string $parentId, ?string $id = ''): IComment { $manager = $this->getManager(); $comment = new Comment(); $comment - ->setActor('users', 'alice') + ->setId($id) + ->setActor('users', $actorId) ->setObject('files', 'file64') - ->setMessage('very beautiful, I am impressed!') - ->setVerb('comment'); + ->setMessage($message) + ->setVerb($verb); + if ($parentId) { + $comment->setParentId($parentId); + } $saveSuccessful = $manager->save($comment); $this->assertTrue($saveSuccessful); @@ -487,6 +496,13 @@ class ManagerTest extends TestCase { $loadedComment = $manager->get($comment->getId()); $this->assertSame($comment->getMessage(), $loadedComment->getMessage()); $this->assertEquals($comment->getCreationDateTime()->getTimestamp(), $loadedComment->getCreationDateTime()->getTimestamp()); + return $comment; + } + + public function providerTestSave(): array { + return [ + ['very beautiful, I am impressed!', 'alice', 'comment', null] + ]; } public function testSaveUpdate() { @@ -859,6 +875,77 @@ class ManagerTest extends TestCase { $this->assertTrue(is_string($manager->resolveDisplayName('planet', 'neptune'))); } + private function skipIfNotSupport4ByteUTF() { + if (!$this->getManager()->supportReactions()) { + $this->markTestSkipped('MySQL doesn\'t support 4 byte UTF-8'); + } + } + + /** + * @dataProvider providerTestReactionAddAndDelete + * + * @param IComment[] $comments + * @param array $reactionsExpected + * @return void + */ + public function testReactionAddAndDelete(array $comments, array $reactionsExpected) { + $this->skipIfNotSupport4ByteUTF(); + $manager = $this->getManager(); + + $processedComments = $this->proccessComments($comments); + $comment = end($processedComments); + if ($comment->getParentId()) { + $parent = $manager->get($comment->getParentId()); + $this->assertEqualsCanonicalizing($reactionsExpected, $parent->getReactions()); + } + } + + public function providerTestReactionAddAndDelete(): array { + return[ + [ + [ + ['message', 'alice', 'comment', null], + ], [], + ], + [ + [ + ['message', 'alice', 'comment', null], + ['👍', 'alice', 'reaction', 'message#alice'], + ], ['👍' => 1], + ], + [ + [ + ['message', 'alice', 'comment', null], + ['👍', 'alice', 'reaction', 'message#alice'], + ['👍', 'alice', 'reaction', 'message#alice'], + ], ['👍' => 1], + ], + [ + [ + ['message', 'alice', 'comment', null], + ['👍', 'alice', 'reaction', 'message#alice'], + ['👍', 'frank', 'reaction', 'message#alice'], + ], ['👍' => 2], + ], + [ + [ + ['message', 'alice', 'comment', null], + ['👍', 'alice', 'reaction', 'message#alice'], + ['👍', 'frank', 'reaction', 'message#alice'], + ['👍', 'frank', 'reaction_deleted', 'message#alice'], + ], ['👍' => 1], + ], + [ + [ + ['message', 'alice', 'comment', null], + ['👍', 'alice', 'reaction', 'message#alice'], + ['👍', 'frank', 'reaction', 'message#alice'], + ['👍', 'alice', 'reaction_deleted', 'message#alice'], + ['👍', 'frank', 'reaction_deleted', 'message#alice'], + ], [], + ], + ]; + } public function testResolveDisplayNameInvalidType() { $this->expectException(\InvalidArgumentException::class); @@ -872,4 +959,305 @@ class ManagerTest extends TestCase { $manager->registerDisplayNameResolver('planet', $planetClosure); $this->assertTrue(is_string($manager->resolveDisplayName(1337, 'neptune'))); } + + /** + * @param array $data + * @return IComment[] + */ + private function proccessComments(array $data): array { + /** @var IComment[] */ + $comments = []; + foreach ($data as $comment) { + [$message, $actorId, $verb, $parentText] = $comment; + $parentId = null; + if ($parentText) { + $parentId = (string) $comments[$parentText]->getId(); + } + $id = ''; + if ($verb === 'reaction_deleted') { + $id = $comments[$message . '#' . $actorId]->getId(); + } + $comment = $this->testSave($message, $actorId, $verb, $parentId, $id); + $comments[$comment->getMessage() . '#' . $comment->getActorId()] = $comment; + } + return $comments; + } + + /** + * @dataProvider providerTestRetrieveAllReactions + */ + public function testRetrieveAllReactions(array $comments, array $expected) { + $this->skipIfNotSupport4ByteUTF(); + $manager = $this->getManager(); + + $processedComments = $this->proccessComments($comments); + $comment = reset($processedComments); + $all = $manager->retrieveAllReactions($comment->getId()); + $actual = array_map(function ($row) { + return [ + 'message' => $row->getMessage(), + 'actorId' => $row->getActorId(), + ]; + }, $all); + $this->assertEqualsCanonicalizing($expected, $actual); + } + + public function providerTestRetrieveAllReactions(): array { + return [ + [ + [ + ['message', 'alice', 'comment', null], + ], + [], + ], + [ + [ + ['message', 'alice', 'comment', null], + ['👍', 'alice', 'reaction', 'message#alice'], + ['👍', 'frank', 'reaction', 'message#alice'], + ], + [ + ['👍', 'alice'], + ['👍', 'frank'], + ], + ], + [ + [ + ['message', 'alice', 'comment', null], + ['👍', 'alice', 'reaction', 'message#alice'], + ['👍', 'alice', 'reaction', 'message#alice'], + ['👍', 'frank', 'reaction', 'message#alice'], + ], + [ + ['👍', 'alice'], + ['👍', 'frank'], + ], + ], + ]; + } + + /** + * @dataProvider providerTestRetrieveAllReactionsWithSpecificReaction + */ + public function testRetrieveAllReactionsWithSpecificReaction(array $comments, string $reaction, array $expected) { + $this->skipIfNotSupport4ByteUTF(); + $manager = $this->getManager(); + + $processedComments = $this->proccessComments($comments); + $comment = reset($processedComments); + $all = $manager->retrieveAllReactionsWithSpecificReaction($comment->getId(), $reaction); + $actual = array_map(function ($row) { + return [ + 'message' => $row->getMessage(), + 'actorId' => $row->getActorId(), + ]; + }, $all); + $this->assertEqualsCanonicalizing($expected, $actual); + } + + public function providerTestRetrieveAllReactionsWithSpecificReaction(): array { + return [ + [ + [ + ['message', 'alice', 'comment', null], + ], + '👎', + [], + ], + [ + [ + ['message', 'alice', 'comment', null], + ['👍', 'alice', 'reaction', 'message#alice'], + ['👍', 'frank', 'reaction', 'message#alice'], + ], + '👍', + [ + ['👍', 'alice'], + ['👍', 'frank'], + ], + ], + [ + [ + ['message', 'alice', 'comment', null], + ['👍', 'alice', 'reaction', 'message#alice'], + ['👎', 'alice', 'reaction', 'message#alice'], + ['👍', 'frank', 'reaction', 'message#alice'], + ], + '👎', + [ + ['👎', 'alice'], + ], + ], + ]; + } + + /** + * @dataProvider providerTestGetReactionComment + */ + public function testGetReactionComment(array $comments, array $expected, bool $notFound) { + $this->skipIfNotSupport4ByteUTF(); + $manager = $this->getManager(); + + $processedComments = $this->proccessComments($comments); + + $keys = ['message', 'actorId', 'verb', 'parent']; + $expected = array_combine($keys, $expected); + + if ($notFound) { + $this->expectException(\OCP\Comments\NotFoundException::class); + } + $comment = $processedComments[$expected['message'] . '#' . $expected['actorId']]; + $actual = $manager->getReactionComment($comment->getParentId(), $comment->getActorType(), $comment->getActorId(), $comment->getMessage()); + if (!$notFound) { + $this->assertEquals($expected['message'], $actual->getMessage()); + $this->assertEquals($expected['actorId'], $actual->getActorId()); + $this->assertEquals($expected['verb'], $actual->getVerb()); + $this->assertEquals($processedComments[$expected['parent']]->getId(), $actual->getParentId()); + } + } + + public function providerTestGetReactionComment(): array { + return [ + [ + [ + ['message', 'Matthew', 'comment', null], + ['👍', 'Matthew', 'reaction', 'message#Matthew'], + ['👍', 'Mark', 'reaction', 'message#Matthew'], + ['👍', 'Luke', 'reaction', 'message#Matthew'], + ['👍', 'John', 'reaction', 'message#Matthew'], + ], + ['👍', 'Matthew', 'reaction', 'message#Matthew'], + false, + ], + [ + [ + ['message', 'Matthew', 'comment', null], + ['👍', 'Matthew', 'reaction', 'message#Matthew'], + ['👍', 'Mark', 'reaction', 'message#Matthew'], + ['👍', 'Luke', 'reaction', 'message#Matthew'], + ['👍', 'John', 'reaction', 'message#Matthew'], + ], + ['👍', 'Mark', 'reaction', 'message#Matthew'], + false, + ], + [ + [ + ['message', 'Matthew', 'comment', null], + ['👎', 'Matthew', 'reaction', 'message#Matthew'], + ], + ['👎', 'Matthew', 'reaction', 'message#Matthew'], + false, + ], + [ + [ + ['message', 'Matthew', 'comment', null], + ['👎', 'Matthew', 'reaction', 'message#Matthew'], + ['👎', 'Matthew', 'reaction_deleted', 'message#Matthew'], + ], + ['👎', 'Matthew', 'reaction', 'message#Matthew'], + true, + ], + ]; + } + + /** + * @dataProvider providerTestReactionMessageSize + */ + public function testReactionMessageSize($reactionString, $valid) { + $this->skipIfNotSupport4ByteUTF(); + if (!$valid) { + $this->expectException(\UnexpectedValueException::class); + } + + $manager = $this->getManager(); + $comment = new Comment(); + $comment->setMessage($reactionString) + ->setVerb('reaction') + ->setActor('users', 'alice') + ->setObject('files', 'file64'); + $status = $manager->save($comment); + $this->assertTrue($status); + } + + public function providerTestReactionMessageSize(): array { + return [ + ['a', true], + ['1', true], + ['12', true], + ['123', false], + ['👍', true], + ['👍👍', true], + ['👍🏽', true], + ['👍🏽👍', false], + ['👍🏽👍🏽', false], + ]; + } + + /** + * @dataProvider providerTestReactionsSummarizeOrdered + */ + public function testReactionsSummarizeOrdered(array $comments, array $expected, bool $isFullMatch) { + $this->skipIfNotSupport4ByteUTF(); + $manager = $this->getManager(); + + + $processedComments = $this->proccessComments($comments); + $comment = end($processedComments); + $actual = $manager->get($comment->getParentId()); + + if ($isFullMatch) { + $this->assertSame($expected, $actual->getReactions()); + } else { + $subResult = array_slice($actual->getReactions(), 0, count($expected)); + $this->assertSame($expected, $subResult); + } + } + + public function providerTestReactionsSummarizeOrdered(): array { + return [ + [ + [ + ['message', 'alice', 'comment', null], + ['👍', 'alice', 'reaction', 'message#alice'], + ], + ['👍' => 1], + true, + ], + [ + [ + ['message', 'alice', 'comment', null], + ['👎', 'John', 'reaction', 'message#alice'], + ['💼', 'Luke', 'reaction', 'message#alice'], + ['📋', 'Luke', 'reaction', 'message#alice'], + ['🚀', 'Luke', 'reaction', 'message#alice'], + ['🖤', 'Luke', 'reaction', 'message#alice'], + ['😜', 'Luke', 'reaction', 'message#alice'], + ['🌖', 'Luke', 'reaction', 'message#alice'], + ['💖', 'Luke', 'reaction', 'message#alice'], + ['📥', 'Luke', 'reaction', 'message#alice'], + ['🐉', 'Luke', 'reaction', 'message#alice'], + ['☕', 'Luke', 'reaction', 'message#alice'], + ['🐄', 'Luke', 'reaction', 'message#alice'], + ['🐕', 'Luke', 'reaction', 'message#alice'], + ['🐈', 'Luke', 'reaction', 'message#alice'], + ['🛂', 'Luke', 'reaction', 'message#alice'], + ['🕸', 'Luke', 'reaction', 'message#alice'], + ['🏰', 'Luke', 'reaction', 'message#alice'], + ['⚙️', 'Luke', 'reaction', 'message#alice'], + ['🚨', 'Luke', 'reaction', 'message#alice'], + ['👥', 'Luke', 'reaction', 'message#alice'], + ['👍', 'Paul', 'reaction', 'message#alice'], + ['👍', 'Peter', 'reaction', 'message#alice'], + ['💜', 'Matthew', 'reaction', 'message#alice'], + ['💜', 'Mark', 'reaction', 'message#alice'], + ['💜', 'Luke', 'reaction', 'message#alice'], + ], + [ + '💜' => 3, + '👍' => 2, + ], + false, + ], + ]; + } } diff --git a/tests/lib/DB/QueryBuilder/QueryBuilderTest.php b/tests/lib/DB/QueryBuilder/QueryBuilderTest.php index 19278504707..fab080eec86 100644 --- a/tests/lib/DB/QueryBuilder/QueryBuilderTest.php +++ b/tests/lib/DB/QueryBuilder/QueryBuilderTest.php @@ -28,6 +28,7 @@ use OC\DB\QueryBuilder\Literal; use OC\DB\QueryBuilder\Parameter; use OC\DB\QueryBuilder\QueryBuilder; use OC\SystemConfig; +use OCP\DB\QueryBuilder\IQueryFunction; use OCP\IDBConnection; use OCP\ILogger; @@ -506,7 +507,13 @@ class QueryBuilderTest extends \Test\TestCase { } public function dataFrom() { + $config = $this->createMock(SystemConfig::class); + $logger = $this->createMock(ILogger::class); + $qb = new QueryBuilder(\OC::$server->getDatabaseConnection(), $config, $logger); return [ + [$qb->createFunction('(' . $qb->select('*')->from('test')->getSQL() . ')'), 'q', null, null, [ + ['table' => '(SELECT * FROM `*PREFIX*test`)', 'alias' => '`q`'] + ], '(SELECT * FROM `*PREFIX*test`) `q`'], ['data', null, null, null, [['table' => '`*PREFIX*data`', 'alias' => null]], '`*PREFIX*data`'], ['data', 't', null, null, [['table' => '`*PREFIX*data`', 'alias' => '`t`']], '`*PREFIX*data` `t`'], ['data1', null, 'data2', null, [ @@ -523,9 +530,9 @@ class QueryBuilderTest extends \Test\TestCase { /** * @dataProvider dataFrom * - * @param string $table1Name + * @param string|IQueryFunction $table1Name * @param string $table1Alias - * @param string $table2Name + * @param string|IQueryFunction $table2Name * @param string $table2Alias * @param array $expectedQueryPart * @param string $expectedQuery @@ -1204,6 +1211,9 @@ class QueryBuilderTest extends \Test\TestCase { } public function dataGetTableName() { + $config = $this->createMock(SystemConfig::class); + $logger = $this->createMock(ILogger::class); + $qb = new QueryBuilder(\OC::$server->getDatabaseConnection(), $config, $logger); return [ ['*PREFIX*table', null, '`*PREFIX*table`'], ['*PREFIX*table', true, '`*PREFIX*table`'], @@ -1212,13 +1222,17 @@ class QueryBuilderTest extends \Test\TestCase { ['table', null, '`*PREFIX*table`'], ['table', true, '`*PREFIX*table`'], ['table', false, '`table`'], + + [$qb->createFunction('(' . $qb->select('*')->from('table')->getSQL() . ')'), null, '(SELECT * FROM `*PREFIX*table`)'], + [$qb->createFunction('(' . $qb->select('*')->from('table')->getSQL() . ')'), true, '(SELECT * FROM `*PREFIX*table`)'], + [$qb->createFunction('(' . $qb->select('*')->from('table')->getSQL() . ')'), false, '(SELECT * FROM `*PREFIX*table`)'], ]; } /** * @dataProvider dataGetTableName * - * @param string $tableName + * @param string|IQueryFunction $tableName * @param bool $automatic * @param string $expected */ |