diff options
257 files changed, 1511 insertions, 1512 deletions
diff --git a/.github/workflows/performance.yml b/.github/workflows/performance.yml index 4352db26045..bdf8457ff0b 100644 --- a/.github/workflows/performance.yml +++ b/.github/workflows/performance.yml @@ -41,7 +41,7 @@ jobs: blueprint: tests/blueprints/basic.toml ref: ${{ github.event.pull_request.head.ref }} - name: Run before measurements - uses: nextcloud/profiler@fa03a1e6864fcb63fb92b8940fa72f5191baffbe + uses: nextcloud/profiler@1e66a9de5f76a01e9d1db4f0153bcc1cbf989b3d with: run: | curl -s -X PROPFIND -u test:test http://localhost:8080/remote.php/dav/files/test @@ -50,6 +50,7 @@ jobs: curl -s -u test:test -T README.md http://localhost:8080/remote.php/dav/files/test/new_file.txt curl -s -u test:test -X DELETE http://localhost:8080/remote.php/dav/files/test/new_file.txt output: before.json + profiler-branch: master - name: Apply PR run: | @@ -62,7 +63,7 @@ jobs: - name: Run after measurements id: compare - uses: nextcloud/profiler@fa03a1e6864fcb63fb92b8940fa72f5191baffbe + uses: nextcloud/profiler@1e66a9de5f76a01e9d1db4f0153bcc1cbf989b3d with: run: | curl -s -X PROPFIND -u test:test http://localhost:8080/remote.php/dav/files/test @@ -71,6 +72,7 @@ jobs: curl -s -u test:test -T README.md http://localhost:8080/remote.php/dav/files/test/new_file.txt curl -s -u test:test -X DELETE http://localhost:8080/remote.php/dav/files/test/new_file.txt output: after.json + profiler-branch: master compare-with: before.json - name: Upload profiles diff --git a/apps/dav/lib/BackgroundJob/UpdateCalendarResourcesRoomsBackgroundJob.php b/apps/dav/lib/BackgroundJob/UpdateCalendarResourcesRoomsBackgroundJob.php index f7addd58248..f0ff16d3f2f 100644 --- a/apps/dav/lib/BackgroundJob/UpdateCalendarResourcesRoomsBackgroundJob.php +++ b/apps/dav/lib/BackgroundJob/UpdateCalendarResourcesRoomsBackgroundJob.php @@ -339,7 +339,7 @@ class UpdateCalendarResourcesRoomsBackgroundJob extends TimedJob { * @return string */ private function serializeGroupRestrictions(array $groups): string { - return \json_encode($groups); + return \json_encode($groups, JSON_THROW_ON_ERROR); } /** diff --git a/apps/dav/lib/BulkUpload/BulkUploadPlugin.php b/apps/dav/lib/BulkUpload/BulkUploadPlugin.php index 0d5cce88d0d..dab4bbffc6e 100644 --- a/apps/dav/lib/BulkUpload/BulkUploadPlugin.php +++ b/apps/dav/lib/BulkUpload/BulkUploadPlugin.php @@ -75,7 +75,7 @@ class BulkUploadPlugin extends ServerPlugin { // Return early if an error occurs during parsing. $this->logger->error($e->getMessage()); $response->setStatus(Http::STATUS_BAD_REQUEST); - $response->setBody(json_encode($writtenFiles)); + $response->setBody(json_encode($writtenFiles, JSON_THROW_ON_ERROR)); return false; } @@ -109,7 +109,7 @@ class BulkUploadPlugin extends ServerPlugin { } $response->setStatus(Http::STATUS_OK); - $response->setBody(json_encode($writtenFiles)); + $response->setBody(json_encode($writtenFiles, JSON_THROW_ON_ERROR)); return false; } diff --git a/apps/dav/lib/CalDAV/ResourceBooking/AbstractPrincipalBackend.php b/apps/dav/lib/CalDAV/ResourceBooking/AbstractPrincipalBackend.php index 6fd69b7e3df..d2ad4cafb98 100644 --- a/apps/dav/lib/CalDAV/ResourceBooking/AbstractPrincipalBackend.php +++ b/apps/dav/lib/CalDAV/ResourceBooking/AbstractPrincipalBackend.php @@ -522,7 +522,7 @@ abstract class AbstractPrincipalBackend implements BackendInterface { } // group restrictions contains something, but not parsable, deny access and log warning - $json = json_decode($row['group_restrictions']); + $json = json_decode($row['group_restrictions'], null, 512, JSON_THROW_ON_ERROR); if (!\is_array($json)) { $this->logger->info('group_restrictions field could not be parsed for ' . $this->dbTableName . '::' . $row['id'] . ', denying access to resource'); return false; diff --git a/apps/dav/lib/Comments/CommentsPlugin.php b/apps/dav/lib/Comments/CommentsPlugin.php index a4932751897..f31e479c212 100644 --- a/apps/dav/lib/Comments/CommentsPlugin.php +++ b/apps/dav/lib/Comments/CommentsPlugin.php @@ -220,7 +220,7 @@ class CommentsPlugin extends ServerPlugin { */ private function createComment($objectType, $objectId, $data, $contentType = 'application/json') { if (explode(';', $contentType)[0] === 'application/json') { - $data = json_decode($data, true); + $data = json_decode($data, true, 512, JSON_THROW_ON_ERROR); } else { throw new UnsupportedMediaType(); } diff --git a/apps/dav/lib/Connector/Sabre/FilesPlugin.php b/apps/dav/lib/Connector/Sabre/FilesPlugin.php index 54919824864..f53c62afba2 100644 --- a/apps/dav/lib/Connector/Sabre/FilesPlugin.php +++ b/apps/dav/lib/Connector/Sabre/FilesPlugin.php @@ -321,11 +321,11 @@ class FilesPlugin extends ServerPlugin { $user->getUID() ); $ocmPermissions = $this->ncPermissions2ocmPermissions($ncPermissions); - return json_encode($ocmPermissions); + return json_encode($ocmPermissions, JSON_THROW_ON_ERROR); }); $propFind->handle(self::SHARE_ATTRIBUTES_PROPERTYNAME, function () use ($node, $httpRequest) { - return json_encode($node->getShareAttributes()); + return json_encode($node->getShareAttributes(), JSON_THROW_ON_ERROR); }); $propFind->handle(self::GETETAG_PROPERTYNAME, function () use ($node): string { @@ -350,7 +350,7 @@ class FilesPlugin extends ServerPlugin { }); $propFind->handle(self::HAS_PREVIEW_PROPERTYNAME, function () use ($node) { - return json_encode($this->previewManager->isAvailable($node->getFileInfo())); + return json_encode($this->previewManager->isAvailable($node->getFileInfo()), JSON_THROW_ON_ERROR); }); $propFind->handle(self::SIZE_PROPERTYNAME, function () use ($node): ?int { return $node->getSize(); @@ -422,7 +422,7 @@ class FilesPlugin extends ServerPlugin { if ($this->config->getSystemValueBool('enable_file_metadata', true)) { $propFind->handle(self::FILE_METADATA_SIZE, function () use ($node) { if (!str_starts_with($node->getFileInfo()->getMimetype(), 'image')) { - return json_encode((object)[]); + return json_encode((object)[], JSON_THROW_ON_ERROR); } if ($node->hasMetadata('size')) { @@ -438,7 +438,7 @@ class FilesPlugin extends ServerPlugin { \OC::$server->get(LoggerInterface::class)->debug('Inefficient fetching of metadata'); } - return json_encode((object)$sizeMetadata->getMetadata()); + return json_encode((object)$sizeMetadata->getMetadata(), JSON_THROW_ON_ERROR); }); } } diff --git a/apps/dav/lib/SystemTag/SystemTagPlugin.php b/apps/dav/lib/SystemTag/SystemTagPlugin.php index b6bd7d3b7cd..c21935edfdc 100644 --- a/apps/dav/lib/SystemTag/SystemTagPlugin.php +++ b/apps/dav/lib/SystemTag/SystemTagPlugin.php @@ -163,7 +163,7 @@ class SystemTagPlugin extends \Sabre\DAV\ServerPlugin { */ private function createTag($data, $contentType = 'application/json') { if (explode(';', $contentType)[0] === 'application/json') { - $data = json_decode($data, true); + $data = json_decode($data, true, 512, JSON_THROW_ON_ERROR); } else { throw new UnsupportedMediaType(); } diff --git a/apps/dav/lib/UserMigration/ContactsMigrator.php b/apps/dav/lib/UserMigration/ContactsMigrator.php index d2ba82eb2e5..196d0a6110a 100644 --- a/apps/dav/lib/UserMigration/ContactsMigrator.php +++ b/apps/dav/lib/UserMigration/ContactsMigrator.php @@ -248,7 +248,7 @@ class ContactsMigrator implements IMigrator, ISizeEstimationMigrator { $exportDestination->addFileContents($exportPath, $this->serializeCards($vCards)); $metadata = array_filter(['displayName' => $displayName, 'description' => $description]); - $exportDestination->addFileContents($metadataExportPath, json_encode($metadata)); + $exportDestination->addFileContents($metadataExportPath, json_encode($metadata, JSON_THROW_ON_ERROR)); } } catch (Throwable $e) { throw new CalendarMigratorException('Could not export address book', 0, $e); diff --git a/apps/dav/tests/unit/AppInfo/ApplicationTest.php b/apps/dav/tests/unit/AppInfo/ApplicationTest.php index 2e728f8e872..ff456c90de2 100644 --- a/apps/dav/tests/unit/AppInfo/ApplicationTest.php +++ b/apps/dav/tests/unit/AppInfo/ApplicationTest.php @@ -35,7 +35,7 @@ use Test\TestCase; * @package OCA\DAV\Tests\Unit\AppInfo */ class ApplicationTest extends TestCase { - public function test() { + public function test(): void { $app = new Application(); $c = $app->getContainer(); diff --git a/apps/dav/tests/unit/AppInfo/PluginManagerTest.php b/apps/dav/tests/unit/AppInfo/PluginManagerTest.php index 53e63269067..17f8ffda625 100644 --- a/apps/dav/tests/unit/AppInfo/PluginManagerTest.php +++ b/apps/dav/tests/unit/AppInfo/PluginManagerTest.php @@ -40,7 +40,7 @@ use Test\TestCase; * @package OCA\DAV\Tests\Unit\AppInfo */ class PluginManagerTest extends TestCase { - public function test() { + public function test(): void { $server = $this->createMock(ServerContainer::class); diff --git a/apps/dav/tests/unit/Avatars/AvatarHomeTest.php b/apps/dav/tests/unit/Avatars/AvatarHomeTest.php index 9b2d91954de..531397053fe 100644 --- a/apps/dav/tests/unit/Avatars/AvatarHomeTest.php +++ b/apps/dav/tests/unit/Avatars/AvatarHomeTest.php @@ -49,7 +49,7 @@ class AvatarHomeTest extends TestCase { /** * @dataProvider providesForbiddenMethods */ - public function testForbiddenMethods($method) { + public function testForbiddenMethods($method): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->home->$method(''); @@ -64,7 +64,7 @@ class AvatarHomeTest extends TestCase { ]; } - public function testGetName() { + public function testGetName(): void { $n = $this->home->getName(); self::assertEquals('admin', $n); } @@ -82,7 +82,7 @@ class AvatarHomeTest extends TestCase { /** * @dataProvider providesTestGetChild */ - public function testGetChild($expectedException, $hasAvatar, $path) { + public function testGetChild($expectedException, $hasAvatar, $path): void { if ($expectedException !== null) { $this->expectException($expectedException); } @@ -95,7 +95,7 @@ class AvatarHomeTest extends TestCase { $this->assertInstanceOf(AvatarNode::class, $avatarNode); } - public function testGetChildren() { + public function testGetChildren(): void { $avatarNodes = $this->home->getChildren(); self::assertEquals(0, count($avatarNodes)); @@ -109,7 +109,7 @@ class AvatarHomeTest extends TestCase { /** * @dataProvider providesTestGetChild */ - public function testChildExists($expectedException, $hasAvatar, $path) { + public function testChildExists($expectedException, $hasAvatar, $path): void { $avatar = $this->createMock(IAvatar::class); $avatar->method('exists')->willReturn($hasAvatar); @@ -118,7 +118,7 @@ class AvatarHomeTest extends TestCase { $this->assertEquals($hasAvatar, $childExists); } - public function testGetLastModified() { + public function testGetLastModified(): void { self::assertNull($this->home->getLastModified()); } } diff --git a/apps/dav/tests/unit/Avatars/AvatarNodeTest.php b/apps/dav/tests/unit/Avatars/AvatarNodeTest.php index 5a124d7f15b..9f8e37aa8c7 100644 --- a/apps/dav/tests/unit/Avatars/AvatarNodeTest.php +++ b/apps/dav/tests/unit/Avatars/AvatarNodeTest.php @@ -27,14 +27,14 @@ use OCP\IAvatar; use Test\TestCase; class AvatarNodeTest extends TestCase { - public function testGetName() { + public function testGetName(): void { /** @var IAvatar | \PHPUnit\Framework\MockObject\MockObject $a */ $a = $this->createMock(IAvatar::class); $n = new AvatarNode(1024, 'png', $a); $this->assertEquals('1024.png', $n->getName()); } - public function testGetContentType() { + public function testGetContentType(): void { /** @var IAvatar | \PHPUnit\Framework\MockObject\MockObject $a */ $a = $this->createMock(IAvatar::class); $n = new AvatarNode(1024, 'png', $a); diff --git a/apps/dav/tests/unit/BackgroundJob/CleanupInvitationTokenJobTest.php b/apps/dav/tests/unit/BackgroundJob/CleanupInvitationTokenJobTest.php index 609d0504170..ac23207fc6d 100644 --- a/apps/dav/tests/unit/BackgroundJob/CleanupInvitationTokenJobTest.php +++ b/apps/dav/tests/unit/BackgroundJob/CleanupInvitationTokenJobTest.php @@ -55,7 +55,7 @@ class CleanupInvitationTokenJobTest extends TestCase { $this->dbConnection, $this->timeFactory); } - public function testRun() { + public function testRun(): void { $this->timeFactory->expects($this->once()) ->method('getTime') ->with() diff --git a/apps/dav/tests/unit/BackgroundJob/GenerateBirthdayCalendarBackgroundJobTest.php b/apps/dav/tests/unit/BackgroundJob/GenerateBirthdayCalendarBackgroundJobTest.php index e0601c5c71a..4704a217d04 100644 --- a/apps/dav/tests/unit/BackgroundJob/GenerateBirthdayCalendarBackgroundJobTest.php +++ b/apps/dav/tests/unit/BackgroundJob/GenerateBirthdayCalendarBackgroundJobTest.php @@ -63,7 +63,7 @@ class GenerateBirthdayCalendarBackgroundJobTest extends TestCase { ); } - public function testRun() { + public function testRun(): void { $this->config->expects($this->once()) ->method('getAppValue') ->with('dav', 'generateBirthdayCalendar', 'yes') @@ -85,7 +85,7 @@ class GenerateBirthdayCalendarBackgroundJobTest extends TestCase { $this->backgroundJob->run(['userId' => 'user123']); } - public function testRunAndReset() { + public function testRunAndReset(): void { $this->config->expects($this->once()) ->method('getAppValue') ->with('dav', 'generateBirthdayCalendar', 'yes') @@ -107,7 +107,7 @@ class GenerateBirthdayCalendarBackgroundJobTest extends TestCase { $this->backgroundJob->run(['userId' => 'user123', 'purgeBeforeGenerating' => true]); } - public function testRunGloballyDisabled() { + public function testRunGloballyDisabled(): void { $this->config->expects($this->once()) ->method('getAppValue') ->with('dav', 'generateBirthdayCalendar', 'yes') @@ -122,7 +122,7 @@ class GenerateBirthdayCalendarBackgroundJobTest extends TestCase { $this->backgroundJob->run(['userId' => 'user123']); } - public function testRunUserDisabled() { + public function testRunUserDisabled(): void { $this->config->expects($this->once()) ->method('getAppValue') ->with('dav', 'generateBirthdayCalendar', 'yes') diff --git a/apps/dav/tests/unit/BackgroundJob/PruneOutdatedSyncTokensJobTest.php b/apps/dav/tests/unit/BackgroundJob/PruneOutdatedSyncTokensJobTest.php index 8438d1865d0..be6298b3372 100644 --- a/apps/dav/tests/unit/BackgroundJob/PruneOutdatedSyncTokensJobTest.php +++ b/apps/dav/tests/unit/BackgroundJob/PruneOutdatedSyncTokensJobTest.php @@ -72,7 +72,7 @@ class PruneOutdatedSyncTokensJobTest extends TestCase { /** * @dataProvider dataForTestRun */ - public function testRun(string $configValue, int $actualLimit, int $deletedCalendarSyncTokens, int $deletedAddressBookSyncTokens) { + public function testRun(string $configValue, int $actualLimit, int $deletedCalendarSyncTokens, int $deletedAddressBookSyncTokens): void { $this->config->expects($this->once()) ->method('getAppValue') ->with(Application::APP_ID, 'totalNumberOfSyncTokensToKeep', '10000') diff --git a/apps/dav/tests/unit/BackgroundJob/RefreshWebcalJobTest.php b/apps/dav/tests/unit/BackgroundJob/RefreshWebcalJobTest.php index 360c4c791c7..81b6118a265 100644 --- a/apps/dav/tests/unit/BackgroundJob/RefreshWebcalJobTest.php +++ b/apps/dav/tests/unit/BackgroundJob/RefreshWebcalJobTest.php @@ -74,7 +74,7 @@ class RefreshWebcalJobTest extends TestCase { * * @dataProvider runDataProvider */ - public function testRun(int $lastRun, int $time, bool $process) { + public function testRun(int $lastRun, int $time, bool $process): void { $backgroundJob = new RefreshWebcalJob($this->refreshWebcalService, $this->config, $this->logger, $this->timeFactory); $backgroundJob->setId(42); diff --git a/apps/dav/tests/unit/BackgroundJob/RegisterRegenerateBirthdayCalendarsTest.php b/apps/dav/tests/unit/BackgroundJob/RegisterRegenerateBirthdayCalendarsTest.php index 9e9f6822fe1..7a69b3493f8 100644 --- a/apps/dav/tests/unit/BackgroundJob/RegisterRegenerateBirthdayCalendarsTest.php +++ b/apps/dav/tests/unit/BackgroundJob/RegisterRegenerateBirthdayCalendarsTest.php @@ -63,10 +63,10 @@ class RegisterRegenerateBirthdayCalendarsTest extends TestCase { ); } - public function testRun() { + public function testRun(): void { $this->userManager->expects($this->once()) ->method('callForSeenUsers') - ->willReturnCallback(function ($closure) { + ->willReturnCallback(function ($closure): void { $user1 = $this->createMock(IUser::class); $user1->method('getUID')->willReturn('uid1'); $user2 = $this->createMock(IUser::class); diff --git a/apps/dav/tests/unit/BackgroundJob/UpdateCalendarResourcesRoomsBackgroundJobTest.php b/apps/dav/tests/unit/BackgroundJob/UpdateCalendarResourcesRoomsBackgroundJobTest.php index 59b68452862..ccd84797079 100644 --- a/apps/dav/tests/unit/BackgroundJob/UpdateCalendarResourcesRoomsBackgroundJobTest.php +++ b/apps/dav/tests/unit/BackgroundJob/UpdateCalendarResourcesRoomsBackgroundJobTest.php @@ -116,7 +116,7 @@ class UpdateCalendarResourcesRoomsBackgroundJobTest extends TestCase { * [backend4, res9, Beamer2, {}] - [] */ - public function testRun() { + public function testRun(): void { $this->createTestResourcesInCache(); $backend2 = $this->createMock(IBackend::class); diff --git a/apps/dav/tests/unit/CalDAV/AbstractCalDavBackend.php b/apps/dav/tests/unit/CalDAV/AbstractCalDavBackend.php index 73d21746b64..b4a414297d7 100644 --- a/apps/dav/tests/unit/CalDAV/AbstractCalDavBackend.php +++ b/apps/dav/tests/unit/CalDAV/AbstractCalDavBackend.php @@ -134,7 +134,7 @@ abstract class AbstractCalDavBackend extends TestCase { parent::tearDown(); } - public function cleanUpBackend() { + public function cleanUpBackend(): void { if (is_null($this->backend)) { return; } diff --git a/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php b/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php index 1ad6da177ca..9c9e13237de 100644 --- a/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php +++ b/apps/dav/tests/unit/CalDAV/Activity/BackendTest.php @@ -108,11 +108,11 @@ class BackendTest extends TestCase { * @param string $expectedSubject * @param array $expectedPayload */ - public function testCallTriggerCalendarActivity($method, array $payload, $expectedSubject, array $expectedPayload) { + public function testCallTriggerCalendarActivity($method, array $payload, $expectedSubject, array $expectedPayload): void { $backend = $this->getBackend(['triggerCalendarActivity']); $backend->expects($this->once()) ->method('triggerCalendarActivity') - ->willReturnCallback(function () use ($expectedPayload, $expectedSubject) { + ->willReturnCallback(function () use ($expectedPayload, $expectedSubject): void { $arguments = func_get_args(); $this->assertSame($expectedSubject, array_shift($arguments)); $this->assertEquals($expectedPayload, $arguments); @@ -213,7 +213,7 @@ class BackendTest extends TestCase { * @param string[]|null $shareUsers * @param string[] $users */ - public function testTriggerCalendarActivity($action, array $data, array $shares, array $changedProperties, $currentUser, $author, $shareUsers, array $users) { + public function testTriggerCalendarActivity($action, array $data, array $shares, array $changedProperties, $currentUser, $author, $shareUsers, array $users): void { $backend = $this->getBackend(['getUsersForShares']); if ($shareUsers === null) { @@ -280,7 +280,7 @@ class BackendTest extends TestCase { $this->invokePrivate($backend, 'triggerCalendarActivity', [$action, $data, $shares, $changedProperties]); } - public function testUserDeletionDoesNotCreateActivity() { + public function testUserDeletionDoesNotCreateActivity(): void { $backend = $this->getBackend(); $this->userManager->expects($this->once()) @@ -347,7 +347,7 @@ class BackendTest extends TestCase { * @param array $groups * @param array $expected */ - public function testGetUsersForShares(array $shares, array $groups, array $expected) { + public function testGetUsersForShares(array $shares, array $groups, array $expected): void { $backend = $this->getBackend(); $getGroups = []; diff --git a/apps/dav/tests/unit/CalDAV/Activity/Filter/CalendarTest.php b/apps/dav/tests/unit/CalDAV/Activity/Filter/CalendarTest.php index de31c71aacb..25cf25f71cb 100644 --- a/apps/dav/tests/unit/CalDAV/Activity/Filter/CalendarTest.php +++ b/apps/dav/tests/unit/CalDAV/Activity/Filter/CalendarTest.php @@ -55,7 +55,7 @@ class CalendarTest extends TestCase { ); } - public function testGetIcon() { + public function testGetIcon(): void { $this->url->expects($this->once()) ->method('imagePath') ->with('core', 'places/calendar.svg') @@ -83,7 +83,7 @@ class CalendarTest extends TestCase { * @param string[] $types * @param string[] $expected */ - public function testFilterTypes($types, $expected) { + public function testFilterTypes($types, $expected): void { $this->assertEquals($expected, $this->filter->filterTypes($types)); } } diff --git a/apps/dav/tests/unit/CalDAV/Activity/Filter/GenericTest.php b/apps/dav/tests/unit/CalDAV/Activity/Filter/GenericTest.php index af4c87c354b..d8fe3f2233a 100644 --- a/apps/dav/tests/unit/CalDAV/Activity/Filter/GenericTest.php +++ b/apps/dav/tests/unit/CalDAV/Activity/Filter/GenericTest.php @@ -43,7 +43,7 @@ class GenericTest extends TestCase { * @dataProvider dataFilters * @param string $filterClass */ - public function testImplementsInterface($filterClass) { + public function testImplementsInterface($filterClass): void { $filter = \OC::$server->query($filterClass); $this->assertInstanceOf(IFilter::class, $filter); } @@ -52,7 +52,7 @@ class GenericTest extends TestCase { * @dataProvider dataFilters * @param string $filterClass */ - public function testGetIdentifier($filterClass) { + public function testGetIdentifier($filterClass): void { /** @var IFilter $filter */ $filter = \OC::$server->query($filterClass); $this->assertIsString($filter->getIdentifier()); @@ -62,7 +62,7 @@ class GenericTest extends TestCase { * @dataProvider dataFilters * @param string $filterClass */ - public function testGetName($filterClass) { + public function testGetName($filterClass): void { /** @var IFilter $filter */ $filter = \OC::$server->query($filterClass); $this->assertIsString($filter->getName()); @@ -72,7 +72,7 @@ class GenericTest extends TestCase { * @dataProvider dataFilters * @param string $filterClass */ - public function testGetPriority($filterClass) { + public function testGetPriority($filterClass): void { /** @var IFilter $filter */ $filter = \OC::$server->query($filterClass); $priority = $filter->getPriority(); @@ -85,7 +85,7 @@ class GenericTest extends TestCase { * @dataProvider dataFilters * @param string $filterClass */ - public function testGetIcon($filterClass) { + public function testGetIcon($filterClass): void { /** @var IFilter $filter */ $filter = \OC::$server->query($filterClass); $this->assertIsString($filter->getIcon()); @@ -96,7 +96,7 @@ class GenericTest extends TestCase { * @dataProvider dataFilters * @param string $filterClass */ - public function testFilterTypes($filterClass) { + public function testFilterTypes($filterClass): void { /** @var IFilter $filter */ $filter = \OC::$server->query($filterClass); $this->assertIsArray($filter->filterTypes([])); @@ -106,7 +106,7 @@ class GenericTest extends TestCase { * @dataProvider dataFilters * @param string $filterClass */ - public function testAllowedApps($filterClass) { + public function testAllowedApps($filterClass): void { /** @var IFilter $filter */ $filter = \OC::$server->query($filterClass); $this->assertIsArray($filter->allowedApps()); diff --git a/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php b/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php index e119064046b..8d09d3d417a 100644 --- a/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php +++ b/apps/dav/tests/unit/CalDAV/Activity/Filter/TodoTest.php @@ -54,7 +54,7 @@ class TodoTest extends TestCase { ); } - public function testGetIcon() { + public function testGetIcon(): void { $this->url->expects($this->once()) ->method('imagePath') ->with('core', 'actions/checkmark.svg') @@ -82,7 +82,7 @@ class TodoTest extends TestCase { * @param string[] $types * @param string[] $expected */ - public function testFilterTypes($types, $expected) { + public function testFilterTypes($types, $expected): void { $this->assertEquals($expected, $this->filter->filterTypes($types)); } } diff --git a/apps/dav/tests/unit/CalDAV/Activity/Provider/BaseTest.php b/apps/dav/tests/unit/CalDAV/Activity/Provider/BaseTest.php index e4622336d74..4cef4ecc22e 100644 --- a/apps/dav/tests/unit/CalDAV/Activity/Provider/BaseTest.php +++ b/apps/dav/tests/unit/CalDAV/Activity/Provider/BaseTest.php @@ -77,7 +77,7 @@ class BaseTest extends TestCase { * @param array $parameters * @param string $parsedSubject */ - public function testSetSubjects(string $subject, array $parameters, string $parsedSubject) { + public function testSetSubjects(string $subject, array $parameters, string $parsedSubject): void { $event = $this->createMock(IEvent::class); $event->expects($this->once()) ->method('setRichSubject') @@ -103,7 +103,7 @@ class BaseTest extends TestCase { * @param array $data * @param string $name */ - public function testGenerateCalendarParameter(array $data, string $name) { + public function testGenerateCalendarParameter(array $data, string $name): void { $l = $this->createMock(IL10N::class); $l->expects($this->any()) ->method('t') @@ -130,7 +130,7 @@ class BaseTest extends TestCase { * @param int $id * @param string $name */ - public function testGenerateLegacyCalendarParameter(int $id, string $name) { + public function testGenerateLegacyCalendarParameter(int $id, string $name): void { $this->assertEquals([ 'type' => 'calendar', 'id' => $id, @@ -149,7 +149,7 @@ class BaseTest extends TestCase { * @dataProvider dataGenerateGroupParameter * @param string $gid */ - public function testGenerateGroupParameter(string $gid) { + public function testGenerateGroupParameter(string $gid): void { $this->assertEquals([ 'type' => 'user-group', 'id' => $gid, diff --git a/apps/dav/tests/unit/CalDAV/Activity/Provider/EventTest.php b/apps/dav/tests/unit/CalDAV/Activity/Provider/EventTest.php index cb86b80d311..583ac6ca725 100644 --- a/apps/dav/tests/unit/CalDAV/Activity/Provider/EventTest.php +++ b/apps/dav/tests/unit/CalDAV/Activity/Provider/EventTest.php @@ -107,7 +107,7 @@ class EventTest extends TestCase { * @param array|null $link * @param bool $calendarAppEnabled */ - public function testGenerateObjectParameter(int $id, string $name, ?array $link, bool $calendarAppEnabled = true) { + public function testGenerateObjectParameter(int $id, string $name, ?array $link, bool $calendarAppEnabled = true): void { if ($link) { $generatedLink = [ 'view' => 'dayGridMonth', @@ -155,7 +155,7 @@ class EventTest extends TestCase { * @param mixed $eventData * @param string $exception */ - public function testGenerateObjectParameterThrows($eventData, string $exception = InvalidArgumentException::class) { + public function testGenerateObjectParameterThrows($eventData, string $exception = InvalidArgumentException::class): void { $this->expectException($exception); $this->invokePrivate($this->provider, 'generateObjectParameter', [$eventData]); diff --git a/apps/dav/tests/unit/CalDAV/Activity/Setting/GenericTest.php b/apps/dav/tests/unit/CalDAV/Activity/Setting/GenericTest.php index b4c3506565a..015696e352e 100644 --- a/apps/dav/tests/unit/CalDAV/Activity/Setting/GenericTest.php +++ b/apps/dav/tests/unit/CalDAV/Activity/Setting/GenericTest.php @@ -42,7 +42,7 @@ class GenericTest extends TestCase { * @dataProvider dataSettings * @param string $settingClass */ - public function testImplementsInterface($settingClass) { + public function testImplementsInterface($settingClass): void { $setting = \OC::$server->query($settingClass); $this->assertInstanceOf(ISetting::class, $setting); } @@ -51,7 +51,7 @@ class GenericTest extends TestCase { * @dataProvider dataSettings * @param string $settingClass */ - public function testGetIdentifier($settingClass) { + public function testGetIdentifier($settingClass): void { /** @var ISetting $setting */ $setting = \OC::$server->query($settingClass); $this->assertIsString($setting->getIdentifier()); @@ -61,7 +61,7 @@ class GenericTest extends TestCase { * @dataProvider dataSettings * @param string $settingClass */ - public function testGetName($settingClass) { + public function testGetName($settingClass): void { /** @var ISetting $setting */ $setting = \OC::$server->query($settingClass); $this->assertIsString($setting->getName()); @@ -71,7 +71,7 @@ class GenericTest extends TestCase { * @dataProvider dataSettings * @param string $settingClass */ - public function testGetPriority($settingClass) { + public function testGetPriority($settingClass): void { /** @var ISetting $setting */ $setting = \OC::$server->query($settingClass); $priority = $setting->getPriority(); @@ -84,7 +84,7 @@ class GenericTest extends TestCase { * @dataProvider dataSettings * @param string $settingClass */ - public function testCanChangeStream($settingClass) { + public function testCanChangeStream($settingClass): void { /** @var ISetting $setting */ $setting = \OC::$server->query($settingClass); $this->assertIsBool($setting->canChangeStream()); @@ -94,7 +94,7 @@ class GenericTest extends TestCase { * @dataProvider dataSettings * @param string $settingClass */ - public function testIsDefaultEnabledStream($settingClass) { + public function testIsDefaultEnabledStream($settingClass): void { /** @var ISetting $setting */ $setting = \OC::$server->query($settingClass); $this->assertIsBool($setting->isDefaultEnabledStream()); @@ -104,7 +104,7 @@ class GenericTest extends TestCase { * @dataProvider dataSettings * @param string $settingClass */ - public function testCanChangeMail($settingClass) { + public function testCanChangeMail($settingClass): void { /** @var ISetting $setting */ $setting = \OC::$server->query($settingClass); $this->assertIsBool($setting->canChangeMail()); @@ -114,7 +114,7 @@ class GenericTest extends TestCase { * @dataProvider dataSettings * @param string $settingClass */ - public function testIsDefaultEnabledMail($settingClass) { + public function testIsDefaultEnabledMail($settingClass): void { /** @var ISetting $setting */ $setting = \OC::$server->query($settingClass); $this->assertIsBool($setting->isDefaultEnabledMail()); diff --git a/apps/dav/tests/unit/CalDAV/BirthdayCalendar/EnablePluginTest.php b/apps/dav/tests/unit/CalDAV/BirthdayCalendar/EnablePluginTest.php index 99e5f2e8e54..ec27dc89aa1 100644 --- a/apps/dav/tests/unit/CalDAV/BirthdayCalendar/EnablePluginTest.php +++ b/apps/dav/tests/unit/CalDAV/BirthdayCalendar/EnablePluginTest.php @@ -69,15 +69,15 @@ class EnablePluginTest extends TestCase { $this->response = $this->createMock(\Sabre\HTTP\ResponseInterface::class); } - public function testGetFeatures() { + public function testGetFeatures(): void { $this->assertEquals(['nc-enable-birthday-calendar'], $this->plugin->getFeatures()); } - public function testGetName() { + public function testGetName(): void { $this->assertEquals('nc-enable-birthday-calendar', $this->plugin->getPluginName()); } - public function testInitialize() { + public function testInitialize(): void { $server = $this->createMock(\Sabre\DAV\Server::class); $plugin = new EnablePlugin($this->config, $this->birthdayService); @@ -89,7 +89,7 @@ class EnablePluginTest extends TestCase { $plugin->initialize($server); } - public function testHttpPostNoCalendarHome() { + public function testHttpPostNoCalendarHome(): void { $calendar = $this->createMock(Calendar::class); $this->server->expects($this->once()) @@ -109,7 +109,7 @@ class EnablePluginTest extends TestCase { $this->plugin->httpPost($this->request, $this->response); } - public function testHttpPostWrongRequest() { + public function testHttpPostWrongRequest(): void { $calendarHome = $this->createMock(CalendarHome::class); $this->server->expects($this->once()) @@ -130,7 +130,7 @@ class EnablePluginTest extends TestCase { $this->server->xml->expects($this->once()) ->method('parse') - ->willReturnCallback(function ($requestBody, $url, &$documentType) { + ->willReturnCallback(function ($requestBody, $url, &$documentType): void { $documentType = '{http://nextcloud.com/ns}disable-birthday-calendar'; }); @@ -143,7 +143,7 @@ class EnablePluginTest extends TestCase { $this->plugin->httpPost($this->request, $this->response); } - public function testHttpPost() { + public function testHttpPost(): void { $calendarHome = $this->createMock(CalendarHome::class); $this->server->expects($this->once()) @@ -168,7 +168,7 @@ class EnablePluginTest extends TestCase { $this->server->xml->expects($this->once()) ->method('parse') - ->willReturnCallback(function ($requestBody, $url, &$documentType) { + ->willReturnCallback(function ($requestBody, $url, &$documentType): void { $documentType = '{http://nextcloud.com/ns}enable-birthday-calendar'; }); diff --git a/apps/dav/tests/unit/CalDAV/CachedSubscriptionObjectTest.php b/apps/dav/tests/unit/CalDAV/CachedSubscriptionObjectTest.php index 74e3784aefa..f82a6fdd7a3 100644 --- a/apps/dav/tests/unit/CalDAV/CachedSubscriptionObjectTest.php +++ b/apps/dav/tests/unit/CalDAV/CachedSubscriptionObjectTest.php @@ -28,7 +28,7 @@ use OCA\DAV\CalDAV\CachedSubscriptionObject; use OCA\DAV\CalDAV\CalDavBackend; class CachedSubscriptionObjectTest extends \Test\TestCase { - public function testGet() { + public function testGet(): void { $backend = $this->createMock(CalDavBackend::class); $calendarInfo = [ '{http://owncloud.org/ns}owner-principal' => 'user1', @@ -52,7 +52,7 @@ class CachedSubscriptionObjectTest extends \Test\TestCase { } - public function testPut() { + public function testPut(): void { $this->expectException(\Sabre\DAV\Exception\MethodNotAllowed::class); $this->expectExceptionMessage('Creating objects in a cached subscription is not allowed'); @@ -72,7 +72,7 @@ class CachedSubscriptionObjectTest extends \Test\TestCase { } - public function testDelete() { + public function testDelete(): void { $this->expectException(\Sabre\DAV\Exception\MethodNotAllowed::class); $this->expectExceptionMessage('Deleting objects in a cached subscription is not allowed'); diff --git a/apps/dav/tests/unit/CalDAV/CachedSubscriptionTest.php b/apps/dav/tests/unit/CalDAV/CachedSubscriptionTest.php index 6b5b5f65347..254c3199472 100644 --- a/apps/dav/tests/unit/CalDAV/CachedSubscriptionTest.php +++ b/apps/dav/tests/unit/CalDAV/CachedSubscriptionTest.php @@ -30,7 +30,7 @@ use OCA\DAV\CalDAV\CalDavBackend; use Sabre\DAV\PropPatch; class CachedSubscriptionTest extends \Test\TestCase { - public function testGetACL() { + public function testGetACL(): void { $backend = $this->createMock(CalDavBackend::class); $calendarInfo = [ '{http://owncloud.org/ns}owner-principal' => 'user1', @@ -64,7 +64,7 @@ class CachedSubscriptionTest extends \Test\TestCase { ], $calendar->getACL()); } - public function testGetChildACL() { + public function testGetChildACL(): void { $backend = $this->createMock(CalDavBackend::class); $calendarInfo = [ '{http://owncloud.org/ns}owner-principal' => 'user1', @@ -93,7 +93,7 @@ class CachedSubscriptionTest extends \Test\TestCase { ], $calendar->getChildACL()); } - public function testGetOwner() { + public function testGetOwner(): void { $backend = $this->createMock(CalDavBackend::class); $calendarInfo = [ '{http://owncloud.org/ns}owner-principal' => 'user1', @@ -106,7 +106,7 @@ class CachedSubscriptionTest extends \Test\TestCase { $this->assertEquals('user1', $calendar->getOwner()); } - public function testDelete() { + public function testDelete(): void { $backend = $this->createMock(CalDavBackend::class); $calendarInfo = [ '{http://owncloud.org/ns}owner-principal' => 'user1', @@ -123,7 +123,7 @@ class CachedSubscriptionTest extends \Test\TestCase { $calendar->delete(); } - public function testPropPatch() { + public function testPropPatch(): void { $backend = $this->createMock(CalDavBackend::class); $calendarInfo = [ '{http://owncloud.org/ns}owner-principal' => 'user1', @@ -142,7 +142,7 @@ class CachedSubscriptionTest extends \Test\TestCase { } - public function testGetChild() { + public function testGetChild(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); $this->expectExceptionMessage('Calendar object not found'); @@ -176,7 +176,7 @@ class CachedSubscriptionTest extends \Test\TestCase { $calendar->getChild('foo2'); } - public function testGetChildren() { + public function testGetChildren(): void { $backend = $this->createMock(CalDavBackend::class); $calendarInfo = [ '{http://owncloud.org/ns}owner-principal' => 'user1', @@ -207,7 +207,7 @@ class CachedSubscriptionTest extends \Test\TestCase { $this->assertInstanceOf(CachedSubscriptionObject::class, $res[1]); } - public function testGetMultipleChildren() { + public function testGetMultipleChildren(): void { $backend = $this->createMock(CalDavBackend::class); $calendarInfo = [ '{http://owncloud.org/ns}owner-principal' => 'user1', @@ -239,7 +239,7 @@ class CachedSubscriptionTest extends \Test\TestCase { } - public function testCreateFile() { + public function testCreateFile(): void { $this->expectException(\Sabre\DAV\Exception\MethodNotAllowed::class); $this->expectExceptionMessage('Creating objects in cached subscription is not allowed'); @@ -255,7 +255,7 @@ class CachedSubscriptionTest extends \Test\TestCase { $calendar->createFile('foo', []); } - public function testChildExists() { + public function testChildExists(): void { $backend = $this->createMock(CalDavBackend::class); $calendarInfo = [ '{http://owncloud.org/ns}owner-principal' => 'user1', @@ -284,7 +284,7 @@ class CachedSubscriptionTest extends \Test\TestCase { $this->assertEquals(false, $calendar->childExists('foo2')); } - public function testCalendarQuery() { + public function testCalendarQuery(): void { $backend = $this->createMock(CalDavBackend::class); $calendarInfo = [ '{http://owncloud.org/ns}owner-principal' => 'user1', diff --git a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php index 8d5b01996e0..cfdf82e9b4f 100644 --- a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php +++ b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php @@ -52,7 +52,7 @@ use Sabre\DAVACL\IACL; * @package OCA\DAV\Tests\unit\CalDAV */ class CalDavBackendTest extends AbstractCalDavBackend { - public function testCalendarOperations() { + public function testCalendarOperations(): void { $calendarId = $this->createTestCalendar(); // update its display name @@ -124,7 +124,7 @@ class CalDavBackendTest extends AbstractCalDavBackend { /** * @dataProvider providesSharingData */ - public function testCalendarSharing($userCanRead, $userCanWrite, $groupCanRead, $groupCanWrite, $add) { + public function testCalendarSharing($userCanRead, $userCanWrite, $groupCanRead, $groupCanWrite, $add): void { /** @var IL10N|\PHPUnit\Framework\MockObject\MockObject $l10n */ $l10n = $this->createMock(IL10N::class); @@ -204,7 +204,7 @@ EOD; self::assertEmpty($calendars); } - public function testCalendarObjectsOperations() { + public function testCalendarObjectsOperations(): void { $calendarId = $this->createTestCalendar(); // create a card @@ -279,7 +279,7 @@ EOD; } - public function testMultipleCalendarObjectsWithSameUID() { + public function testMultipleCalendarObjectsWithSameUID(): void { $this->expectException(\Sabre\DAV\Exception\BadRequest::class); $this->expectExceptionMessage('Calendar object with uid already exists in this calendar collection.'); @@ -308,7 +308,7 @@ EOD; $this->backend->createCalendarObject($calendarId, $uri1, $calData); } - public function testMultiCalendarObjects() { + public function testMultiCalendarObjects(): void { $calendarId = $this->createTestCalendar(); // create an event @@ -417,7 +417,7 @@ EOD; /** * @dataProvider providesCalendarQueryParameters */ - public function testCalendarQuery($expectedEventsInResult, $propFilters, $compFilter) { + public function testCalendarQuery($expectedEventsInResult, $propFilters, $compFilter): void { $calendarId = $this->createTestCalendar(); $events = []; $events[0] = $this->createEvent($calendarId, '20130912T130000Z', '20130912T140000Z'); @@ -437,7 +437,7 @@ EOD; $this->assertEqualsCanonicalizing($expectedEventsInResult, $result); } - public function testGetCalendarObjectByUID() { + public function testGetCalendarObjectByUID(): void { $calendarId = $this->createTestCalendar(); $uri = static::getUniqueID('calobj'); $calData = <<<'EOD' @@ -475,7 +475,7 @@ EOD; ]; } - public function testSyncSupport() { + public function testSyncSupport(): void { $calendarId = $this->createTestCalendar(); // fist call without synctoken @@ -490,7 +490,7 @@ EOD; $this->assertEquals($event, $changes['added'][0]); } - public function testPublications() { + public function testPublications(): void { $this->dispatcher->expects(self::atLeastOnce()) ->method('dispatchTyped'); @@ -522,7 +522,7 @@ EOD; $this->backend->getPublicCalendar($publicCalendarURI); } - public function testSubscriptions() { + public function testSubscriptions(): void { $id = $this->backend->createSubscription(self::UNIT_TEST_USER, 'Subscription', [ '{http://calendarserver.org/ns/}source' => new Href('test-source'), '{http://apple.com/ns/ical/}calendar-color' => '#1C4587', @@ -629,7 +629,7 @@ EOS; * @dataProvider providesSchedulingData * @param $objectData */ - public function testScheduling($objectData) { + public function testScheduling($objectData): void { $this->backend->createSchedulingObject(self::UNIT_TEST_USER, 'Sample Schedule', $objectData); $sos = $this->backend->getSchedulingObjects(self::UNIT_TEST_USER); @@ -647,7 +647,7 @@ EOS; /** * @dataProvider providesCalDataForGetDenormalizedData */ - public function testGetDenormalizedData($expected, $key, $calData) { + public function testGetDenormalizedData($expected, $key, $calData): void { $actual = $this->backend->getDenormalizedData($calData); $this->assertEquals($expected, $actual[$key]); } @@ -666,7 +666,7 @@ EOS; ]; } - public function testCalendarSearch() { + public function testCalendarSearch(): void { $calendarId = $this->createTestCalendar(); $uri = static::getUniqueID('calobj'); @@ -799,7 +799,7 @@ EOD; /** * @dataProvider searchDataProvider */ - public function testSearch(bool $isShared, array $searchOptions, int $count) { + public function testSearch(bool $isShared, array $searchOptions, int $count): void { $calendarId = $this->createTestCalendar(); $uris = []; @@ -906,7 +906,7 @@ EOD; ]; } - public function testSameUriSameIdForDifferentCalendarTypes() { + public function testSameUriSameIdForDifferentCalendarTypes(): void { $calendarId = $this->createTestCalendar(); $subscriptionId = $this->createTestSubscription(); @@ -952,7 +952,7 @@ EOD; $this->assertEquals($calData2, $this->backend->getCalendarObject($subscriptionId, $uri, CalDavBackend::CALENDAR_TYPE_SUBSCRIPTION)['calendardata']); } - public function testPurgeAllCachedEventsForSubscription() { + public function testPurgeAllCachedEventsForSubscription(): void { $subscriptionId = $this->createTestSubscription(); $uri = static::getUniqueID('calobj'); $calData = <<<EOD @@ -978,7 +978,7 @@ EOD; $this->assertEquals(null, $this->backend->getCalendarObject($subscriptionId, $uri, CalDavBackend::CALENDAR_TYPE_SUBSCRIPTION)); } - public function testCalendarMovement() { + public function testCalendarMovement(): void { $this->backend->createCalendar(self::UNIT_TEST_USER, 'Example', []); $this->assertCount(1, $this->backend->getCalendarsForUser(self::UNIT_TEST_USER)); diff --git a/apps/dav/tests/unit/CalDAV/CalendarHomeTest.php b/apps/dav/tests/unit/CalDAV/CalendarHomeTest.php index 3128e753daa..50430029c61 100644 --- a/apps/dav/tests/unit/CalDAV/CalendarHomeTest.php +++ b/apps/dav/tests/unit/CalDAV/CalendarHomeTest.php @@ -78,7 +78,7 @@ class CalendarHomeTest extends TestCase { $reflectionProperty->setValue($this->calendarHome, $this->pluginManager); } - public function testCreateCalendarValidName() { + public function testCreateCalendarValidName(): void { /** @var MkCol | MockObject $mkCol */ $mkCol = $this->createMock(MkCol::class); @@ -95,7 +95,7 @@ class CalendarHomeTest extends TestCase { $this->calendarHome->createExtendedCollection('name123', $mkCol); } - public function testCreateCalendarReservedName() { + public function testCreateCalendarReservedName(): void { $this->expectException(\Sabre\DAV\Exception\MethodNotAllowed::class); $this->expectExceptionMessage('The resource you tried to create has a reserved name'); @@ -105,7 +105,7 @@ class CalendarHomeTest extends TestCase { $this->calendarHome->createExtendedCollection('contact_birthdays', $mkCol); } - public function testCreateCalendarReservedNameAppGenerated() { + public function testCreateCalendarReservedNameAppGenerated(): void { $this->expectException(\Sabre\DAV\Exception\MethodNotAllowed::class); $this->expectExceptionMessage('The resource you tried to create has a reserved name'); diff --git a/apps/dav/tests/unit/CalDAV/CalendarImplTest.php b/apps/dav/tests/unit/CalDAV/CalendarImplTest.php index 5adb7041e8b..132526e604f 100644 --- a/apps/dav/tests/unit/CalDAV/CalendarImplTest.php +++ b/apps/dav/tests/unit/CalDAV/CalendarImplTest.php @@ -72,19 +72,19 @@ class CalendarImplTest extends \Test\TestCase { } - public function testGetKey() { + public function testGetKey(): void { $this->assertEquals($this->calendarImpl->getKey(), 'fancy_id_123'); } - public function testGetDisplayname() { + public function testGetDisplayname(): void { $this->assertEquals($this->calendarImpl->getDisplayName(), 'user readable name 123'); } - public function testGetDisplayColor() { + public function testGetDisplayColor(): void { $this->assertEquals($this->calendarImpl->getDisplayColor(), '#AABBCC'); } - public function testSearch() { + public function testSearch(): void { $this->backend->expects($this->once()) ->method('search') ->with($this->calendarInfo, 'abc', ['def'], ['ghi'], 42, 1337) @@ -94,7 +94,7 @@ class CalendarImplTest extends \Test\TestCase { $this->assertEquals($result, ['SEARCHRESULTS']); } - public function testGetPermissionRead() { + public function testGetPermissionRead(): void { $this->calendar->expects($this->once()) ->method('getACL') ->with() @@ -105,7 +105,7 @@ class CalendarImplTest extends \Test\TestCase { $this->assertEquals(1, $this->calendarImpl->getPermissions()); } - public function testGetPermissionWrite() { + public function testGetPermissionWrite(): void { $this->calendar->expects($this->once()) ->method('getACL') ->with() @@ -116,7 +116,7 @@ class CalendarImplTest extends \Test\TestCase { $this->assertEquals(6, $this->calendarImpl->getPermissions()); } - public function testGetPermissionReadWrite() { + public function testGetPermissionReadWrite(): void { $this->calendar->expects($this->once()) ->method('getACL') ->with() @@ -128,7 +128,7 @@ class CalendarImplTest extends \Test\TestCase { $this->assertEquals(7, $this->calendarImpl->getPermissions()); } - public function testGetPermissionAll() { + public function testGetPermissionAll(): void { $this->calendar->expects($this->once()) ->method('getACL') ->with() diff --git a/apps/dav/tests/unit/CalDAV/CalendarManagerTest.php b/apps/dav/tests/unit/CalDAV/CalendarManagerTest.php index f16a06f953d..8a559255a8c 100644 --- a/apps/dav/tests/unit/CalDAV/CalendarManagerTest.php +++ b/apps/dav/tests/unit/CalDAV/CalendarManagerTest.php @@ -66,7 +66,7 @@ class CalendarManagerTest extends \Test\TestCase { ); } - public function testSetupCalendarProvider() { + public function testSetupCalendarProvider(): void { $this->backend->expects($this->once()) ->method('getCalendarsForUser') ->with('principals/users/user123') @@ -79,7 +79,7 @@ class CalendarManagerTest extends \Test\TestCase { $calendarManager = $this->createMock(Manager::class); $calendarManager->expects($this->at(0)) ->method('registerCalendar') - ->willReturnCallback(function () { + ->willReturnCallback(function (): void { $parameter = func_get_arg(0); $this->assertInstanceOf(CalendarImpl::class, $parameter); $this->assertEquals(123, $parameter->getKey()); @@ -87,7 +87,7 @@ class CalendarManagerTest extends \Test\TestCase { $calendarManager->expects($this->at(1)) ->method('registerCalendar') - ->willReturnCallback(function () { + ->willReturnCallback(function (): void { $parameter = func_get_arg(0); $this->assertInstanceOf(CalendarImpl::class, $parameter); $this->assertEquals(456, $parameter->getKey()); diff --git a/apps/dav/tests/unit/CalDAV/CalendarTest.php b/apps/dav/tests/unit/CalDAV/CalendarTest.php index 95cedb6da6a..d61e4b58478 100644 --- a/apps/dav/tests/unit/CalDAV/CalendarTest.php +++ b/apps/dav/tests/unit/CalDAV/CalendarTest.php @@ -64,7 +64,7 @@ class CalendarTest extends TestCase { }); } - public function testDelete() { + public function testDelete(): void { /** @var MockObject | CalDavBackend $backend */ $backend = $this->getMockBuilder(CalDavBackend::class)->disableOriginalConstructor()->getMock(); $backend->expects($this->once())->method('updateShares'); @@ -82,7 +82,7 @@ class CalendarTest extends TestCase { } - public function testDeleteFromGroup() { + public function testDeleteFromGroup(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); /** @var MockObject | CalDavBackend $backend */ @@ -101,7 +101,7 @@ class CalendarTest extends TestCase { $c->delete(); } - public function testDeleteOwn() { + public function testDeleteOwn(): void { /** @var MockObject | CalDavBackend $backend */ $backend = $this->createMock(CalDavBackend::class); $backend->expects($this->never())->method('updateShares'); @@ -122,7 +122,7 @@ class CalendarTest extends TestCase { $c->delete(); } - public function testDeleteBirthdayCalendar() { + public function testDeleteBirthdayCalendar(): void { /** @var MockObject | CalDavBackend $backend */ $backend = $this->createMock(CalDavBackend::class); $backend->expects($this->once())->method('deleteCalendar') @@ -173,7 +173,7 @@ class CalendarTest extends TestCase { /** * @dataProvider dataPropPatch */ - public function testPropPatch($ownerPrincipal, $principalUri, $mutations, $shared) { + public function testPropPatch($ownerPrincipal, $principalUri, $mutations, $shared): void { /** @var MockObject | CalDavBackend $backend */ $backend = $this->getMockBuilder(CalDavBackend::class)->disableOriginalConstructor()->getMock(); $calendarInfo = [ @@ -197,7 +197,7 @@ class CalendarTest extends TestCase { /** * @dataProvider providesReadOnlyInfo */ - public function testAcl($expectsWrite, $readOnlyValue, $hasOwnerSet, $uri = 'default') { + public function testAcl($expectsWrite, $readOnlyValue, $hasOwnerSet, $uri = 'default'): void { /** @var MockObject | CalDavBackend $backend */ $backend = $this->getMockBuilder(CalDavBackend::class)->disableOriginalConstructor()->getMock(); $backend->expects($this->any())->method('applyShareAcl')->willReturnArgument(1); @@ -300,7 +300,7 @@ class CalendarTest extends TestCase { * @param int $expectedChildren * @param bool $isShared */ - public function testPrivateClassification($expectedChildren, $isShared) { + public function testPrivateClassification($expectedChildren, $isShared): void { $calObject0 = ['uri' => 'event-0', 'classification' => CalDavBackend::CLASSIFICATION_PUBLIC]; $calObject1 = ['uri' => 'event-1', 'classification' => CalDavBackend::CLASSIFICATION_CONFIDENTIAL]; $calObject2 = ['uri' => 'event-2', 'classification' => CalDavBackend::CLASSIFICATION_PRIVATE]; @@ -342,7 +342,7 @@ class CalendarTest extends TestCase { * @param int $expectedChildren * @param bool $isShared */ - public function testConfidentialClassification($expectedChildren, $isShared) { + public function testConfidentialClassification($expectedChildren, $isShared): void { $start = '20160609'; $end = '20160610'; diff --git a/apps/dav/tests/unit/CalDAV/OutboxTest.php b/apps/dav/tests/unit/CalDAV/OutboxTest.php index 8edc0f30ce4..32bd511f3d2 100644 --- a/apps/dav/tests/unit/CalDAV/OutboxTest.php +++ b/apps/dav/tests/unit/CalDAV/OutboxTest.php @@ -43,7 +43,7 @@ class OutboxTest extends TestCase { $this->outbox = new Outbox($this->config, 'user-principal-123'); } - public function testGetACLFreeBusyEnabled() { + public function testGetACLFreeBusyEnabled(): void { $this->config->expects($this->once()) ->method('getAppValue') ->with('dav', 'disableFreeBusy', 'no') @@ -78,7 +78,7 @@ class OutboxTest extends TestCase { ], $this->outbox->getACL()); } - public function testGetACLFreeBusyDisabled() { + public function testGetACLFreeBusyDisabled(): void { $this->config->expects($this->once()) ->method('getAppValue') ->with('dav', 'disableFreeBusy', 'no') diff --git a/apps/dav/tests/unit/CalDAV/PluginTest.php b/apps/dav/tests/unit/CalDAV/PluginTest.php index b5da2199e1c..4fba50620de 100644 --- a/apps/dav/tests/unit/CalDAV/PluginTest.php +++ b/apps/dav/tests/unit/CalDAV/PluginTest.php @@ -61,11 +61,11 @@ class PluginTest extends TestCase { * @param $input * @param $expected */ - public function testGetCalendarHomeForPrincipal($input, $expected) { + public function testGetCalendarHomeForPrincipal($input, $expected): void { $this->assertSame($expected, $this->plugin->getCalendarHomeForPrincipal($input)); } - public function testGetCalendarHomeForUnknownPrincipal() { + public function testGetCalendarHomeForUnknownPrincipal(): void { $this->assertNull($this->plugin->getCalendarHomeForPrincipal('FOO/BAR/BLUB')); } } diff --git a/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php b/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php index 23c1c2ae896..6634a602e74 100644 --- a/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php +++ b/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php @@ -131,12 +131,12 @@ class PublicCalendarRootTest extends TestCase { } } - public function testGetName() { + public function testGetName(): void { $name = $this->publicCalendarRoot->getName(); $this->assertEquals('public-calendars', $name); } - public function testGetChild() { + public function testGetChild(): void { $calendar = $this->createPublicCalendar(); $publicCalendars = $this->backend->getPublicCalendars(); @@ -149,7 +149,7 @@ class PublicCalendarRootTest extends TestCase { $this->assertEquals($calendar, $calendarResult); } - public function testGetChildren() { + public function testGetChildren(): void { $this->createPublicCalendar(); $calendarResults = $this->publicCalendarRoot->getChildren(); $this->assertSame([], $calendarResults); diff --git a/apps/dav/tests/unit/CalDAV/PublicCalendarTest.php b/apps/dav/tests/unit/CalDAV/PublicCalendarTest.php index d7a281e9d27..c409ff92aa4 100644 --- a/apps/dav/tests/unit/CalDAV/PublicCalendarTest.php +++ b/apps/dav/tests/unit/CalDAV/PublicCalendarTest.php @@ -39,7 +39,7 @@ class PublicCalendarTest extends CalendarTest { * @param int $expectedChildren * @param bool $isShared */ - public function testPrivateClassification($expectedChildren, $isShared) { + public function testPrivateClassification($expectedChildren, $isShared): void { $calObject0 = ['uri' => 'event-0', 'classification' => CalDavBackend::CLASSIFICATION_PUBLIC]; $calObject1 = ['uri' => 'event-1', 'classification' => CalDavBackend::CLASSIFICATION_CONFIDENTIAL]; $calObject2 = ['uri' => 'event-2', 'classification' => CalDavBackend::CLASSIFICATION_PRIVATE]; @@ -82,7 +82,7 @@ class PublicCalendarTest extends CalendarTest { * @param int $expectedChildren * @param bool $isShared */ - public function testConfidentialClassification($expectedChildren, $isShared) { + public function testConfidentialClassification($expectedChildren, $isShared): void { $start = '20160609'; $end = '20160610'; diff --git a/apps/dav/tests/unit/CalDAV/Publishing/PublisherTest.php b/apps/dav/tests/unit/CalDAV/Publishing/PublisherTest.php index d6b97648436..786effb6ace 100644 --- a/apps/dav/tests/unit/CalDAV/Publishing/PublisherTest.php +++ b/apps/dav/tests/unit/CalDAV/Publishing/PublisherTest.php @@ -32,7 +32,7 @@ use Test\TestCase; class PublisherTest extends TestCase { public const NS_CALENDARSERVER = 'http://calendarserver.org/ns/'; - public function testSerializePublished() { + public function testSerializePublished(): void { $publish = new Publisher('urltopublish', true); $xml = $this->write([ @@ -48,7 +48,7 @@ class PublisherTest extends TestCase { </x1:publish-url>', $xml); } - public function testSerializeNotPublished() { + public function testSerializeNotPublished(): void { $publish = new Publisher('urltopublish', false); $xml = $this->write([ diff --git a/apps/dav/tests/unit/CalDAV/Publishing/PublishingTest.php b/apps/dav/tests/unit/CalDAV/Publishing/PublishingTest.php index 1367b2741e6..3b80b0ed262 100644 --- a/apps/dav/tests/unit/CalDAV/Publishing/PublishingTest.php +++ b/apps/dav/tests/unit/CalDAV/Publishing/PublishingTest.php @@ -77,7 +77,7 @@ class PublishingTest extends TestCase { $this->plugin->initialize($this->server); } - public function testPublishing() { + public function testPublishing(): void { $this->book->expects($this->once())->method('setPublishStatus')->with(true); // setup request @@ -88,7 +88,7 @@ class PublishingTest extends TestCase { $this->plugin->httpPost($request, $response); } - public function testUnPublishing() { + public function testUnPublishing(): void { $this->book->expects($this->once())->method('setPublishStatus')->with(false); // setup request diff --git a/apps/dav/tests/unit/CalDAV/Reminder/BackendTest.php b/apps/dav/tests/unit/CalDAV/Reminder/BackendTest.php index 15f949d9adb..505ed882e8c 100644 --- a/apps/dav/tests/unit/CalDAV/Reminder/BackendTest.php +++ b/apps/dav/tests/unit/CalDAV/Reminder/BackendTest.php @@ -249,7 +249,7 @@ class BackendTest extends TestCase { ]); } - public function testUpdateReminder() { + public function testUpdateReminder(): void { $query = self::$realDatabase->getQueryBuilder(); $rows = $query->select('*') ->from('calendar_reminders') diff --git a/apps/dav/tests/unit/CalDAV/Reminder/NotifierTest.php b/apps/dav/tests/unit/CalDAV/Reminder/NotifierTest.php index 1c823ac6830..08677d20267 100644 --- a/apps/dav/tests/unit/CalDAV/Reminder/NotifierTest.php +++ b/apps/dav/tests/unit/CalDAV/Reminder/NotifierTest.php @@ -125,7 +125,7 @@ class NotifierTest extends TestCase { } - public function testPrepareWrongSubject() { + public function testPrepareWrongSubject(): void { $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('Unknown subject'); diff --git a/apps/dav/tests/unit/CalDAV/ResourceBooking/AbstractPrincipalBackendTest.php b/apps/dav/tests/unit/CalDAV/ResourceBooking/AbstractPrincipalBackendTest.php index 0c86a9c5a29..22e67fbbfdc 100644 --- a/apps/dav/tests/unit/CalDAV/ResourceBooking/AbstractPrincipalBackendTest.php +++ b/apps/dav/tests/unit/CalDAV/ResourceBooking/AbstractPrincipalBackendTest.php @@ -83,7 +83,7 @@ abstract class AbstractPrincipalBackendTest extends TestCase { $query->delete('calendar_rooms_md')->execute(); } - public function testGetPrincipalsByPrefix() { + public function testGetPrincipalsByPrefix(): void { $actual = $this->principalBackend->getPrincipalsByPrefix($this->principalPrefix); $this->assertEquals([ @@ -131,12 +131,12 @@ abstract class AbstractPrincipalBackendTest extends TestCase { ], $actual); } - public function testGetNoPrincipalsByPrefixForWrongPrincipalPrefix() { + public function testGetNoPrincipalsByPrefixForWrongPrincipalPrefix(): void { $actual = $this->principalBackend->getPrincipalsByPrefix('principals/users'); $this->assertEquals([], $actual); } - public function testGetPrincipalByPath() { + public function testGetPrincipalByPath(): void { $actual = $this->principalBackend->getPrincipalByPath($this->principalPrefix . '/backend2-res3'); $this->assertEquals([ 'uri' => $this->principalPrefix . '/backend2-res3', @@ -148,22 +148,22 @@ abstract class AbstractPrincipalBackendTest extends TestCase { ], $actual); } - public function testGetPrincipalByPathNotFound() { + public function testGetPrincipalByPathNotFound(): void { $actual = $this->principalBackend->getPrincipalByPath($this->principalPrefix . '/db-123'); $this->assertEquals(null, $actual); } - public function testGetPrincipalByPathWrongPrefix() { + public function testGetPrincipalByPathWrongPrefix(): void { $actual = $this->principalBackend->getPrincipalByPath('principals/users/foo-bar'); $this->assertEquals(null, $actual); } - public function testGetGroupMemberSet() { + public function testGetGroupMemberSet(): void { $actual = $this->principalBackend->getGroupMemberSet($this->principalPrefix . '/backend1-res1'); $this->assertEquals([], $actual); } - public function testGetGroupMemberSetProxyRead() { + public function testGetGroupMemberSetProxyRead(): void { $proxy1 = new Proxy(); $proxy1->setProxyId('proxyId1'); $proxy1->setPermissions(1); @@ -185,7 +185,7 @@ abstract class AbstractPrincipalBackendTest extends TestCase { $this->assertEquals(['proxyId1'], $actual); } - public function testGetGroupMemberSetProxyWrite() { + public function testGetGroupMemberSetProxyWrite(): void { $proxy1 = new Proxy(); $proxy1->setProxyId('proxyId1'); $proxy1->setPermissions(1); @@ -207,7 +207,7 @@ abstract class AbstractPrincipalBackendTest extends TestCase { $this->assertEquals(['proxyId2', 'proxyId3'], $actual); } - public function testGetGroupMembership() { + public function testGetGroupMembership(): void { $proxy1 = new Proxy(); $proxy1->setOwnerId('proxyId1'); $proxy1->setPermissions(1); @@ -226,7 +226,7 @@ abstract class AbstractPrincipalBackendTest extends TestCase { $this->assertEquals(['proxyId1/calendar-proxy-read', 'proxyId2/calendar-proxy-write'], $actual); } - public function testSetGroupMemberSet() { + public function testSetGroupMemberSet(): void { $this->proxyMapper->expects($this->once()) ->method('getProxiesOf') ->with($this->principalPrefix . '/backend1-res1') @@ -268,7 +268,7 @@ abstract class AbstractPrincipalBackendTest extends TestCase { $this->principalBackend->setGroupMemberSet($this->principalPrefix . '/backend1-res1/calendar-proxy-write', [$this->principalPrefix . '/backend1-res2', $this->principalPrefix . '/backend2-res3']); } - public function testUpdatePrincipal() { + public function testUpdatePrincipal(): void { $propPatch = $this->createMock(PropPatch::class); $actual = $this->principalBackend->updatePrincipal($this->principalPrefix . '/foo-bar', $propPatch); @@ -278,7 +278,7 @@ abstract class AbstractPrincipalBackendTest extends TestCase { /** * @dataProvider dataSearchPrincipals */ - public function testSearchPrincipals($expected, $test) { + public function testSearchPrincipals($expected, $test): void { $user = $this->createMock(IUser::class); $this->userSession->expects($this->once()) ->method('getUser') @@ -318,7 +318,7 @@ abstract class AbstractPrincipalBackendTest extends TestCase { ]; } - public function testSearchPrincipalsByMetadataKey() { + public function testSearchPrincipalsByMetadataKey(): void { $user = $this->createMock(IUser::class); $this->userSession->expects($this->once()) ->method('getUser') @@ -338,7 +338,7 @@ abstract class AbstractPrincipalBackendTest extends TestCase { ], $actual); } - public function testSearchPrincipalsByCalendarUserAddressSet() { + public function testSearchPrincipalsByCalendarUserAddressSet(): void { $user = $this->createMock(IUser::class); $this->userSession->method('getUser') ->with() @@ -358,7 +358,7 @@ abstract class AbstractPrincipalBackendTest extends TestCase { $actual); } - public function testSearchPrincipalsEmptySearchProperties() { + public function testSearchPrincipalsEmptySearchProperties(): void { $this->userSession->expects($this->never()) ->method('getUser'); $this->groupManager->expects($this->never()) @@ -367,7 +367,7 @@ abstract class AbstractPrincipalBackendTest extends TestCase { $this->principalBackend->searchPrincipals($this->principalPrefix, []); } - public function testSearchPrincipalsWrongPrincipalPrefix() { + public function testSearchPrincipalsWrongPrincipalPrefix(): void { $this->userSession->expects($this->never()) ->method('getUser'); $this->groupManager->expects($this->never()) @@ -378,7 +378,7 @@ abstract class AbstractPrincipalBackendTest extends TestCase { ]); } - public function testFindByUriByEmail() { + public function testFindByUriByEmail(): void { $user = $this->createMock(IUser::class); $this->userSession->expects($this->once()) ->method('getUser') @@ -393,7 +393,7 @@ abstract class AbstractPrincipalBackendTest extends TestCase { $this->assertEquals($this->principalPrefix . '/backend1-res1', $actual); } - public function testFindByUriByEmailForbiddenResource() { + public function testFindByUriByEmailForbiddenResource(): void { $user = $this->createMock(IUser::class); $this->userSession->expects($this->once()) ->method('getUser') @@ -408,7 +408,7 @@ abstract class AbstractPrincipalBackendTest extends TestCase { $this->assertEquals(null, $actual); } - public function testFindByUriByEmailNotFound() { + public function testFindByUriByEmailNotFound(): void { $user = $this->createMock(IUser::class); $this->userSession->expects($this->once()) ->method('getUser') @@ -423,7 +423,7 @@ abstract class AbstractPrincipalBackendTest extends TestCase { $this->assertEquals(null, $actual); } - public function testFindByUriByPrincipal() { + public function testFindByUriByPrincipal(): void { $user = $this->createMock(IUser::class); $this->userSession->expects($this->once()) ->method('getUser') @@ -438,7 +438,7 @@ abstract class AbstractPrincipalBackendTest extends TestCase { $this->assertEquals($this->principalPrefix . '/backend3-res6', $actual); } - public function testFindByUriByPrincipalForbiddenResource() { + public function testFindByUriByPrincipalForbiddenResource(): void { $user = $this->createMock(IUser::class); $this->userSession->expects($this->once()) ->method('getUser') @@ -453,7 +453,7 @@ abstract class AbstractPrincipalBackendTest extends TestCase { $this->assertEquals(null, $actual); } - public function testFindByUriByPrincipalNotFound() { + public function testFindByUriByPrincipalNotFound(): void { $user = $this->createMock(IUser::class); $this->userSession->expects($this->once()) ->method('getUser') @@ -468,7 +468,7 @@ abstract class AbstractPrincipalBackendTest extends TestCase { $this->assertEquals(null, $actual); } - public function testFindByUriByUnknownUri() { + public function testFindByUriByUnknownUri(): void { $user = $this->createMock(IUser::class); $this->userSession->expects($this->once()) ->method('getUser') diff --git a/apps/dav/tests/unit/CalDAV/Schedule/IMipPluginTest.php b/apps/dav/tests/unit/CalDAV/Schedule/IMipPluginTest.php index 597047efb94..ecb602813cc 100644 --- a/apps/dav/tests/unit/CalDAV/Schedule/IMipPluginTest.php +++ b/apps/dav/tests/unit/CalDAV/Schedule/IMipPluginTest.php @@ -131,7 +131,7 @@ class IMipPluginTest extends TestCase { $this->plugin = new IMipPlugin($this->config, $this->mailer, $logger, $this->timeFactory, $l10nFactory, $urlGenerator, $defaults, $random, $db, $this->userManager, 'user123'); } - public function testDelivery() { + public function testDelivery(): void { $this->config ->expects($this->any()) ->method('getAppValue') @@ -146,7 +146,7 @@ class IMipPluginTest extends TestCase { $this->assertEquals('1.1', $message->getScheduleStatus()); } - public function testFailedDelivery() { + public function testFailedDelivery(): void { $this->config ->expects($this->any()) ->method('getAppValue') @@ -164,7 +164,7 @@ class IMipPluginTest extends TestCase { $this->assertEquals('5.0', $message->getScheduleStatus()); } - public function testInvalidEmailDelivery() { + public function testInvalidEmailDelivery(): void { $this->mailer->method('validateMailAddress')->willReturn(false); $message = $this->_testMessage(); @@ -172,7 +172,7 @@ class IMipPluginTest extends TestCase { $this->assertEquals('5.0', $message->getScheduleStatus()); } - public function testDeliveryWithNoCommonName() { + public function testDeliveryWithNoCommonName(): void { $this->config ->expects($this->any()) ->method('getAppValue') @@ -197,7 +197,7 @@ class IMipPluginTest extends TestCase { /** * @dataProvider dataNoMessageSendForPastEvents */ - public function testNoMessageSendForPastEvents(array $veventParams, bool $expectsMail) { + public function testNoMessageSendForPastEvents(array $veventParams, bool $expectsMail): void { $this->config ->method('getAppValue') ->willReturn('yes'); @@ -234,7 +234,7 @@ class IMipPluginTest extends TestCase { /** * @dataProvider dataIncludeResponseButtons */ - public function testIncludeResponseButtons(string $config_setting, string $recipient, bool $has_buttons) { + public function testIncludeResponseButtons(string $config_setting, string $recipient, bool $has_buttons): void { $message = $this->_testMessage([], $recipient); $this->mailer->method('validateMailAddress')->willReturn(true); @@ -263,7 +263,7 @@ class IMipPluginTest extends TestCase { ]; } - public function testMessageSendWhenEventWithoutName() { + public function testMessageSendWhenEventWithoutName(): void { $this->config ->method('getAppValue') ->willReturn('yes'); @@ -297,7 +297,7 @@ class IMipPluginTest extends TestCase { } - private function _expectSend(string $recipient = 'frodo@hobb.it', bool $expectSend = true, bool $expectButtons = true, string $subject = 'Invitation: Fellowship meeting') { + private function _expectSend(string $recipient = 'frodo@hobb.it', bool $expectSend = true, bool $expectButtons = true, string $subject = 'Invitation: Fellowship meeting'): void { // if the event is in the past, we skip out if (!$expectSend) { $this->mailer diff --git a/apps/dav/tests/unit/CalDAV/Schedule/PluginTest.php b/apps/dav/tests/unit/CalDAV/Schedule/PluginTest.php index 797023cdfae..4845188bc88 100644 --- a/apps/dav/tests/unit/CalDAV/Schedule/PluginTest.php +++ b/apps/dav/tests/unit/CalDAV/Schedule/PluginTest.php @@ -79,7 +79,7 @@ class PluginTest extends TestCase { $this->plugin->initialize($this->server); } - public function testInitialize() { + public function testInitialize(): void { $plugin = new Plugin($this->config, $this->logger); $this->server->expects($this->exactly(10)) @@ -102,7 +102,7 @@ class PluginTest extends TestCase { $plugin->initialize($this->server); } - public function testGetAddressesForPrincipal() { + public function testGetAddressesForPrincipal(): void { $href = $this->createMock(Href::class); $href ->expects($this->once()) @@ -126,7 +126,7 @@ class PluginTest extends TestCase { } - public function testGetAddressesForPrincipalEmpty() { + public function testGetAddressesForPrincipalEmpty(): void { $this->server ->expects($this->once()) ->method('getProperties') @@ -142,12 +142,12 @@ class PluginTest extends TestCase { $this->assertSame([], $result); } - public function testStripOffMailTo() { + public function testStripOffMailTo(): void { $this->assertEquals('test@example.com', $this->invokePrivate($this->plugin, 'stripOffMailTo', ['test@example.com'])); $this->assertEquals('test@example.com', $this->invokePrivate($this->plugin, 'stripOffMailTo', ['mailto:test@example.com'])); } - public function testGetAttendeeRSVP() { + public function testGetAttendeeRSVP(): void { $property1 = $this->createMock(CalAddress::class); $parameter1 = $this->createMock(Parameter::class); $property1->expects($this->once()) @@ -271,7 +271,7 @@ class PluginTest extends TestCase { * @param bool $exists * @param bool $propertiesForPath */ - public function testPropFindDefaultCalendarUrl(string $principalUri, ?string $calendarHome, bool $isResource, string $calendarUri, string $displayName, bool $exists, bool $hasExistingCalendars = false, bool $propertiesForPath = true) { + public function testPropFindDefaultCalendarUrl(string $principalUri, ?string $calendarHome, bool $isResource, string $calendarUri, string $displayName, bool $exists, bool $hasExistingCalendars = false, bool $propertiesForPath = true): void { /** @var PropFind $propFind */ $propFind = new PropFind( $principalUri, diff --git a/apps/dav/tests/unit/CalDAV/Search/Request/CalendarSearchReportTest.php b/apps/dav/tests/unit/CalDAV/Search/Request/CalendarSearchReportTest.php index 1d4c34ae84c..8d50de2c553 100644 --- a/apps/dav/tests/unit/CalDAV/Search/Request/CalendarSearchReportTest.php +++ b/apps/dav/tests/unit/CalDAV/Search/Request/CalendarSearchReportTest.php @@ -34,7 +34,7 @@ class CalendarSearchReportTest extends TestCase { 'OCA\\DAV\\CalDAV\\Search\\Xml\\Request\\CalendarSearchReport', ]; - public function testFoo() { + public function testFoo(): void { $xml = <<<XML <?xml version="1.0" encoding="UTF-8"?> <nc:calendar-search xmlns:nc="http://nextcloud.com/ns" xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:"> @@ -90,7 +90,7 @@ XML; ); } - public function testNoLimitOffset() { + public function testNoLimitOffset(): void { $xml = <<<XML <?xml version="1.0" encoding="UTF-8"?> <nc:calendar-search xmlns:nc="http://nextcloud.com/ns" xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:"> @@ -132,7 +132,7 @@ XML; } - public function testRequiresCompFilter() { + public function testRequiresCompFilter(): void { $this->expectException(\Sabre\DAV\Exception\BadRequest::class); $this->expectExceptionMessage('{http://nextcloud.com/ns}prop-filter or {http://nextcloud.com/ns}param-filter given without any {http://nextcloud.com/ns}comp-filter'); @@ -159,7 +159,7 @@ XML; } - public function testRequiresFilter() { + public function testRequiresFilter(): void { $this->expectException(\Sabre\DAV\Exception\BadRequest::class); $this->expectExceptionMessage('The {http://nextcloud.com/ns}filter element is required for this request'); @@ -177,7 +177,7 @@ XML; } - public function testNoSearchTerm() { + public function testNoSearchTerm(): void { $this->expectException(\Sabre\DAV\Exception\BadRequest::class); $this->expectExceptionMessage('{http://nextcloud.com/ns}search-term is required for this request'); @@ -205,7 +205,7 @@ XML; } - public function testCompOnly() { + public function testCompOnly(): void { $this->expectException(\Sabre\DAV\Exception\BadRequest::class); $this->expectExceptionMessage('At least one{http://nextcloud.com/ns}prop-filter or {http://nextcloud.com/ns}param-filter is required for this request'); @@ -247,7 +247,7 @@ XML; ); } - public function testPropOnly() { + public function testPropOnly(): void { $xml = <<<XML <?xml version="1.0" encoding="UTF-8"?> <nc:calendar-search xmlns:nc="http://nextcloud.com/ns" xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:"> @@ -288,7 +288,7 @@ XML; ); } - public function testParamOnly() { + public function testParamOnly(): void { $xml = <<<XML <?xml version="1.0" encoding="UTF-8"?> <nc:calendar-search xmlns:nc="http://nextcloud.com/ns" xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:"> diff --git a/apps/dav/tests/unit/CalDAV/Search/SearchPluginTest.php b/apps/dav/tests/unit/CalDAV/Search/SearchPluginTest.php index d5a1a6be31d..980db20c26e 100644 --- a/apps/dav/tests/unit/CalDAV/Search/SearchPluginTest.php +++ b/apps/dav/tests/unit/CalDAV/Search/SearchPluginTest.php @@ -48,15 +48,15 @@ class SearchPluginTest extends TestCase { $this->plugin->initialize($this->server); } - public function testGetFeatures() { + public function testGetFeatures(): void { $this->assertEquals(['nc-calendar-search'], $this->plugin->getFeatures()); } - public function testGetName() { + public function testGetName(): void { $this->assertEquals('nc-calendar-search', $this->plugin->getPluginName()); } - public function testInitialize() { + public function testInitialize(): void { $server = $this->createMock(\Sabre\DAV\Server::class); $plugin = new SearchPlugin(); @@ -74,13 +74,13 @@ class SearchPluginTest extends TestCase { ); } - public function testReportUnknown() { + public function testReportUnknown(): void { $result = $this->plugin->report('{urn:ietf:params:xml:ns:caldav}calendar-query', 'REPORT', null); $this->assertEquals($result, null); $this->assertNotEquals($this->server->transactionType, 'report-nc-calendar-search'); } - public function testReport() { + public function testReport(): void { $report = $this->createMock(CalendarSearchReport::class); $report->filters = []; $calendarHome = $this->createMock(CalendarHome::class); @@ -108,7 +108,7 @@ class SearchPluginTest extends TestCase { $this->plugin->report('{http://nextcloud.com/ns}calendar-search', $report, ''); } - public function testSupportedReportSetNoCalendarHome() { + public function testSupportedReportSetNoCalendarHome(): void { $this->server->tree->expects($this->once()) ->method('getNodeForPath') ->with('/foo/bar') @@ -118,7 +118,7 @@ class SearchPluginTest extends TestCase { $this->assertEquals([], $reports); } - public function testSupportedReportSet() { + public function testSupportedReportSet(): void { $calendarHome = $this->createMock(CalendarHome::class); $this->server->tree->expects($this->once()) diff --git a/apps/dav/tests/unit/CalDAV/WebcalCaching/PluginTest.php b/apps/dav/tests/unit/CalDAV/WebcalCaching/PluginTest.php index 441e83ccc97..c99a859ac16 100644 --- a/apps/dav/tests/unit/CalDAV/WebcalCaching/PluginTest.php +++ b/apps/dav/tests/unit/CalDAV/WebcalCaching/PluginTest.php @@ -27,7 +27,7 @@ use OCA\DAV\CalDAV\WebcalCaching\Plugin; use OCP\IRequest; class PluginTest extends \Test\TestCase { - public function testDisabled() { + public function testDisabled(): void { $request = $this->createMock(IRequest::class); $request->expects($this->once()) ->method('isUserAgent') @@ -44,7 +44,7 @@ class PluginTest extends \Test\TestCase { $this->assertEquals(false, $plugin->isCachingEnabledForThisRequest()); } - public function testEnabled() { + public function testEnabled(): void { $request = $this->createMock(IRequest::class); $request->expects($this->once()) ->method('isUserAgent') diff --git a/apps/dav/tests/unit/CalDAV/WebcalCaching/RefreshWebcalServiceTest.php b/apps/dav/tests/unit/CalDAV/WebcalCaching/RefreshWebcalServiceTest.php index 71d93bf851e..5ae62ea8b74 100644 --- a/apps/dav/tests/unit/CalDAV/WebcalCaching/RefreshWebcalServiceTest.php +++ b/apps/dav/tests/unit/CalDAV/WebcalCaching/RefreshWebcalServiceTest.php @@ -72,7 +72,7 @@ class RefreshWebcalServiceTest extends TestCase { * * @dataProvider runDataProvider */ - public function testRun(string $body, string $contentType, string $result) { + public function testRun(string $body, string $contentType, string $result): void { $refreshWebcalService = $this->getMockBuilder(RefreshWebcalService::class) ->onlyMethods(['getRandomCalendarObjectUri']) ->setConstructorArgs([$this->caldavBackend, $this->clientService, $this->config, $this->logger]) @@ -152,7 +152,7 @@ class RefreshWebcalServiceTest extends TestCase { * * @dataProvider runDataProvider */ - public function testRunCreateCalendarNoException(string $body, string $contentType, string $result) { + public function testRunCreateCalendarNoException(string $body, string $contentType, string $result): void { $client = $this->createMock(IClient::class); $response = $this->createMock(IResponse::class); $refreshWebcalService = $this->getMockBuilder(RefreshWebcalService::class) @@ -229,7 +229,7 @@ class RefreshWebcalServiceTest extends TestCase { * * @dataProvider runDataProvider */ - public function testRunCreateCalendarBadRequest(string $body, string $contentType, string $result) { + public function testRunCreateCalendarBadRequest(string $body, string $contentType, string $result): void { $client = $this->createMock(IClient::class); $response = $this->createMock(IResponse::class); $refreshWebcalService = $this->getMockBuilder(RefreshWebcalService::class) @@ -325,7 +325,7 @@ class RefreshWebcalServiceTest extends TestCase { /** * @dataProvider runLocalURLDataProvider */ - public function testRunLocalURL(string $source) { + public function testRunLocalURL(string $source): void { $refreshWebcalService = new RefreshWebcalService( $this->caldavBackend, $this->clientService, @@ -391,7 +391,7 @@ class RefreshWebcalServiceTest extends TestCase { ]; } - public function testInvalidUrl() { + public function testInvalidUrl(): void { $refreshWebcalService = new RefreshWebcalService($this->caldavBackend, $this->clientService, $this->config, $this->logger); diff --git a/apps/dav/tests/unit/CapabilitiesTest.php b/apps/dav/tests/unit/CapabilitiesTest.php index 6a9a0c1180a..16f46c4c607 100644 --- a/apps/dav/tests/unit/CapabilitiesTest.php +++ b/apps/dav/tests/unit/CapabilitiesTest.php @@ -31,7 +31,7 @@ use Test\TestCase; * @package OCA\DAV\Tests\unit */ class CapabilitiesTest extends TestCase { - public function testGetCapabilities() { + public function testGetCapabilities(): void { $config = $this->createMock(IConfig::class); $config->expects($this->once()) ->method('getSystemValueBool') @@ -46,7 +46,7 @@ class CapabilitiesTest extends TestCase { $this->assertSame($expected, $capabilities->getCapabilities()); } - public function testGetCapabilitiesWithBulkUpload() { + public function testGetCapabilitiesWithBulkUpload(): void { $config = $this->createMock(IConfig::class); $config->expects($this->once()) ->method('getSystemValueBool') diff --git a/apps/dav/tests/unit/CardDAV/Activity/BackendTest.php b/apps/dav/tests/unit/CardDAV/Activity/BackendTest.php index bd5660747ff..fca47a7c845 100644 --- a/apps/dav/tests/unit/CardDAV/Activity/BackendTest.php +++ b/apps/dav/tests/unit/CardDAV/Activity/BackendTest.php @@ -102,11 +102,11 @@ class BackendTest extends TestCase { /** * @dataProvider dataCallTriggerAddressBookActivity */ - public function testCallTriggerAddressBookActivity(string $method, array $payload, string $expectedSubject, array $expectedPayload) { + public function testCallTriggerAddressBookActivity(string $method, array $payload, string $expectedSubject, array $expectedPayload): void { $backend = $this->getBackend(['triggerAddressbookActivity']); $backend->expects($this->once()) ->method('triggerAddressbookActivity') - ->willReturnCallback(function () use ($expectedPayload, $expectedSubject) { + ->willReturnCallback(function () use ($expectedPayload, $expectedSubject): void { $arguments = func_get_args(); $this->assertSame($expectedSubject, array_shift($arguments)); $this->assertEquals($expectedPayload, $arguments); @@ -189,7 +189,7 @@ class BackendTest extends TestCase { * @param string[]|null $shareUsers * @param string[] $users */ - public function testTriggerAddressBookActivity(string $action, array $data, array $shares, array $changedProperties, string $currentUser, string $author, ?array $shareUsers, array $users) { + public function testTriggerAddressBookActivity(string $action, array $data, array $shares, array $changedProperties, string $currentUser, string $author, ?array $shareUsers, array $users): void { $backend = $this->getBackend(['getUsersForShares']); if ($shareUsers === null) { @@ -263,7 +263,7 @@ class BackendTest extends TestCase { $this->assertEmpty($this->invokePrivate($backend, 'triggerAddressbookActivity', [Addressbook::SUBJECT_ADD, ['principaluri' => 'principals/system/system'], [], [], '', '', null, []])); } - public function testUserDeletionDoesNotCreateActivity() { + public function testUserDeletionDoesNotCreateActivity(): void { $backend = $this->getBackend(); $this->userManager->expects($this->once()) @@ -359,7 +359,7 @@ class BackendTest extends TestCase { * @param string[]|null $shareUsers * @param string[] $users */ - public function testTriggerCardActivity(string $action, array $addressBookData, array $shares, array $cardData, string $currentUser, string $author, ?array $shareUsers, array $users) { + public function testTriggerCardActivity(string $action, array $addressBookData, array $shares, array $cardData, string $currentUser, string $author, ?array $shareUsers, array $users): void { $backend = $this->getBackend(['getUsersForShares']); if ($shareUsers === null) { @@ -478,7 +478,7 @@ class BackendTest extends TestCase { * @param array $groups * @param array $expected */ - public function testGetUsersForShares(array $shares, array $groups, array $expected) { + public function testGetUsersForShares(array $shares, array $groups, array $expected): void { $backend = $this->getBackend(); $getGroups = []; diff --git a/apps/dav/tests/unit/CardDAV/AddressBookImplTest.php b/apps/dav/tests/unit/CardDAV/AddressBookImplTest.php index 9ee17b8d19b..7faa6a3d1d5 100644 --- a/apps/dav/tests/unit/CardDAV/AddressBookImplTest.php +++ b/apps/dav/tests/unit/CardDAV/AddressBookImplTest.php @@ -82,17 +82,17 @@ class AddressBookImplTest extends TestCase { ); } - public function testGetKey() { + public function testGetKey(): void { $this->assertSame($this->addressBookInfo['id'], $this->addressBookImpl->getKey()); } - public function testGetDisplayName() { + public function testGetDisplayName(): void { $this->assertSame($this->addressBookInfo['{DAV:}displayname'], $this->addressBookImpl->getDisplayName()); } - public function testSearch() { + public function testSearch(): void { /** @var \PHPUnit\Framework\MockObject\MockObject | AddressBookImpl $addressBookImpl */ $addressBookImpl = $this->getMockBuilder(AddressBookImpl::class) ->setConstructorArgs( @@ -136,7 +136,7 @@ class AddressBookImplTest extends TestCase { * * @param array $properties */ - public function testCreate($properties) { + public function testCreate($properties): void { $uid = 'uid'; /** @var \PHPUnit\Framework\MockObject\MockObject | AddressBookImpl $addressBookImpl */ @@ -184,7 +184,7 @@ class AddressBookImplTest extends TestCase { ]; } - public function testUpdate() { + public function testUpdate(): void { $uid = 'uid'; $uri = 'bla.vcf'; $properties = ['URI' => $uri, 'UID' => $uid, 'FN' => 'John Doe']; @@ -219,7 +219,7 @@ class AddressBookImplTest extends TestCase { $this->assertTrue($addressBookImpl->createOrUpdate($properties)); } - public function testUpdateWithTypes() { + public function testUpdateWithTypes(): void { $uid = 'uid'; $uri = 'bla.vcf'; $properties = ['URI' => $uri, 'UID' => $uid, 'FN' => 'John Doe', 'ADR' => [['type' => 'HOME', 'value' => ';;street;city;;;country']]]; @@ -260,7 +260,7 @@ class AddressBookImplTest extends TestCase { * @param array $permissions * @param int $expected */ - public function testGetPermissions($permissions, $expected) { + public function testGetPermissions($permissions, $expected): void { $this->addressBook->expects($this->once())->method('getACL') ->willReturn($permissions); @@ -283,7 +283,7 @@ class AddressBookImplTest extends TestCase { ]; } - public function testDelete() { + public function testDelete(): void { $cardId = 1; $cardUri = 'cardUri'; $this->backend->expects($this->once())->method('getCardUri') @@ -295,7 +295,7 @@ class AddressBookImplTest extends TestCase { $this->assertTrue($this->addressBookImpl->delete($cardId)); } - public function testReadCard() { + public function testReadCard(): void { $vCard = new VCard(); $vCard->add(new Text($vCard, 'UID', 'uid')); $vCardSerialized = $vCard->serialize(); @@ -306,7 +306,7 @@ class AddressBookImplTest extends TestCase { $this->assertSame($vCardSerialized, $resultSerialized); } - public function testCreateUid() { + public function testCreateUid(): void { /** @var \PHPUnit\Framework\MockObject\MockObject | AddressBookImpl $addressBookImpl */ $addressBookImpl = $this->getMockBuilder(AddressBookImpl::class) ->setConstructorArgs( @@ -340,7 +340,7 @@ class AddressBookImplTest extends TestCase { ); } - public function testCreateEmptyVCard() { + public function testCreateEmptyVCard(): void { $uid = 'uid'; $expectedVCard = new VCard(); $expectedVCard->UID = $uid; @@ -352,7 +352,7 @@ class AddressBookImplTest extends TestCase { $this->assertSame($expectedVCardSerialized, $resultSerialized); } - public function testVCard2Array() { + public function testVCard2Array(): void { $vCard = new VCard(); $vCard->add($vCard->createProperty('FN', 'Full Name')); @@ -419,7 +419,7 @@ class AddressBookImplTest extends TestCase { ], $array); } - public function testVCard2ArrayWithTypes() { + public function testVCard2ArrayWithTypes(): void { $vCard = new VCard(); $vCard->add($vCard->createProperty('FN', 'Full Name')); diff --git a/apps/dav/tests/unit/CardDAV/AddressBookTest.php b/apps/dav/tests/unit/CardDAV/AddressBookTest.php index 23e3e4f3b2a..ecee09f238e 100644 --- a/apps/dav/tests/unit/CardDAV/AddressBookTest.php +++ b/apps/dav/tests/unit/CardDAV/AddressBookTest.php @@ -32,7 +32,7 @@ use Sabre\DAV\PropPatch; use Test\TestCase; class AddressBookTest extends TestCase { - public function testDelete() { + public function testDelete(): void { /** @var \PHPUnit\Framework\MockObject\MockObject | CardDavBackend $backend */ $backend = $this->getMockBuilder(CardDavBackend::class)->disableOriginalConstructor()->getMock(); $backend->expects($this->once())->method('updateShares'); @@ -52,7 +52,7 @@ class AddressBookTest extends TestCase { } - public function testDeleteFromGroup() { + public function testDeleteFromGroup(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); /** @var \PHPUnit\Framework\MockObject\MockObject | CardDavBackend $backend */ @@ -74,7 +74,7 @@ class AddressBookTest extends TestCase { } - public function testPropPatch() { + public function testPropPatch(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); /** @var \PHPUnit\Framework\MockObject\MockObject | CardDavBackend $backend */ @@ -94,7 +94,7 @@ class AddressBookTest extends TestCase { /** * @dataProvider providesReadOnlyInfo */ - public function testAcl($expectsWrite, $readOnlyValue, $hasOwnerSet) { + public function testAcl($expectsWrite, $readOnlyValue, $hasOwnerSet): void { /** @var \PHPUnit\Framework\MockObject\MockObject | CardDavBackend $backend */ $backend = $this->getMockBuilder(CardDavBackend::class)->disableOriginalConstructor()->getMock(); $backend->expects($this->any())->method('applyShareAcl')->willReturnArgument(1); diff --git a/apps/dav/tests/unit/CardDAV/BirthdayServiceTest.php b/apps/dav/tests/unit/CardDAV/BirthdayServiceTest.php index 23d104abe8b..6cca861f6cc 100644 --- a/apps/dav/tests/unit/CardDAV/BirthdayServiceTest.php +++ b/apps/dav/tests/unit/CardDAV/BirthdayServiceTest.php @@ -84,7 +84,7 @@ class BirthdayServiceTest extends TestCase { * @param string|null $expectedReminder * @param string | null $data */ - public function testBuildBirthdayFromContact($expectedSummary, $expectedDTStart, $expectedFieldType, $expectedUnknownYear, $expectedOriginalYear, $expectedReminder, $data, $fieldType, $prefix, $supports4Bytes, $configuredReminder) { + public function testBuildBirthdayFromContact($expectedSummary, $expectedDTStart, $expectedFieldType, $expectedUnknownYear, $expectedOriginalYear, $expectedReminder, $data, $fieldType, $prefix, $supports4Bytes, $configuredReminder): void { $this->dbConnection->method('supports4ByteText')->willReturn($supports4Bytes); $cal = $this->service->buildDateFromContact($data, $fieldType, $prefix, $configuredReminder); @@ -113,7 +113,7 @@ class BirthdayServiceTest extends TestCase { } } - public function testOnCardDeleteGloballyDisabled() { + public function testOnCardDeleteGloballyDisabled(): void { $this->config->expects($this->once()) ->method('getAppValue') ->with('dav', 'generateBirthdayCalendar', 'yes') @@ -124,7 +124,7 @@ class BirthdayServiceTest extends TestCase { $this->service->onCardDeleted(666, 'gump.vcf'); } - public function testOnCardDeleteUserDisabled() { + public function testOnCardDeleteUserDisabled(): void { $this->config->expects($this->once()) ->method('getAppValue') ->with('dav', 'generateBirthdayCalendar', 'yes') @@ -148,7 +148,7 @@ class BirthdayServiceTest extends TestCase { $this->service->onCardDeleted(666, 'gump.vcf'); } - public function testOnCardDeleted() { + public function testOnCardDeleted(): void { $this->config->expects($this->once()) ->method('getAppValue') ->with('dav', 'generateBirthdayCalendar', 'yes') @@ -182,7 +182,7 @@ class BirthdayServiceTest extends TestCase { $this->service->onCardDeleted(666, 'gump.vcf'); } - public function testOnCardChangedGloballyDisabled() { + public function testOnCardChangedGloballyDisabled(): void { $this->config->expects($this->once()) ->method('getAppValue') ->with('dav', 'generateBirthdayCalendar', 'yes') @@ -198,7 +198,7 @@ class BirthdayServiceTest extends TestCase { $service->onCardChanged(666, 'gump.vcf', ''); } - public function testOnCardChangedUserDisabled() { + public function testOnCardChangedUserDisabled(): void { $this->config->expects($this->once()) ->method('getAppValue') ->with('dav', 'generateBirthdayCalendar', 'yes') @@ -230,7 +230,7 @@ class BirthdayServiceTest extends TestCase { /** * @dataProvider providesCardChanges */ - public function testOnCardChanged($expectedOp) { + public function testOnCardChanged($expectedOp): void { $this->config->expects($this->once()) ->method('getAppValue') ->with('dav', 'generateBirthdayCalendar', 'yes') @@ -306,12 +306,12 @@ class BirthdayServiceTest extends TestCase { * @param $old * @param $new */ - public function testBirthdayEvenChanged($expected, $old, $new) { + public function testBirthdayEvenChanged($expected, $old, $new): void { $new = Reader::read($new); $this->assertEquals($expected, $this->service->birthdayEvenChanged($old, $new)); } - public function testGetAllAffectedPrincipals() { + public function testGetAllAffectedPrincipals(): void { $this->cardDav->expects($this->once())->method('getShares')->willReturn([ [ '{http://owncloud.org/ns}group-share' => false, @@ -350,7 +350,7 @@ class BirthdayServiceTest extends TestCase { ], $users); } - public function testBirthdayCalendarHasComponentEvent() { + public function testBirthdayCalendarHasComponentEvent(): void { $this->calDav->expects($this->once()) ->method('createCalendar') ->with('principal001', 'contact_birthdays', [ @@ -361,7 +361,7 @@ class BirthdayServiceTest extends TestCase { $this->service->ensureCalendarExists('principal001'); } - public function testResetForUser() { + public function testResetForUser(): void { $this->calDav->expects($this->once()) ->method('getCalendarByUri') ->with('principals/users/user123', 'contact_birthdays') diff --git a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php index fdcc0ad0c09..adf64ef82b0 100644 --- a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php +++ b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php @@ -181,7 +181,7 @@ class CardDavBackendTest extends TestCase { } } - public function testAddressBookOperations() { + public function testAddressBookOperations(): void { // create a new address book $this->backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []); @@ -209,7 +209,7 @@ class CardDavBackendTest extends TestCase { $this->assertEquals(0, count($books)); } - public function testAddressBookSharing() { + public function testAddressBookSharing(): void { $this->userManager->expects($this->any()) ->method('userExists') ->willReturn(true); @@ -240,7 +240,7 @@ class CardDavBackendTest extends TestCase { $this->assertEquals(0, count($books)); } - public function testCardOperations() { + public function testCardOperations(): void { /** @var CardDavBackend | \PHPUnit\Framework\MockObject\MockObject $backend */ $backend = $this->getMockBuilder(CardDavBackend::class) ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher]) @@ -296,7 +296,7 @@ class CardDavBackendTest extends TestCase { $this->assertEquals(0, count($cards)); } - public function testMultiCard() { + public function testMultiCard(): void { $this->backend = $this->getMockBuilder(CardDavBackend::class) ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher]) ->setMethods(['updateProperties'])->getMock(); @@ -349,7 +349,7 @@ class CardDavBackendTest extends TestCase { $this->assertEquals(0, count($cards)); } - public function testMultipleUIDOnDifferentAddressbooks() { + public function testMultipleUIDOnDifferentAddressbooks(): void { $this->backend = $this->getMockBuilder(CardDavBackend::class) ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher]) ->onlyMethods(['updateProperties'])->getMock(); @@ -371,7 +371,7 @@ class CardDavBackendTest extends TestCase { $this->backend->createCard($bookId1, $uri1, $this->vcardTest0); } - public function testMultipleUIDDenied() { + public function testMultipleUIDDenied(): void { $this->backend = $this->getMockBuilder(CardDavBackend::class) ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher]) ->setMethods(['updateProperties'])->getMock(); @@ -392,7 +392,7 @@ class CardDavBackendTest extends TestCase { $test = $this->backend->createCard($bookId, $uri1, $this->vcardTest0); } - public function testNoValidUID() { + public function testNoValidUID(): void { $this->backend = $this->getMockBuilder(CardDavBackend::class) ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher]) ->setMethods(['updateProperties'])->getMock(); @@ -409,7 +409,7 @@ class CardDavBackendTest extends TestCase { $test = $this->backend->createCard($bookId, $uri1, $this->vcardTestNoUID); } - public function testDeleteWithoutCard() { + public function testDeleteWithoutCard(): void { $this->backend = $this->getMockBuilder(CardDavBackend::class) ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher]) ->onlyMethods([ @@ -449,7 +449,7 @@ class CardDavBackendTest extends TestCase { $this->assertTrue($this->backend->deleteCard($bookId, $uri)); } - public function testSyncSupport() { + public function testSyncSupport(): void { $this->backend = $this->getMockBuilder(CardDavBackend::class) ->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->groupManager, $this->dispatcher]) ->setMethods(['updateProperties'])->getMock(); @@ -473,7 +473,7 @@ class CardDavBackendTest extends TestCase { $this->assertEquals($uri0, $changes['added'][0]); } - public function testSharing() { + public function testSharing(): void { $this->userManager->expects($this->any()) ->method('userExists') ->willReturn(true); @@ -511,7 +511,7 @@ class CardDavBackendTest extends TestCase { $this->assertEquals(0, count($books)); } - public function testUpdateProperties() { + public function testUpdateProperties(): void { $bookId = 42; $cardUri = 'card-uri'; $cardId = 2; @@ -569,7 +569,7 @@ class CardDavBackendTest extends TestCase { $this->assertSame($cardId, (int)$result[0]['cardid']); } - public function testPurgeProperties() { + public function testPurgeProperties(): void { $query = $this->db->getQueryBuilder(); $query->insert('cards_properties') ->values( @@ -611,7 +611,7 @@ class CardDavBackendTest extends TestCase { $this->assertSame(2, (int)$result[0]['cardid']); } - public function testGetCardId() { + public function testGetCardId(): void { $query = $this->db->getQueryBuilder(); $query->insert('cards') @@ -633,7 +633,7 @@ class CardDavBackendTest extends TestCase { } - public function testGetCardIdFailed() { + public function testGetCardIdFailed(): void { $this->expectException(\InvalidArgumentException::class); $this->invokePrivate($this->backend, 'getCardId', [1, 'uri']); @@ -647,7 +647,7 @@ class CardDavBackendTest extends TestCase { * @param array $options * @param array $expected */ - public function testSearch($pattern, $properties, $options, $expected) { + public function testSearch($pattern, $properties, $options, $expected): void { /** @var VCard $vCards */ $vCards = []; $vCards[0] = new VCard(); @@ -767,7 +767,7 @@ class CardDavBackendTest extends TestCase { ]; } - public function testGetCardUri() { + public function testGetCardUri(): void { $query = $this->db->getQueryBuilder(); $query->insert($this->dbCardsTable) ->values( @@ -788,13 +788,13 @@ class CardDavBackendTest extends TestCase { } - public function testGetCardUriFailed() { + public function testGetCardUriFailed(): void { $this->expectException(\InvalidArgumentException::class); $this->backend->getCardUri(1); } - public function testGetContact() { + public function testGetContact(): void { $query = $this->db->getQueryBuilder(); for ($i = 0; $i < 2; $i++) { $query->insert($this->dbCardsTable) @@ -825,11 +825,11 @@ class CardDavBackendTest extends TestCase { $this->assertEmpty($result); } - public function testGetContactFail() { + public function testGetContactFail(): void { $this->assertEmpty($this->backend->getContact(0, 'uri')); } - public function testCollectCardProperties() { + public function testCollectCardProperties(): void { $query = $this->db->getQueryBuilder(); $query->insert($this->dbCardsPropertiesTable) ->values( diff --git a/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php b/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php index e9153c4d197..32a0946d2b9 100644 --- a/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php +++ b/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php @@ -33,7 +33,7 @@ use OCP\IURLGenerator; use Test\TestCase; class ContactsManagerTest extends TestCase { - public function test() { + public function test(): void { /** @var IManager | \PHPUnit\Framework\MockObject\MockObject $cm */ $cm = $this->getMockBuilder(IManager::class)->disableOriginalConstructor()->getMock(); $cm->expects($this->exactly(2))->method('registerAddressBook'); diff --git a/apps/dav/tests/unit/CardDAV/ConverterTest.php b/apps/dav/tests/unit/CardDAV/ConverterTest.php index cc5f707bb36..fe45e4e5430 100644 --- a/apps/dav/tests/unit/CardDAV/ConverterTest.php +++ b/apps/dav/tests/unit/CardDAV/ConverterTest.php @@ -94,7 +94,7 @@ class ConverterTest extends TestCase { /** * @dataProvider providesNewUsers */ - public function testCreation($expectedVCard, $displayName = null, $eMailAddress = null, $cloudId = null) { + public function testCreation($expectedVCard, $displayName = null, $eMailAddress = null, $cloudId = null): void { $user = $this->getUserMock((string)$displayName, $eMailAddress, $cloudId); $accountManager = $this->getAccountManager($user); @@ -183,7 +183,7 @@ class ConverterTest extends TestCase { * @param $expected * @param $fullName */ - public function testNameSplitter($expected, $fullName) { + public function testNameSplitter($expected, $fullName): void { $converter = new Converter($this->accountManager); $r = $converter->splitFullName($fullName); $r = implode(';', $r); diff --git a/apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php b/apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php index 56a0681f011..6671eb836d0 100644 --- a/apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php +++ b/apps/dav/tests/unit/CardDAV/ImageExportPluginTest.php @@ -73,7 +73,7 @@ class ImageExportPluginTest extends TestCase { * @dataProvider providesQueryParams * @param $param */ - public function testQueryParams($param) { + public function testQueryParams($param): void { $this->request->expects($this->once())->method('getQueryParameters')->willReturn($param); $result = $this->plugin->httpGet($this->request, $this->response); $this->assertTrue($result); @@ -87,7 +87,7 @@ class ImageExportPluginTest extends TestCase { ]; } - public function testNoCard() { + public function testNoCard(): void { $this->request->method('getQueryParameters') ->willReturn([ 'photo' @@ -119,7 +119,7 @@ class ImageExportPluginTest extends TestCase { * @param $size * @param bool $photo */ - public function testCard($size, $photo) { + public function testCard($size, $photo): void { $query = ['photo' => null]; if ($size !== null) { $query['size'] = $size; diff --git a/apps/dav/tests/unit/CardDAV/Sharing/PluginTest.php b/apps/dav/tests/unit/CardDAV/Sharing/PluginTest.php index e9429e4e18f..01a696f4060 100644 --- a/apps/dav/tests/unit/CardDAV/Sharing/PluginTest.php +++ b/apps/dav/tests/unit/CardDAV/Sharing/PluginTest.php @@ -67,7 +67,7 @@ class PluginTest extends TestCase { $this->plugin->initialize($this->server); } - public function testSharing() { + public function testSharing(): void { $this->book->expects($this->once())->method('updateShares')->with([[ 'href' => 'principal:principals/admin', 'commonName' => null, diff --git a/apps/dav/tests/unit/CardDAV/SyncServiceTest.php b/apps/dav/tests/unit/CardDAV/SyncServiceTest.php index f1135b95257..789009057fd 100644 --- a/apps/dav/tests/unit/CardDAV/SyncServiceTest.php +++ b/apps/dav/tests/unit/CardDAV/SyncServiceTest.php @@ -37,7 +37,7 @@ use Sabre\VObject\Component\VCard; use Test\TestCase; class SyncServiceTest extends TestCase { - public function testEmptySync() { + public function testEmptySync(): void { $backend = $this->getBackendMock(0, 0, 0); $ss = $this->getSyncServiceMock($backend, []); @@ -45,7 +45,7 @@ class SyncServiceTest extends TestCase { $this->assertEquals('sync-token-1', $return); } - public function testSyncWithNewElement() { + public function testSyncWithNewElement(): void { $backend = $this->getBackendMock(1, 0, 0); $backend->method('getCard')->willReturn(false); @@ -54,7 +54,7 @@ class SyncServiceTest extends TestCase { $this->assertEquals('sync-token-1', $return); } - public function testSyncWithUpdatedElement() { + public function testSyncWithUpdatedElement(): void { $backend = $this->getBackendMock(0, 1, 0); $backend->method('getCard')->willReturn(true); @@ -63,7 +63,7 @@ class SyncServiceTest extends TestCase { $this->assertEquals('sync-token-1', $return); } - public function testSyncWithDeletedElement() { + public function testSyncWithDeletedElement(): void { $backend = $this->getBackendMock(0, 0, 1); $ss = $this->getSyncServiceMock($backend, ['0' => [404 => '']]); @@ -71,7 +71,7 @@ class SyncServiceTest extends TestCase { $this->assertEquals('sync-token-1', $return); } - public function testEnsureSystemAddressBookExists() { + public function testEnsureSystemAddressBookExists(): void { /** @var CardDavBackend | \PHPUnit\Framework\MockObject\MockObject $backend */ $backend = $this->getMockBuilder(CardDavBackend::class)->disableOriginalConstructor()->getMock(); $backend->expects($this->exactly(1))->method('createAddressBook'); @@ -107,7 +107,7 @@ class SyncServiceTest extends TestCase { * @param integer $deleteCalls * @return void */ - public function testUpdateAndDeleteUser($activated, $createCalls, $updateCalls, $deleteCalls) { + public function testUpdateAndDeleteUser($activated, $createCalls, $updateCalls, $deleteCalls): void { /** @var CardDavBackend | \PHPUnit\Framework\MockObject\MockObject $backend */ $backend = $this->getMockBuilder(CardDavBackend::class)->disableOriginalConstructor()->getMock(); $logger = $this->getMockBuilder(LoggerInterface::class)->disableOriginalConstructor()->getMock(); diff --git a/apps/dav/tests/unit/Command/DeleteCalendarTest.php b/apps/dav/tests/unit/Command/DeleteCalendarTest.php index db0ee31f6be..dec349006ff 100644 --- a/apps/dav/tests/unit/Command/DeleteCalendarTest.php +++ b/apps/dav/tests/unit/Command/DeleteCalendarTest.php @@ -80,7 +80,7 @@ class DeleteCalendarTest extends TestCase { ); } - public function testInvalidUser() { + public function testInvalidUser(): void { $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage( 'User <' . self::USER . '> is unknown.'); @@ -97,7 +97,7 @@ class DeleteCalendarTest extends TestCase { ]); } - public function testNoCalendarName() { + public function testNoCalendarName(): void { $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage( 'Please specify a calendar name or --birthday'); @@ -113,7 +113,7 @@ class DeleteCalendarTest extends TestCase { ]); } - public function testInvalidCalendar() { + public function testInvalidCalendar(): void { $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage( 'User <' . self::USER . '> has no calendar named <' . self::NAME . '>.'); @@ -137,7 +137,7 @@ class DeleteCalendarTest extends TestCase { ]); } - public function testDelete() { + public function testDelete(): void { $id = 1234; $calendar = [ 'id' => $id, @@ -167,7 +167,7 @@ class DeleteCalendarTest extends TestCase { ]); } - public function testForceDelete() { + public function testForceDelete(): void { $id = 1234; $calendar = [ 'id' => $id, @@ -198,7 +198,7 @@ class DeleteCalendarTest extends TestCase { ]); } - public function testDeleteBirthday() { + public function testDeleteBirthday(): void { $id = 1234; $calendar = [ 'id' => $id, @@ -228,7 +228,7 @@ class DeleteCalendarTest extends TestCase { ]); } - public function testBirthdayHasPrecedence() { + public function testBirthdayHasPrecedence(): void { $calendar = [ 'id' => 1234, 'principaluri' => 'principals/users/' . self::USER, diff --git a/apps/dav/tests/unit/Command/ListCalendarsTest.php b/apps/dav/tests/unit/Command/ListCalendarsTest.php index 6f200da01bf..16d3a523c52 100644 --- a/apps/dav/tests/unit/Command/ListCalendarsTest.php +++ b/apps/dav/tests/unit/Command/ListCalendarsTest.php @@ -63,7 +63,7 @@ class ListCalendarsTest extends TestCase { ); } - public function testWithBadUser() { + public function testWithBadUser(): void { $this->expectException(\InvalidArgumentException::class); $this->userManager->expects($this->once()) @@ -78,7 +78,7 @@ class ListCalendarsTest extends TestCase { $this->assertStringContainsString("User <" . self::USERNAME . "> in unknown", $commandTester->getDisplay()); } - public function testWithCorrectUserWithNoCalendars() { + public function testWithCorrectUserWithNoCalendars(): void { $this->userManager->expects($this->once()) ->method('userExists') ->with(self::USERNAME) @@ -106,7 +106,7 @@ class ListCalendarsTest extends TestCase { /** * @dataProvider dataExecute */ - public function testWithCorrectUser(bool $readOnly, string $output) { + public function testWithCorrectUser(bool $readOnly, string $output): void { $this->userManager->expects($this->once()) ->method('userExists') ->with(self::USERNAME) diff --git a/apps/dav/tests/unit/Command/MoveCalendarTest.php b/apps/dav/tests/unit/Command/MoveCalendarTest.php index 3dbc56db359..228884cc39c 100644 --- a/apps/dav/tests/unit/Command/MoveCalendarTest.php +++ b/apps/dav/tests/unit/Command/MoveCalendarTest.php @@ -104,7 +104,7 @@ class MoveCalendarTest extends TestCase { * @param $userOriginExists * @param $userDestinationExists */ - public function testWithBadUserOrigin($userOriginExists, $userDestinationExists) { + public function testWithBadUserOrigin($userOriginExists, $userDestinationExists): void { $this->expectException(\InvalidArgumentException::class); $this->userManager->expects($this->exactly($userOriginExists ? 2 : 1)) @@ -127,7 +127,7 @@ class MoveCalendarTest extends TestCase { } - public function testMoveWithInexistantCalendar() { + public function testMoveWithInexistantCalendar(): void { $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('User <user> has no calendar named <personal>. You can run occ dav:list-calendars to list calendars URIs for this user.'); @@ -152,7 +152,7 @@ class MoveCalendarTest extends TestCase { } - public function testMoveWithExistingDestinationCalendar() { + public function testMoveWithExistingDestinationCalendar(): void { $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('User <user2> already has a calendar named <personal>.'); @@ -182,7 +182,7 @@ class MoveCalendarTest extends TestCase { ]); } - public function testMove() { + public function testMove(): void { $this->userManager->expects($this->exactly(2)) ->method('userExists') ->withConsecutive( @@ -228,7 +228,7 @@ class MoveCalendarTest extends TestCase { /** * @dataProvider dataTestMoveWithDestinationNotPartOfGroup */ - public function testMoveWithDestinationNotPartOfGroup(bool $shareWithGroupMembersOnly) { + public function testMoveWithDestinationNotPartOfGroup(bool $shareWithGroupMembersOnly): void { $this->userManager->expects($this->exactly(2)) ->method('userExists') ->withConsecutive( @@ -272,7 +272,7 @@ class MoveCalendarTest extends TestCase { ]); } - public function testMoveWithDestinationPartOfGroup() { + public function testMoveWithDestinationPartOfGroup(): void { $this->userManager->expects($this->exactly(2)) ->method('userExists') ->withConsecutive( @@ -318,7 +318,7 @@ class MoveCalendarTest extends TestCase { $this->assertStringContainsString("[OK] Calendar <personal> was moved from user <user> to <user2>", $commandTester->getDisplay()); } - public function testMoveWithDestinationNotPartOfGroupAndForce() { + public function testMoveWithDestinationNotPartOfGroupAndForce(): void { $this->userManager->expects($this->exactly(2)) ->method('userExists') ->withConsecutive( @@ -376,7 +376,7 @@ class MoveCalendarTest extends TestCase { /** * @dataProvider dataTestMoveWithCalendarAlreadySharedToDestination */ - public function testMoveWithCalendarAlreadySharedToDestination(bool $force) { + public function testMoveWithCalendarAlreadySharedToDestination(bool $force): void { $this->userManager->expects($this->exactly(2)) ->method('userExists') ->withConsecutive( diff --git a/apps/dav/tests/unit/Command/RemoveInvalidSharesTest.php b/apps/dav/tests/unit/Command/RemoveInvalidSharesTest.php index 66ac40eff83..30820a04455 100644 --- a/apps/dav/tests/unit/Command/RemoveInvalidSharesTest.php +++ b/apps/dav/tests/unit/Command/RemoveInvalidSharesTest.php @@ -48,7 +48,7 @@ class RemoveInvalidSharesTest extends TestCase { ]); } - public function test() { + public function test(): void { $db = \OC::$server->getDatabaseConnection(); /** @var Principal | \PHPUnit\Framework\MockObject\MockObject $principal */ $principal = $this->createMock(Principal::class); diff --git a/apps/dav/tests/unit/Comments/CommentsNodeTest.php b/apps/dav/tests/unit/Comments/CommentsNodeTest.php index 54d410b609a..15c207eafbd 100644 --- a/apps/dav/tests/unit/Comments/CommentsNodeTest.php +++ b/apps/dav/tests/unit/Comments/CommentsNodeTest.php @@ -75,7 +75,7 @@ class CommentsNodeTest extends \Test\TestCase { ); } - public function testDelete() { + public function testDelete(): void { $user = $this->getMockBuilder(IUser::class) ->disableOriginalConstructor() ->getMock(); @@ -108,7 +108,7 @@ class CommentsNodeTest extends \Test\TestCase { } - public function testDeleteForbidden() { + public function testDeleteForbidden(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $user = $this->getMockBuilder(IUser::class) @@ -140,7 +140,7 @@ class CommentsNodeTest extends \Test\TestCase { $this->node->delete(); } - public function testGetName() { + public function testGetName(): void { $id = '19'; $this->comment->expects($this->once()) ->method('getId') @@ -150,17 +150,17 @@ class CommentsNodeTest extends \Test\TestCase { } - public function testSetName() { + public function testSetName(): void { $this->expectException(\Sabre\DAV\Exception\MethodNotAllowed::class); $this->node->setName('666'); } - public function testGetLastModified() { + public function testGetLastModified(): void { $this->assertSame($this->node->getLastModified(), null); } - public function testUpdateComment() { + public function testUpdateComment(): void { $msg = 'Hello Earth'; $user = $this->getMockBuilder(IUser::class) @@ -195,7 +195,7 @@ class CommentsNodeTest extends \Test\TestCase { } - public function testUpdateCommentLogException() { + public function testUpdateCommentLogException(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('buh!'); @@ -236,7 +236,7 @@ class CommentsNodeTest extends \Test\TestCase { } - public function testUpdateCommentMessageTooLongException() { + public function testUpdateCommentMessageTooLongException(): void { $this->expectException(\Sabre\DAV\Exception\BadRequest::class); $this->expectExceptionMessage('Message exceeds allowed character limit of'); @@ -275,7 +275,7 @@ class CommentsNodeTest extends \Test\TestCase { } - public function testUpdateForbiddenByUser() { + public function testUpdateForbiddenByUser(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $msg = 'HaXX0r'; @@ -310,7 +310,7 @@ class CommentsNodeTest extends \Test\TestCase { } - public function testUpdateForbiddenByType() { + public function testUpdateForbiddenByType(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $msg = 'HaXX0r'; @@ -340,7 +340,7 @@ class CommentsNodeTest extends \Test\TestCase { } - public function testUpdateForbiddenByNotLoggedIn() { + public function testUpdateForbiddenByNotLoggedIn(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $msg = 'HaXX0r'; @@ -362,7 +362,7 @@ class CommentsNodeTest extends \Test\TestCase { $this->node->updateComment($msg); } - public function testPropPatch() { + public function testPropPatch(): void { $propPatch = $this->getMockBuilder(PropPatch::class) ->disableOriginalConstructor() ->getMock(); @@ -374,7 +374,7 @@ class CommentsNodeTest extends \Test\TestCase { $this->node->propPatch($propPatch); } - public function testGetProperties() { + public function testGetProperties(): void { $ns = '{http://owncloud.org/ns}'; $expected = [ $ns . 'id' => '123', @@ -519,7 +519,7 @@ class CommentsNodeTest extends \Test\TestCase { * @dataProvider readCommentProvider * @param $expected */ - public function testGetPropertiesUnreadProperty($creationDT, $readDT, $expected) { + public function testGetPropertiesUnreadProperty($creationDT, $readDT, $expected): void { $this->comment->expects($this->any()) ->method('getCreationDateTime') ->willReturn($creationDT); diff --git a/apps/dav/tests/unit/Comments/CommentsPluginTest.php b/apps/dav/tests/unit/Comments/CommentsPluginTest.php index 5d05b278e18..7c3b3c82883 100644 --- a/apps/dav/tests/unit/Comments/CommentsPluginTest.php +++ b/apps/dav/tests/unit/Comments/CommentsPluginTest.php @@ -75,7 +75,7 @@ class CommentsPluginTest extends \Test\TestCase { $this->plugin = new CommentsPluginImplementation($this->commentsManager, $this->userSession); } - public function testCreateComment() { + public function testCreateComment(): void { $commentData = [ 'actorType' => 'users', 'verb' => 'comment', @@ -171,7 +171,7 @@ class CommentsPluginTest extends \Test\TestCase { } - public function testCreateCommentInvalidObject() { + public function testCreateCommentInvalidObject(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); $commentData = [ @@ -253,7 +253,7 @@ class CommentsPluginTest extends \Test\TestCase { } - public function testCreateCommentInvalidActor() { + public function testCreateCommentInvalidActor(): void { $this->expectException(\Sabre\DAV\Exception\BadRequest::class); $commentData = [ @@ -341,7 +341,7 @@ class CommentsPluginTest extends \Test\TestCase { } - public function testCreateCommentUnsupportedMediaType() { + public function testCreateCommentUnsupportedMediaType(): void { $this->expectException(\Sabre\DAV\Exception\UnsupportedMediaType::class); $commentData = [ @@ -429,7 +429,7 @@ class CommentsPluginTest extends \Test\TestCase { } - public function testCreateCommentInvalidPayload() { + public function testCreateCommentInvalidPayload(): void { $this->expectException(\Sabre\DAV\Exception\BadRequest::class); $commentData = [ @@ -523,7 +523,7 @@ class CommentsPluginTest extends \Test\TestCase { } - public function testCreateCommentMessageTooLong() { + public function testCreateCommentMessageTooLong(): void { $this->expectException(\Sabre\DAV\Exception\BadRequest::class); $this->expectExceptionMessage('Message exceeds allowed character limit of'); @@ -617,7 +617,7 @@ class CommentsPluginTest extends \Test\TestCase { } - public function testOnReportInvalidNode() { + public function testOnReportInvalidNode(): void { $this->expectException(\Sabre\DAV\Exception\ReportNotSupported::class); $path = 'totally/unrelated/13'; @@ -640,7 +640,7 @@ class CommentsPluginTest extends \Test\TestCase { } - public function testOnReportInvalidReportName() { + public function testOnReportInvalidReportName(): void { $this->expectException(\Sabre\DAV\Exception\ReportNotSupported::class); $path = 'comments/files/42'; @@ -662,7 +662,7 @@ class CommentsPluginTest extends \Test\TestCase { $this->plugin->onReport('{whoever}whatever', [], '/' . $path); } - public function testOnReportDateTimeEmpty() { + public function testOnReportDateTimeEmpty(): void { $path = 'comments/files/42'; $parameters = [ @@ -717,7 +717,7 @@ class CommentsPluginTest extends \Test\TestCase { $this->plugin->onReport(CommentsPluginImplementation::REPORT_NAME, $parameters, '/' . $path); } - public function testOnReport() { + public function testOnReport(): void { $path = 'comments/files/42'; $parameters = [ diff --git a/apps/dav/tests/unit/Comments/EntityCollectionTest.php b/apps/dav/tests/unit/Comments/EntityCollectionTest.php index f95dbf839ee..ec98441d252 100644 --- a/apps/dav/tests/unit/Comments/EntityCollectionTest.php +++ b/apps/dav/tests/unit/Comments/EntityCollectionTest.php @@ -71,11 +71,11 @@ class EntityCollectionTest extends \Test\TestCase { ); } - public function testGetId() { + public function testGetId(): void { $this->assertSame($this->collection->getId(), '19'); } - public function testGetChild() { + public function testGetChild(): void { $this->commentsManager->expects($this->once()) ->method('get') ->with('55') @@ -90,7 +90,7 @@ class EntityCollectionTest extends \Test\TestCase { } - public function testGetChildException() { + public function testGetChildException(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); $this->commentsManager->expects($this->once()) @@ -101,7 +101,7 @@ class EntityCollectionTest extends \Test\TestCase { $this->collection->getChild('55'); } - public function testGetChildren() { + public function testGetChildren(): void { $this->commentsManager->expects($this->once()) ->method('getForObject') ->with('files', '19') @@ -117,7 +117,7 @@ class EntityCollectionTest extends \Test\TestCase { $this->assertTrue($result[0] instanceof \OCA\DAV\Comments\CommentNode); } - public function testFindChildren() { + public function testFindChildren(): void { $dt = new \DateTime('2016-01-10 18:48:00'); $this->commentsManager->expects($this->once()) ->method('getForObject') @@ -134,11 +134,11 @@ class EntityCollectionTest extends \Test\TestCase { $this->assertTrue($result[0] instanceof \OCA\DAV\Comments\CommentNode); } - public function testChildExistsTrue() { + public function testChildExistsTrue(): void { $this->assertTrue($this->collection->childExists('44')); } - public function testChildExistsFalse() { + public function testChildExistsFalse(): void { $this->commentsManager->expects($this->once()) ->method('get') ->with('44') diff --git a/apps/dav/tests/unit/Comments/EntityTypeCollectionTest.php b/apps/dav/tests/unit/Comments/EntityTypeCollectionTest.php index 89f84fb6ad4..75d13296a3e 100644 --- a/apps/dav/tests/unit/Comments/EntityTypeCollectionTest.php +++ b/apps/dav/tests/unit/Comments/EntityTypeCollectionTest.php @@ -75,16 +75,16 @@ class EntityTypeCollectionTest extends \Test\TestCase { ); } - public function testChildExistsYes() { + public function testChildExistsYes(): void { $this->childMap[17] = true; $this->assertTrue($this->collection->childExists('17')); } - public function testChildExistsNo() { + public function testChildExistsNo(): void { $this->assertFalse($this->collection->childExists('17')); } - public function testGetChild() { + public function testGetChild(): void { $this->childMap[17] = true; $ec = $this->collection->getChild('17'); @@ -92,14 +92,14 @@ class EntityTypeCollectionTest extends \Test\TestCase { } - public function testGetChildException() { + public function testGetChildException(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); $this->collection->getChild('17'); } - public function testGetChildren() { + public function testGetChildren(): void { $this->expectException(\Sabre\DAV\Exception\MethodNotAllowed::class); $this->collection->getChildren(); diff --git a/apps/dav/tests/unit/Comments/RootCollectionTest.php b/apps/dav/tests/unit/Comments/RootCollectionTest.php index 703557c16d6..8e5e4ecad7c 100644 --- a/apps/dav/tests/unit/Comments/RootCollectionTest.php +++ b/apps/dav/tests/unit/Comments/RootCollectionTest.php @@ -99,7 +99,7 @@ class RootCollectionTest extends \Test\TestCase { ->method('getUser') ->willReturn($this->user); - $this->dispatcher->addListener(CommentsEntityEvent::EVENT_ENTITY, function (CommentsEntityEvent $event) { + $this->dispatcher->addListener(CommentsEntityEvent::EVENT_ENTITY, function (CommentsEntityEvent $event): void { $event->addEntityCollection('files', function () { return true; }); @@ -107,27 +107,27 @@ class RootCollectionTest extends \Test\TestCase { } - public function testCreateFile() { + public function testCreateFile(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->collection->createFile('foo'); } - public function testCreateDirectory() { + public function testCreateDirectory(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->collection->createDirectory('foo'); } - public function testGetChild() { + public function testGetChild(): void { $this->prepareForInitCollections(); $etc = $this->collection->getChild('files'); $this->assertTrue($etc instanceof EntityTypeCollectionImplementation); } - public function testGetChildInvalid() { + public function testGetChildInvalid(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); $this->prepareForInitCollections(); @@ -135,13 +135,13 @@ class RootCollectionTest extends \Test\TestCase { } - public function testGetChildNoAuth() { + public function testGetChildNoAuth(): void { $this->expectException(\Sabre\DAV\Exception\NotAuthenticated::class); $this->collection->getChild('files'); } - public function testGetChildren() { + public function testGetChildren(): void { $this->prepareForInitCollections(); $children = $this->collection->getChildren(); $this->assertFalse(empty($children)); @@ -151,48 +151,48 @@ class RootCollectionTest extends \Test\TestCase { } - public function testGetChildrenNoAuth() { + public function testGetChildrenNoAuth(): void { $this->expectException(\Sabre\DAV\Exception\NotAuthenticated::class); $this->collection->getChildren(); } - public function testChildExistsYes() { + public function testChildExistsYes(): void { $this->prepareForInitCollections(); $this->assertTrue($this->collection->childExists('files')); } - public function testChildExistsNo() { + public function testChildExistsNo(): void { $this->prepareForInitCollections(); $this->assertFalse($this->collection->childExists('robots')); } - public function testChildExistsNoAuth() { + public function testChildExistsNoAuth(): void { $this->expectException(\Sabre\DAV\Exception\NotAuthenticated::class); $this->collection->childExists('files'); } - public function testDelete() { + public function testDelete(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->collection->delete(); } - public function testGetName() { + public function testGetName(): void { $this->assertSame('comments', $this->collection->getName()); } - public function testSetName() { + public function testSetName(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->collection->setName('foobar'); } - public function testGetLastModified() { + public function testGetLastModified(): void { $this->assertSame(null, $this->collection->getLastModified()); } } diff --git a/apps/dav/tests/unit/Connector/PublicAuthTest.php b/apps/dav/tests/unit/Connector/PublicAuthTest.php index 89068c0e6ef..bbb391c8f28 100644 --- a/apps/dav/tests/unit/Connector/PublicAuthTest.php +++ b/apps/dav/tests/unit/Connector/PublicAuthTest.php @@ -93,7 +93,7 @@ class PublicAuthTest extends \Test\TestCase { parent::tearDown(); } - public function testNoShare() { + public function testNoShare(): void { $this->shareManager->expects($this->once()) ->method('getShareByToken') ->willThrowException(new ShareNotFound()); @@ -103,7 +103,7 @@ class PublicAuthTest extends \Test\TestCase { $this->assertFalse($result); } - public function testShareNoPassword() { + public function testShareNoPassword(): void { $share = $this->getMockBuilder(IShare::class) ->disableOriginalConstructor() ->getMock(); @@ -118,7 +118,7 @@ class PublicAuthTest extends \Test\TestCase { $this->assertTrue($result); } - public function testSharePasswordFancyShareType() { + public function testSharePasswordFancyShareType(): void { $share = $this->getMockBuilder(IShare::class) ->disableOriginalConstructor() ->getMock(); @@ -135,7 +135,7 @@ class PublicAuthTest extends \Test\TestCase { } - public function testSharePasswordRemote() { + public function testSharePasswordRemote(): void { $share = $this->getMockBuilder(IShare::class) ->disableOriginalConstructor() ->getMock(); @@ -151,7 +151,7 @@ class PublicAuthTest extends \Test\TestCase { $this->assertTrue($result); } - public function testSharePasswordLinkValidPassword() { + public function testSharePasswordLinkValidPassword(): void { $share = $this->getMockBuilder(IShare::class) ->disableOriginalConstructor() ->getMock(); @@ -173,7 +173,7 @@ class PublicAuthTest extends \Test\TestCase { $this->assertTrue($result); } - public function testSharePasswordMailValidPassword() { + public function testSharePasswordMailValidPassword(): void { $share = $this->getMockBuilder(IShare::class) ->disableOriginalConstructor() ->getMock(); @@ -195,7 +195,7 @@ class PublicAuthTest extends \Test\TestCase { $this->assertTrue($result); } - public function testSharePasswordLinkValidSession() { + public function testSharePasswordLinkValidSession(): void { $share = $this->getMockBuilder(IShare::class) ->disableOriginalConstructor() ->getMock(); @@ -221,7 +221,7 @@ class PublicAuthTest extends \Test\TestCase { $this->assertTrue($result); } - public function testSharePasswordLinkInvalidSession() { + public function testSharePasswordLinkInvalidSession(): void { $share = $this->getMockBuilder(IShare::class) ->disableOriginalConstructor() ->getMock(); @@ -248,7 +248,7 @@ class PublicAuthTest extends \Test\TestCase { } - public function testSharePasswordMailInvalidSession() { + public function testSharePasswordMailInvalidSession(): void { $share = $this->getMockBuilder(IShare::class) ->disableOriginalConstructor() ->getMock(); diff --git a/apps/dav/tests/unit/Connector/Sabre/AuthTest.php b/apps/dav/tests/unit/Connector/Sabre/AuthTest.php index d72e19e1641..72800b84253 100644 --- a/apps/dav/tests/unit/Connector/Sabre/AuthTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/AuthTest.php @@ -83,7 +83,7 @@ class AuthTest extends TestCase { ); } - public function testIsDavAuthenticatedWithoutDavSession() { + public function testIsDavAuthenticatedWithoutDavSession(): void { $this->session ->expects($this->once()) ->method('get') @@ -93,7 +93,7 @@ class AuthTest extends TestCase { $this->assertFalse($this->invokePrivate($this->auth, 'isDavAuthenticated', ['MyTestUser'])); } - public function testIsDavAuthenticatedWithWrongDavSession() { + public function testIsDavAuthenticatedWithWrongDavSession(): void { $this->session ->expects($this->exactly(2)) ->method('get') @@ -103,7 +103,7 @@ class AuthTest extends TestCase { $this->assertFalse($this->invokePrivate($this->auth, 'isDavAuthenticated', ['MyTestUser'])); } - public function testIsDavAuthenticatedWithCorrectDavSession() { + public function testIsDavAuthenticatedWithCorrectDavSession(): void { $this->session ->expects($this->exactly(2)) ->method('get') @@ -113,7 +113,7 @@ class AuthTest extends TestCase { $this->assertTrue($this->invokePrivate($this->auth, 'isDavAuthenticated', ['MyTestUser'])); } - public function testValidateUserPassOfAlreadyDAVAuthenticatedUser() { + public function testValidateUserPassOfAlreadyDAVAuthenticatedUser(): void { $user = $this->getMockBuilder(IUser::class) ->disableOriginalConstructor() ->getMock(); @@ -140,7 +140,7 @@ class AuthTest extends TestCase { $this->assertTrue($this->invokePrivate($this->auth, 'validateUserPass', ['MyTestUser', 'MyTestPassword'])); } - public function testValidateUserPassOfInvalidDAVAuthenticatedUser() { + public function testValidateUserPassOfInvalidDAVAuthenticatedUser(): void { $user = $this->getMockBuilder(IUser::class) ->disableOriginalConstructor() ->getMock(); @@ -167,7 +167,7 @@ class AuthTest extends TestCase { $this->assertFalse($this->invokePrivate($this->auth, 'validateUserPass', ['MyTestUser', 'MyTestPassword'])); } - public function testValidateUserPassOfInvalidDAVAuthenticatedUserWithValidPassword() { + public function testValidateUserPassOfInvalidDAVAuthenticatedUserWithValidPassword(): void { $user = $this->getMockBuilder(IUser::class) ->disableOriginalConstructor() ->getMock(); @@ -203,7 +203,7 @@ class AuthTest extends TestCase { $this->assertTrue($this->invokePrivate($this->auth, 'validateUserPass', ['MyTestUser', 'MyTestPassword'])); } - public function testValidateUserPassWithInvalidPassword() { + public function testValidateUserPassWithInvalidPassword(): void { $this->userSession ->expects($this->once()) ->method('isLoggedIn') @@ -221,7 +221,7 @@ class AuthTest extends TestCase { } - public function testValidateUserPassWithPasswordLoginForbidden() { + public function testValidateUserPassWithPasswordLoginForbidden(): void { $this->expectException(\OCA\DAV\Connector\Sabre\Exception\PasswordLoginForbidden::class); $this->userSession @@ -240,7 +240,7 @@ class AuthTest extends TestCase { $this->invokePrivate($this->auth, 'validateUserPass', ['MyTestUser', 'MyTestPassword']); } - public function testAuthenticateAlreadyLoggedInWithoutCsrfTokenForNonGet() { + public function testAuthenticateAlreadyLoggedInWithoutCsrfTokenForNonGet(): void { $request = $this->getMockBuilder(RequestInterface::class) ->disableOriginalConstructor() ->getMock(); @@ -283,7 +283,7 @@ class AuthTest extends TestCase { $this->assertSame($expectedResponse, $response); } - public function testAuthenticateAlreadyLoggedInWithoutCsrfTokenAndCorrectlyDavAuthenticated() { + public function testAuthenticateAlreadyLoggedInWithoutCsrfTokenAndCorrectlyDavAuthenticated(): void { $request = $this->getMockBuilder(RequestInterface::class) ->disableOriginalConstructor() ->getMock(); @@ -330,7 +330,7 @@ class AuthTest extends TestCase { } - public function testAuthenticateAlreadyLoggedInWithoutTwoFactorChallengePassed() { + public function testAuthenticateAlreadyLoggedInWithoutTwoFactorChallengePassed(): void { $this->expectException(\Sabre\DAV\Exception\NotAuthenticated::class); $this->expectExceptionMessage('2FA challenge not passed.'); @@ -384,7 +384,7 @@ class AuthTest extends TestCase { } - public function testAuthenticateAlreadyLoggedInWithoutCsrfTokenAndIncorrectlyDavAuthenticated() { + public function testAuthenticateAlreadyLoggedInWithoutCsrfTokenAndIncorrectlyDavAuthenticated(): void { $this->expectException(\Sabre\DAV\Exception\NotAuthenticated::class); $this->expectExceptionMessage('CSRF check not passed.'); @@ -433,7 +433,7 @@ class AuthTest extends TestCase { $this->auth->check($request, $response); } - public function testAuthenticateAlreadyLoggedInWithoutCsrfTokenForNonGetAndDesktopClient() { + public function testAuthenticateAlreadyLoggedInWithoutCsrfTokenForNonGetAndDesktopClient(): void { $request = $this->getMockBuilder(RequestInterface::class) ->disableOriginalConstructor() ->getMock(); @@ -480,7 +480,7 @@ class AuthTest extends TestCase { $this->auth->check($request, $response); } - public function testAuthenticateAlreadyLoggedInWithoutCsrfTokenForGet() { + public function testAuthenticateAlreadyLoggedInWithoutCsrfTokenForGet(): void { $request = $this->getMockBuilder(RequestInterface::class) ->disableOriginalConstructor() ->getMock(); @@ -515,7 +515,7 @@ class AuthTest extends TestCase { $this->assertEquals([true, 'principals/users/MyWrongDavUser'], $response); } - public function testAuthenticateAlreadyLoggedInWithCsrfTokenForGet() { + public function testAuthenticateAlreadyLoggedInWithCsrfTokenForGet(): void { $request = $this->getMockBuilder(RequestInterface::class) ->disableOriginalConstructor() ->getMock(); @@ -550,7 +550,7 @@ class AuthTest extends TestCase { $this->assertEquals([true, 'principals/users/MyWrongDavUser'], $response); } - public function testAuthenticateNoBasicAuthenticateHeadersProvided() { + public function testAuthenticateNoBasicAuthenticateHeadersProvided(): void { $server = $this->getMockBuilder(Server::class) ->disableOriginalConstructor() ->getMock(); @@ -565,7 +565,7 @@ class AuthTest extends TestCase { } - public function testAuthenticateNoBasicAuthenticateHeadersProvidedWithAjax() { + public function testAuthenticateNoBasicAuthenticateHeadersProvidedWithAjax(): void { $this->expectException(\Sabre\DAV\Exception\NotAuthenticated::class); $this->expectExceptionMessage('Cannot authenticate over ajax calls'); @@ -589,7 +589,7 @@ class AuthTest extends TestCase { $this->auth->check($httpRequest, $httpResponse); } - public function testAuthenticateNoBasicAuthenticateHeadersProvidedWithAjaxButUserIsStillLoggedIn() { + public function testAuthenticateNoBasicAuthenticateHeadersProvidedWithAjaxButUserIsStillLoggedIn(): void { /** @var \Sabre\HTTP\RequestInterface $httpRequest */ $httpRequest = $this->getMockBuilder(RequestInterface::class) ->disableOriginalConstructor() @@ -631,7 +631,7 @@ class AuthTest extends TestCase { ); } - public function testAuthenticateValidCredentials() { + public function testAuthenticateValidCredentials(): void { $server = $this->getMockBuilder(Server::class) ->disableOriginalConstructor() ->getMock(); @@ -671,7 +671,7 @@ class AuthTest extends TestCase { $this->assertEquals([true, 'principals/users/MyTestUser'], $response); } - public function testAuthenticateInvalidCredentials() { + public function testAuthenticateInvalidCredentials(): void { $server = $this->getMockBuilder(Server::class) ->disableOriginalConstructor() ->getMock(); diff --git a/apps/dav/tests/unit/Connector/Sabre/BearerAuthTest.php b/apps/dav/tests/unit/Connector/Sabre/BearerAuthTest.php index 58a93b25447..bfc8d9f9c53 100644 --- a/apps/dav/tests/unit/Connector/Sabre/BearerAuthTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/BearerAuthTest.php @@ -60,11 +60,11 @@ class BearerAuthTest extends TestCase { ); } - public function testValidateBearerTokenNotLoggedIn() { + public function testValidateBearerTokenNotLoggedIn(): void { $this->assertFalse($this->bearerAuth->validateBearerToken('Token')); } - public function testValidateBearerToken() { + public function testValidateBearerToken(): void { $this->userSession ->expects($this->exactly(2)) ->method('isLoggedIn') @@ -85,7 +85,7 @@ class BearerAuthTest extends TestCase { $this->assertSame('principals/users/admin', $this->bearerAuth->validateBearerToken('Token')); } - public function testChallenge() { + public function testChallenge(): void { /** @var \PHPUnit\Framework\MockObject\MockObject|RequestInterface $request */ $request = $this->createMock(RequestInterface::class); /** @var \PHPUnit\Framework\MockObject\MockObject|ResponseInterface $response */ diff --git a/apps/dav/tests/unit/Connector/Sabre/BlockLegacyClientPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/BlockLegacyClientPluginTest.php index e9d43f77cca..e0a274321f0 100644 --- a/apps/dav/tests/unit/Connector/Sabre/BlockLegacyClientPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/BlockLegacyClientPluginTest.php @@ -67,7 +67,7 @@ class BlockLegacyClientPluginTest extends TestCase { * @dataProvider oldDesktopClientProvider * @param string $userAgent */ - public function testBeforeHandlerException($userAgent) { + public function testBeforeHandlerException($userAgent): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->expectExceptionMessage('Unsupported client version.'); @@ -105,7 +105,7 @@ class BlockLegacyClientPluginTest extends TestCase { * @dataProvider newAndAlternateDesktopClientProvider * @param string $userAgent */ - public function testBeforeHandlerSuccess($userAgent) { + public function testBeforeHandlerSuccess($userAgent): void { /** @var \Sabre\HTTP\RequestInterface | \PHPUnit\Framework\MockObject\MockObject $request */ $request = $this->createMock('\Sabre\HTTP\RequestInterface'); $request @@ -123,7 +123,7 @@ class BlockLegacyClientPluginTest extends TestCase { $this->blockLegacyClientVersionPlugin->beforeHandler($request); } - public function testBeforeHandlerNoUserAgent() { + public function testBeforeHandlerNoUserAgent(): void { /** @var \Sabre\HTTP\RequestInterface | \PHPUnit\Framework\MockObject\MockObject $request */ $request = $this->createMock('\Sabre\HTTP\RequestInterface'); $request diff --git a/apps/dav/tests/unit/Connector/Sabre/CommentsPropertiesPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/CommentsPropertiesPluginTest.php index ea49cef5d0f..29d1aecfdeb 100644 --- a/apps/dav/tests/unit/Connector/Sabre/CommentsPropertiesPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/CommentsPropertiesPluginTest.php @@ -78,7 +78,7 @@ class CommentsPropertiesPluginTest extends \Test\TestCase { * @param $node * @param $expectedSuccessful */ - public function testHandleGetProperties($node, $expectedSuccessful) { + public function testHandleGetProperties($node, $expectedSuccessful): void { $propFind = $this->getMockBuilder(PropFind::class) ->disableOriginalConstructor() ->getMock(); @@ -108,7 +108,7 @@ class CommentsPropertiesPluginTest extends \Test\TestCase { * @param $fid * @param $expectedHref */ - public function testGetCommentsLink($baseUri, $fid, $expectedHref) { + public function testGetCommentsLink($baseUri, $fid, $expectedHref): void { $node = $this->getMockBuilder(File::class) ->disableOriginalConstructor() ->getMock(); @@ -139,7 +139,7 @@ class CommentsPropertiesPluginTest extends \Test\TestCase { * @dataProvider userProvider * @param $user */ - public function testGetUnreadCount($user) { + public function testGetUnreadCount($user): void { $node = $this->getMockBuilder(File::class) ->disableOriginalConstructor() ->getMock(); diff --git a/apps/dav/tests/unit/Connector/Sabre/CopyEtagHeaderPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/CopyEtagHeaderPluginTest.php index 858e5c8199b..48ff61b80da 100644 --- a/apps/dav/tests/unit/Connector/Sabre/CopyEtagHeaderPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/CopyEtagHeaderPluginTest.php @@ -57,7 +57,7 @@ class CopyEtagHeaderPluginTest extends TestCase { $this->plugin->initialize($this->server); } - public function testCopyEtag() { + public function testCopyEtag(): void { $request = new \Sabre\Http\Request('GET', 'dummy.file'); $response = new \Sabre\Http\Response(); $response->setHeader('Etag', 'abcd'); @@ -67,7 +67,7 @@ class CopyEtagHeaderPluginTest extends TestCase { $this->assertEquals('abcd', $response->getHeader('OC-Etag')); } - public function testNoopWhenEmpty() { + public function testNoopWhenEmpty(): void { $request = new \Sabre\Http\Request('GET', 'dummy.file'); $response = new \Sabre\Http\Response(); @@ -89,7 +89,7 @@ class CopyEtagHeaderPluginTest extends TestCase { // Nothing to assert, we are just testing if the exception is handled } - public function testAfterMove() { + public function testAfterMove(): void { $node = $this->getMockBuilder(File::class) ->disableOriginalConstructor() ->getMock(); diff --git a/apps/dav/tests/unit/Connector/Sabre/CustomPropertiesBackendTest.php b/apps/dav/tests/unit/Connector/Sabre/CustomPropertiesBackendTest.php index 48658f3ffa3..395c4a6a779 100644 --- a/apps/dav/tests/unit/Connector/Sabre/CustomPropertiesBackendTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/CustomPropertiesBackendTest.php @@ -122,7 +122,7 @@ class CustomPropertiesBackendTest extends \Test\TestCase { return $node; } - private function applyDefaultProps($path = '/dummypath') { + private function applyDefaultProps($path = '/dummypath'): void { // properties to set $propPatch = new \Sabre\DAV\PropPatch([ 'customprop' => 'value1', @@ -146,7 +146,7 @@ class CustomPropertiesBackendTest extends \Test\TestCase { /** * Test that propFind on a missing file soft fails */ - public function testPropFindMissingFileSoftFail() { + public function testPropFindMissingFileSoftFail(): void { $propFind = new \Sabre\DAV\PropFind( '/dummypath', [ @@ -174,7 +174,7 @@ class CustomPropertiesBackendTest extends \Test\TestCase { /** * Test setting/getting properties */ - public function testSetGetPropertiesForFile() { + public function testSetGetPropertiesForFile(): void { $this->applyDefaultProps(); $propFind = new \Sabre\DAV\PropFind( @@ -200,7 +200,7 @@ class CustomPropertiesBackendTest extends \Test\TestCase { /** * Test getting properties from directory */ - public function testGetPropertiesForDirectory() { + public function testGetPropertiesForDirectory(): void { $this->applyDefaultProps('/dummypath'); $this->applyDefaultProps('/dummypath/test.txt'); @@ -247,7 +247,7 @@ class CustomPropertiesBackendTest extends \Test\TestCase { /** * Test delete property */ - public function testDeleteProperty() { + public function testDeleteProperty(): void { $this->applyDefaultProps(); $propPatch = new \Sabre\DAV\PropPatch([ diff --git a/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php b/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php index 1de82484ac4..edbe4278c3a 100644 --- a/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php @@ -107,7 +107,7 @@ class DirectoryTest extends \Test\TestCase { } - public function testDeleteRootFolderFails() { + public function testDeleteRootFolderFails(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->info->expects($this->any()) @@ -120,7 +120,7 @@ class DirectoryTest extends \Test\TestCase { } - public function testDeleteForbidden() { + public function testDeleteForbidden(): void { $this->expectException(\OCA\DAV\Connector\Sabre\Exception\Forbidden::class); // deletion allowed @@ -139,7 +139,7 @@ class DirectoryTest extends \Test\TestCase { } - public function testDeleteFolderWhenAllowed() { + public function testDeleteFolderWhenAllowed(): void { // deletion allowed $this->info->expects($this->once()) ->method('isDeletable') @@ -156,7 +156,7 @@ class DirectoryTest extends \Test\TestCase { } - public function testDeleteFolderFailsWhenNotAllowed() { + public function testDeleteFolderFailsWhenNotAllowed(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->info->expects($this->once()) @@ -168,7 +168,7 @@ class DirectoryTest extends \Test\TestCase { } - public function testDeleteFolderThrowsWhenDeletionFailed() { + public function testDeleteFolderThrowsWhenDeletionFailed(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); // deletion allowed @@ -186,7 +186,7 @@ class DirectoryTest extends \Test\TestCase { $dir->delete(); } - public function testGetChildren() { + public function testGetChildren(): void { $info1 = $this->getMockBuilder(FileInfo::class) ->disableOriginalConstructor() ->getMock(); @@ -226,7 +226,7 @@ class DirectoryTest extends \Test\TestCase { } - public function testGetChildrenNoPermission() { + public function testGetChildrenNoPermission(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $info = $this->createMock(FileInfo::class); @@ -239,7 +239,7 @@ class DirectoryTest extends \Test\TestCase { } - public function testGetChildNoPermission() { + public function testGetChildNoPermission(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); $this->info->expects($this->any()) @@ -251,7 +251,7 @@ class DirectoryTest extends \Test\TestCase { } - public function testGetChildThrowStorageNotAvailableException() { + public function testGetChildThrowStorageNotAvailableException(): void { $this->expectException(\Sabre\DAV\Exception\ServiceUnavailable::class); $this->view->expects($this->once()) @@ -263,7 +263,7 @@ class DirectoryTest extends \Test\TestCase { } - public function testGetChildThrowInvalidPath() { + public function testGetChildThrowInvalidPath(): void { $this->expectException(\OCA\DAV\Connector\Sabre\Exception\InvalidPath::class); $this->view->expects($this->once()) @@ -276,7 +276,7 @@ class DirectoryTest extends \Test\TestCase { $dir->getChild('.'); } - public function testGetQuotaInfoUnlimited() { + public function testGetQuotaInfoUnlimited(): void { self::createUser('user', 'password'); self::loginAsUser('user'); $mountPoint = $this->createMock(IMountPoint::class); @@ -319,7 +319,7 @@ class DirectoryTest extends \Test\TestCase { $this->assertEquals([200, -3], $dir->getQuotaInfo()); //200 used, unlimited } - public function testGetQuotaInfoSpecific() { + public function testGetQuotaInfoSpecific(): void { self::createUser('user', 'password'); self::loginAsUser('user'); $mountPoint = $this->createMock(IMountPoint::class); @@ -366,7 +366,7 @@ class DirectoryTest extends \Test\TestCase { /** * @dataProvider moveFailedProvider */ - public function testMoveFailed($source, $destination, $updatables, $deletables) { + public function testMoveFailed($source, $destination, $updatables, $deletables): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->moveTest($source, $destination, $updatables, $deletables); @@ -375,7 +375,7 @@ class DirectoryTest extends \Test\TestCase { /** * @dataProvider moveSuccessProvider */ - public function testMoveSuccess($source, $destination, $updatables, $deletables) { + public function testMoveSuccess($source, $destination, $updatables, $deletables): void { $this->moveTest($source, $destination, $updatables, $deletables); $this->addToAssertionCount(1); } @@ -383,7 +383,7 @@ class DirectoryTest extends \Test\TestCase { /** * @dataProvider moveFailedInvalidCharsProvider */ - public function testMoveFailedInvalidChars($source, $destination, $updatables, $deletables) { + public function testMoveFailedInvalidChars($source, $destination, $updatables, $deletables): void { $this->expectException(\OCA\DAV\Connector\Sabre\Exception\InvalidPath::class); $this->moveTest($source, $destination, $updatables, $deletables); @@ -419,7 +419,7 @@ class DirectoryTest extends \Test\TestCase { * @param $destination * @param $updatables */ - private function moveTest($source, $destination, $updatables, $deletables) { + private function moveTest($source, $destination, $updatables, $deletables): void { $view = new TestViewDirectory($updatables, $deletables); $sourceInfo = new FileInfo($source, null, null, [ @@ -441,7 +441,7 @@ class DirectoryTest extends \Test\TestCase { } - public function testFailingMove() { + public function testFailingMove(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->expectExceptionMessage('Could not copy directory b, target exists'); diff --git a/apps/dav/tests/unit/Connector/Sabre/DummyGetResponsePluginTest.php b/apps/dav/tests/unit/Connector/Sabre/DummyGetResponsePluginTest.php index c4b7ed15f2b..88f0acf97e4 100644 --- a/apps/dav/tests/unit/Connector/Sabre/DummyGetResponsePluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/DummyGetResponsePluginTest.php @@ -46,7 +46,7 @@ class DummyGetResponsePluginTest extends TestCase { $this->dummyGetResponsePlugin = new DummyGetResponsePlugin(); } - public function testInitialize() { + public function testInitialize(): void { /** @var Server $server */ $server = $this->getMockBuilder(Server::class) ->disableOriginalConstructor() @@ -60,7 +60,7 @@ class DummyGetResponsePluginTest extends TestCase { } - public function testHttpGet() { + public function testHttpGet(): void { /** @var \Sabre\HTTP\RequestInterface $request */ $request = $this->getMockBuilder(RequestInterface::class) ->disableOriginalConstructor() diff --git a/apps/dav/tests/unit/Connector/Sabre/Exception/ForbiddenTest.php b/apps/dav/tests/unit/Connector/Sabre/Exception/ForbiddenTest.php index 4d316bf870a..65a420589f0 100644 --- a/apps/dav/tests/unit/Connector/Sabre/Exception/ForbiddenTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/Exception/ForbiddenTest.php @@ -25,7 +25,7 @@ namespace OCA\DAV\Tests\unit\Connector\Sabre\Exception; use OCA\DAV\Connector\Sabre\Exception\Forbidden; class ForbiddenTest extends \Test\TestCase { - public function testSerialization() { + public function testSerialization(): void { // create xml doc $DOM = new \DOMDocument('1.0','utf-8'); diff --git a/apps/dav/tests/unit/Connector/Sabre/Exception/InvalidPathTest.php b/apps/dav/tests/unit/Connector/Sabre/Exception/InvalidPathTest.php index 3c68d780ff3..f202bf573de 100644 --- a/apps/dav/tests/unit/Connector/Sabre/Exception/InvalidPathTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/Exception/InvalidPathTest.php @@ -26,7 +26,7 @@ namespace OCA\DAV\Tests\unit\Connector\Sabre\Exception; use OCA\DAV\Connector\Sabre\Exception\InvalidPath; class InvalidPathTest extends \Test\TestCase { - public function testSerialization() { + public function testSerialization(): void { // create xml doc $DOM = new \DOMDocument('1.0','utf-8'); diff --git a/apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php index a553c0687e0..c198df16f08 100644 --- a/apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php @@ -50,7 +50,7 @@ class ExceptionLoggerPluginTest extends TestCase { /** @var LoggerInterface | \PHPUnit\Framework\MockObject\MockObject */ private $logger; - private function init() { + private function init(): void { $config = $this->createMock(SystemConfig::class); $config->expects($this->any()) ->method('getValue') @@ -72,7 +72,7 @@ class ExceptionLoggerPluginTest extends TestCase { /** * @dataProvider providesExceptions */ - public function testLogging(string $expectedLogLevel, \Throwable $e) { + public function testLogging(string $expectedLogLevel, \Throwable $e): void { $this->init(); $this->logger->expects($this->once()) diff --git a/apps/dav/tests/unit/Connector/Sabre/FakeLockerPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/FakeLockerPluginTest.php index 9c7ca8e9329..099b84aa6b1 100644 --- a/apps/dav/tests/unit/Connector/Sabre/FakeLockerPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/FakeLockerPluginTest.php @@ -50,7 +50,7 @@ class FakeLockerPluginTest extends TestCase { $this->fakeLockerPlugin = new FakeLockerPlugin(); } - public function testInitialize() { + public function testInitialize(): void { /** @var Server $server */ $server = $this->getMockBuilder(Server::class) ->disableOriginalConstructor() @@ -68,7 +68,7 @@ class FakeLockerPluginTest extends TestCase { $this->fakeLockerPlugin->initialize($server); } - public function testGetHTTPMethods() { + public function testGetHTTPMethods(): void { $expected = [ 'LOCK', 'UNLOCK', @@ -76,14 +76,14 @@ class FakeLockerPluginTest extends TestCase { $this->assertSame($expected, $this->fakeLockerPlugin->getHTTPMethods('Test')); } - public function testGetFeatures() { + public function testGetFeatures(): void { $expected = [ 2, ]; $this->assertSame($expected, $this->fakeLockerPlugin->getFeatures()); } - public function testPropFind() { + public function testPropFind(): void { $propFind = $this->getMockBuilder(PropFind::class) ->disableOriginalConstructor() ->getMock(); @@ -143,7 +143,7 @@ class FakeLockerPluginTest extends TestCase { * @param array $input * @param array $expected */ - public function testValidateTokens(array $input, array $expected) { + public function testValidateTokens(array $input, array $expected): void { $request = $this->getMockBuilder(RequestInterface::class) ->disableOriginalConstructor() ->getMock(); @@ -151,7 +151,7 @@ class FakeLockerPluginTest extends TestCase { $this->assertSame($expected, $input); } - public function testFakeLockProvider() { + public function testFakeLockProvider(): void { $request = $this->getMockBuilder(RequestInterface::class) ->disableOriginalConstructor() ->getMock(); @@ -171,7 +171,7 @@ class FakeLockerPluginTest extends TestCase { $this->assertXmlStringEqualsXmlString($expectedXml, $response->getBody()); } - public function testFakeUnlockProvider() { + public function testFakeUnlockProvider(): void { $request = $this->getMockBuilder(RequestInterface::class) ->disableOriginalConstructor() ->getMock(); diff --git a/apps/dav/tests/unit/Connector/Sabre/FileTest.php b/apps/dav/tests/unit/Connector/Sabre/FileTest.php index 91e49d331e9..8d72fb13b78 100644 --- a/apps/dav/tests/unit/Connector/Sabre/FileTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/FileTest.php @@ -178,7 +178,7 @@ class FileTest extends TestCase { /** * @dataProvider fopenFailuresProvider */ - public function testSimplePutFails($thrownException, $expectedException, $checkPreviousClass = true) { + public function testSimplePutFails($thrownException, $expectedException, $checkPreviousClass = true): void { // setup $storage = $this->getMockBuilder(Local::class) ->setMethods(['writeStream']) @@ -239,7 +239,7 @@ class FileTest extends TestCase { * * @dataProvider fopenFailuresProvider */ - public function testChunkedPutFails($thrownException, $expectedException, $checkPreviousClass = false) { + public function testChunkedPutFails($thrownException, $expectedException, $checkPreviousClass = false): void { // setup $storage = $this->getMockBuilder(Local::class) ->setMethods(['fopen']) @@ -357,7 +357,7 @@ class FileTest extends TestCase { /** * Test putting a single file */ - public function testPutSingleFile() { + public function testPutSingleFile(): void { $this->assertNotEmpty($this->doPut('/foo.txt')); } @@ -418,7 +418,7 @@ class FileTest extends TestCase { * Test putting a file with string Mtime * @dataProvider legalMtimeProvider */ - public function testPutSingleFileLegalMtime($requestMtime, $resultMtime) { + public function testPutSingleFileLegalMtime($requestMtime, $resultMtime): void { $request = new Request([ 'server' => [ 'HTTP_X_OC_MTIME' => $requestMtime, @@ -441,7 +441,7 @@ class FileTest extends TestCase { * Test putting a file with string Mtime using chunking * @dataProvider legalMtimeProvider */ - public function testChunkedPutLegalMtime($requestMtime, $resultMtime) { + public function testChunkedPutLegalMtime($requestMtime, $resultMtime): void { $request = new Request([ 'server' => [ 'HTTP_X_OC_MTIME' => $requestMtime, @@ -466,7 +466,7 @@ class FileTest extends TestCase { /** * Test putting a file using chunking */ - public function testChunkedPut() { + public function testChunkedPut(): void { $_SERVER['HTTP_OC_CHUNKED'] = true; $this->assertNull($this->doPut('/test.txt-chunking-12345-2-0')); $this->assertNotEmpty($this->doPut('/test.txt-chunking-12345-2-1')); @@ -475,7 +475,7 @@ class FileTest extends TestCase { /** * Test that putting a file triggers create hooks */ - public function testPutSingleFileTriggersHooks() { + public function testPutSingleFileTriggersHooks(): void { HookHelper::setUpHooks(); $this->assertNotEmpty($this->doPut('/foo.txt')); @@ -506,7 +506,7 @@ class FileTest extends TestCase { /** * Test that putting a file triggers update hooks */ - public function testPutOverwriteFileTriggersHooks() { + public function testPutOverwriteFileTriggersHooks(): void { $view = \OC\Files\Filesystem::getView(); $view->file_put_contents('/foo.txt', 'some content that will be replaced'); @@ -542,7 +542,7 @@ class FileTest extends TestCase { * if the passed view was chrooted (can happen with public webdav * where the root is the share root) */ - public function testPutSingleFileTriggersHooksDifferentRoot() { + public function testPutSingleFileTriggersHooksDifferentRoot(): void { $view = \OC\Files\Filesystem::getView(); $view->mkdir('noderoot'); @@ -577,7 +577,7 @@ class FileTest extends TestCase { /** * Test that putting a file with chunks triggers create hooks */ - public function testPutChunkedFileTriggersHooks() { + public function testPutChunkedFileTriggersHooks(): void { HookHelper::setUpHooks(); $_SERVER['HTTP_OC_CHUNKED'] = true; @@ -610,7 +610,7 @@ class FileTest extends TestCase { /** * Test that putting a chunked file triggers update hooks */ - public function testPutOverwriteChunkedFileTriggersHooks() { + public function testPutOverwriteChunkedFileTriggersHooks(): void { $view = \OC\Files\Filesystem::getView(); $view->file_put_contents('/foo.txt', 'some content that will be replaced'); @@ -643,7 +643,7 @@ class FileTest extends TestCase { ); } - public static function cancellingHook($params) { + public static function cancellingHook($params): void { self::$hookCalls[] = [ 'signal' => Filesystem::signal_post_create, 'params' => $params @@ -653,7 +653,7 @@ class FileTest extends TestCase { /** * Test put file with cancelled hook */ - public function testPutSingleFileCancelPreHook() { + public function testPutSingleFileCancelPreHook(): void { \OCP\Util::connectHook( Filesystem::CLASSNAME, Filesystem::signal_create, @@ -676,7 +676,7 @@ class FileTest extends TestCase { /** * Test exception when the uploaded size did not match */ - public function testSimplePutFailsSizeCheck() { + public function testSimplePutFailsSizeCheck(): void { // setup $view = $this->getMockBuilder(View::class) ->setMethods(['rename', 'getRelativePath', 'filesize']) @@ -724,7 +724,7 @@ class FileTest extends TestCase { /** * Test exception during final rename in simple upload mode */ - public function testSimplePutFailsMoveFromStorage() { + public function testSimplePutFailsMoveFromStorage(): void { $view = new \OC\Files\View('/' . $this->user . '/files'); // simulate situation where the target file is locked @@ -758,7 +758,7 @@ class FileTest extends TestCase { /** * Test exception during final rename in chunk upload mode */ - public function testChunkedPutFailsFinalRename() { + public function testChunkedPutFailsFinalRename(): void { $view = new \OC\Files\View('/' . $this->user . '/files'); // simulate situation where the target file is locked @@ -798,7 +798,7 @@ class FileTest extends TestCase { /** * Test put file with invalid chars */ - public function testSimplePutInvalidChars() { + public function testSimplePutInvalidChars(): void { // setup $view = $this->getMockBuilder(View::class) ->setMethods(['getRelativePath']) @@ -835,7 +835,7 @@ class FileTest extends TestCase { * Test setting name with setName() with invalid chars * */ - public function testSetNameInvalidChars() { + public function testSetNameInvalidChars(): void { $this->expectException(\OCA\DAV\Connector\Sabre\Exception\InvalidPath::class); // setup @@ -856,7 +856,7 @@ class FileTest extends TestCase { } - public function testUploadAbort() { + public function testUploadAbort(): void { // setup $view = $this->getMockBuilder(View::class) ->setMethods(['rename', 'getRelativePath', 'filesize']) @@ -901,7 +901,7 @@ class FileTest extends TestCase { } - public function testDeleteWhenAllowed() { + public function testDeleteWhenAllowed(): void { // setup $view = $this->getMockBuilder(View::class) ->getMock(); @@ -922,7 +922,7 @@ class FileTest extends TestCase { } - public function testDeleteThrowsWhenDeletionNotAllowed() { + public function testDeleteThrowsWhenDeletionNotAllowed(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); // setup @@ -941,7 +941,7 @@ class FileTest extends TestCase { } - public function testDeleteThrowsWhenDeletionFailed() { + public function testDeleteThrowsWhenDeletionFailed(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); // setup @@ -965,7 +965,7 @@ class FileTest extends TestCase { } - public function testDeleteThrowsWhenDeletionThrows() { + public function testDeleteThrowsWhenDeletionThrows(): void { $this->expectException(\OCA\DAV\Connector\Sabre\Exception\Forbidden::class); // setup @@ -1007,7 +1007,7 @@ class FileTest extends TestCase { /** * Test whether locks are set before and after the operation */ - public function testPutLocking() { + public function testPutLocking(): void { $view = new \OC\Files\View('/' . $this->user . '/files/'); $path = 'test-locking.txt'; @@ -1044,7 +1044,7 @@ class FileTest extends TestCase { $eventHandler->expects($this->once()) ->method('writeCallback') ->willReturnCallback( - function () use ($view, $path, &$wasLockedPre) { + function () use ($view, $path, &$wasLockedPre): void { $wasLockedPre = $this->isFileLocked($view, $path, \OCP\Lock\ILockingProvider::LOCK_SHARED); $wasLockedPre = $wasLockedPre && !$this->isFileLocked($view, $path, \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE); } @@ -1052,7 +1052,7 @@ class FileTest extends TestCase { $eventHandler->expects($this->once()) ->method('postWriteCallback') ->willReturnCallback( - function () use ($view, $path, &$wasLockedPost) { + function () use ($view, $path, &$wasLockedPost): void { $wasLockedPost = $this->isFileLocked($view, $path, \OCP\Lock\ILockingProvider::LOCK_SHARED); $wasLockedPost = $wasLockedPost && !$this->isFileLocked($view, $path, \OCP\Lock\ILockingProvider::LOCK_EXCLUSIVE); } @@ -1139,7 +1139,7 @@ class FileTest extends TestCase { } - public function testGetFopenFails() { + public function testGetFopenFails(): void { $this->expectException(\Sabre\DAV\Exception\ServiceUnavailable::class); $view = $this->getMockBuilder(View::class) @@ -1160,7 +1160,7 @@ class FileTest extends TestCase { } - public function testGetFopenThrows() { + public function testGetFopenThrows(): void { $this->expectException(\OCA\DAV\Connector\Sabre\Exception\Forbidden::class); $view = $this->getMockBuilder(View::class) @@ -1181,7 +1181,7 @@ class FileTest extends TestCase { } - public function testGetThrowsIfNoPermission() { + public function testGetThrowsIfNoPermission(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); $view = $this->getMockBuilder(View::class) @@ -1200,7 +1200,7 @@ class FileTest extends TestCase { $file->get(); } - public function testSimplePutNoCreatePermissions() { + public function testSimplePutNoCreatePermissions(): void { $this->logout(); $storage = new Temporary([]); @@ -1231,7 +1231,7 @@ class FileTest extends TestCase { $this->assertEquals('new content', $view->file_get_contents('root/file.txt')); } - public function testPutLockExpired() { + public function testPutLockExpired(): void { $view = new \OC\Files\View('/' . $this->user . '/files/'); $path = 'test-locking.txt'; diff --git a/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php index 777a730ffd1..dfff9493762 100644 --- a/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php @@ -180,7 +180,7 @@ class FilesPluginTest extends TestCase { return $node; } - public function testGetPropertiesForFile() { + public function testGetPropertiesForFile(): void { /** @var \OCA\DAV\Connector\Sabre\File | \PHPUnit\Framework\MockObject\MockObject $node */ $node = $this->createTestNode('\OCA\DAV\Connector\Sabre\File'); @@ -237,7 +237,7 @@ class FilesPluginTest extends TestCase { $this->assertEquals([self::SIZE_PROPERTYNAME], $propFind->get404Properties()); } - public function testGetPropertiesStorageNotAvailable() { + public function testGetPropertiesStorageNotAvailable(): void { /** @var \OCA\DAV\Connector\Sabre\File | \PHPUnit\Framework\MockObject\MockObject $node */ $node = $this->createTestNode('\OCA\DAV\Connector\Sabre\File'); @@ -261,7 +261,7 @@ class FilesPluginTest extends TestCase { $this->assertEquals(null, $propFind->get(self::DOWNLOADURL_PROPERTYNAME)); } - public function testGetPublicPermissions() { + public function testGetPublicPermissions(): void { $this->plugin = new FilesPlugin( $this->tree, $this->config, @@ -295,7 +295,7 @@ class FilesPluginTest extends TestCase { $this->assertEquals('DWCKR', $propFind->get(self::PERMISSIONS_PROPERTYNAME)); } - public function testGetPropertiesForDirectory() { + public function testGetPropertiesForDirectory(): void { /** @var \OCA\DAV\Connector\Sabre\Directory | \PHPUnit\Framework\MockObject\MockObject $node */ $node = $this->createTestNode('\OCA\DAV\Connector\Sabre\Directory'); @@ -330,7 +330,7 @@ class FilesPluginTest extends TestCase { $this->assertEquals([self::DOWNLOADURL_PROPERTYNAME], $propFind->get404Properties()); } - public function testGetPropertiesForRootDirectory() { + public function testGetPropertiesForRootDirectory(): void { /** @var \OCA\DAV\Connector\Sabre\Directory|\PHPUnit\Framework\MockObject\MockObject $node */ $node = $this->getMockBuilder(Directory::class) ->disableOriginalConstructor() @@ -362,7 +362,7 @@ class FilesPluginTest extends TestCase { $this->assertEquals('my_fingerprint', $propFind->get(self::DATA_FINGERPRINT_PROPERTYNAME)); } - public function testGetPropertiesWhenNoPermission() { + public function testGetPropertiesWhenNoPermission(): void { // No read permissions can be caused by files access control. // But we still want to load the directory list, so this is okay for us. // $this->expectException(\Sabre\DAV\Exception\NotFound::class); @@ -398,7 +398,7 @@ class FilesPluginTest extends TestCase { $this->addToAssertionCount(1); } - public function testUpdateProps() { + public function testUpdateProps(): void { $node = $this->createTestNode('\OCA\DAV\Connector\Sabre\File'); $testDate = 'Fri, 13 Feb 2015 00:01:02 GMT'; @@ -439,7 +439,7 @@ class FilesPluginTest extends TestCase { $this->assertEquals(200, $result[self::CREATIONDATE_PROPERTYNAME]); } - public function testUpdatePropsForbidden() { + public function testUpdatePropsForbidden(): void { $propPatch = new PropPatch([ self::OWNER_ID_PROPERTYNAME => 'user2', self::OWNER_DISPLAY_NAME_PROPERTYNAME => 'User Two', @@ -478,7 +478,7 @@ class FilesPluginTest extends TestCase { * Thus moving /FolderA/test.txt to /test.txt should fail already on that check * */ - public function testMoveSrcNotDeletable() { + public function testMoveSrcNotDeletable(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->expectExceptionMessage('FolderA/test.txt cannot be deleted'); @@ -502,7 +502,7 @@ class FilesPluginTest extends TestCase { $this->plugin->checkMove('FolderA/test.txt', 'test.txt'); } - public function testMoveSrcDeletable() { + public function testMoveSrcDeletable(): void { $fileInfoFolderATestTXT = $this->getMockBuilder(FileInfo::class) ->disableOriginalConstructor() ->getMock(); @@ -524,7 +524,7 @@ class FilesPluginTest extends TestCase { } - public function testMoveSrcNotExist() { + public function testMoveSrcNotExist(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); $this->expectExceptionMessage('FolderA/test.txt does not exist'); @@ -557,7 +557,7 @@ class FilesPluginTest extends TestCase { /** * @dataProvider downloadHeadersProvider */ - public function testDownloadHeaders($isClumsyAgent, $contentDispositionHeader) { + public function testDownloadHeaders($isClumsyAgent, $contentDispositionHeader): void { $request = $this->getMockBuilder(RequestInterface::class) ->disableOriginalConstructor() ->getMock(); @@ -600,7 +600,7 @@ class FilesPluginTest extends TestCase { $this->plugin->httpGet($request, $response); } - public function testHasPreview() { + public function testHasPreview(): void { /** @var \OCA\DAV\Connector\Sabre\Directory | \PHPUnit\Framework\MockObject\MockObject $node */ $node = $this->createTestNode('\OCA\DAV\Connector\Sabre\Directory'); diff --git a/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php index 5b8ed304e96..d38031b03d4 100644 --- a/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php @@ -153,7 +153,7 @@ class FilesReportPluginTest extends \Test\TestCase { ); } - public function testOnReportInvalidNode() { + public function testOnReportInvalidNode(): void { $path = 'totally/unrelated/13'; $this->tree->expects($this->any()) @@ -173,7 +173,7 @@ class FilesReportPluginTest extends \Test\TestCase { $this->assertNull($this->plugin->onReport(FilesReportPluginImplementation::REPORT_NAME, [], '/' . $path)); } - public function testOnReportInvalidReportName() { + public function testOnReportInvalidReportName(): void { $path = 'test'; $this->tree->expects($this->any()) @@ -193,7 +193,7 @@ class FilesReportPluginTest extends \Test\TestCase { $this->assertNull($this->plugin->onReport('{whoever}whatever', [], '/' . $path)); } - public function testOnReport() { + public function testOnReport(): void { $path = 'test'; $parameters = [ @@ -282,7 +282,7 @@ class FilesReportPluginTest extends \Test\TestCase { $this->assertFalse($this->plugin->onReport(FilesReportPluginImplementation::REPORT_NAME, $parameters, '/' . $path)); } - public function testFindNodesByFileIdsRoot() { + public function testFindNodesByFileIdsRoot(): void { $filesNode1 = $this->getMockBuilder(Folder::class) ->disableOriginalConstructor() ->getMock(); @@ -325,7 +325,7 @@ class FilesReportPluginTest extends \Test\TestCase { $this->assertEquals('second node', $result[1]->getName()); } - public function testFindNodesByFileIdsSubDir() { + public function testFindNodesByFileIdsSubDir(): void { $filesNode1 = $this->getMockBuilder(Folder::class) ->disableOriginalConstructor() ->getMock(); @@ -378,7 +378,7 @@ class FilesReportPluginTest extends \Test\TestCase { $this->assertEquals('second node', $result[1]->getName()); } - public function testPrepareResponses() { + public function testPrepareResponses(): void { $requestedProps = ['{DAV:}getcontentlength', '{http://owncloud.org/ns}fileid', '{DAV:}resourcetype']; $fileInfo = $this->createMock(FileInfo::class); @@ -447,7 +447,7 @@ class FilesReportPluginTest extends \Test\TestCase { $this->assertCount(0, $props2[200]['{DAV:}resourcetype']->getValue()); } - public function testProcessFilterRulesSingle() { + public function testProcessFilterRulesSingle(): void { $this->groupManager->expects($this->any()) ->method('isAdmin') ->willReturn(true); @@ -468,7 +468,7 @@ class FilesReportPluginTest extends \Test\TestCase { $this->assertEquals(['111', '222'], $this->invokePrivate($this->plugin, 'processFilterRules', [$rules])); } - public function testProcessFilterRulesAndCondition() { + public function testProcessFilterRulesAndCondition(): void { $this->groupManager->expects($this->any()) ->method('isAdmin') ->willReturn(true); @@ -492,7 +492,7 @@ class FilesReportPluginTest extends \Test\TestCase { $this->assertEquals(['222'], array_values($this->invokePrivate($this->plugin, 'processFilterRules', [$rules]))); } - public function testProcessFilterRulesAndConditionWithOneEmptyResult() { + public function testProcessFilterRulesAndConditionWithOneEmptyResult(): void { $this->groupManager->expects($this->any()) ->method('isAdmin') ->willReturn(true); @@ -516,7 +516,7 @@ class FilesReportPluginTest extends \Test\TestCase { $this->assertEquals([], array_values($this->invokePrivate($this->plugin, 'processFilterRules', [$rules]))); } - public function testProcessFilterRulesAndConditionWithFirstEmptyResult() { + public function testProcessFilterRulesAndConditionWithFirstEmptyResult(): void { $this->groupManager->expects($this->any()) ->method('isAdmin') ->willReturn(true); @@ -540,7 +540,7 @@ class FilesReportPluginTest extends \Test\TestCase { $this->assertEquals([], array_values($this->invokePrivate($this->plugin, 'processFilterRules', [$rules]))); } - public function testProcessFilterRulesAndConditionWithEmptyMidResult() { + public function testProcessFilterRulesAndConditionWithEmptyMidResult(): void { $this->groupManager->expects($this->any()) ->method('isAdmin') ->willReturn(true); @@ -567,7 +567,7 @@ class FilesReportPluginTest extends \Test\TestCase { $this->assertEquals([], array_values($this->invokePrivate($this->plugin, 'processFilterRules', [$rules]))); } - public function testProcessFilterRulesInvisibleTagAsAdmin() { + public function testProcessFilterRulesInvisibleTagAsAdmin(): void { $this->groupManager->expects($this->any()) ->method('isAdmin') ->willReturn(true); @@ -616,7 +616,7 @@ class FilesReportPluginTest extends \Test\TestCase { } - public function testProcessFilterRulesInvisibleTagAsUser() { + public function testProcessFilterRulesInvisibleTagAsUser(): void { $this->expectException(\OCP\SystemTag\TagNotFoundException::class); $this->groupManager->expects($this->any()) @@ -656,7 +656,7 @@ class FilesReportPluginTest extends \Test\TestCase { $this->invokePrivate($this->plugin, 'processFilterRules', [$rules]); } - public function testProcessFilterRulesVisibleTagAsUser() { + public function testProcessFilterRulesVisibleTagAsUser(): void { $this->groupManager->expects($this->any()) ->method('isAdmin') ->willReturn(false); @@ -705,7 +705,7 @@ class FilesReportPluginTest extends \Test\TestCase { $this->assertEquals(['222'], array_values($this->invokePrivate($this->plugin, 'processFilterRules', [$rules]))); } - public function testProcessFavoriteFilter() { + public function testProcessFavoriteFilter(): void { $rules = [ ['name' => '{http://owncloud.org/ns}favorite', 'value' => '1'], ]; @@ -730,7 +730,7 @@ class FilesReportPluginTest extends \Test\TestCase { /** * @dataProvider filesBaseUriProvider */ - public function testFilesBaseUri($uri, $reportPath, $expectedUri) { + public function testFilesBaseUri($uri, $reportPath, $expectedUri): void { $this->assertEquals($expectedUri, $this->invokePrivate($this->plugin, 'getFilesBaseUri', [$uri, $reportPath])); } } diff --git a/apps/dav/tests/unit/Connector/Sabre/MaintenancePluginTest.php b/apps/dav/tests/unit/Connector/Sabre/MaintenancePluginTest.php index 3f38008559c..f646847396b 100644 --- a/apps/dav/tests/unit/Connector/Sabre/MaintenancePluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/MaintenancePluginTest.php @@ -53,7 +53,7 @@ class MaintenancePluginTest extends TestCase { } - public function testMaintenanceMode() { + public function testMaintenanceMode(): void { $this->expectException(\Sabre\DAV\Exception\ServiceUnavailable::class); $this->expectExceptionMessage('System is in maintenance mode.'); diff --git a/apps/dav/tests/unit/Connector/Sabre/NodeTest.php b/apps/dav/tests/unit/Connector/Sabre/NodeTest.php index 3ac5b8f841a..751e4c138b2 100644 --- a/apps/dav/tests/unit/Connector/Sabre/NodeTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/NodeTest.php @@ -63,7 +63,7 @@ class NodeTest extends \Test\TestCase { /** * @dataProvider davPermissionsProvider */ - public function testDavPermissions($permissions, $type, $shared, $mounted, $expected) { + public function testDavPermissions($permissions, $type, $shared, $mounted, $expected): void { $info = $this->getMockBuilder(FileInfo::class) ->disableOriginalConstructor() ->setMethods(['getPermissions', 'isShared', 'isMounted', 'getType']) @@ -131,7 +131,7 @@ class NodeTest extends \Test\TestCase { /** * @dataProvider sharePermissionsProvider */ - public function testSharePermissions($type, $user, $permissions, $expected) { + public function testSharePermissions($type, $user, $permissions, $expected): void { $storage = $this->getMockBuilder(Storage::class) ->disableOriginalConstructor() ->getMock(); @@ -172,7 +172,7 @@ class NodeTest extends \Test\TestCase { $this->assertEquals($expected, $node->getSharePermissions($user)); } - public function testShareAttributes() { + public function testShareAttributes(): void { $storage = $this->getMockBuilder(SharedStorage::class) ->disableOriginalConstructor() ->setMethods(['getShare']) @@ -207,7 +207,7 @@ class NodeTest extends \Test\TestCase { $this->assertEquals($attributes->toArray(), $node->getShareAttributes()); } - public function testShareAttributesNonShare() { + public function testShareAttributesNonShare(): void { $storage = $this->getMockBuilder(Storage::class) ->disableOriginalConstructor() ->getMock(); @@ -241,7 +241,7 @@ class NodeTest extends \Test\TestCase { /** * @dataProvider sanitizeMtimeProvider */ - public function testSanitizeMtime($mtime, $expected) { + public function testSanitizeMtime($mtime, $expected): void { $view = $this->getMockBuilder(View::class) ->disableOriginalConstructor() ->getMock(); @@ -263,7 +263,7 @@ class NodeTest extends \Test\TestCase { /** * @dataProvider invalidSanitizeMtimeProvider */ - public function testInvalidSanitizeMtime($mtime) { + public function testInvalidSanitizeMtime($mtime): void { $this->expectException(\InvalidArgumentException::class); $view = $this->getMockBuilder(View::class) diff --git a/apps/dav/tests/unit/Connector/Sabre/ObjectTreeTest.php b/apps/dav/tests/unit/Connector/Sabre/ObjectTreeTest.php index 5f516cec113..d219888ef15 100644 --- a/apps/dav/tests/unit/Connector/Sabre/ObjectTreeTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/ObjectTreeTest.php @@ -58,7 +58,7 @@ class ObjectTreeTest extends \Test\TestCase { /** * @dataProvider copyDataProvider */ - public function testCopy($sourcePath, $targetPath, $targetParent) { + public function testCopy($sourcePath, $targetPath, $targetParent): void { $view = $this->createMock(View::class); $view->expects($this->once()) ->method('verifyPath') @@ -103,7 +103,7 @@ class ObjectTreeTest extends \Test\TestCase { /** * @dataProvider copyDataProvider */ - public function testCopyFailNotCreatable($sourcePath, $targetPath, $targetParent) { + public function testCopyFailNotCreatable($sourcePath, $targetPath, $targetParent): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $view = $this->createMock(View::class); @@ -150,7 +150,7 @@ class ObjectTreeTest extends \Test\TestCase { $outputFileName, $type, $enableChunkingHeader - ) { + ): void { if ($enableChunkingHeader) { $_SERVER['HTTP_OC_CHUNKED'] = true; } @@ -265,7 +265,7 @@ class ObjectTreeTest extends \Test\TestCase { } - public function testGetNodeForPathInvalidPath() { + public function testGetNodeForPathInvalidPath(): void { $this->expectException(\OCA\DAV\Connector\Sabre\Exception\InvalidPath::class); $path = '/foo\bar'; @@ -293,7 +293,7 @@ class ObjectTreeTest extends \Test\TestCase { $tree->getNodeForPath($path); } - public function testGetNodeForPathRoot() { + public function testGetNodeForPathRoot(): void { $path = '/'; diff --git a/apps/dav/tests/unit/Connector/Sabre/PropfindCompressionPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/PropfindCompressionPluginTest.php index e048190e633..ba97bba913a 100644 --- a/apps/dav/tests/unit/Connector/Sabre/PropfindCompressionPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/PropfindCompressionPluginTest.php @@ -40,7 +40,7 @@ class PropfindCompressionPluginTest extends TestCase { $this->plugin = new PropfindCompressionPlugin(); } - public function testNoHeader() { + public function testNoHeader(): void { $request = $this->createMock(Request::class); $response = $this->createMock(Response::class); @@ -55,7 +55,7 @@ class PropfindCompressionPluginTest extends TestCase { $this->assertSame($response, $result); } - public function testHeaderButNoGzip() { + public function testHeaderButNoGzip(): void { $request = $this->createMock(Request::class); $response = $this->createMock(Response::class); @@ -70,7 +70,7 @@ class PropfindCompressionPluginTest extends TestCase { $this->assertSame($response, $result); } - public function testHeaderGzipButNoStringBody() { + public function testHeaderGzipButNoStringBody(): void { $request = $this->createMock(Request::class); $response = $this->createMock(Response::class); @@ -86,7 +86,7 @@ class PropfindCompressionPluginTest extends TestCase { } - public function testProperGzip() { + public function testProperGzip(): void { $request = $this->createMock(Request::class); $response = $this->createMock(Response::class); diff --git a/apps/dav/tests/unit/Connector/Sabre/QuotaPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/QuotaPluginTest.php index 69b2140e640..4a9ca159bbd 100644 --- a/apps/dav/tests/unit/Connector/Sabre/QuotaPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/QuotaPluginTest.php @@ -49,7 +49,7 @@ class QuotaPluginTest extends TestCase { /** @var \OCA\DAV\Connector\Sabre\QuotaPlugin | \PHPUnit\Framework\MockObject\MockObject */ private $plugin; - private function init($quota, $checkedPath = '') { + private function init($quota, $checkedPath = ''): void { $view = $this->buildFileViewMock($quota, $checkedPath); $this->server = new \Sabre\DAV\Server(); $this->plugin = $this->getMockBuilder(QuotaPlugin::class) @@ -62,7 +62,7 @@ class QuotaPluginTest extends TestCase { /** * @dataProvider lengthProvider */ - public function testLength($expected, $headers) { + public function testLength($expected, $headers): void { $this->init(0); $this->plugin->expects($this->never()) ->method('getFileChunking'); @@ -74,7 +74,7 @@ class QuotaPluginTest extends TestCase { /** * @dataProvider quotaOkayProvider */ - public function testCheckQuota($quota, $headers) { + public function testCheckQuota($quota, $headers): void { $this->init($quota); $this->plugin->expects($this->never()) ->method('getFileChunking'); @@ -87,7 +87,7 @@ class QuotaPluginTest extends TestCase { /** * @dataProvider quotaExceededProvider */ - public function testCheckExceededQuota($quota, $headers) { + public function testCheckExceededQuota($quota, $headers): void { $this->expectException(\Sabre\DAV\Exception\InsufficientStorage::class); $this->init($quota); @@ -101,7 +101,7 @@ class QuotaPluginTest extends TestCase { /** * @dataProvider quotaOkayProvider */ - public function testCheckQuotaOnPath($quota, $headers) { + public function testCheckQuotaOnPath($quota, $headers): void { $this->init($quota, 'sub/test.txt'); $this->plugin->expects($this->never()) ->method('getFileChunking'); @@ -176,7 +176,7 @@ class QuotaPluginTest extends TestCase { /** * @dataProvider quotaChunkedOkProvider */ - public function testCheckQuotaChunkedOk($quota, $chunkTotalSize, $headers) { + public function testCheckQuotaChunkedOk($quota, $chunkTotalSize, $headers): void { $this->init($quota, 'sub/test.txt'); $mockChunking = $this->getMockBuilder(\OC_FileChunking::class) @@ -211,7 +211,7 @@ class QuotaPluginTest extends TestCase { /** * @dataProvider quotaChunkedFailProvider */ - public function testCheckQuotaChunkedFail($quota, $chunkTotalSize, $headers) { + public function testCheckQuotaChunkedFail($quota, $chunkTotalSize, $headers): void { $this->expectException(\Sabre\DAV\Exception\InsufficientStorage::class); $this->init($quota, 'sub/test.txt'); diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/Auth.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/Auth.php index 917c63038cb..d49008e00df 100644 --- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/Auth.php +++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/Auth.php @@ -113,7 +113,7 @@ class Auth implements BackendInterface { * @param ResponseInterface $response * @return void */ - public function challenge(RequestInterface $request, ResponseInterface $response) { + public function challenge(RequestInterface $request, ResponseInterface $response): void { // TODO: Implement challenge() method. } } diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/DeleteTest.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/DeleteTest.php index b76564e59d4..02588715dcd 100644 --- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/DeleteTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/DeleteTest.php @@ -32,7 +32,7 @@ use OCP\AppFramework\Http; * @package OCA\DAV\Tests\unit\Connector\Sabre\RequestTest */ class DeleteTest extends RequestTestCase { - public function testBasicUpload() { + public function testBasicUpload(): void { $user = $this->getUniqueID(); $view = $this->setupUser($user, 'pass'); diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/DownloadTest.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/DownloadTest.php index ceae6fadf28..20747c4cfdc 100644 --- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/DownloadTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/DownloadTest.php @@ -35,7 +35,7 @@ use OCP\Lock\ILockingProvider; * @package OCA\DAV\Tests\unit\Connector\Sabre\RequestTest */ class DownloadTest extends RequestTestCase { - public function testDownload() { + public function testDownload(): void { $user = $this->getUniqueID(); $view = $this->setupUser($user, 'pass'); @@ -46,7 +46,7 @@ class DownloadTest extends RequestTestCase { $this->assertEquals(stream_get_contents($response->getBody()), 'bar'); } - public function testDownloadWriteLocked() { + public function testDownloadWriteLocked(): void { $user = $this->getUniqueID(); $view = $this->setupUser($user, 'pass'); @@ -58,7 +58,7 @@ class DownloadTest extends RequestTestCase { $this->assertEquals(Http::STATUS_LOCKED, $result->getStatus()); } - public function testDownloadReadLocked() { + public function testDownloadReadLocked(): void { $user = $this->getUniqueID(); $view = $this->setupUser($user, 'pass'); diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/ExceptionPlugin.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/ExceptionPlugin.php index eb459912bf4..de7e19014f5 100644 --- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/ExceptionPlugin.php +++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/ExceptionPlugin.php @@ -29,7 +29,7 @@ class ExceptionPlugin extends \OCA\DAV\Connector\Sabre\ExceptionLoggerPlugin { */ protected $exceptions = []; - public function logException(\Throwable $ex) { + public function logException(\Throwable $ex): void { $exceptionClass = get_class($ex); if (!isset($this->nonFatalExceptions[$exceptionClass])) { $this->exceptions[] = $ex; diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/Sapi.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/Sapi.php index 4a2e025f018..c339001b0e1 100644 --- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/Sapi.php +++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/Sapi.php @@ -55,7 +55,7 @@ class Sapi { * @param \Sabre\HTTP\Response $response * @return void */ - public function sendResponse(Response $response) { + public function sendResponse(Response $response): void { // we need to copy the body since we close the source stream $copyStream = fopen('php://temp', 'r+'); if (is_string($response->getBody())) { diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/UploadTest.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/UploadTest.php index 9f7d381ad14..16953d9b598 100644 --- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/UploadTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/UploadTest.php @@ -35,7 +35,7 @@ use OCP\Lock\ILockingProvider; * @package OCA\DAV\Tests\unit\Connector\Sabre\RequestTest */ class UploadTest extends RequestTestCase { - public function testBasicUpload() { + public function testBasicUpload(): void { $user = $this->getUniqueID(); $view = $this->setupUser($user, 'pass'); @@ -51,7 +51,7 @@ class UploadTest extends RequestTestCase { $this->assertEquals(3, $info->getSize()); } - public function testUploadOverWrite() { + public function testUploadOverWrite(): void { $user = $this->getUniqueID(); $view = $this->setupUser($user, 'pass'); @@ -67,7 +67,7 @@ class UploadTest extends RequestTestCase { $this->assertEquals(3, $info->getSize()); } - public function testUploadOverWriteReadLocked() { + public function testUploadOverWriteReadLocked(): void { $user = $this->getUniqueID(); $view = $this->setupUser($user, 'pass'); @@ -79,7 +79,7 @@ class UploadTest extends RequestTestCase { $this->assertEquals(Http::STATUS_LOCKED, $result->getStatus()); } - public function testUploadOverWriteWriteLocked() { + public function testUploadOverWriteWriteLocked(): void { $user = $this->getUniqueID(); $view = $this->setupUser($user, 'pass'); $this->loginAsUser($user); @@ -92,7 +92,7 @@ class UploadTest extends RequestTestCase { $this->assertEquals(Http::STATUS_LOCKED, $result->getStatus()); } - public function testChunkedUpload() { + public function testChunkedUpload(): void { $user = $this->getUniqueID(); $view = $this->setupUser($user, 'pass'); @@ -114,7 +114,7 @@ class UploadTest extends RequestTestCase { $this->assertEquals(6, $info->getSize()); } - public function testChunkedUploadOverWrite() { + public function testChunkedUploadOverWrite(): void { $user = $this->getUniqueID(); $view = $this->setupUser($user, 'pass'); @@ -135,7 +135,7 @@ class UploadTest extends RequestTestCase { $this->assertEquals(6, $info->getSize()); } - public function testChunkedUploadOutOfOrder() { + public function testChunkedUploadOutOfOrder(): void { $user = $this->getUniqueID(); $view = $this->setupUser($user, 'pass'); @@ -157,7 +157,7 @@ class UploadTest extends RequestTestCase { $this->assertEquals(6, $info->getSize()); } - public function testChunkedUploadOutOfOrderReadLocked() { + public function testChunkedUploadOutOfOrderReadLocked(): void { $user = $this->getUniqueID(); $view = $this->setupUser($user, 'pass'); @@ -180,7 +180,7 @@ class UploadTest extends RequestTestCase { $this->assertEquals(Http::STATUS_LOCKED, $result->getStatus()); } - public function testChunkedUploadOutOfOrderWriteLocked() { + public function testChunkedUploadOutOfOrderWriteLocked(): void { $user = $this->getUniqueID(); $view = $this->setupUser($user, 'pass'); diff --git a/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php index a81226ccb5e..abbf13d5479 100644 --- a/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/SharesPluginTest.php @@ -95,7 +95,7 @@ class SharesPluginTest extends \Test\TestCase { /** * @dataProvider sharesGetPropertiesDataProvider */ - public function testGetProperties($shareTypes) { + public function testGetProperties($shareTypes): void { $sabreNode = $this->getMockBuilder(Node::class) ->disableOriginalConstructor() ->getMock(); @@ -154,7 +154,7 @@ class SharesPluginTest extends \Test\TestCase { /** * @dataProvider sharesGetPropertiesDataProvider */ - public function testPreloadThenGetProperties($shareTypes) { + public function testPreloadThenGetProperties($shareTypes): void { $sabreNode1 = $this->createMock(File::class); $sabreNode1->method('getId') ->willReturn(111); diff --git a/apps/dav/tests/unit/Connector/Sabre/TagsPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/TagsPluginTest.php index ad49f45f6b0..05cd9d5978c 100644 --- a/apps/dav/tests/unit/Connector/Sabre/TagsPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/TagsPluginTest.php @@ -96,7 +96,7 @@ class TagsPluginTest extends \Test\TestCase { /** * @dataProvider tagsGetPropertiesDataProvider */ - public function testGetProperties($tags, $requestedProperties, $expectedProperties) { + public function testGetProperties($tags, $requestedProperties, $expectedProperties): void { $node = $this->getMockBuilder(Node::class) ->disableOriginalConstructor() ->getMock(); @@ -135,7 +135,7 @@ class TagsPluginTest extends \Test\TestCase { /** * @dataProvider tagsGetPropertiesDataProvider */ - public function testPreloadThenGetProperties($tags, $requestedProperties, $expectedProperties) { + public function testPreloadThenGetProperties($tags, $requestedProperties, $expectedProperties): void { $node1 = $this->getMockBuilder(File::class) ->disableOriginalConstructor() ->getMock(); @@ -289,7 +289,7 @@ class TagsPluginTest extends \Test\TestCase { $this->assertCount(2, $result[404]); } - public function testUpdateTags() { + public function testUpdateTags(): void { // this test will replace the existing tags "tagremove" with "tag1" and "tag2" // and keep "tagkeep" $node = $this->getMockBuilder(Node::class) @@ -342,7 +342,7 @@ class TagsPluginTest extends \Test\TestCase { $this->assertFalse(isset($result[self::FAVORITE_PROPERTYNAME])); } - public function testUpdateTagsFromScratch() { + public function testUpdateTagsFromScratch(): void { $node = $this->getMockBuilder(Node::class) ->disableOriginalConstructor() ->getMock(); @@ -388,7 +388,7 @@ class TagsPluginTest extends \Test\TestCase { $this->assertFalse(false, isset($result[self::FAVORITE_PROPERTYNAME])); } - public function testUpdateFav() { + public function testUpdateFav(): void { // this test will replace the existing tags "tagremove" with "tag1" and "tag2" // and keep "tagkeep" $node = $this->getMockBuilder(Node::class) diff --git a/apps/dav/tests/unit/Controller/BirthdayCalendarControllerTest.php b/apps/dav/tests/unit/Controller/BirthdayCalendarControllerTest.php index 37650e6f1ed..ccf2f5c499a 100644 --- a/apps/dav/tests/unit/Controller/BirthdayCalendarControllerTest.php +++ b/apps/dav/tests/unit/Controller/BirthdayCalendarControllerTest.php @@ -76,14 +76,14 @@ class BirthdayCalendarControllerTest extends TestCase { $this->userManager, $this->caldav); } - public function testEnable() { + public function testEnable(): void { $this->config->expects($this->once()) ->method('setAppValue') ->with('dav', 'generateBirthdayCalendar', 'yes'); $this->userManager->expects($this->once()) ->method('callForSeenUsers') - ->willReturnCallback(function ($closure) { + ->willReturnCallback(function ($closure): void { $user1 = $this->createMock(IUser::class); $user1->method('getUID')->willReturn('uid1'); $user2 = $this->createMock(IUser::class); @@ -108,7 +108,7 @@ class BirthdayCalendarControllerTest extends TestCase { $this->assertInstanceOf('OCP\AppFramework\Http\JSONResponse', $response); } - public function testDisable() { + public function testDisable(): void { $this->config->expects($this->once()) ->method('setAppValue') ->with('dav', 'generateBirthdayCalendar', 'no'); diff --git a/apps/dav/tests/unit/Controller/InvitationResponseControllerTest.php b/apps/dav/tests/unit/Controller/InvitationResponseControllerTest.php index e8a656698d7..aac79844aac 100644 --- a/apps/dav/tests/unit/Controller/InvitationResponseControllerTest.php +++ b/apps/dav/tests/unit/Controller/InvitationResponseControllerTest.php @@ -120,7 +120,7 @@ EOF; $called = false; $this->responseServer->expects($this->once()) ->method('handleITipMessage') - ->willReturnCallback(function (Message $iTipMessage) use (&$called, $isExternalAttendee, $expected) { + ->willReturnCallback(function (Message $iTipMessage) use (&$called, $isExternalAttendee, $expected): void { $called = true; $this->assertEquals('this-is-the-events-uid', $iTipMessage->uid); $this->assertEquals('VEVENT', $iTipMessage->component); @@ -184,7 +184,7 @@ EOF; $called = false; $this->responseServer->expects($this->once()) ->method('handleITipMessage') - ->willReturnCallback(function (Message $iTipMessage) use (&$called, $isExternalAttendee, $expected) { + ->willReturnCallback(function (Message $iTipMessage) use (&$called, $isExternalAttendee, $expected): void { $called = true; $this->assertEquals('this-is-the-events-uid', $iTipMessage->uid); $this->assertEquals('VEVENT', $iTipMessage->component); @@ -249,7 +249,7 @@ EOF; $called = false; $this->responseServer->expects($this->once()) ->method('handleITipMessage') - ->willReturnCallback(function (Message $iTipMessage) use (&$called, $isExternalAttendee, $expected) { + ->willReturnCallback(function (Message $iTipMessage) use (&$called, $isExternalAttendee, $expected): void { $called = true; $this->assertEquals('this-is-the-events-uid', $iTipMessage->uid); $this->assertEquals('VEVENT', $iTipMessage->component); @@ -277,7 +277,7 @@ EOF; $this->assertTrue($called); } - public function testAcceptTokenNotFound() { + public function testAcceptTokenNotFound(): void { $this->buildQueryExpects('TOKEN123', null, 1337); $response = $this->controller->accept('TOKEN123'); @@ -286,7 +286,7 @@ EOF; $this->assertEquals([], $response->getParams()); } - public function testAcceptExpiredToken() { + public function testAcceptExpiredToken(): void { $this->buildQueryExpects('TOKEN123', [ 'id' => 0, 'uid' => 'this-is-the-events-uid', @@ -340,7 +340,7 @@ EOF; $called = false; $this->responseServer->expects($this->once()) ->method('handleITipMessage') - ->willReturnCallback(function (Message $iTipMessage) use (&$called, $isExternalAttendee, $expected) { + ->willReturnCallback(function (Message $iTipMessage) use (&$called, $isExternalAttendee, $expected): void { $called = true; $this->assertEquals('this-is-the-events-uid', $iTipMessage->uid); $this->assertEquals('VEVENT', $iTipMessage->component); @@ -368,7 +368,7 @@ EOF; $this->assertTrue($called); } - public function testOptions() { + public function testOptions(): void { $response = $this->controller->options('TOKEN123'); $this->assertInstanceOf(TemplateResponse::class, $response); $this->assertEquals('schedule-response-options', $response->getTemplateName()); @@ -416,7 +416,7 @@ EOF; $called = false; $this->responseServer->expects($this->once()) ->method('handleITipMessage') - ->willReturnCallback(function (Message $iTipMessage) use (&$called, $isExternalAttendee, $expected) { + ->willReturnCallback(function (Message $iTipMessage) use (&$called, $isExternalAttendee, $expected): void { $called = true; $this->assertEquals('this-is-the-events-uid', $iTipMessage->uid); $this->assertEquals('VEVENT', $iTipMessage->component); @@ -445,7 +445,7 @@ EOF; $this->assertTrue($called); } - private function buildQueryExpects($token, $return, $time) { + private function buildQueryExpects($token, $return, $time): void { $queryBuilder = $this->createMock(IQueryBuilder::class); $stmt = $this->createMock(IResult::class); $expr = $this->createMock(IExpressionBuilder::class); diff --git a/apps/dav/tests/unit/DAV/AnonymousOptionsTest.php b/apps/dav/tests/unit/DAV/AnonymousOptionsTest.php index 8c178ba8e44..e34cd77a14d 100644 --- a/apps/dav/tests/unit/DAV/AnonymousOptionsTest.php +++ b/apps/dav/tests/unit/DAV/AnonymousOptionsTest.php @@ -50,49 +50,49 @@ class AnonymousOptionsTest extends TestCase { return $server->httpResponse; } - public function testAnonymousOptionsRoot() { + public function testAnonymousOptionsRoot(): void { $response = $this->sendRequest('OPTIONS', ''); $this->assertEquals(401, $response->getStatus()); } - public function testAnonymousOptionsNonRoot() { + public function testAnonymousOptionsNonRoot(): void { $response = $this->sendRequest('OPTIONS', 'foo'); $this->assertEquals(401, $response->getStatus()); } - public function testAnonymousOptionsNonRootSubDir() { + public function testAnonymousOptionsNonRootSubDir(): void { $response = $this->sendRequest('OPTIONS', 'foo/bar'); $this->assertEquals(401, $response->getStatus()); } - public function testAnonymousOptionsRootOffice() { + public function testAnonymousOptionsRootOffice(): void { $response = $this->sendRequest('OPTIONS', '', 'Microsoft Office does strange things'); $this->assertEquals(200, $response->getStatus()); } - public function testAnonymousOptionsNonRootOffice() { + public function testAnonymousOptionsNonRootOffice(): void { $response = $this->sendRequest('OPTIONS', 'foo', 'Microsoft Office does strange things'); $this->assertEquals(200, $response->getStatus()); } - public function testAnonymousOptionsNonRootSubDirOffice() { + public function testAnonymousOptionsNonRootSubDirOffice(): void { $response = $this->sendRequest('OPTIONS', 'foo/bar', 'Microsoft Office does strange things'); $this->assertEquals(200, $response->getStatus()); } - public function testAnonymousHead() { + public function testAnonymousHead(): void { $response = $this->sendRequest('HEAD', '', 'Microsoft Office does strange things'); $this->assertEquals(200, $response->getStatus()); } - public function testAnonymousHeadNoOffice() { + public function testAnonymousHeadNoOffice(): void { $response = $this->sendRequest('HEAD', ''); $this->assertEquals(401, $response->getStatus(), 'curl'); @@ -105,6 +105,6 @@ class SapiMock extends Sapi { * * @return void */ - public static function sendResponse(ResponseInterface $response) { + public static function sendResponse(ResponseInterface $response): void { } } diff --git a/apps/dav/tests/unit/DAV/BrowserErrorPagePluginTest.php b/apps/dav/tests/unit/DAV/BrowserErrorPagePluginTest.php index a0733a68550..b6ec05afd78 100644 --- a/apps/dav/tests/unit/DAV/BrowserErrorPagePluginTest.php +++ b/apps/dav/tests/unit/DAV/BrowserErrorPagePluginTest.php @@ -34,7 +34,7 @@ class BrowserErrorPagePluginTest extends \Test\TestCase { * @param $expectedCode * @param $exception */ - public function test($expectedCode, $exception) { + public function test($expectedCode, $exception): void { /** @var BrowserErrorPagePlugin | \PHPUnit\Framework\MockObject\MockObject $plugin */ $plugin = $this->getMockBuilder(BrowserErrorPagePlugin::class)->setMethods(['sendResponse', 'generateBody'])->getMock(); $plugin->expects($this->once())->method('generateBody')->willReturn(':boom:'); diff --git a/apps/dav/tests/unit/DAV/CustomPropertiesBackendTest.php b/apps/dav/tests/unit/DAV/CustomPropertiesBackendTest.php index 4cfa0d1884b..2c8a55d3da1 100644 --- a/apps/dav/tests/unit/DAV/CustomPropertiesBackendTest.php +++ b/apps/dav/tests/unit/DAV/CustomPropertiesBackendTest.php @@ -107,7 +107,7 @@ class CustomPropertiesBackendTest extends TestCase { $query->select('propertyname', 'propertyvalue') ->from('properties') ->where($query->expr()->eq('userid', $query->createNamedParameter($user))) - ->where($query->expr()->eq('propertypath', $query->createNamedParameter($this->formatPath($path)))); + ->andWhere($query->expr()->eq('propertypath', $query->createNamedParameter($this->formatPath($path)))); $result = $query->execute(); $data = []; @@ -119,7 +119,7 @@ class CustomPropertiesBackendTest extends TestCase { return $data; } - public function testPropFindNoDbCalls() { + public function testPropFindNoDbCalls(): void { $db = $this->createMock(IDBConnection::class); $backend = new CustomPropertiesBackend( $this->tree, @@ -144,7 +144,7 @@ class CustomPropertiesBackendTest extends TestCase { $backend->propFind('foo_bar_path_1337_0', $propFind); } - public function testPropFindCalendarCall() { + public function testPropFindCalendarCall(): void { $propFind = $this->createMock(PropFind::class); $propFind->method('get404Properties') ->with() @@ -178,7 +178,7 @@ class CustomPropertiesBackendTest extends TestCase { $setProps = []; $propFind->method('set') - ->willReturnCallback(function ($name, $value, $status) use (&$setProps) { + ->willReturnCallback(function ($name, $value, $status) use (&$setProps): void { $setProps[$name] = $value; }); @@ -189,7 +189,7 @@ class CustomPropertiesBackendTest extends TestCase { /** * @dataProvider propPatchProvider */ - public function testPropPatch(string $path, array $existing, array $props, array $result) { + public function testPropPatch(string $path, array $existing, array $props, array $result): void { $this->insertProps($this->user->getUID(), $path, $existing); $propPatch = new PropPatch($props); @@ -213,7 +213,7 @@ class CustomPropertiesBackendTest extends TestCase { /** * @dataProvider deleteProvider */ - public function testDelete(string $path) { + public function testDelete(string $path): void { $this->insertProps('dummy_user_42', $path, ['foo' => 'bar']); $this->backend->delete($path); $this->assertEquals([], $this->getProps('dummy_user_42', $path)); @@ -229,7 +229,7 @@ class CustomPropertiesBackendTest extends TestCase { /** * @dataProvider moveProvider */ - public function testMove(string $source, string $target) { + public function testMove(string $source, string $target): void { $this->insertProps('dummy_user_42', $source, ['foo' => 'bar']); $this->backend->move($source, $target); $this->assertEquals([], $this->getProps('dummy_user_42', $source)); diff --git a/apps/dav/tests/unit/DAV/GroupPrincipalTest.php b/apps/dav/tests/unit/DAV/GroupPrincipalTest.php index 5520bbe5784..4755cefd2fc 100644 --- a/apps/dav/tests/unit/DAV/GroupPrincipalTest.php +++ b/apps/dav/tests/unit/DAV/GroupPrincipalTest.php @@ -72,12 +72,12 @@ class GroupPrincipalTest extends \Test\TestCase { parent::setUp(); } - public function testGetPrincipalsByPrefixWithoutPrefix() { + public function testGetPrincipalsByPrefixWithoutPrefix(): void { $response = $this->connector->getPrincipalsByPrefix(''); $this->assertSame([], $response); } - public function testGetPrincipalsByPrefixWithUsers() { + public function testGetPrincipalsByPrefixWithUsers(): void { $group1 = $this->mockGroup('foo'); $group2 = $this->mockGroup('bar'); $this->groupManager @@ -102,7 +102,7 @@ class GroupPrincipalTest extends \Test\TestCase { $this->assertSame($expectedResponse, $response); } - public function testGetPrincipalsByPrefixEmpty() { + public function testGetPrincipalsByPrefixEmpty(): void { $this->groupManager ->expects($this->once()) ->method('search') @@ -113,7 +113,7 @@ class GroupPrincipalTest extends \Test\TestCase { $this->assertSame([], $response); } - public function testGetPrincipalsByPathWithoutMail() { + public function testGetPrincipalsByPathWithoutMail(): void { $group1 = $this->mockGroup('foo'); $this->groupManager ->expects($this->once()) @@ -130,7 +130,7 @@ class GroupPrincipalTest extends \Test\TestCase { $this->assertSame($expectedResponse, $response); } - public function testGetPrincipalsByPathWithMail() { + public function testGetPrincipalsByPathWithMail(): void { $fooUser = $this->mockGroup('foo'); $this->groupManager ->expects($this->once()) @@ -147,7 +147,7 @@ class GroupPrincipalTest extends \Test\TestCase { $this->assertSame($expectedResponse, $response); } - public function testGetPrincipalsByPathEmpty() { + public function testGetPrincipalsByPathEmpty(): void { $this->groupManager ->expects($this->once()) ->method('get') @@ -158,7 +158,7 @@ class GroupPrincipalTest extends \Test\TestCase { $this->assertSame(null, $response); } - public function testGetPrincipalsByPathGroupWithSlash() { + public function testGetPrincipalsByPathGroupWithSlash(): void { $group1 = $this->mockGroup('foo/bar'); $this->groupManager ->expects($this->once()) @@ -175,7 +175,7 @@ class GroupPrincipalTest extends \Test\TestCase { $this->assertSame($expectedResponse, $response); } - public function testGetPrincipalsByPathGroupWithHash() { + public function testGetPrincipalsByPathGroupWithHash(): void { $group1 = $this->mockGroup('foo#bar'); $this->groupManager ->expects($this->once()) @@ -192,33 +192,33 @@ class GroupPrincipalTest extends \Test\TestCase { $this->assertSame($expectedResponse, $response); } - public function testGetGroupMemberSet() { + public function testGetGroupMemberSet(): void { $response = $this->connector->getGroupMemberSet('principals/groups/foo'); $this->assertSame([], $response); } - public function testGetGroupMembership() { + public function testGetGroupMembership(): void { $response = $this->connector->getGroupMembership('principals/groups/foo'); $this->assertSame([], $response); } - public function testSetGroupMembership() { + public function testSetGroupMembership(): void { $this->expectException(\Sabre\DAV\Exception::class); $this->expectExceptionMessage('Setting members of the group is not supported yet'); $this->connector->setGroupMemberSet('principals/groups/foo', ['foo']); } - public function testUpdatePrincipal() { + public function testUpdatePrincipal(): void { $this->assertSame(0, $this->connector->updatePrincipal('foo', new PropPatch([]))); } - public function testSearchPrincipalsWithEmptySearchProperties() { + public function testSearchPrincipalsWithEmptySearchProperties(): void { $this->assertSame([], $this->connector->searchPrincipals('principals/groups', [])); } - public function testSearchPrincipalsWithWrongPrefixPath() { + public function testSearchPrincipalsWithWrongPrefixPath(): void { $this->assertSame([], $this->connector->searchPrincipals('principals/users', ['{DAV:}displayname' => 'Foo'])); } diff --git a/apps/dav/tests/unit/DAV/HookManagerTest.php b/apps/dav/tests/unit/DAV/HookManagerTest.php index 503062c75db..eeda27d8aa3 100644 --- a/apps/dav/tests/unit/DAV/HookManagerTest.php +++ b/apps/dav/tests/unit/DAV/HookManagerTest.php @@ -61,7 +61,7 @@ class HookManagerTest extends TestCase { }); } - public function test() { + public function test(): void { $user = $this->getMockBuilder(IUser::class) ->disableOriginalConstructor() ->getMock(); @@ -110,7 +110,7 @@ class HookManagerTest extends TestCase { $hm->firstLogin($user); } - public function testWithExisting() { + public function testWithExisting(): void { $user = $this->getMockBuilder(IUser::class) ->disableOriginalConstructor() ->getMock(); @@ -149,7 +149,7 @@ class HookManagerTest extends TestCase { $hm->firstLogin($user); } - public function testWithBirthdayCalendar() { + public function testWithBirthdayCalendar(): void { $user = $this->getMockBuilder(IUser::class) ->disableOriginalConstructor() ->getMock(); @@ -197,7 +197,7 @@ class HookManagerTest extends TestCase { $hm->firstLogin($user); } - public function testDeleteCalendar() { + public function testDeleteCalendar(): void { $user = $this->getMockBuilder(IUser::class) ->disableOriginalConstructor() ->getMock(); diff --git a/apps/dav/tests/unit/DAV/Sharing/PluginTest.php b/apps/dav/tests/unit/DAV/Sharing/PluginTest.php index 1c4bb5e12e4..f71bb1216d4 100644 --- a/apps/dav/tests/unit/DAV/Sharing/PluginTest.php +++ b/apps/dav/tests/unit/DAV/Sharing/PluginTest.php @@ -69,7 +69,7 @@ class PluginTest extends TestCase { $this->plugin->initialize($this->server); } - public function testSharing() { + public function testSharing(): void { $this->book->expects($this->once())->method('updateShares')->with([[ 'href' => 'principal:principals/admin', 'commonName' => null, diff --git a/apps/dav/tests/unit/DAV/SystemPrincipalBackendTest.php b/apps/dav/tests/unit/DAV/SystemPrincipalBackendTest.php index 05e6699cc4c..285819e56d4 100644 --- a/apps/dav/tests/unit/DAV/SystemPrincipalBackendTest.php +++ b/apps/dav/tests/unit/DAV/SystemPrincipalBackendTest.php @@ -35,7 +35,7 @@ class SystemPrincipalBackendTest extends TestCase { * @param $expected * @param $prefix */ - public function testGetPrincipalsByPrefix($expected, $prefix) { + public function testGetPrincipalsByPrefix($expected, $prefix): void { $backend = new SystemPrincipalBackend(); $result = $backend->getPrincipalsByPrefix($prefix); $this->assertEquals($expected, $result); @@ -61,7 +61,7 @@ class SystemPrincipalBackendTest extends TestCase { * @param $expected * @param $path */ - public function testGetPrincipalByPath($expected, $path) { + public function testGetPrincipalByPath($expected, $path): void { $backend = new SystemPrincipalBackend(); $result = $backend->getPrincipalByPath($path); $this->assertEquals($expected, $result); @@ -85,7 +85,7 @@ class SystemPrincipalBackendTest extends TestCase { * @param string $principal * @throws \Sabre\DAV\Exception */ - public function testGetGroupMemberSetExceptional($principal) { + public function testGetGroupMemberSetExceptional($principal): void { $this->expectException(\Sabre\DAV\Exception::class); $this->expectExceptionMessage('Principal not found'); @@ -103,7 +103,7 @@ class SystemPrincipalBackendTest extends TestCase { /** * @throws \Sabre\DAV\Exception */ - public function testGetGroupMemberSet() { + public function testGetGroupMemberSet(): void { $backend = new SystemPrincipalBackend(); $result = $backend->getGroupMemberSet('principals/system/system'); $this->assertEquals(['principals/system/system'], $result); @@ -115,7 +115,7 @@ class SystemPrincipalBackendTest extends TestCase { * @param string $principal * @throws \Sabre\DAV\Exception */ - public function testGetGroupMembershipExceptional($principal) { + public function testGetGroupMembershipExceptional($principal): void { $this->expectException(\Sabre\DAV\Exception::class); $this->expectExceptionMessage('Principal not found'); @@ -132,7 +132,7 @@ class SystemPrincipalBackendTest extends TestCase { /** * @throws \Sabre\DAV\Exception */ - public function testGetGroupMembership() { + public function testGetGroupMembership(): void { $backend = new SystemPrincipalBackend(); $result = $backend->getGroupMembership('principals/system/system'); $this->assertEquals([], $result); diff --git a/apps/dav/tests/unit/Direct/DirectFileTest.php b/apps/dav/tests/unit/Direct/DirectFileTest.php index 5899b23d0b9..fdf7fa54923 100644 --- a/apps/dav/tests/unit/Direct/DirectFileTest.php +++ b/apps/dav/tests/unit/Direct/DirectFileTest.php @@ -82,57 +82,57 @@ class DirectFileTest extends TestCase { $this->directFile = new DirectFile($this->direct, $this->rootFolder, $this->eventDispatcher); } - public function testPut() { + public function testPut(): void { $this->expectException(Forbidden::class); $this->directFile->put('foo'); } - public function testGet() { + public function testGet(): void { $this->file->expects($this->once()) ->method('fopen') ->with('rb'); $this->directFile->get(); } - public function testGetContentType() { + public function testGetContentType(): void { $this->file->method('getMimeType') ->willReturn('direct/type'); $this->assertSame('direct/type', $this->directFile->getContentType()); } - public function testGetETag() { + public function testGetETag(): void { $this->file->method('getEtag') ->willReturn('directEtag'); $this->assertSame('directEtag', $this->directFile->getETag()); } - public function testGetSize() { + public function testGetSize(): void { $this->file->method('getSize') ->willReturn(42); $this->assertSame(42, $this->directFile->getSize()); } - public function testDelete() { + public function testDelete(): void { $this->expectException(Forbidden::class); $this->directFile->delete(); } - public function testGetName() { + public function testGetName(): void { $this->assertSame('directToken', $this->directFile->getName()); } - public function testSetName() { + public function testSetName(): void { $this->expectException(Forbidden::class); $this->directFile->setName('foobar'); } - public function testGetLastModified() { + public function testGetLastModified(): void { $this->file->method('getMTime') ->willReturn(42); diff --git a/apps/dav/tests/unit/Direct/DirectHomeTest.php b/apps/dav/tests/unit/Direct/DirectHomeTest.php index 073aa28f121..01214b3c48b 100644 --- a/apps/dav/tests/unit/Direct/DirectHomeTest.php +++ b/apps/dav/tests/unit/Direct/DirectHomeTest.php @@ -92,49 +92,49 @@ class DirectHomeTest extends TestCase { ); } - public function testCreateFile() { + public function testCreateFile(): void { $this->expectException(Forbidden::class); $this->directHome->createFile('foo', 'bar'); } - public function testCreateDirectory() { + public function testCreateDirectory(): void { $this->expectException(Forbidden::class); $this->directHome->createDirectory('foo'); } - public function testGetChildren() { + public function testGetChildren(): void { $this->expectException(MethodNotAllowed::class); $this->directHome->getChildren(); } - public function testChildExists() { + public function testChildExists(): void { $this->assertFalse($this->directHome->childExists('foo')); } - public function testDelete() { + public function testDelete(): void { $this->expectException(Forbidden::class); $this->directHome->delete(); } - public function testGetName() { + public function testGetName(): void { $this->assertSame('direct', $this->directHome->getName()); } - public function testSetName() { + public function testSetName(): void { $this->expectException(Forbidden::class); $this->directHome->setName('foo'); } - public function testGetLastModified() { + public function testGetLastModified(): void { $this->assertSame(0, $this->directHome->getLastModified()); } - public function testGetChildValid() { + public function testGetChildValid(): void { $direct = Direct::fromParams([ 'expiration' => 100, ]); @@ -150,7 +150,7 @@ class DirectHomeTest extends TestCase { $this->assertInstanceOf(DirectFile::class, $result); } - public function testGetChildExpired() { + public function testGetChildExpired(): void { $direct = Direct::fromParams([ 'expiration' => 41, ]); @@ -167,7 +167,7 @@ class DirectHomeTest extends TestCase { $this->directHome->getChild('longtoken'); } - public function testGetChildInvalid() { + public function testGetChildInvalid(): void { $this->directMapper->method('getByToken') ->with('longtoken') ->willThrowException(new DoesNotExistException('not found')); diff --git a/apps/dav/tests/unit/Files/FileSearchBackendTest.php b/apps/dav/tests/unit/Files/FileSearchBackendTest.php index b4245ac181b..cc4dcb62b75 100644 --- a/apps/dav/tests/unit/Files/FileSearchBackendTest.php +++ b/apps/dav/tests/unit/Files/FileSearchBackendTest.php @@ -115,7 +115,7 @@ class FileSearchBackendTest extends TestCase { $this->search = new FileSearchBackend($this->tree, $this->user, $this->rootFolder, $this->shareManager, $this->view); } - public function testSearchFilename() { + public function testSearchFilename(): void { $this->tree->expects($this->any()) ->method('getNodeForPath') ->willReturn($this->davFolder); @@ -144,7 +144,7 @@ class FileSearchBackendTest extends TestCase { $this->assertEquals('/files/test/test/path', $result[0]->href); } - public function testSearchMimetype() { + public function testSearchMimetype(): void { $this->tree->expects($this->any()) ->method('getNodeForPath') ->willReturn($this->davFolder); @@ -173,7 +173,7 @@ class FileSearchBackendTest extends TestCase { $this->assertEquals('/files/test/test/path', $result[0]->href); } - public function testSearchSize() { + public function testSearchSize(): void { $this->tree->expects($this->any()) ->method('getNodeForPath') ->willReturn($this->davFolder); @@ -202,7 +202,7 @@ class FileSearchBackendTest extends TestCase { $this->assertEquals('/files/test/test/path', $result[0]->href); } - public function testSearchMtime() { + public function testSearchMtime(): void { $this->tree->expects($this->any()) ->method('getNodeForPath') ->willReturn($this->davFolder); @@ -231,7 +231,7 @@ class FileSearchBackendTest extends TestCase { $this->assertEquals('/files/test/test/path', $result[0]->href); } - public function testSearchIsCollection() { + public function testSearchIsCollection(): void { $this->tree->expects($this->any()) ->method('getNodeForPath') ->willReturn($this->davFolder); @@ -261,7 +261,7 @@ class FileSearchBackendTest extends TestCase { } - public function testSearchInvalidProp() { + public function testSearchInvalidProp(): void { $this->expectException(\InvalidArgumentException::class); $this->tree->expects($this->any()) @@ -298,7 +298,7 @@ class FileSearchBackendTest extends TestCase { } - public function testSearchNonFolder() { + public function testSearchNonFolder(): void { $this->expectException(\InvalidArgumentException::class); $davNode = $this->createMock(File::class); @@ -311,7 +311,7 @@ class FileSearchBackendTest extends TestCase { $this->search->search($query); } - public function testSearchLimitOwnerBasic() { + public function testSearchLimitOwnerBasic(): void { $this->tree->expects($this->any()) ->method('getNodeForPath') ->willReturn($this->davFolder); @@ -340,7 +340,7 @@ class FileSearchBackendTest extends TestCase { $this->assertEmpty($operator->getArguments()); } - public function testSearchLimitOwnerNested() { + public function testSearchLimitOwnerNested(): void { $this->tree->expects($this->any()) ->method('getNodeForPath') ->willReturn($this->davFolder); @@ -388,7 +388,7 @@ class FileSearchBackendTest extends TestCase { $this->assertEmpty($operator->getArguments()); } - public function testSearchOperatorLimit() { + public function testSearchOperatorLimit(): void { $this->tree->expects($this->any()) ->method('getNodeForPath') ->willReturn($this->davFolder); diff --git a/apps/dav/tests/unit/Files/MultipartRequestParserTest.php b/apps/dav/tests/unit/Files/MultipartRequestParserTest.php index ec9e2d0a383..4c470f49595 100644 --- a/apps/dav/tests/unit/Files/MultipartRequestParserTest.php +++ b/apps/dav/tests/unit/Files/MultipartRequestParserTest.php @@ -80,7 +80,7 @@ class MultipartRequestParserTest extends TestCase { /** * Test validation of the request's body type */ - public function testBodyTypeValidation() { + public function testBodyTypeValidation(): void { $bodyStream = "I am not a stream, but pretend to be"; $request = $this->getMockBuilder('Sabre\HTTP\RequestInterface') ->disableOriginalConstructor() @@ -101,7 +101,7 @@ class MultipartRequestParserTest extends TestCase { * - valid file content * - valid file path */ - public function testValidRequest() { + public function testValidRequest(): void { $multipartParser = $this->getMultipartParser( $this->getValidBodyObject() ); @@ -118,7 +118,7 @@ class MultipartRequestParserTest extends TestCase { /** * Test with invalid md5 hash. */ - public function testInvalidMd5Hash() { + public function testInvalidMd5Hash(): void { $bodyObject = $this->getValidBodyObject(); $bodyObject["0"]["headers"]["X-File-MD5"] = "f2377b4d911f7ec46325fe603c3af03"; $multipartParser = $this->getMultipartParser( @@ -132,7 +132,7 @@ class MultipartRequestParserTest extends TestCase { /** * Test with a null md5 hash. */ - public function testNullMd5Hash() { + public function testNullMd5Hash(): void { $bodyObject = $this->getValidBodyObject(); unset($bodyObject["0"]["headers"]["X-File-MD5"]); $multipartParser = $this->getMultipartParser( @@ -146,7 +146,7 @@ class MultipartRequestParserTest extends TestCase { /** * Test with a null Content-Length. */ - public function testNullContentLength() { + public function testNullContentLength(): void { $bodyObject = $this->getValidBodyObject(); unset($bodyObject["0"]["headers"]["Content-Length"]); $multipartParser = $this->getMultipartParser( @@ -160,7 +160,7 @@ class MultipartRequestParserTest extends TestCase { /** * Test with a lower Content-Length. */ - public function testLowerContentLength() { + public function testLowerContentLength(): void { $bodyObject = $this->getValidBodyObject(); $bodyObject["0"]["headers"]["Content-Length"] = 6; $multipartParser = $this->getMultipartParser( @@ -174,7 +174,7 @@ class MultipartRequestParserTest extends TestCase { /** * Test with a higher Content-Length. */ - public function testHigherContentLength() { + public function testHigherContentLength(): void { $bodyObject = $this->getValidBodyObject(); $bodyObject["0"]["headers"]["Content-Length"] = 8; $multipartParser = $this->getMultipartParser( @@ -188,7 +188,7 @@ class MultipartRequestParserTest extends TestCase { /** * Test with wrong boundary in body. */ - public function testWrongBoundary() { + public function testWrongBoundary(): void { $bodyObject = $this->getValidBodyObject(); $multipartParser = $this->getMultipartParser( $bodyObject, @@ -202,7 +202,7 @@ class MultipartRequestParserTest extends TestCase { /** * Test with no boundary in request headers. */ - public function testNoBoundaryInHeader() { + public function testNoBoundaryInHeader(): void { $bodyObject = $this->getValidBodyObject(); $this->expectExceptionMessage('Error while parsing boundary in Content-Type header.'); $this->getMultipartParser( @@ -214,7 +214,7 @@ class MultipartRequestParserTest extends TestCase { /** * Test with no boundary in the request's headers. */ - public function testNoBoundaryInBody() { + public function testNoBoundaryInBody(): void { $bodyObject = $this->getValidBodyObject(); $multipartParser = $this->getMultipartParser( $bodyObject, @@ -229,7 +229,7 @@ class MultipartRequestParserTest extends TestCase { /** * Test with a boundary with quotes in the request's headers. */ - public function testBoundaryWithQuotes() { + public function testBoundaryWithQuotes(): void { $bodyObject = $this->getValidBodyObject(); $multipartParser = $this->getMultipartParser( $bodyObject, @@ -245,7 +245,7 @@ class MultipartRequestParserTest extends TestCase { /** * Test with a wrong Content-Type in the request's headers. */ - public function testWrongContentType() { + public function testWrongContentType(): void { $bodyObject = $this->getValidBodyObject(); $this->expectExceptionMessage('Content-Type must be multipart/related'); $this->getMultipartParser( @@ -257,7 +257,7 @@ class MultipartRequestParserTest extends TestCase { /** * Test with a wrong key after the content type in the request's headers. */ - public function testWrongKeyInContentType() { + public function testWrongKeyInContentType(): void { $bodyObject = $this->getValidBodyObject(); $this->expectExceptionMessage('Boundary is invalid'); $this->getMultipartParser( @@ -269,7 +269,7 @@ class MultipartRequestParserTest extends TestCase { /** * Test with a null Content-Type in the request's headers. */ - public function testNullContentType() { + public function testNullContentType(): void { $bodyObject = $this->getValidBodyObject(); $this->expectExceptionMessage('Content-Type can not be null'); $this->getMultipartParser( diff --git a/apps/dav/tests/unit/Files/Sharing/FilesDropPluginTest.php b/apps/dav/tests/unit/Files/Sharing/FilesDropPluginTest.php index a24125b6804..764cdd5c339 100644 --- a/apps/dav/tests/unit/Files/Sharing/FilesDropPluginTest.php +++ b/apps/dav/tests/unit/Files/Sharing/FilesDropPluginTest.php @@ -64,7 +64,7 @@ class FilesDropPluginTest extends TestCase { ->method($this->anything()); } - public function testInitialize() { + public function testInitialize(): void { $this->server->expects($this->once()) ->method('on') ->with( @@ -76,7 +76,7 @@ class FilesDropPluginTest extends TestCase { $this->plugin->initialize($this->server); } - public function testNotEnabled() { + public function testNotEnabled(): void { $this->view->expects($this->never()) ->method($this->anything()); @@ -86,7 +86,7 @@ class FilesDropPluginTest extends TestCase { $this->plugin->beforeMethod($this->request, $this->response); } - public function testValid() { + public function testValid(): void { $this->plugin->enable(); $this->plugin->setView($this->view); @@ -110,7 +110,7 @@ class FilesDropPluginTest extends TestCase { $this->plugin->beforeMethod($this->request, $this->response); } - public function testFileAlreadyExistsValid() { + public function testFileAlreadyExistsValid(): void { $this->plugin->enable(); $this->plugin->setView($this->view); @@ -139,7 +139,7 @@ class FilesDropPluginTest extends TestCase { $this->plugin->beforeMethod($this->request, $this->response); } - public function testNoMKCOL() { + public function testNoMKCOL(): void { $this->plugin->enable(); $this->plugin->setView($this->view); @@ -151,7 +151,7 @@ class FilesDropPluginTest extends TestCase { $this->plugin->beforeMethod($this->request, $this->response); } - public function testNoSubdirPut() { + public function testNoSubdirPut(): void { $this->plugin->enable(); $this->plugin->setView($this->view); diff --git a/apps/dav/tests/unit/Migration/CalDAVRemoveEmptyValueTest.php b/apps/dav/tests/unit/Migration/CalDAVRemoveEmptyValueTest.php index 0adabd2388f..5e1d5952c73 100644 --- a/apps/dav/tests/unit/Migration/CalDAVRemoveEmptyValueTest.php +++ b/apps/dav/tests/unit/Migration/CalDAVRemoveEmptyValueTest.php @@ -99,7 +99,7 @@ END:VCALENDAR'; $this->output = $this->createMock(IOutput::class); } - public function testRunAllValid() { + public function testRunAllValid(): void { /** @var CalDAVRemoveEmptyValue|\PHPUnit\Framework\MockObject\MockObject $step */ $step = $this->getMockBuilder(CalDAVRemoveEmptyValue::class) ->setConstructorArgs([ @@ -123,7 +123,7 @@ END:VCALENDAR'; $step->run($this->output); } - public function testRunInvalid() { + public function testRunInvalid(): void { /** @var CalDAVRemoveEmptyValue|\PHPUnit\Framework\MockObject\MockObject $step */ $step = $this->getMockBuilder(CalDAVRemoveEmptyValue::class) ->setConstructorArgs([ @@ -166,7 +166,7 @@ END:VCALENDAR'; $step->run($this->output); } - public function testRunValid() { + public function testRunValid(): void { /** @var CalDAVRemoveEmptyValue|\PHPUnit\Framework\MockObject\MockObject $step */ $step = $this->getMockBuilder(CalDAVRemoveEmptyValue::class) ->setConstructorArgs([ @@ -208,7 +208,7 @@ END:VCALENDAR'; $step->run($this->output); } - public function testRunStillInvalid() { + public function testRunStillInvalid(): void { /** @var CalDAVRemoveEmptyValue|\PHPUnit\Framework\MockObject\MockObject $step */ $step = $this->getMockBuilder(CalDAVRemoveEmptyValue::class) ->setConstructorArgs([ diff --git a/apps/dav/tests/unit/Migration/RefreshWebcalJobRegistrarTest.php b/apps/dav/tests/unit/Migration/RefreshWebcalJobRegistrarTest.php index 073465cd24c..1053752a039 100644 --- a/apps/dav/tests/unit/Migration/RefreshWebcalJobRegistrarTest.php +++ b/apps/dav/tests/unit/Migration/RefreshWebcalJobRegistrarTest.php @@ -54,11 +54,11 @@ class RefreshWebcalJobRegistrarTest extends TestCase { $this->migration = new RefreshWebcalJobRegistrar($this->db, $this->jobList); } - public function testGetName() { + public function testGetName(): void { $this->assertEquals($this->migration->getName(), 'Registering background jobs to update cache for webcal calendars'); } - public function testRun() { + public function testRun(): void { $output = $this->createMock(IOutput::class); $queryBuilder = $this->createMock(IQueryBuilder::class); diff --git a/apps/dav/tests/unit/Migration/RegenerateBirthdayCalendarsTest.php b/apps/dav/tests/unit/Migration/RegenerateBirthdayCalendarsTest.php index bb5210f18fb..5305abc9299 100644 --- a/apps/dav/tests/unit/Migration/RegenerateBirthdayCalendarsTest.php +++ b/apps/dav/tests/unit/Migration/RegenerateBirthdayCalendarsTest.php @@ -54,14 +54,14 @@ class RegenerateBirthdayCalendarsTest extends TestCase { $this->config); } - public function testGetName() { + public function testGetName(): void { $this->assertEquals( 'Regenerating birthday calendars to use new icons and fix old birthday events without year', $this->migration->getName() ); } - public function testRun() { + public function testRun(): void { $this->config->expects($this->once()) ->method('getAppValue') ->with('dav', 'regeneratedBirthdayCalendarsForYearFix') @@ -83,7 +83,7 @@ class RegenerateBirthdayCalendarsTest extends TestCase { $this->migration->run($output); } - public function testRunSecondTime() { + public function testRunSecondTime(): void { $this->config->expects($this->once()) ->method('getAppValue') ->with('dav', 'regeneratedBirthdayCalendarsForYearFix') diff --git a/apps/dav/tests/unit/Provisioning/Apple/AppleProvisioningNodeTest.php b/apps/dav/tests/unit/Provisioning/Apple/AppleProvisioningNodeTest.php index e58022264a1..ea0089eb069 100644 --- a/apps/dav/tests/unit/Provisioning/Apple/AppleProvisioningNodeTest.php +++ b/apps/dav/tests/unit/Provisioning/Apple/AppleProvisioningNodeTest.php @@ -43,31 +43,31 @@ class AppleProvisioningNodeTest extends TestCase { $this->node = new AppleProvisioningNode($this->timeFactory); } - public function testGetName() { + public function testGetName(): void { $this->assertEquals('apple-provisioning.mobileconfig', $this->node->getName()); } - public function testSetName() { + public function testSetName(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->expectExceptionMessage('Renaming apple-provisioning.mobileconfig is forbidden'); $this->node->setName('foo'); } - public function testGetLastModified() { + public function testGetLastModified(): void { $this->assertEquals(null, $this->node->getLastModified()); } - public function testDelete() { + public function testDelete(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->expectExceptionMessage('apple-provisioning.mobileconfig may not be deleted'); $this->node->delete(); } - public function testGetProperties() { + public function testGetProperties(): void { $this->timeFactory->expects($this->once()) ->method('getDateTime') ->willReturn(new \DateTime('2000-01-01')); @@ -79,7 +79,7 @@ class AppleProvisioningNodeTest extends TestCase { } - public function testGetPropPatch() { + public function testGetPropPatch(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->expectExceptionMessage('apple-provisioning.mobileconfig\'s properties may not be altered.'); diff --git a/apps/dav/tests/unit/Provisioning/Apple/AppleProvisioningPluginTest.php b/apps/dav/tests/unit/Provisioning/Apple/AppleProvisioningPluginTest.php index b4d28a875b3..9c5eae16d1e 100644 --- a/apps/dav/tests/unit/Provisioning/Apple/AppleProvisioningPluginTest.php +++ b/apps/dav/tests/unit/Provisioning/Apple/AppleProvisioningPluginTest.php @@ -87,12 +87,12 @@ class AppleProvisioningPluginTest extends TestCase { $this->sabreResponse = $this->createMock(\Sabre\HTTP\ResponseInterface::class); } - public function testInitialize() { + public function testInitialize(): void { $server = $this->createMock(\Sabre\DAV\Server::class); $plugin = new AppleProvisioningPlugin($this->userSession, $this->urlGenerator, $this->themingDefaults, $this->request, $this->l10n, - function () { + function (): void { }); $server->expects($this->once()) @@ -102,7 +102,7 @@ class AppleProvisioningPluginTest extends TestCase { $plugin->initialize($server); } - public function testHttpGetOnHttp() { + public function testHttpGetOnHttp(): void { $this->sabreRequest->expects($this->once()) ->method('getPath') ->with() @@ -141,7 +141,7 @@ class AppleProvisioningPluginTest extends TestCase { $this->assertFalse($returnValue); } - public function testHttpGetOnHttps() { + public function testHttpGetOnHttps(): void { $this->sabreRequest->expects($this->once()) ->method('getPath') ->with() diff --git a/apps/dav/tests/unit/ServerTest.php b/apps/dav/tests/unit/ServerTest.php index 8cdd52f5745..62e2accd697 100644 --- a/apps/dav/tests/unit/ServerTest.php +++ b/apps/dav/tests/unit/ServerTest.php @@ -41,7 +41,7 @@ class ServerTest extends \Test\TestCase { /** * @dataProvider providesUris */ - public function test($uri, array $plugins) { + public function test($uri, array $plugins): void { /** @var IRequest | \PHPUnit\Framework\MockObject\MockObject $r */ $r = $this->createMock(IRequest::class); $r->expects($this->any())->method('getRequestUri')->willReturn($uri); diff --git a/apps/dav/tests/unit/Settings/CalDAVSettingsTest.php b/apps/dav/tests/unit/Settings/CalDAVSettingsTest.php index 08cc2959ef9..6bf1707c437 100644 --- a/apps/dav/tests/unit/Settings/CalDAVSettingsTest.php +++ b/apps/dav/tests/unit/Settings/CalDAVSettingsTest.php @@ -55,7 +55,7 @@ class CalDAVSettingsTest extends TestCase { $this->settings = new CalDAVSettings($this->config, $this->initialState, $this->urlGenerator); } - public function testGetForm() { + public function testGetForm(): void { $this->config->method('getAppValue') ->withConsecutive( ['dav', 'sendInvitations', 'yes'], @@ -84,11 +84,11 @@ class CalDAVSettingsTest extends TestCase { $this->assertInstanceOf(TemplateResponse::class, $result); } - public function testGetSection() { + public function testGetSection(): void { $this->assertEquals('groupware', $this->settings->getSection()); } - public function testGetPriority() { + public function testGetPriority(): void { $this->assertEquals(10, $this->settings->getPriority()); } } diff --git a/apps/dav/tests/unit/SystemTag/SystemTagMappingNodeTest.php b/apps/dav/tests/unit/SystemTag/SystemTagMappingNodeTest.php index e39cb0a04d3..6599c574dd9 100644 --- a/apps/dav/tests/unit/SystemTag/SystemTagMappingNodeTest.php +++ b/apps/dav/tests/unit/SystemTag/SystemTagMappingNodeTest.php @@ -74,7 +74,7 @@ class SystemTagMappingNodeTest extends \Test\TestCase { ); } - public function testGetters() { + public function testGetters(): void { $tag = new SystemTag(1, 'Test', true, false); $node = $this->getMappingNode($tag); $this->assertEquals('1', $node->getName()); @@ -83,7 +83,7 @@ class SystemTagMappingNodeTest extends \Test\TestCase { $this->assertEquals('files', $node->getObjectType()); } - public function testDeleteTag() { + public function testDeleteTag(): void { $node = $this->getMappingNode(); $this->tagManager->expects($this->once()) ->method('canUserSeeTag') @@ -120,7 +120,7 @@ class SystemTagMappingNodeTest extends \Test\TestCase { /** * @dataProvider tagNodeDeleteProviderPermissionException */ - public function testDeleteTagExpectedException(ISystemTag $tag, $expectedException) { + public function testDeleteTagExpectedException(ISystemTag $tag, $expectedException): void { $this->tagManager->expects($this->any()) ->method('canUserSeeTag') ->with($tag) @@ -145,7 +145,7 @@ class SystemTagMappingNodeTest extends \Test\TestCase { } - public function testDeleteTagNotFound() { + public function testDeleteTagNotFound(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); // assuming the tag existed at the time the node was created, diff --git a/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php b/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php index 409132919a5..7f254fb1ff4 100644 --- a/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php +++ b/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php @@ -73,7 +73,7 @@ class SystemTagNodeTest extends \Test\TestCase { /** * @dataProvider adminFlagProvider */ - public function testGetters($isAdmin) { + public function testGetters($isAdmin): void { $tag = new SystemTag('1', 'Test', true, true); $node = $this->getTagNode($isAdmin, $tag); $this->assertEquals('1', $node->getName()); @@ -81,7 +81,7 @@ class SystemTagNodeTest extends \Test\TestCase { } - public function testSetName() { + public function testSetName(): void { $this->expectException(\Sabre\DAV\Exception\MethodNotAllowed::class); $this->getTagNode()->setName('2'); @@ -113,7 +113,7 @@ class SystemTagNodeTest extends \Test\TestCase { /** * @dataProvider tagNodeProvider */ - public function testUpdateTag($isAdmin, ISystemTag $originalTag, $changedArgs) { + public function testUpdateTag($isAdmin, ISystemTag $originalTag, $changedArgs): void { $this->tagManager->expects($this->once()) ->method('canUserSeeTag') ->with($originalTag) @@ -173,7 +173,7 @@ class SystemTagNodeTest extends \Test\TestCase { /** * @dataProvider tagNodeProviderPermissionException */ - public function testUpdateTagPermissionException(ISystemTag $originalTag, $changedArgs, $expectedException = null) { + public function testUpdateTagPermissionException(ISystemTag $originalTag, $changedArgs, $expectedException = null): void { $this->tagManager->expects($this->any()) ->method('canUserSeeTag') ->with($originalTag) @@ -198,7 +198,7 @@ class SystemTagNodeTest extends \Test\TestCase { } - public function testUpdateTagAlreadyExists() { + public function testUpdateTagAlreadyExists(): void { $this->expectException(\Sabre\DAV\Exception\Conflict::class); $tag = new SystemTag(1, 'tag1', true, true); @@ -218,7 +218,7 @@ class SystemTagNodeTest extends \Test\TestCase { } - public function testUpdateTagNotFound() { + public function testUpdateTagNotFound(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); $tag = new SystemTag(1, 'tag1', true, true); @@ -240,7 +240,7 @@ class SystemTagNodeTest extends \Test\TestCase { /** * @dataProvider adminFlagProvider */ - public function testDeleteTag($isAdmin) { + public function testDeleteTag($isAdmin): void { $tag = new SystemTag(1, 'tag1', true, true); $this->tagManager->expects($isAdmin ? $this->once() : $this->never()) ->method('canUserSeeTag') @@ -273,7 +273,7 @@ class SystemTagNodeTest extends \Test\TestCase { /** * @dataProvider tagNodeDeleteProviderPermissionException */ - public function testDeleteTagPermissionException(ISystemTag $tag, $expectedException) { + public function testDeleteTagPermissionException(ISystemTag $tag, $expectedException): void { $this->tagManager->expects($this->any()) ->method('canUserSeeTag') ->with($tag) @@ -286,7 +286,7 @@ class SystemTagNodeTest extends \Test\TestCase { } - public function testDeleteTagNotFound() { + public function testDeleteTagNotFound(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); $tag = new SystemTag(1, 'tag1', true, true); diff --git a/apps/dav/tests/unit/SystemTag/SystemTagPluginTest.php b/apps/dav/tests/unit/SystemTag/SystemTagPluginTest.php index aa7026d3854..291aa45ad0e 100644 --- a/apps/dav/tests/unit/SystemTag/SystemTagPluginTest.php +++ b/apps/dav/tests/unit/SystemTag/SystemTagPluginTest.php @@ -186,7 +186,7 @@ class SystemTagPluginTest extends \Test\TestCase { /** * @dataProvider getPropertiesDataProvider */ - public function testGetProperties(ISystemTag $systemTag, $groups, $requestedProperties, $expectedProperties) { + public function testGetProperties(ISystemTag $systemTag, $groups, $requestedProperties, $expectedProperties): void { $this->user->expects($this->any()) ->method('getUID') ->willReturn('admin'); @@ -234,7 +234,7 @@ class SystemTagPluginTest extends \Test\TestCase { } - public function testGetPropertiesForbidden() { + public function testGetPropertiesForbidden(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $systemTag = new SystemTag(1, 'Test', true, false); @@ -275,7 +275,7 @@ class SystemTagPluginTest extends \Test\TestCase { ); } - public function testUpdatePropertiesAdmin() { + public function testUpdatePropertiesAdmin(): void { $systemTag = new SystemTag(1, 'Test', true, false); $this->user->expects($this->any()) ->method('getUID') @@ -331,7 +331,7 @@ class SystemTagPluginTest extends \Test\TestCase { } - public function testUpdatePropertiesForbidden() { + public function testUpdatePropertiesForbidden(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $systemTag = new SystemTag(1, 'Test', true, false); @@ -385,7 +385,7 @@ class SystemTagPluginTest extends \Test\TestCase { /** * @dataProvider createTagInsufficientPermissionsProvider */ - public function testCreateNotAssignableTagAsRegularUser($userVisible, $userAssignable, $groups) { + public function testCreateNotAssignableTagAsRegularUser($userVisible, $userAssignable, $groups): void { $this->expectException(\Sabre\DAV\Exception\BadRequest::class); $this->expectExceptionMessage('Not sufficient permissions'); @@ -444,7 +444,7 @@ class SystemTagPluginTest extends \Test\TestCase { $this->plugin->httpPost($request, $response); } - public function testCreateTagInByIdCollectionAsRegularUser() { + public function testCreateTagInByIdCollectionAsRegularUser(): void { $systemTag = new SystemTag(1, 'Test', true, false); $requestData = json_encode([ @@ -508,7 +508,7 @@ class SystemTagPluginTest extends \Test\TestCase { /** * @dataProvider createTagProvider */ - public function testCreateTagInByIdCollection($userVisible, $userAssignable, $groups) { + public function testCreateTagInByIdCollection($userVisible, $userAssignable, $groups): void { $this->user->expects($this->once()) ->method('getUID') ->willReturn('admin'); @@ -591,7 +591,7 @@ class SystemTagPluginTest extends \Test\TestCase { ]; } - public function testCreateTagInMappingCollection() { + public function testCreateTagInMappingCollection(): void { $this->user->expects($this->once()) ->method('getUID') ->willReturn('admin'); @@ -659,7 +659,7 @@ class SystemTagPluginTest extends \Test\TestCase { } - public function testCreateTagToUnknownNode() { + public function testCreateTagToUnknownNode(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); $node = $this->getMockBuilder(SystemTagsObjectMappingCollection::class) @@ -693,7 +693,7 @@ class SystemTagPluginTest extends \Test\TestCase { /** * @dataProvider nodeClassProvider */ - public function testCreateTagConflict($nodeClass) { + public function testCreateTagConflict($nodeClass): void { $this->expectException(\Sabre\DAV\Exception\Conflict::class); $this->user->expects($this->once()) diff --git a/apps/dav/tests/unit/SystemTag/SystemTagsByIdCollectionTest.php b/apps/dav/tests/unit/SystemTag/SystemTagsByIdCollectionTest.php index 72da59dfcce..85adb6675b3 100644 --- a/apps/dav/tests/unit/SystemTag/SystemTagsByIdCollectionTest.php +++ b/apps/dav/tests/unit/SystemTag/SystemTagsByIdCollectionTest.php @@ -80,20 +80,20 @@ class SystemTagsByIdCollectionTest extends \Test\TestCase { } - public function testForbiddenCreateFile() { + public function testForbiddenCreateFile(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->getNode()->createFile('555'); } - public function testForbiddenCreateDirectory() { + public function testForbiddenCreateDirectory(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->getNode()->createDirectory('789'); } - public function testGetChild() { + public function testGetChild(): void { $tag = new SystemTag(123, 'Test', true, false); $this->tagManager->expects($this->once()) ->method('canUserSeeTag') @@ -113,7 +113,7 @@ class SystemTagsByIdCollectionTest extends \Test\TestCase { } - public function testGetChildInvalidName() { + public function testGetChildInvalidName(): void { $this->expectException(\Sabre\DAV\Exception\BadRequest::class); $this->tagManager->expects($this->once()) @@ -125,7 +125,7 @@ class SystemTagsByIdCollectionTest extends \Test\TestCase { } - public function testGetChildNotFound() { + public function testGetChildNotFound(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); $this->tagManager->expects($this->once()) @@ -137,7 +137,7 @@ class SystemTagsByIdCollectionTest extends \Test\TestCase { } - public function testGetChildUserNotVisible() { + public function testGetChildUserNotVisible(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); $tag = new SystemTag(123, 'Test', false, false); @@ -150,7 +150,7 @@ class SystemTagsByIdCollectionTest extends \Test\TestCase { $this->getNode(false)->getChild('123'); } - public function testGetChildrenAdmin() { + public function testGetChildrenAdmin(): void { $tag1 = new SystemTag(123, 'One', true, false); $tag2 = new SystemTag(456, 'Two', true, true); @@ -169,7 +169,7 @@ class SystemTagsByIdCollectionTest extends \Test\TestCase { $this->assertEquals($tag2, $children[1]->getSystemTag()); } - public function testGetChildrenNonAdmin() { + public function testGetChildrenNonAdmin(): void { $tag1 = new SystemTag(123, 'One', true, false); $tag2 = new SystemTag(456, 'Two', true, true); @@ -188,7 +188,7 @@ class SystemTagsByIdCollectionTest extends \Test\TestCase { $this->assertEquals($tag2, $children[1]->getSystemTag()); } - public function testGetChildrenEmpty() { + public function testGetChildrenEmpty(): void { $this->tagManager->expects($this->once()) ->method('getAllTags') ->with(null) @@ -206,7 +206,7 @@ class SystemTagsByIdCollectionTest extends \Test\TestCase { /** * @dataProvider childExistsProvider */ - public function testChildExists($userVisible, $expectedResult) { + public function testChildExists($userVisible, $expectedResult): void { $tag = new SystemTag(123, 'One', $userVisible, false); $this->tagManager->expects($this->once()) ->method('canUserSeeTag') @@ -221,7 +221,7 @@ class SystemTagsByIdCollectionTest extends \Test\TestCase { $this->assertEquals($expectedResult, $this->getNode()->childExists('123')); } - public function testChildExistsNotFound() { + public function testChildExistsNotFound(): void { $this->tagManager->expects($this->once()) ->method('getTagsByIds') ->with(['123']) @@ -231,7 +231,7 @@ class SystemTagsByIdCollectionTest extends \Test\TestCase { } - public function testChildExistsBadRequest() { + public function testChildExistsBadRequest(): void { $this->expectException(\Sabre\DAV\Exception\BadRequest::class); $this->tagManager->expects($this->once()) diff --git a/apps/dav/tests/unit/SystemTag/SystemTagsObjectMappingCollectionTest.php b/apps/dav/tests/unit/SystemTag/SystemTagsObjectMappingCollectionTest.php index bb71de8ea8e..22f2e69b740 100644 --- a/apps/dav/tests/unit/SystemTag/SystemTagsObjectMappingCollectionTest.php +++ b/apps/dav/tests/unit/SystemTag/SystemTagsObjectMappingCollectionTest.php @@ -70,7 +70,7 @@ class SystemTagsObjectMappingCollectionTest extends \Test\TestCase { ); } - public function testAssignTag() { + public function testAssignTag(): void { $tag = new SystemTag('1', 'Test', true, true); $this->tagManager->expects($this->once()) ->method('canUserSeeTag') @@ -104,7 +104,7 @@ class SystemTagsObjectMappingCollectionTest extends \Test\TestCase { /** * @dataProvider permissionsProvider */ - public function testAssignTagNoPermission($userVisible, $userAssignable, $expectedException) { + public function testAssignTagNoPermission($userVisible, $userAssignable, $expectedException): void { $tag = new SystemTag('1', 'Test', $userVisible, $userAssignable); $this->tagManager->expects($this->once()) ->method('canUserSeeTag') @@ -133,7 +133,7 @@ class SystemTagsObjectMappingCollectionTest extends \Test\TestCase { } - public function testAssignTagNotFound() { + public function testAssignTagNotFound(): void { $this->expectException(\Sabre\DAV\Exception\PreconditionFailed::class); $this->tagManager->expects($this->once()) @@ -145,13 +145,13 @@ class SystemTagsObjectMappingCollectionTest extends \Test\TestCase { } - public function testForbiddenCreateDirectory() { + public function testForbiddenCreateDirectory(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->getNode()->createDirectory('789'); } - public function testGetChild() { + public function testGetChild(): void { $tag = new SystemTag(555, 'TheTag', true, false); $this->tagManager->expects($this->once()) ->method('canUserSeeTag') @@ -175,7 +175,7 @@ class SystemTagsObjectMappingCollectionTest extends \Test\TestCase { } - public function testGetChildNonVisible() { + public function testGetChildNonVisible(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); $tag = new SystemTag(555, 'TheTag', false, false); @@ -198,7 +198,7 @@ class SystemTagsObjectMappingCollectionTest extends \Test\TestCase { } - public function testGetChildRelationNotFound() { + public function testGetChildRelationNotFound(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); $this->tagMapper->expects($this->once()) @@ -210,7 +210,7 @@ class SystemTagsObjectMappingCollectionTest extends \Test\TestCase { } - public function testGetChildInvalidId() { + public function testGetChildInvalidId(): void { $this->expectException(\Sabre\DAV\Exception\BadRequest::class); $this->tagMapper->expects($this->once()) @@ -222,7 +222,7 @@ class SystemTagsObjectMappingCollectionTest extends \Test\TestCase { } - public function testGetChildTagDoesNotExist() { + public function testGetChildTagDoesNotExist(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); $this->tagMapper->expects($this->once()) @@ -233,7 +233,7 @@ class SystemTagsObjectMappingCollectionTest extends \Test\TestCase { $this->getNode()->getChild('777'); } - public function testGetChildren() { + public function testGetChildren(): void { $tag1 = new SystemTag(555, 'TagOne', true, false); $tag2 = new SystemTag(556, 'TagTwo', true, true); $tag3 = new SystemTag(557, 'InvisibleTag', false, true); @@ -270,7 +270,7 @@ class SystemTagsObjectMappingCollectionTest extends \Test\TestCase { $this->assertEquals($tag2, $children[1]->getSystemTag()); } - public function testChildExistsWithVisibleTag() { + public function testChildExistsWithVisibleTag(): void { $tag = new SystemTag(555, 'TagOne', true, false); $this->tagMapper->expects($this->once()) @@ -291,7 +291,7 @@ class SystemTagsObjectMappingCollectionTest extends \Test\TestCase { $this->assertTrue($this->getNode()->childExists('555')); } - public function testChildExistsWithInvisibleTag() { + public function testChildExistsWithInvisibleTag(): void { $tag = new SystemTag(555, 'TagOne', false, false); $this->tagMapper->expects($this->once()) @@ -307,7 +307,7 @@ class SystemTagsObjectMappingCollectionTest extends \Test\TestCase { $this->assertFalse($this->getNode()->childExists('555')); } - public function testChildExistsNotFound() { + public function testChildExistsNotFound(): void { $this->tagMapper->expects($this->once()) ->method('haveTag') ->with([111], 'files', '555') @@ -316,7 +316,7 @@ class SystemTagsObjectMappingCollectionTest extends \Test\TestCase { $this->assertFalse($this->getNode()->childExists('555')); } - public function testChildExistsTagNotFound() { + public function testChildExistsTagNotFound(): void { $this->tagMapper->expects($this->once()) ->method('haveTag') ->with([111], 'files', '555') @@ -326,7 +326,7 @@ class SystemTagsObjectMappingCollectionTest extends \Test\TestCase { } - public function testChildExistsInvalidId() { + public function testChildExistsInvalidId(): void { $this->expectException(\Sabre\DAV\Exception\BadRequest::class); $this->tagMapper->expects($this->once()) @@ -338,20 +338,20 @@ class SystemTagsObjectMappingCollectionTest extends \Test\TestCase { } - public function testDelete() { + public function testDelete(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->getNode()->delete(); } - public function testSetName() { + public function testSetName(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->getNode()->setName('somethingelse'); } - public function testGetName() { + public function testGetName(): void { $this->assertEquals('111', $this->getNode()->getName()); } } diff --git a/apps/dav/tests/unit/SystemTag/SystemTagsObjectTypeCollectionTest.php b/apps/dav/tests/unit/SystemTag/SystemTagsObjectTypeCollectionTest.php index 11c9fc5977c..4dd81615c01 100644 --- a/apps/dav/tests/unit/SystemTag/SystemTagsObjectTypeCollectionTest.php +++ b/apps/dav/tests/unit/SystemTag/SystemTagsObjectTypeCollectionTest.php @@ -99,20 +99,20 @@ class SystemTagsObjectTypeCollectionTest extends \Test\TestCase { } - public function testForbiddenCreateFile() { + public function testForbiddenCreateFile(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->node->createFile('555'); } - public function testForbiddenCreateDirectory() { + public function testForbiddenCreateDirectory(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->node->createDirectory('789'); } - public function testGetChild() { + public function testGetChild(): void { $this->userFolder->expects($this->once()) ->method('getById') ->with('555') @@ -124,7 +124,7 @@ class SystemTagsObjectTypeCollectionTest extends \Test\TestCase { } - public function testGetChildWithoutAccess() { + public function testGetChildWithoutAccess(): void { $this->expectException(\Sabre\DAV\Exception\NotFound::class); $this->userFolder->expects($this->once()) @@ -135,13 +135,13 @@ class SystemTagsObjectTypeCollectionTest extends \Test\TestCase { } - public function testGetChildren() { + public function testGetChildren(): void { $this->expectException(\Sabre\DAV\Exception\MethodNotAllowed::class); $this->node->getChildren(); } - public function testChildExists() { + public function testChildExists(): void { $this->userFolder->expects($this->once()) ->method('getById') ->with('123') @@ -149,7 +149,7 @@ class SystemTagsObjectTypeCollectionTest extends \Test\TestCase { $this->assertTrue($this->node->childExists('123')); } - public function testChildExistsWithoutAccess() { + public function testChildExistsWithoutAccess(): void { $this->userFolder->expects($this->once()) ->method('getById') ->with('555') @@ -158,20 +158,20 @@ class SystemTagsObjectTypeCollectionTest extends \Test\TestCase { } - public function testDelete() { + public function testDelete(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->node->delete(); } - public function testSetName() { + public function testSetName(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $this->node->setName('somethingelse'); } - public function testGetName() { + public function testGetName(): void { $this->assertEquals('files', $this->node->getName()); } } diff --git a/apps/dav/tests/unit/Upload/AssemblyStreamTest.php b/apps/dav/tests/unit/Upload/AssemblyStreamTest.php index c7d2fea2871..7dd051f859f 100644 --- a/apps/dav/tests/unit/Upload/AssemblyStreamTest.php +++ b/apps/dav/tests/unit/Upload/AssemblyStreamTest.php @@ -35,7 +35,7 @@ class AssemblyStreamTest extends \Test\TestCase { /** * @dataProvider providesNodes() */ - public function testGetContents($expected, $nodes) { + public function testGetContents($expected, $nodes): void { $stream = \OCA\DAV\Upload\AssemblyStream::wrap($nodes); $content = stream_get_contents($stream); @@ -45,7 +45,7 @@ class AssemblyStreamTest extends \Test\TestCase { /** * @dataProvider providesNodes() */ - public function testGetContentsFread($expected, $nodes) { + public function testGetContentsFread($expected, $nodes): void { $stream = \OCA\DAV\Upload\AssemblyStream::wrap($nodes); $content = ''; @@ -59,7 +59,7 @@ class AssemblyStreamTest extends \Test\TestCase { /** * @dataProvider providesNodes() */ - public function testSeek($expected, $nodes) { + public function testSeek($expected, $nodes): void { $stream = \OCA\DAV\Upload\AssemblyStream::wrap($nodes); $offset = floor(strlen($expected) * 0.6); diff --git a/apps/dav/tests/unit/Upload/ChunkingPluginTest.php b/apps/dav/tests/unit/Upload/ChunkingPluginTest.php index 4c22b803fc3..358908796a4 100644 --- a/apps/dav/tests/unit/Upload/ChunkingPluginTest.php +++ b/apps/dav/tests/unit/Upload/ChunkingPluginTest.php @@ -75,7 +75,7 @@ class ChunkingPluginTest extends TestCase { $this->plugin->initialize($this->server); } - public function testBeforeMoveFutureFileSkip() { + public function testBeforeMoveFutureFileSkip(): void { $node = $this->createMock(Directory::class); $this->tree->expects($this->any()) @@ -88,7 +88,7 @@ class ChunkingPluginTest extends TestCase { $this->assertNull($this->plugin->beforeMove('source', 'target')); } - public function testBeforeMoveDestinationIsDirectory() { + public function testBeforeMoveDestinationIsDirectory(): void { $this->expectException(\Sabre\DAV\Exception\BadRequest::class); $this->expectExceptionMessage('The given destination target is a directory.'); @@ -111,7 +111,7 @@ class ChunkingPluginTest extends TestCase { $this->assertNull($this->plugin->beforeMove('source', 'target')); } - public function testBeforeMoveFutureFileSkipNonExisting() { + public function testBeforeMoveFutureFileSkipNonExisting(): void { $sourceNode = $this->createMock(FutureFile::class); $sourceNode->expects($this->once()) ->method('getSize') @@ -145,7 +145,7 @@ class ChunkingPluginTest extends TestCase { $this->assertFalse($this->plugin->beforeMove('source', 'target')); } - public function testBeforeMoveFutureFileMoveIt() { + public function testBeforeMoveFutureFileMoveIt(): void { $sourceNode = $this->createMock(FutureFile::class); $sourceNode->expects($this->once()) ->method('getSize') @@ -185,7 +185,7 @@ class ChunkingPluginTest extends TestCase { } - public function testBeforeMoveSizeIsWrong() { + public function testBeforeMoveSizeIsWrong(): void { $this->expectException(\Sabre\DAV\Exception\BadRequest::class); $this->expectExceptionMessage('Chunks on server do not sum up to 4 but to 3 bytes'); diff --git a/apps/dav/tests/unit/Upload/FutureFileTest.php b/apps/dav/tests/unit/Upload/FutureFileTest.php index 0c276167e1c..c12ec2f63cb 100644 --- a/apps/dav/tests/unit/Upload/FutureFileTest.php +++ b/apps/dav/tests/unit/Upload/FutureFileTest.php @@ -28,38 +28,38 @@ namespace OCA\DAV\Tests\unit\Upload; use OCA\DAV\Connector\Sabre\Directory; class FutureFileTest extends \Test\TestCase { - public function testGetContentType() { + public function testGetContentType(): void { $f = $this->mockFutureFile(); $this->assertEquals('application/octet-stream', $f->getContentType()); } - public function testGetETag() { + public function testGetETag(): void { $f = $this->mockFutureFile(); $this->assertEquals('1234567890', $f->getETag()); } - public function testGetName() { + public function testGetName(): void { $f = $this->mockFutureFile(); $this->assertEquals('foo.txt', $f->getName()); } - public function testGetLastModified() { + public function testGetLastModified(): void { $f = $this->mockFutureFile(); $this->assertEquals(12121212, $f->getLastModified()); } - public function testGetSize() { + public function testGetSize(): void { $f = $this->mockFutureFile(); $this->assertEquals(0, $f->getSize()); } - public function testGet() { + public function testGet(): void { $f = $this->mockFutureFile(); $stream = $f->get(); $this->assertTrue(is_resource($stream)); } - public function testDelete() { + public function testDelete(): void { $d = $this->getMockBuilder(Directory::class) ->disableOriginalConstructor() ->setMethods(['delete']) @@ -73,7 +73,7 @@ class FutureFileTest extends \Test\TestCase { } - public function testPut() { + public function testPut(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $f = $this->mockFutureFile(); @@ -81,7 +81,7 @@ class FutureFileTest extends \Test\TestCase { } - public function testSetName() { + public function testSetName(): void { $this->expectException(\Sabre\DAV\Exception\Forbidden::class); $f = $this->mockFutureFile(); diff --git a/apps/encryption/l10n/th.js b/apps/encryption/l10n/th.js index 422a6e5ef52..397768eb1af 100644 --- a/apps/encryption/l10n/th.js +++ b/apps/encryption/l10n/th.js @@ -1,52 +1,52 @@ OC.L10N.register( "encryption", { - "Missing recovery key password" : "รหัสกู้คืนรหัสผ่านหายไป", - "Please repeat the recovery key password" : "กรุณาใส่รหัสกู้คืนรหัสผ่าน อีกครั้ง", - "Repeated recovery key password does not match the provided recovery key password" : "ใส่รหัสกู้คืนรหัสผ่านไม่ตรงกัน", - "Recovery key successfully enabled" : "เปิดใช้งานรหัสการกู้คืนเรียบร้อยแล้ว", - "Could not enable recovery key. Please check your recovery key password!" : "ไม่สามารถเปิดใช้งานรหัสการกู้คืน กรุณาตรวจสอบรหัสผ่านคีย์การกู้คืนของคุณ!", - "Recovery key successfully disabled" : "ปิดใช้งานรหัสการกู้คืนเรียบร้อยแล้ว", - "Could not disable recovery key. Please check your recovery key password!" : "ไม่สามารถปิดใช้งานรหัสการกู้คืน กรุณาตรวจสอบรหัสผ่านคีย์การกู้คืนของคุณ!", - "Missing parameters" : "ค่าพารามิเตอร์หายไป", + "Missing recovery key password" : "รหัสผ่านของคีย์การกู้คืนขาดหาย", + "Please repeat the recovery key password" : "กรุณาใส่รหัสผ่านของคีย์การกู้คืนอีกครั้ง", + "Repeated recovery key password does not match the provided recovery key password" : "รหัสผ่านของรหัสกู้คืนที่ใส่ซ้ำ ไม่ตรงกับรหัสผ่านของรหัสกู้คืนที่ใส่ไปก่อนหน้านี้", + "Recovery key successfully enabled" : "เปิดใช้งานคีย์การกู้คืนเรียบร้อยแล้ว", + "Could not enable recovery key. Please check your recovery key password!" : "ไม่สามารถเปิดใช้งานรหัสกู้คืน กรุณาตรวจสอบรหัสผ่านสำหรับรหัสกู้คืนของคุณ!", + "Recovery key successfully disabled" : "ปิดใช้งานคีย์การกู้คืนเรียบร้อยแล้ว", + "Could not disable recovery key. Please check your recovery key password!" : "ไม่สามารถปิดใช้งานคีย์การกู้คืน กรุณาตรวจสอบรหัสผ่านสำหรับคีย์การกู้คืนของคุณ!", + "Missing parameters" : "ค่าพารามิเตอร์ขาดหาย", "Please provide the old recovery password" : "โปรดระบุรหัสผ่านการกู้คืนเก่า", "Please provide a new recovery password" : "โปรดระบุรหัสผ่านการกู้คืนใหม่", - "Please repeat the new recovery password" : "โปรดระบุการกู้คืนรหัสผ่านใหม่ อีกครั้ง", + "Please repeat the new recovery password" : "โปรดระบุรหัสผ่านกู้คืนใหม่อีกครั้ง", "Password successfully changed." : "เปลี่ยนรหัสผ่านเรียบร้อยแล้ว", - "Could not change the password. Maybe the old password was not correct." : "ไม่สามารถเปลี่ยนรหัสผ่าน บางทีรหัสผ่านเดิมอาจไม่ถูกต้อง", - "Recovery Key disabled" : "ปิดการใช้งานการกู้คืนรหัส", - "Recovery Key enabled" : "เปิดการใช้งานการกู้คืนรหัส", - "Could not enable the recovery key, please try again or contact your administrator" : "ไม่สามารถเปิดใช้งานการกู้คืนรหัสโปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ", - "Could not update the private key password." : "ไม่สามารถอัพเดทรหัสการเข้ารหัสส่วนตัว", - "The old password was not correct, please try again." : "รหัสผ่านเดิมไม่ถูกต้องโปรดลองอีกครั้ง", - "The current log-in password was not correct, please try again." : "รหัสผ่านเข้าสู่ระบบในปัจจุบันไม่ถูกต้องโปรดลองอีกครั้ง", - "Private key password successfully updated." : "อัพเดทรหัส Private key เรียบร้อยแล้ว", + "Could not change the password. Maybe the old password was not correct." : "ไม่สามารถเปลี่ยนรหัสผ่าน รหัสผ่านเดิมอาจไม่ถูกต้อง", + "Recovery Key disabled" : "คีย์การกู้คืนถูกปิดใช้งาน", + "Recovery Key enabled" : "เปิดการใช้งานคีย์การกู้คืน", + "Could not enable the recovery key, please try again or contact your administrator" : "ไม่สามารถเปิดใช้คีย์การกู้คืน โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ", + "Could not update the private key password." : "ไม่สามารถอัปเดตรหัสผ่านคีย์ส่วนตัว", + "The old password was not correct, please try again." : "รหัสผ่านเดิมไม่ถูกต้อง โปรดลองอีกครั้ง", + "The current log-in password was not correct, please try again." : "รหัสผ่านเข้าสู่ระบบปัจจุบันไม่ถูกต้อง โปรดลองอีกครั้ง", + "Private key password successfully updated." : "อัปเดตรหัสผ่านของคีย์ส่วนตัวเรียบร้อยแล้ว", "Bad Signature" : "ลายเซ็นไม่ดี", "Missing Signature" : "ลายเซ็นขาดหายไป", - "one-time password for server-side-encryption" : "รหัสผ่านเพียงครั้งเดียว สำหรับเข้ารหัสฝั่งเซิร์ฟเวอร์", + "one-time password for server-side-encryption" : "รหัสผ่านใช้ครั้งเดียว สำหรับการเข้ารหัสฝั่งเซิร์ฟเวอร์", "The share will expire on %s." : "การแชร์จะหมดอายุในวันที่ %s", "Cheers!" : "ไชโย!", - "Encrypt the home storage" : "การเข้ารหัสพื้นที่จัดเก็บหน้าโฮม", - "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "การเปิดใช้งานตัวเลือกนี้จะเข้ารหัสไฟล์ทั้งหมดที่เก็บไว้ในพื้นที่จัดเก็บข้อมูลหลัก มิฉะนั้นจะเข้ารหัสเฉพาะไฟล์ที่เป็นพื้นที่จัดเก็บข้อมูลภายนอก", - "Enable recovery key" : "เปิดใช้งานการกู้คืนรหัส", - "Disable recovery key" : "ปิดใช้งานรหัสการกู้คืนรหัส", - "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "รหัสการกู้คืนเป็นการเข้ารหัสลับพิเศษจะใช้ในการเข้ารหัสไฟล์ มันจะช่วยเรื่องการกู้คืนไฟล์ของผู้ใช้ที่ลืมรหัสผ่าน", - "Recovery key password" : "รหัสการกู้คืนรหัสผ่าน", - "Repeat recovery key password" : "รหัสการกู้คืนรหัสผ่าน อีกครั้ง", - "Change recovery key password:" : "เปลี่ยนรหัสการกู้คืนรหัสผ่าน", - "Old recovery key password" : "รหัสการกู้คืนรหัสผ่านเก่า", - "New recovery key password" : "รหัสการกู้คืนรหัสผ่านใหม่", - "Repeat new recovery key password" : "รหัสการกู้คืนรหัสผ่านใหม่ อีกครั้ง", + "Encrypt the home storage" : "การเข้ารหัสพื้นที่จัดเก็บโฮม", + "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "การเปิดใช้งานตัวเลือกนี้จะเข้ารหัสไฟล์ทั้งหมดที่เก็บไว้ในพื้นที่จัดเก็บข้อมูลหลัก มิฉะนั้นจะเข้ารหัสเฉพาะไฟล์บนพื้นที่จัดเก็บข้อมูลภายนอก", + "Enable recovery key" : "เปิดใช้งานคีย์การกู้คืน", + "Disable recovery key" : "ปิดใช้งานคีย์การกู้คืน", + "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "คีย์การกู้คืนเป็นคีย์เข้ารหัสเพิ่มเติมที่ใช้ในการเข้ารหัสไฟล์ ซึ่งจะทำให้สามารถกู้คืนไฟล์ของผู้ใช้ที่ลืมรหัสผ่านได้", + "Recovery key password" : "รหัสผ่านสำหรับรหัสกู้คืน", + "Repeat recovery key password" : "ใส่รหัสผ่านของคีย์การกู้คืนอีกครั้ง", + "Change recovery key password:" : "เปลี่ยนรหัสผ่านของคีย์การกู้คืน:", + "Old recovery key password" : "รหัสผ่านของคีย์การกู้คืนเก่า", + "New recovery key password" : "รหัสผ่านของคีย์การกู้คืนใหม่", + "Repeat new recovery key password" : "ใส่รหัสผ่านของคีย์การกู้คืนใหม่อีกครั้ง", "Change Password" : "เปลี่ยนรหัสผ่าน", - "Your private key password no longer matches your log-in password." : "รหัสการเข้ารหัสผ่านส่วนตัวของคุณไม่ตรงกับรหัสผ่านในการเข้าสู่ระบบของคุณ", - "Set your old private key password to your current log-in password:" : "ตั้งรหัสการเข้ารหัสผ่านส่วนตัวเก่าของคุณเพื่อเข้าสู่ระบบในปัจจุบันของคุณ:", + "Your private key password no longer matches your log-in password." : "รหัสผ่านคีย์ส่วนตัวของคุณ ไม่ตรงกับรหัสผ่านที่ใช้เข้าสู่ระบบของคุณอีกต่อไป", + "Set your old private key password to your current log-in password:" : "ตั้งรหัสผ่านคีย์ส่วนตัวเก่าของคุณเป็นรหัสผ่านเข้าสู่ระบบปัจจุบันของคุณ:", " If you don't remember your old password you can ask your administrator to recover your files." : "ถ้าคุณลืมรหัสผ่านเก่าของคุณ คุณสามารถขอให้ผู้ดูแลระบบกู้คืนไฟล์ของคุณ", - "Old log-in password" : "เข้าสู่ระบบด้วยรหัสผ่านเก่า", - "Current log-in password" : "เข้าสู่ระบบด้วยรหัสผ่านปัจจุบัน", - "Update Private Key Password" : "อัพเดทรหัสการเข้ารหัสผ่านส่วนตัว", - "Enable password recovery:" : "เปิดใช้งานการกู้คืนรหัสผ่าน:", - "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "การเปิดใช้งานตัวเลือกนี้จะช่วยให้คุณได้รับการเข้าถึงไฟล์ที่มีการเข้ารหัสของคุณในกรณีที่คุณลืมรหัสผ่าน", - "Enabled" : "เปิดการใช้งาน", - "Disabled" : "ปิดการใช้งาน" + "Old log-in password" : "รหัสผ่านเข้าสู่ระบบเดิม", + "Current log-in password" : "รหัสผ่านเข้าสู่ระบบปัจจุบัน", + "Update Private Key Password" : "อัปเดตรหัสผ่านคีย์ส่วนตัว", + "Enable password recovery:" : "เปิดใช้งานการกู้คืนด้วยรหัสผ่าน:", + "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "การเปิดใช้งานตัวเลือกนี้จะช่วยให้คุณสามารถเข้าถึงไฟล์ของคุณที่เข้ารหัสไว้ ในกรณีที่คุณลืมรหัสผ่าน", + "Enabled" : "เปิดใช้งาน", + "Disabled" : "ปิดใช้งาน" }, "nplurals=1; plural=0;"); diff --git a/apps/encryption/l10n/th.json b/apps/encryption/l10n/th.json index 016e006d142..504d465e1f6 100644 --- a/apps/encryption/l10n/th.json +++ b/apps/encryption/l10n/th.json @@ -1,50 +1,50 @@ { "translations": { - "Missing recovery key password" : "รหัสกู้คืนรหัสผ่านหายไป", - "Please repeat the recovery key password" : "กรุณาใส่รหัสกู้คืนรหัสผ่าน อีกครั้ง", - "Repeated recovery key password does not match the provided recovery key password" : "ใส่รหัสกู้คืนรหัสผ่านไม่ตรงกัน", - "Recovery key successfully enabled" : "เปิดใช้งานรหัสการกู้คืนเรียบร้อยแล้ว", - "Could not enable recovery key. Please check your recovery key password!" : "ไม่สามารถเปิดใช้งานรหัสการกู้คืน กรุณาตรวจสอบรหัสผ่านคีย์การกู้คืนของคุณ!", - "Recovery key successfully disabled" : "ปิดใช้งานรหัสการกู้คืนเรียบร้อยแล้ว", - "Could not disable recovery key. Please check your recovery key password!" : "ไม่สามารถปิดใช้งานรหัสการกู้คืน กรุณาตรวจสอบรหัสผ่านคีย์การกู้คืนของคุณ!", - "Missing parameters" : "ค่าพารามิเตอร์หายไป", + "Missing recovery key password" : "รหัสผ่านของคีย์การกู้คืนขาดหาย", + "Please repeat the recovery key password" : "กรุณาใส่รหัสผ่านของคีย์การกู้คืนอีกครั้ง", + "Repeated recovery key password does not match the provided recovery key password" : "รหัสผ่านของรหัสกู้คืนที่ใส่ซ้ำ ไม่ตรงกับรหัสผ่านของรหัสกู้คืนที่ใส่ไปก่อนหน้านี้", + "Recovery key successfully enabled" : "เปิดใช้งานคีย์การกู้คืนเรียบร้อยแล้ว", + "Could not enable recovery key. Please check your recovery key password!" : "ไม่สามารถเปิดใช้งานรหัสกู้คืน กรุณาตรวจสอบรหัสผ่านสำหรับรหัสกู้คืนของคุณ!", + "Recovery key successfully disabled" : "ปิดใช้งานคีย์การกู้คืนเรียบร้อยแล้ว", + "Could not disable recovery key. Please check your recovery key password!" : "ไม่สามารถปิดใช้งานคีย์การกู้คืน กรุณาตรวจสอบรหัสผ่านสำหรับคีย์การกู้คืนของคุณ!", + "Missing parameters" : "ค่าพารามิเตอร์ขาดหาย", "Please provide the old recovery password" : "โปรดระบุรหัสผ่านการกู้คืนเก่า", "Please provide a new recovery password" : "โปรดระบุรหัสผ่านการกู้คืนใหม่", - "Please repeat the new recovery password" : "โปรดระบุการกู้คืนรหัสผ่านใหม่ อีกครั้ง", + "Please repeat the new recovery password" : "โปรดระบุรหัสผ่านกู้คืนใหม่อีกครั้ง", "Password successfully changed." : "เปลี่ยนรหัสผ่านเรียบร้อยแล้ว", - "Could not change the password. Maybe the old password was not correct." : "ไม่สามารถเปลี่ยนรหัสผ่าน บางทีรหัสผ่านเดิมอาจไม่ถูกต้อง", - "Recovery Key disabled" : "ปิดการใช้งานการกู้คืนรหัส", - "Recovery Key enabled" : "เปิดการใช้งานการกู้คืนรหัส", - "Could not enable the recovery key, please try again or contact your administrator" : "ไม่สามารถเปิดใช้งานการกู้คืนรหัสโปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ", - "Could not update the private key password." : "ไม่สามารถอัพเดทรหัสการเข้ารหัสส่วนตัว", - "The old password was not correct, please try again." : "รหัสผ่านเดิมไม่ถูกต้องโปรดลองอีกครั้ง", - "The current log-in password was not correct, please try again." : "รหัสผ่านเข้าสู่ระบบในปัจจุบันไม่ถูกต้องโปรดลองอีกครั้ง", - "Private key password successfully updated." : "อัพเดทรหัส Private key เรียบร้อยแล้ว", + "Could not change the password. Maybe the old password was not correct." : "ไม่สามารถเปลี่ยนรหัสผ่าน รหัสผ่านเดิมอาจไม่ถูกต้อง", + "Recovery Key disabled" : "คีย์การกู้คืนถูกปิดใช้งาน", + "Recovery Key enabled" : "เปิดการใช้งานคีย์การกู้คืน", + "Could not enable the recovery key, please try again or contact your administrator" : "ไม่สามารถเปิดใช้คีย์การกู้คืน โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ", + "Could not update the private key password." : "ไม่สามารถอัปเดตรหัสผ่านคีย์ส่วนตัว", + "The old password was not correct, please try again." : "รหัสผ่านเดิมไม่ถูกต้อง โปรดลองอีกครั้ง", + "The current log-in password was not correct, please try again." : "รหัสผ่านเข้าสู่ระบบปัจจุบันไม่ถูกต้อง โปรดลองอีกครั้ง", + "Private key password successfully updated." : "อัปเดตรหัสผ่านของคีย์ส่วนตัวเรียบร้อยแล้ว", "Bad Signature" : "ลายเซ็นไม่ดี", "Missing Signature" : "ลายเซ็นขาดหายไป", - "one-time password for server-side-encryption" : "รหัสผ่านเพียงครั้งเดียว สำหรับเข้ารหัสฝั่งเซิร์ฟเวอร์", + "one-time password for server-side-encryption" : "รหัสผ่านใช้ครั้งเดียว สำหรับการเข้ารหัสฝั่งเซิร์ฟเวอร์", "The share will expire on %s." : "การแชร์จะหมดอายุในวันที่ %s", "Cheers!" : "ไชโย!", - "Encrypt the home storage" : "การเข้ารหัสพื้นที่จัดเก็บหน้าโฮม", - "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "การเปิดใช้งานตัวเลือกนี้จะเข้ารหัสไฟล์ทั้งหมดที่เก็บไว้ในพื้นที่จัดเก็บข้อมูลหลัก มิฉะนั้นจะเข้ารหัสเฉพาะไฟล์ที่เป็นพื้นที่จัดเก็บข้อมูลภายนอก", - "Enable recovery key" : "เปิดใช้งานการกู้คืนรหัส", - "Disable recovery key" : "ปิดใช้งานรหัสการกู้คืนรหัส", - "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "รหัสการกู้คืนเป็นการเข้ารหัสลับพิเศษจะใช้ในการเข้ารหัสไฟล์ มันจะช่วยเรื่องการกู้คืนไฟล์ของผู้ใช้ที่ลืมรหัสผ่าน", - "Recovery key password" : "รหัสการกู้คืนรหัสผ่าน", - "Repeat recovery key password" : "รหัสการกู้คืนรหัสผ่าน อีกครั้ง", - "Change recovery key password:" : "เปลี่ยนรหัสการกู้คืนรหัสผ่าน", - "Old recovery key password" : "รหัสการกู้คืนรหัสผ่านเก่า", - "New recovery key password" : "รหัสการกู้คืนรหัสผ่านใหม่", - "Repeat new recovery key password" : "รหัสการกู้คืนรหัสผ่านใหม่ อีกครั้ง", + "Encrypt the home storage" : "การเข้ารหัสพื้นที่จัดเก็บโฮม", + "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "การเปิดใช้งานตัวเลือกนี้จะเข้ารหัสไฟล์ทั้งหมดที่เก็บไว้ในพื้นที่จัดเก็บข้อมูลหลัก มิฉะนั้นจะเข้ารหัสเฉพาะไฟล์บนพื้นที่จัดเก็บข้อมูลภายนอก", + "Enable recovery key" : "เปิดใช้งานคีย์การกู้คืน", + "Disable recovery key" : "ปิดใช้งานคีย์การกู้คืน", + "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "คีย์การกู้คืนเป็นคีย์เข้ารหัสเพิ่มเติมที่ใช้ในการเข้ารหัสไฟล์ ซึ่งจะทำให้สามารถกู้คืนไฟล์ของผู้ใช้ที่ลืมรหัสผ่านได้", + "Recovery key password" : "รหัสผ่านสำหรับรหัสกู้คืน", + "Repeat recovery key password" : "ใส่รหัสผ่านของคีย์การกู้คืนอีกครั้ง", + "Change recovery key password:" : "เปลี่ยนรหัสผ่านของคีย์การกู้คืน:", + "Old recovery key password" : "รหัสผ่านของคีย์การกู้คืนเก่า", + "New recovery key password" : "รหัสผ่านของคีย์การกู้คืนใหม่", + "Repeat new recovery key password" : "ใส่รหัสผ่านของคีย์การกู้คืนใหม่อีกครั้ง", "Change Password" : "เปลี่ยนรหัสผ่าน", - "Your private key password no longer matches your log-in password." : "รหัสการเข้ารหัสผ่านส่วนตัวของคุณไม่ตรงกับรหัสผ่านในการเข้าสู่ระบบของคุณ", - "Set your old private key password to your current log-in password:" : "ตั้งรหัสการเข้ารหัสผ่านส่วนตัวเก่าของคุณเพื่อเข้าสู่ระบบในปัจจุบันของคุณ:", + "Your private key password no longer matches your log-in password." : "รหัสผ่านคีย์ส่วนตัวของคุณ ไม่ตรงกับรหัสผ่านที่ใช้เข้าสู่ระบบของคุณอีกต่อไป", + "Set your old private key password to your current log-in password:" : "ตั้งรหัสผ่านคีย์ส่วนตัวเก่าของคุณเป็นรหัสผ่านเข้าสู่ระบบปัจจุบันของคุณ:", " If you don't remember your old password you can ask your administrator to recover your files." : "ถ้าคุณลืมรหัสผ่านเก่าของคุณ คุณสามารถขอให้ผู้ดูแลระบบกู้คืนไฟล์ของคุณ", - "Old log-in password" : "เข้าสู่ระบบด้วยรหัสผ่านเก่า", - "Current log-in password" : "เข้าสู่ระบบด้วยรหัสผ่านปัจจุบัน", - "Update Private Key Password" : "อัพเดทรหัสการเข้ารหัสผ่านส่วนตัว", - "Enable password recovery:" : "เปิดใช้งานการกู้คืนรหัสผ่าน:", - "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "การเปิดใช้งานตัวเลือกนี้จะช่วยให้คุณได้รับการเข้าถึงไฟล์ที่มีการเข้ารหัสของคุณในกรณีที่คุณลืมรหัสผ่าน", - "Enabled" : "เปิดการใช้งาน", - "Disabled" : "ปิดการใช้งาน" + "Old log-in password" : "รหัสผ่านเข้าสู่ระบบเดิม", + "Current log-in password" : "รหัสผ่านเข้าสู่ระบบปัจจุบัน", + "Update Private Key Password" : "อัปเดตรหัสผ่านคีย์ส่วนตัว", + "Enable password recovery:" : "เปิดใช้งานการกู้คืนด้วยรหัสผ่าน:", + "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "การเปิดใช้งานตัวเลือกนี้จะช่วยให้คุณสามารถเข้าถึงไฟล์ของคุณที่เข้ารหัสไว้ ในกรณีที่คุณลืมรหัสผ่าน", + "Enabled" : "เปิดใช้งาน", + "Disabled" : "ปิดใช้งาน" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/federatedfilesharing/src/components/PersonalSettings.vue b/apps/federatedfilesharing/src/components/PersonalSettings.vue index 330236344ef..745c7af9c8d 100644 --- a/apps/federatedfilesharing/src/components/PersonalSettings.vue +++ b/apps/federatedfilesharing/src/components/PersonalSettings.vue @@ -87,7 +87,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. </template> <script> -import { showError } from '@nextcloud/dialogs' +import { showError, showSuccess } from '@nextcloud/dialogs' import { loadState } from '@nextcloud/initial-state' import NcSettingsSection from '@nextcloud/vue/dist/Components/NcSettingsSection' import NcButton from '@nextcloud/vue/dist/Components/NcButton' @@ -162,6 +162,7 @@ export default { } await navigator.clipboard.writeText(this.cloudId) this.isCopied = true + showSuccess(t('federatedfilesharing', 'Copied!')) this.$refs.clipboard.$el.focus() }, goTo(url) { diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js index be2829cf410..3d559248f71 100644 --- a/apps/files/l10n/de.js +++ b/apps/files/l10n/de.js @@ -14,7 +14,7 @@ OC.L10N.register( "Could not create folder \"{dir}\"" : "Der Ordner konnte nicht erstellt werden \"{dir}\"", "This will stop your current uploads." : "Hiermit werden die aktuellen Uploads angehalten.", "Upload cancelled." : "Hochladen abgebrochen.", - "Processing files …" : "Dateien werden verarbeitet…", + "Processing files …" : "Dateien werden verarbeitet …", "…" : "…", "Unable to upload {filename} as it is a directory or has 0 bytes" : "Die Datei {filename} kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nicht genügend freier Speicherplatz, du möchtest{size1} hochladen, es sind jedoch nur noch {size2} verfügbar.", @@ -22,7 +22,7 @@ OC.L10N.register( "Not enough free space" : "Nicht genügend freier Speicherplatz", "An unknown error has occurred" : "Es ist ein unbekannter Fehler aufgetreten", "File could not be uploaded" : "Datei konnte nicht hochgeladen werden.", - "Uploading …" : "Lade hoch…", + "Uploading …" : "Lade hoch …", "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} von {totalSize} ({bitrate})", "Uploading that item is not supported" : "Hochladen von Daten dieser Art wird nicht unterstützt.", "Target folder does not exist any more" : "Zielordner existiert nicht mehr", @@ -33,6 +33,7 @@ OC.L10N.register( "Move" : "Verschieben", "Copy" : "Kopieren", "Choose target folder" : "Zielordner wählen", + "Edit locally" : "Lokal bearbeiten", "Open" : "Öffnen", "Delete file" : "Datei löschen", "Delete folder" : "Ordner löschen", @@ -57,6 +58,7 @@ OC.L10N.register( "Could not copy \"{file}\"" : "\"{file}\" konnte nicht kopiert werden", "Copied {origin} inside {destination}" : "{origin} wurde nach {destination} kopiert", "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} und {nbfiles} weitere Dateien wurden nach {destination} kopiert", + "Failed to redirect to client" : "Umleitung zum Client fehlgeschlagen", "{newName} already exists" : "{newName} existiert bereits", "Could not rename \"{fileName}\", it does not exist any more" : "Die Datei \"{fileName}\" konnte nicht umbenannt werden, da sie nicht mehr existiert", "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Der Name „{targetName}“ wird bereits im Ordner „{dir}“ benutzt. Bitte einen anderen Namen verwenden.", @@ -96,6 +98,7 @@ OC.L10N.register( "Your storage is almost full ({usedSpacePercent}%)." : "Dein Speicher ist beinahe voll ({usedSpacePercent}%).", "_matches \"{filter}\"_::_match \"{filter}\"_" : ["stimmt mit \"{filter}\" überein","stimmen mit \"{filter}\" überein"], "View in folder" : "In Ordner anzeigen", + "Direct link was copied (only works for users who have access to this file/folder)" : "Direktlink wurde kopiert (funktioniert nur für Benutzer, die Zugriff auf diese Datei/Ordner haben)", "Path" : "Pfad", "_%n byte_::_%n bytes_" : ["%n Byte","%n Bytes"], "Favorited" : "Favorisiert", diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json index c208a478946..d8e7a36dfcd 100644 --- a/apps/files/l10n/de.json +++ b/apps/files/l10n/de.json @@ -12,7 +12,7 @@ "Could not create folder \"{dir}\"" : "Der Ordner konnte nicht erstellt werden \"{dir}\"", "This will stop your current uploads." : "Hiermit werden die aktuellen Uploads angehalten.", "Upload cancelled." : "Hochladen abgebrochen.", - "Processing files …" : "Dateien werden verarbeitet…", + "Processing files …" : "Dateien werden verarbeitet …", "…" : "…", "Unable to upload {filename} as it is a directory or has 0 bytes" : "Die Datei {filename} kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nicht genügend freier Speicherplatz, du möchtest{size1} hochladen, es sind jedoch nur noch {size2} verfügbar.", @@ -20,7 +20,7 @@ "Not enough free space" : "Nicht genügend freier Speicherplatz", "An unknown error has occurred" : "Es ist ein unbekannter Fehler aufgetreten", "File could not be uploaded" : "Datei konnte nicht hochgeladen werden.", - "Uploading …" : "Lade hoch…", + "Uploading …" : "Lade hoch …", "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} von {totalSize} ({bitrate})", "Uploading that item is not supported" : "Hochladen von Daten dieser Art wird nicht unterstützt.", "Target folder does not exist any more" : "Zielordner existiert nicht mehr", @@ -31,6 +31,7 @@ "Move" : "Verschieben", "Copy" : "Kopieren", "Choose target folder" : "Zielordner wählen", + "Edit locally" : "Lokal bearbeiten", "Open" : "Öffnen", "Delete file" : "Datei löschen", "Delete folder" : "Ordner löschen", @@ -55,6 +56,7 @@ "Could not copy \"{file}\"" : "\"{file}\" konnte nicht kopiert werden", "Copied {origin} inside {destination}" : "{origin} wurde nach {destination} kopiert", "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} und {nbfiles} weitere Dateien wurden nach {destination} kopiert", + "Failed to redirect to client" : "Umleitung zum Client fehlgeschlagen", "{newName} already exists" : "{newName} existiert bereits", "Could not rename \"{fileName}\", it does not exist any more" : "Die Datei \"{fileName}\" konnte nicht umbenannt werden, da sie nicht mehr existiert", "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Der Name „{targetName}“ wird bereits im Ordner „{dir}“ benutzt. Bitte einen anderen Namen verwenden.", @@ -94,6 +96,7 @@ "Your storage is almost full ({usedSpacePercent}%)." : "Dein Speicher ist beinahe voll ({usedSpacePercent}%).", "_matches \"{filter}\"_::_match \"{filter}\"_" : ["stimmt mit \"{filter}\" überein","stimmen mit \"{filter}\" überein"], "View in folder" : "In Ordner anzeigen", + "Direct link was copied (only works for users who have access to this file/folder)" : "Direktlink wurde kopiert (funktioniert nur für Benutzer, die Zugriff auf diese Datei/Ordner haben)", "Path" : "Pfad", "_%n byte_::_%n bytes_" : ["%n Byte","%n Bytes"], "Favorited" : "Favorisiert", diff --git a/apps/files/l10n/eu.js b/apps/files/l10n/eu.js index fc20e1ccdd7..ecfc926dfac 100644 --- a/apps/files/l10n/eu.js +++ b/apps/files/l10n/eu.js @@ -7,7 +7,7 @@ OC.L10N.register( "Delete" : "Ezabatu", "Tags" : "Etiketak", "Show list view" : "Erakutsi zerrenda ikuspegia", - "Show grid view" : "Erakutsi sareta-ikuspegia", + "Show grid view" : "Erakutsi sareta ikuspegia", "Home" : "Etxea", "Close" : "Itxi", "Favorites" : "Gogokoak", @@ -50,13 +50,13 @@ OC.L10N.register( "Unable to determine date" : "Ezin izan da data zehaztu", "This operation is forbidden" : "Eragiketa hau debekatuta dago", "This directory is unavailable, please check the logs or contact the administrator" : "Direktorio hau ez dago erabilgarri, egiaztatu egunkariak edo jarri administratzailearekin harremanetan", - "Storage is temporarily not available" : "Biltegia ez dago erabilgarri momentu honetan", + "Storage is temporarily not available" : "Biltegia ez dago erabilgarri aldi baterako", "Could not move \"{file}\", target exists" : "Ezin izan da \"{file}\" lekuz aldatu, helburua existitzen da jadanik", "Could not move \"{file}\"" : "Ezin izan da \"{file}\" lekuz aldatu", - "copy" : "kopia", + "copy" : "kopiatu", "Could not copy \"{file}\", target exists" : "Ezin izan da \"{file}\" kopiatu; helburua existitzen da", "Could not copy \"{file}\"" : "Ezin izan da \"{file}\" kopiatu", - "Copied {origin} inside {destination}" : "{origin} {destination} barruan kopiatu da", + "Copied {origin} inside {destination}" : "{origin} kopiatu da {destination} barruan", "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} eta beste {nbfiles} fitxategi {destination} barruan kopiatu dira", "Failed to redirect to client" : "Bezerora birbideratzeak huts egin du", "{newName} already exists" : "{newName} existitzen da dagoeneko", @@ -89,9 +89,9 @@ OC.L10N.register( "\"/\" is not allowed inside a file name." : "\"/\" ez da onartzen fitxategi-izenen barnean.", "\"{name}\" is not an allowed filetype" : "\"{name}\" fitxategi-mota ez da onartzen", "Storage of {owner} is full, files cannot be updated or synced anymore!" : "{owner} erabiltzailearen biltegia beteta dago, fitxategiak ezin dira jada eguneratu edo sinkronizatu!", - "Group folder \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "\"{MountPoint}\" taldeko karpeta beteta dago, fitxategiak ezin dira eguneratu edo sinkronizatu gehiago!", - "External storage \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "\"{MountPoint}\" kanpoko biltegia beteta dago, fitxategiak ezin dira eguneratu edo sinkronizatu gehiago!", - "Your storage is full, files cannot be updated or synced anymore!" : "Biltegiratzea beteta dago, fitxategiak ezin dira eguneratu edo sinkronizatu gehiago!", + "Group folder \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "\"{MountPoint}\" taldeko karpeta beteta dago, fitxategiak ezin dira eguneratu edo sinkronizatu!", + "External storage \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "\"{MountPoint}\" kanpoko biltegia beteta dago, fitxategiak ezin dira eguneratu edo sinkronizatu!", + "Your storage is full, files cannot be updated or synced anymore!" : "Zure biltegiratzea beteta dago, fitxategiak ezin dira eguneratu edo sinkronizatu!", "Storage of {owner} is almost full ({usedSpacePercent}%)." : "{owner}-(r)en biltegia betetzear dago ({usedSpacePercent}%).", "Group folder \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "\"{mountPoint}\" talde karpeta betetzear dago ({usedSpacePercent}%).", "External storage \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "\"{mountPoint}\" kanpoko biltegia betetzear dago ({usedSpacePercent}%).", @@ -156,16 +156,20 @@ OC.L10N.register( "Upload (max. %s)" : "Kargatu (%s gehienez)", "Accept" : "Onartu", "Reject" : "Ukatu", - "Incoming ownership transfer from {user}" : "{user}-ren jabetza-transferentzia", + "Incoming ownership transfer from {user}" : "{user}(r)en jabetza-transferentzia", "Do you want to accept {path}?\n\nNote: The transfer process after accepting may take up to 1 hour." : "{path} onartu nahi duzu?\n\nOharra: onarpenaren ondoren transferentzia prozesuak ordu 1 iraun dezake.", "Ownership transfer failed" : "Jabetzaren transferentziak huts egin du", - "Your ownership transfer of {path} to {user} failed." : "{path}-aren jabetza {user} erabiltzaileari transferitzeak huts egin du.", - "The ownership transfer of {path} from {user} failed." : "{path}-ren jabetza {user} erabiltzailetik transferitzeak huts egin du.", + "Your ownership transfer of {path} to {user} failed." : "{path}(r)en jabetza {user} erabiltzaileari transferitzeak huts egin du.", + "The ownership transfer of {path} from {user} failed." : "{path}(r)ren jabetza {user} erabiltzailetik transferitzeak huts egin du.", "Ownership transfer done" : "Jabetzaren transferentzia egina", - "Your ownership transfer of {path} to {user} has completed." : "{path}-ren jabetza {user} erabiltzaileari transferitzea osatu da.", - "The ownership transfer of {path} from {user} has completed." : "{path}-ren jabetza {user} erabiltzailetik transferitzea osatu da.", - "in %s" : "%s-an", + "Your ownership transfer of {path} to {user} has completed." : "{path}(r)en jabetza {user} erabiltzaileari transferitzea osatu da.", + "The ownership transfer of {path} from {user} has completed." : "{path}(r)en jabetza {user} erabiltzailetik transferitzea osatu da.", + "in %s" : "%s(e)n", "File Management" : "Fitxategi-kudeaketa", + "Storage informations" : "Biltegiaren informazioak", + "{usedQuotaByte} used" : "{usedQuotaByte} erabilita", + "{relative}% used" : "%{relative} erabilita", + "Could not refresh storage stats" : "Ezin izan da biltegiratze maila freskatu", "Transfer ownership of a file or folder" : "Transferitu fitxategiaren edo karpetaren jabetza", "Choose file or folder to transfer" : "Aukeratu fitxategia edo karpeta transferitzeko", "Change" : "Aldatu", @@ -177,7 +181,7 @@ OC.L10N.register( "Invalid path selected" : "Bide baliogabea hautatuta", "Unknown error" : "Errore ezezaguna", "Ownership transfer request sent" : "Jabetza transferentzia eskaera bidalita", - "Cannot transfer ownership of a file or folder you do not own" : "Ezin da zurea ez den fitxategi edo karpeta baten jabetza transferitu ", + "Cannot transfer ownership of a file or folder you do not own" : "Ezin da zurea ez den fitxategi edo karpeta baten jabetza transferitu", "Open the files app settings" : "Ireki Fitxategiak aplikazioaren ezarpenak", "Files settings" : "FItxategien ezarpenak", "Show hidden files" : "Erakutsi ezkutuko fitxategiak", @@ -188,9 +192,9 @@ OC.L10N.register( "Use this address to access your Files via WebDAV" : "Erabili helbide hau WebDAV bidez zure fitxategietara sartzeko", "Clipboard is not available" : "Arbela ez dago erabilgarri", "Webdav URL copied to clipboard" : "Webdav URLa arbelean kopiatu da", - "Unable to change the favourite state of the file" : "Ezinezkoa fitxategiaren gogoko egoera aldatzea", + "Unable to change the favourite state of the file" : "Ezin da fitxategiaren gogoko egoera aldatu", "Error while loading the file data" : "Errorea fitxategiaren datuak kargatzerakoan", - "Pick a template for {name}" : "Hautatu {name}-ren txantiloia", + "Pick a template for {name}" : "Hautatu {name}(r)entzako txantiloia", "Cancel" : "Utzi", "Create" : "Sortu", "Create a new file with the selected template" : "Sortu fitxategi berria hautatutako txantiloiarekin", @@ -198,7 +202,7 @@ OC.L10N.register( "Blank" : "Hutsik", "Unable to create new file from template" : "Ezin da fitxategi berria sortu txantiloitik", "Set up templates folder" : "Konfiguratu txantiloien karpeta", - "Templates" : "Txantiloia", + "Templates" : "Txantiloiak", "Unable to initialize the templates directory" : "Ezin da txantiloien direktorioa hasieratu", "Toggle %1$s sublist" : "Txandakatu %1$sazpizerrenda", "Toggle grid view" : "Txandakatu sareta ikuspegia", @@ -214,7 +218,7 @@ OC.L10N.register( "Shares" : "Partekatzeak", "Shared with others" : "Besteekin partekatuta", "Shared with you" : "Zurekin partekatuta", - "Shared by link" : "Partekatua esteka bidez", + "Shared by link" : "Esteka bidez partekatuta", "Deleted shares" : "Ezabatutako partekatzeak", "Pending shares" : "Zain dauden partekatzeak", "Text file" : "Testu-fitxategia", diff --git a/apps/files/l10n/eu.json b/apps/files/l10n/eu.json index a5e6c8b47ee..b74d50d0d8d 100644 --- a/apps/files/l10n/eu.json +++ b/apps/files/l10n/eu.json @@ -5,7 +5,7 @@ "Delete" : "Ezabatu", "Tags" : "Etiketak", "Show list view" : "Erakutsi zerrenda ikuspegia", - "Show grid view" : "Erakutsi sareta-ikuspegia", + "Show grid view" : "Erakutsi sareta ikuspegia", "Home" : "Etxea", "Close" : "Itxi", "Favorites" : "Gogokoak", @@ -48,13 +48,13 @@ "Unable to determine date" : "Ezin izan da data zehaztu", "This operation is forbidden" : "Eragiketa hau debekatuta dago", "This directory is unavailable, please check the logs or contact the administrator" : "Direktorio hau ez dago erabilgarri, egiaztatu egunkariak edo jarri administratzailearekin harremanetan", - "Storage is temporarily not available" : "Biltegia ez dago erabilgarri momentu honetan", + "Storage is temporarily not available" : "Biltegia ez dago erabilgarri aldi baterako", "Could not move \"{file}\", target exists" : "Ezin izan da \"{file}\" lekuz aldatu, helburua existitzen da jadanik", "Could not move \"{file}\"" : "Ezin izan da \"{file}\" lekuz aldatu", - "copy" : "kopia", + "copy" : "kopiatu", "Could not copy \"{file}\", target exists" : "Ezin izan da \"{file}\" kopiatu; helburua existitzen da", "Could not copy \"{file}\"" : "Ezin izan da \"{file}\" kopiatu", - "Copied {origin} inside {destination}" : "{origin} {destination} barruan kopiatu da", + "Copied {origin} inside {destination}" : "{origin} kopiatu da {destination} barruan", "Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} eta beste {nbfiles} fitxategi {destination} barruan kopiatu dira", "Failed to redirect to client" : "Bezerora birbideratzeak huts egin du", "{newName} already exists" : "{newName} existitzen da dagoeneko", @@ -87,9 +87,9 @@ "\"/\" is not allowed inside a file name." : "\"/\" ez da onartzen fitxategi-izenen barnean.", "\"{name}\" is not an allowed filetype" : "\"{name}\" fitxategi-mota ez da onartzen", "Storage of {owner} is full, files cannot be updated or synced anymore!" : "{owner} erabiltzailearen biltegia beteta dago, fitxategiak ezin dira jada eguneratu edo sinkronizatu!", - "Group folder \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "\"{MountPoint}\" taldeko karpeta beteta dago, fitxategiak ezin dira eguneratu edo sinkronizatu gehiago!", - "External storage \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "\"{MountPoint}\" kanpoko biltegia beteta dago, fitxategiak ezin dira eguneratu edo sinkronizatu gehiago!", - "Your storage is full, files cannot be updated or synced anymore!" : "Biltegiratzea beteta dago, fitxategiak ezin dira eguneratu edo sinkronizatu gehiago!", + "Group folder \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "\"{MountPoint}\" taldeko karpeta beteta dago, fitxategiak ezin dira eguneratu edo sinkronizatu!", + "External storage \"{mountPoint}\" is full, files cannot be updated or synced anymore!" : "\"{MountPoint}\" kanpoko biltegia beteta dago, fitxategiak ezin dira eguneratu edo sinkronizatu!", + "Your storage is full, files cannot be updated or synced anymore!" : "Zure biltegiratzea beteta dago, fitxategiak ezin dira eguneratu edo sinkronizatu!", "Storage of {owner} is almost full ({usedSpacePercent}%)." : "{owner}-(r)en biltegia betetzear dago ({usedSpacePercent}%).", "Group folder \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "\"{mountPoint}\" talde karpeta betetzear dago ({usedSpacePercent}%).", "External storage \"{mountPoint}\" is almost full ({usedSpacePercent}%)." : "\"{mountPoint}\" kanpoko biltegia betetzear dago ({usedSpacePercent}%).", @@ -154,16 +154,20 @@ "Upload (max. %s)" : "Kargatu (%s gehienez)", "Accept" : "Onartu", "Reject" : "Ukatu", - "Incoming ownership transfer from {user}" : "{user}-ren jabetza-transferentzia", + "Incoming ownership transfer from {user}" : "{user}(r)en jabetza-transferentzia", "Do you want to accept {path}?\n\nNote: The transfer process after accepting may take up to 1 hour." : "{path} onartu nahi duzu?\n\nOharra: onarpenaren ondoren transferentzia prozesuak ordu 1 iraun dezake.", "Ownership transfer failed" : "Jabetzaren transferentziak huts egin du", - "Your ownership transfer of {path} to {user} failed." : "{path}-aren jabetza {user} erabiltzaileari transferitzeak huts egin du.", - "The ownership transfer of {path} from {user} failed." : "{path}-ren jabetza {user} erabiltzailetik transferitzeak huts egin du.", + "Your ownership transfer of {path} to {user} failed." : "{path}(r)en jabetza {user} erabiltzaileari transferitzeak huts egin du.", + "The ownership transfer of {path} from {user} failed." : "{path}(r)ren jabetza {user} erabiltzailetik transferitzeak huts egin du.", "Ownership transfer done" : "Jabetzaren transferentzia egina", - "Your ownership transfer of {path} to {user} has completed." : "{path}-ren jabetza {user} erabiltzaileari transferitzea osatu da.", - "The ownership transfer of {path} from {user} has completed." : "{path}-ren jabetza {user} erabiltzailetik transferitzea osatu da.", - "in %s" : "%s-an", + "Your ownership transfer of {path} to {user} has completed." : "{path}(r)en jabetza {user} erabiltzaileari transferitzea osatu da.", + "The ownership transfer of {path} from {user} has completed." : "{path}(r)en jabetza {user} erabiltzailetik transferitzea osatu da.", + "in %s" : "%s(e)n", "File Management" : "Fitxategi-kudeaketa", + "Storage informations" : "Biltegiaren informazioak", + "{usedQuotaByte} used" : "{usedQuotaByte} erabilita", + "{relative}% used" : "%{relative} erabilita", + "Could not refresh storage stats" : "Ezin izan da biltegiratze maila freskatu", "Transfer ownership of a file or folder" : "Transferitu fitxategiaren edo karpetaren jabetza", "Choose file or folder to transfer" : "Aukeratu fitxategia edo karpeta transferitzeko", "Change" : "Aldatu", @@ -175,7 +179,7 @@ "Invalid path selected" : "Bide baliogabea hautatuta", "Unknown error" : "Errore ezezaguna", "Ownership transfer request sent" : "Jabetza transferentzia eskaera bidalita", - "Cannot transfer ownership of a file or folder you do not own" : "Ezin da zurea ez den fitxategi edo karpeta baten jabetza transferitu ", + "Cannot transfer ownership of a file or folder you do not own" : "Ezin da zurea ez den fitxategi edo karpeta baten jabetza transferitu", "Open the files app settings" : "Ireki Fitxategiak aplikazioaren ezarpenak", "Files settings" : "FItxategien ezarpenak", "Show hidden files" : "Erakutsi ezkutuko fitxategiak", @@ -186,9 +190,9 @@ "Use this address to access your Files via WebDAV" : "Erabili helbide hau WebDAV bidez zure fitxategietara sartzeko", "Clipboard is not available" : "Arbela ez dago erabilgarri", "Webdav URL copied to clipboard" : "Webdav URLa arbelean kopiatu da", - "Unable to change the favourite state of the file" : "Ezinezkoa fitxategiaren gogoko egoera aldatzea", + "Unable to change the favourite state of the file" : "Ezin da fitxategiaren gogoko egoera aldatu", "Error while loading the file data" : "Errorea fitxategiaren datuak kargatzerakoan", - "Pick a template for {name}" : "Hautatu {name}-ren txantiloia", + "Pick a template for {name}" : "Hautatu {name}(r)entzako txantiloia", "Cancel" : "Utzi", "Create" : "Sortu", "Create a new file with the selected template" : "Sortu fitxategi berria hautatutako txantiloiarekin", @@ -196,7 +200,7 @@ "Blank" : "Hutsik", "Unable to create new file from template" : "Ezin da fitxategi berria sortu txantiloitik", "Set up templates folder" : "Konfiguratu txantiloien karpeta", - "Templates" : "Txantiloia", + "Templates" : "Txantiloiak", "Unable to initialize the templates directory" : "Ezin da txantiloien direktorioa hasieratu", "Toggle %1$s sublist" : "Txandakatu %1$sazpizerrenda", "Toggle grid view" : "Txandakatu sareta ikuspegia", @@ -212,7 +216,7 @@ "Shares" : "Partekatzeak", "Shared with others" : "Besteekin partekatuta", "Shared with you" : "Zurekin partekatuta", - "Shared by link" : "Partekatua esteka bidez", + "Shared by link" : "Esteka bidez partekatuta", "Deleted shares" : "Ezabatutako partekatzeak", "Pending shares" : "Zain dauden partekatzeak", "Text file" : "Testu-fitxategia", diff --git a/apps/files/l10n/hu.js b/apps/files/l10n/hu.js index 18010fd656b..4348b7292b1 100644 --- a/apps/files/l10n/hu.js +++ b/apps/files/l10n/hu.js @@ -166,6 +166,10 @@ OC.L10N.register( "The ownership transfer of {path} from {user} has completed." : "A(z) {path} tulajdonjogának átruházása {user} részéről sikeres.", "in %s" : "itt: %s", "File Management" : "Fájlkezelés", + "Storage informations" : "Tárhely információk", + "{usedQuotaByte} used" : "{usedQuotaByte} felhasználva", + "{relative}% used" : "{relative}% felhasználva", + "Could not refresh storage stats" : "Nem sikerült frissíteni a tárolói statisztikákat", "Transfer ownership of a file or folder" : "Fájl vagy mappa tulajdonjogának átruházása", "Choose file or folder to transfer" : "Válasszon egy fájlt vagy mappát az átruházáshoz", "Change" : "Módosítás", @@ -178,6 +182,7 @@ OC.L10N.register( "Unknown error" : "Ismeretlen hiba", "Ownership transfer request sent" : "Tulajdonjog átruházási kérés elküldve", "Cannot transfer ownership of a file or folder you do not own" : "Nem ruházható át olyan fájl vagy mappa tulajdonjoga, amely nem Öné", + "Open the files app settings" : "Nyissa meg a fájlalkalmazás beállításait", "Files settings" : "Fájlok beállításai", "Show hidden files" : "Rejtett fájlok megjelenítése", "Crop image previews" : "Kép előnézetek vágása", diff --git a/apps/files/l10n/hu.json b/apps/files/l10n/hu.json index de6f337396f..29f4c1a07bf 100644 --- a/apps/files/l10n/hu.json +++ b/apps/files/l10n/hu.json @@ -164,6 +164,10 @@ "The ownership transfer of {path} from {user} has completed." : "A(z) {path} tulajdonjogának átruházása {user} részéről sikeres.", "in %s" : "itt: %s", "File Management" : "Fájlkezelés", + "Storage informations" : "Tárhely információk", + "{usedQuotaByte} used" : "{usedQuotaByte} felhasználva", + "{relative}% used" : "{relative}% felhasználva", + "Could not refresh storage stats" : "Nem sikerült frissíteni a tárolói statisztikákat", "Transfer ownership of a file or folder" : "Fájl vagy mappa tulajdonjogának átruházása", "Choose file or folder to transfer" : "Válasszon egy fájlt vagy mappát az átruházáshoz", "Change" : "Módosítás", @@ -176,6 +180,7 @@ "Unknown error" : "Ismeretlen hiba", "Ownership transfer request sent" : "Tulajdonjog átruházási kérés elküldve", "Cannot transfer ownership of a file or folder you do not own" : "Nem ruházható át olyan fájl vagy mappa tulajdonjoga, amely nem Öné", + "Open the files app settings" : "Nyissa meg a fájlalkalmazás beállításait", "Files settings" : "Fájlok beállításai", "Show hidden files" : "Rejtett fájlok megjelenítése", "Crop image previews" : "Kép előnézetek vágása", diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js index 0c4ad2c64b0..c0900016eac 100644 --- a/apps/files/l10n/nl.js +++ b/apps/files/l10n/nl.js @@ -33,6 +33,7 @@ OC.L10N.register( "Move" : "Verplaatsen", "Copy" : "Kopiëren", "Choose target folder" : "Kies doelmap…", + "Edit locally" : "Lokaal bewerken", "Open" : "Openen", "Delete file" : "Verwijderen bestand", "Delete folder" : "Verwijderen map", diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json index 1e8fdf3ba1c..2f5258b3353 100644 --- a/apps/files/l10n/nl.json +++ b/apps/files/l10n/nl.json @@ -31,6 +31,7 @@ "Move" : "Verplaatsen", "Copy" : "Kopiëren", "Choose target folder" : "Kies doelmap…", + "Edit locally" : "Lokaal bewerken", "Open" : "Openen", "Delete file" : "Verwijderen bestand", "Delete folder" : "Verwijderen map", diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js index 3979b995742..97c922b1f62 100644 --- a/apps/files/l10n/pl.js +++ b/apps/files/l10n/pl.js @@ -166,6 +166,10 @@ OC.L10N.register( "The ownership transfer of {path} from {user} has completed." : "Przeniesienie własności {path} z {user} zostało zakończone.", "in %s" : "w %s", "File Management" : "Zarządzanie plikami", + "Storage informations" : "Informacje o przechowywaniu", + "{usedQuotaByte} used" : "Wykorzystano {usedQuotaByte}", + "{relative}% used" : "Wykorzystano {relative}%", + "Could not refresh storage stats" : "Nie można odświeżyć statystyk przechowywania", "Transfer ownership of a file or folder" : "Przenieś własność pliku lub katalogu", "Choose file or folder to transfer" : "Wybierz plik lub katalog do przeniesienia", "Change" : "Zmień", diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json index 1e03b2efcee..84575e09617 100644 --- a/apps/files/l10n/pl.json +++ b/apps/files/l10n/pl.json @@ -164,6 +164,10 @@ "The ownership transfer of {path} from {user} has completed." : "Przeniesienie własności {path} z {user} zostało zakończone.", "in %s" : "w %s", "File Management" : "Zarządzanie plikami", + "Storage informations" : "Informacje o przechowywaniu", + "{usedQuotaByte} used" : "Wykorzystano {usedQuotaByte}", + "{relative}% used" : "Wykorzystano {relative}%", + "Could not refresh storage stats" : "Nie można odświeżyć statystyk przechowywania", "Transfer ownership of a file or folder" : "Przenieś własność pliku lub katalogu", "Choose file or folder to transfer" : "Wybierz plik lub katalog do przeniesienia", "Change" : "Zmień", diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js index f1a3acb998b..c684af3dfc8 100644 --- a/apps/files/l10n/pt_BR.js +++ b/apps/files/l10n/pt_BR.js @@ -166,6 +166,10 @@ OC.L10N.register( "The ownership transfer of {path} from {user} has completed." : "A transferência da propriedade de {path} de {user} foi concluída.", "in %s" : "em %s", "File Management" : "Gerenciamento de Arquivos", + "Storage informations" : "Informações de armazenamento", + "{usedQuotaByte} used" : "{usedQuotaByte} usado", + "{relative}% used" : "{relative}% usado", + "Could not refresh storage stats" : "Não foi possível atualizar as estatísticas de armazenamento", "Transfer ownership of a file or folder" : "Transferir a propriedade de um arquivo ou pasta", "Choose file or folder to transfer" : "Escolha o arquivo ou pasta a transferir", "Change" : "Mudar", diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json index 18a9ba1ae12..cc2c61bffcc 100644 --- a/apps/files/l10n/pt_BR.json +++ b/apps/files/l10n/pt_BR.json @@ -164,6 +164,10 @@ "The ownership transfer of {path} from {user} has completed." : "A transferência da propriedade de {path} de {user} foi concluída.", "in %s" : "em %s", "File Management" : "Gerenciamento de Arquivos", + "Storage informations" : "Informações de armazenamento", + "{usedQuotaByte} used" : "{usedQuotaByte} usado", + "{relative}% used" : "{relative}% usado", + "Could not refresh storage stats" : "Não foi possível atualizar as estatísticas de armazenamento", "Transfer ownership of a file or folder" : "Transferir a propriedade de um arquivo ou pasta", "Choose file or folder to transfer" : "Escolha o arquivo ou pasta a transferir", "Change" : "Mudar", diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js index c268466cc51..95721c60ae5 100644 --- a/apps/files/l10n/sv.js +++ b/apps/files/l10n/sv.js @@ -166,6 +166,10 @@ OC.L10N.register( "The ownership transfer of {path} from {user} has completed." : "Ägaröverföringen av {path} från {user} är klar.", "in %s" : "om %s", "File Management" : "Filhantering", + "Storage informations" : "Lagringsinformation", + "{usedQuotaByte} used" : "{usedQuotaByte} använt", + "{relative}% used" : "{relative}% använt", + "Could not refresh storage stats" : "Det gick inte att uppdatera lagringsstatistiken", "Transfer ownership of a file or folder" : "Överför ägarskap av en fil eller mapp", "Choose file or folder to transfer" : "Välj fil eller mapp att överföra", "Change" : "Ändra", diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json index 0b2b31a276b..8bc83328837 100644 --- a/apps/files/l10n/sv.json +++ b/apps/files/l10n/sv.json @@ -164,6 +164,10 @@ "The ownership transfer of {path} from {user} has completed." : "Ägaröverföringen av {path} från {user} är klar.", "in %s" : "om %s", "File Management" : "Filhantering", + "Storage informations" : "Lagringsinformation", + "{usedQuotaByte} used" : "{usedQuotaByte} använt", + "{relative}% used" : "{relative}% använt", + "Could not refresh storage stats" : "Det gick inte att uppdatera lagringsstatistiken", "Transfer ownership of a file or folder" : "Överför ägarskap av en fil eller mapp", "Choose file or folder to transfer" : "Välj fil eller mapp att överföra", "Change" : "Ändra", diff --git a/apps/files_external/l10n/hu.js b/apps/files_external/l10n/hu.js index e73c2f5871d..14e961b6684 100644 --- a/apps/files_external/l10n/hu.js +++ b/apps/files_external/l10n/hu.js @@ -10,6 +10,7 @@ OC.L10N.register( "Error configuring OAuth2" : "OAuth2 beállítási hiba", "Generate keys" : "Kulcsok előállítása", "Error generating key pair" : "Hiba történt a kulcspár előállítása során", + "Type to select user or group." : "Gépeljen a felhasználó vagy a csoport kiválasztásához.", "(Group)" : "(Csoport)", "Compatibility with Mac NFD encoding (slow)" : "Kompatibilitás a Mac NFD kódolással (lassú)", "Enable encryption" : "Titkosítás engedélyezése", @@ -89,6 +90,7 @@ OC.L10N.register( "Hostname" : "Gépnév", "Port" : "Port", "Region" : "Régió", + "Storage Class" : "Tároló osztály", "Enable SSL" : "SSL engedélyezése", "Enable Path Style" : "Útvonal stílus engedélyezés", "Legacy (v2) authentication" : "Örökölt (v2) hitelesítés", diff --git a/apps/files_external/l10n/hu.json b/apps/files_external/l10n/hu.json index cc6b5aebe19..863873fb8f3 100644 --- a/apps/files_external/l10n/hu.json +++ b/apps/files_external/l10n/hu.json @@ -8,6 +8,7 @@ "Error configuring OAuth2" : "OAuth2 beállítási hiba", "Generate keys" : "Kulcsok előállítása", "Error generating key pair" : "Hiba történt a kulcspár előállítása során", + "Type to select user or group." : "Gépeljen a felhasználó vagy a csoport kiválasztásához.", "(Group)" : "(Csoport)", "Compatibility with Mac NFD encoding (slow)" : "Kompatibilitás a Mac NFD kódolással (lassú)", "Enable encryption" : "Titkosítás engedélyezése", @@ -87,6 +88,7 @@ "Hostname" : "Gépnév", "Port" : "Port", "Region" : "Régió", + "Storage Class" : "Tároló osztály", "Enable SSL" : "SSL engedélyezése", "Enable Path Style" : "Útvonal stílus engedélyezés", "Legacy (v2) authentication" : "Örökölt (v2) hitelesítés", diff --git a/apps/files_external/l10n/pl.js b/apps/files_external/l10n/pl.js index ff98201d970..96cdf575514 100644 --- a/apps/files_external/l10n/pl.js +++ b/apps/files_external/l10n/pl.js @@ -10,6 +10,7 @@ OC.L10N.register( "Error configuring OAuth2" : "Błąd konfiguracji OAuth2", "Generate keys" : "Wygeneruj klucze", "Error generating key pair" : "Błąd podczas generowania pary kluczy", + "Type to select user or group." : "Wpisz, aby wybrać użytkownika lub grupę.", "(Group)" : "(Grupa)", "Compatibility with Mac NFD encoding (slow)" : "Zgodność z kodowaniem Mac NFD (powolny)", "Enable encryption" : "Włącz szyfrowanie", @@ -89,6 +90,7 @@ OC.L10N.register( "Hostname" : "Nazwa serwera", "Port" : "Port", "Region" : "Region", + "Storage Class" : "Klasa przechowywania", "Enable SSL" : "Włącz SSL", "Enable Path Style" : "Włącz styl ścieżki", "Legacy (v2) authentication" : "Uwierzytelnianie starszej wersji (v2)", diff --git a/apps/files_external/l10n/pl.json b/apps/files_external/l10n/pl.json index 4610e7fa98e..44c66da0e0d 100644 --- a/apps/files_external/l10n/pl.json +++ b/apps/files_external/l10n/pl.json @@ -8,6 +8,7 @@ "Error configuring OAuth2" : "Błąd konfiguracji OAuth2", "Generate keys" : "Wygeneruj klucze", "Error generating key pair" : "Błąd podczas generowania pary kluczy", + "Type to select user or group." : "Wpisz, aby wybrać użytkownika lub grupę.", "(Group)" : "(Grupa)", "Compatibility with Mac NFD encoding (slow)" : "Zgodność z kodowaniem Mac NFD (powolny)", "Enable encryption" : "Włącz szyfrowanie", @@ -87,6 +88,7 @@ "Hostname" : "Nazwa serwera", "Port" : "Port", "Region" : "Region", + "Storage Class" : "Klasa przechowywania", "Enable SSL" : "Włącz SSL", "Enable Path Style" : "Włącz styl ścieżki", "Legacy (v2) authentication" : "Uwierzytelnianie starszej wersji (v2)", diff --git a/apps/files_external/l10n/sv.js b/apps/files_external/l10n/sv.js index 82806c4a6f4..68b79ebdafc 100644 --- a/apps/files_external/l10n/sv.js +++ b/apps/files_external/l10n/sv.js @@ -10,6 +10,7 @@ OC.L10N.register( "Error configuring OAuth2" : "Misslyckades konfigurera OAuth2", "Generate keys" : "Generera nycklar", "Error generating key pair" : "Fel vid generering av nyckelpar", + "Type to select user or group." : "Skriv för att välja användare eller grupp.", "(Group)" : "(Grupp)", "Compatibility with Mac NFD encoding (slow)" : "Kompatibilitet med Mac NFD kodning (slö)", "Enable encryption" : "Aktivera kryptering", @@ -21,6 +22,8 @@ OC.L10N.register( "Read only" : "Skrivskyddad", "Disconnect" : "Koppla från", "Admin defined" : "Admin definerad", + "Automatic status checking is disabled due to the large number of configured storages, click to check status" : "Automatisk statuskontroll är inaktiverad på grund av det stora antalet konfigurerade lagringar, klicka för att kontrollera status", + "Are you sure you want to disconnect this external storage? It will make the storage unavailable in Nextcloud and will lead to a deletion of these files and folders on any sync client that is currently connected but will not delete any files and folders on the external storage itself." : "Är du säker på att du vill koppla bort den här externa lagringen? Det kommer att göra lagringen otillgänglig i Nextcloud och kommer att leda till en radering av dessa filer och mappar på alla synkroniseringsklienter som för närvarande är anslutna men kommer inte att radera några filer och mappar på den externa lagringen i sig.", "Delete storage?" : "Ta bort lagring?", "Saved" : "Sparad", "Saving …" : "Sparar ...", @@ -39,6 +42,7 @@ OC.L10N.register( "Credentials saved" : "Sparade uppgifter", "Credentials saving failed" : "Misslyckades med att spara uppgifterna", "Credentials required" : "Uppgifter krävs", + "Forbidden to manage local mounts" : "Förbjudet att hantera lokala monteringar", "Storage with ID \"%d\" not found" : "Lagringsutrymme med ID \"%d\" hittades inte", "Invalid backend or authentication mechanism class" : "Ogiltig backend eller autentiseringsmekanism-klass", "Invalid mount point" : "Ogiltig monteringspunkt", @@ -84,6 +88,7 @@ OC.L10N.register( "Hostname" : "Värdnamn", "Port" : "Port", "Region" : "Län", + "Storage Class" : "Lagringsklass", "Enable SSL" : "Aktivera SSL", "Enable Path Style" : "Aktivera Path Style", "Legacy (v2) authentication" : "Legacy (v2) autentisering", @@ -129,6 +134,7 @@ OC.L10N.register( "Available for" : "Tillgänglig för", "Click to recheck the configuration" : "Klicka för att kontrollera inställningarna igen", "Add storage" : "Lägg till lagring", + "All users" : "Alla användare", "Advanced settings" : "Avancerade inställningar", "Allow users to mount external storage" : "Tillåt användare att montera extern lagring", "Global credentials can be used to authenticate with multiple external storages that have the same credentials." : "Globala användaruppgifter kan användas för att autentisera med flera externa lagrings-instanser som använder samma användaruppgifter.", diff --git a/apps/files_external/l10n/sv.json b/apps/files_external/l10n/sv.json index c0cd8f7d786..6e8eb532da7 100644 --- a/apps/files_external/l10n/sv.json +++ b/apps/files_external/l10n/sv.json @@ -8,6 +8,7 @@ "Error configuring OAuth2" : "Misslyckades konfigurera OAuth2", "Generate keys" : "Generera nycklar", "Error generating key pair" : "Fel vid generering av nyckelpar", + "Type to select user or group." : "Skriv för att välja användare eller grupp.", "(Group)" : "(Grupp)", "Compatibility with Mac NFD encoding (slow)" : "Kompatibilitet med Mac NFD kodning (slö)", "Enable encryption" : "Aktivera kryptering", @@ -19,6 +20,8 @@ "Read only" : "Skrivskyddad", "Disconnect" : "Koppla från", "Admin defined" : "Admin definerad", + "Automatic status checking is disabled due to the large number of configured storages, click to check status" : "Automatisk statuskontroll är inaktiverad på grund av det stora antalet konfigurerade lagringar, klicka för att kontrollera status", + "Are you sure you want to disconnect this external storage? It will make the storage unavailable in Nextcloud and will lead to a deletion of these files and folders on any sync client that is currently connected but will not delete any files and folders on the external storage itself." : "Är du säker på att du vill koppla bort den här externa lagringen? Det kommer att göra lagringen otillgänglig i Nextcloud och kommer att leda till en radering av dessa filer och mappar på alla synkroniseringsklienter som för närvarande är anslutna men kommer inte att radera några filer och mappar på den externa lagringen i sig.", "Delete storage?" : "Ta bort lagring?", "Saved" : "Sparad", "Saving …" : "Sparar ...", @@ -37,6 +40,7 @@ "Credentials saved" : "Sparade uppgifter", "Credentials saving failed" : "Misslyckades med att spara uppgifterna", "Credentials required" : "Uppgifter krävs", + "Forbidden to manage local mounts" : "Förbjudet att hantera lokala monteringar", "Storage with ID \"%d\" not found" : "Lagringsutrymme med ID \"%d\" hittades inte", "Invalid backend or authentication mechanism class" : "Ogiltig backend eller autentiseringsmekanism-klass", "Invalid mount point" : "Ogiltig monteringspunkt", @@ -82,6 +86,7 @@ "Hostname" : "Värdnamn", "Port" : "Port", "Region" : "Län", + "Storage Class" : "Lagringsklass", "Enable SSL" : "Aktivera SSL", "Enable Path Style" : "Aktivera Path Style", "Legacy (v2) authentication" : "Legacy (v2) autentisering", @@ -127,6 +132,7 @@ "Available for" : "Tillgänglig för", "Click to recheck the configuration" : "Klicka för att kontrollera inställningarna igen", "Add storage" : "Lägg till lagring", + "All users" : "Alla användare", "Advanced settings" : "Avancerade inställningar", "Allow users to mount external storage" : "Tillåt användare att montera extern lagring", "Global credentials can be used to authenticate with multiple external storages that have the same credentials." : "Globala användaruppgifter kan användas för att autentisera med flera externa lagrings-instanser som använder samma användaruppgifter.", diff --git a/apps/files_external/l10n/th.js b/apps/files_external/l10n/th.js index 7809357275f..801d9e09822 100644 --- a/apps/files_external/l10n/th.js +++ b/apps/files_external/l10n/th.js @@ -1,44 +1,44 @@ OC.L10N.register( "files_external", { - "External storage" : "จัดเก็บข้อมูลภายนอก", + "External storage" : "พื้นที่จัดเก็บข้อมูลภายนอก", "Personal" : "ส่วนตัว", "System" : "ระบบ", - "Grant access" : "อนุญาตให้เข้าถึงได้", + "Grant access" : "อนุญาตให้เข้าถึง", "Error configuring OAuth1" : "ข้อผิดพลาดในการกำหนดค่า OAuth1", - "Please provide a valid app key and secret." : "โปรดระบุคีย์และรหัสลับของแอพฯ ให้ถูกต้อง", + "Please provide a valid app key and secret." : "โปรดระบุคีย์และรหัสลับของแอปให้ถูกต้อง", "Error configuring OAuth2" : "ข้อผิดพลาดในการกำหนดค่า OAuth2", "Generate keys" : "สร้างคีย์", - "Error generating key pair" : "ข้อผิดพลาดในการสร้างคีย์แบบเป็นคู่", + "Error generating key pair" : "ข้อผิดพลาดในการสร้างคู่ของคีย์", "Enable encryption" : "เปิดใช้งานการเข้ารหัส", "Enable previews" : "เปิดใช้งานการแสดงตัวอย่าง", "Enable sharing" : "เปิดให้สามารถแชร์ได้", "Check for changes" : "ตรวจสอบการเปลี่ยนแปลง", "Never" : "ไม่เคย", - "Once every direct access" : "เมื่อทุกคนเข้าถึงโดยตรง", - "Admin defined" : "ถูกกำหนดโดยผู้ดูแลระบบ", + "Once every direct access" : "ทุก ๆ การเข้าถึงโดยตรง", + "Admin defined" : "กำหนดโดยผู้ดูแลระบบ", "Saved" : "บันทึกแล้ว", "Saving …" : "กำลังบันทึก …", "Save" : "บันทึก", - "Empty response from the server" : "ไม่มีการตอบสนองจากเซิร์ฟเวอร์", + "Empty response from the server" : "การตอบสนองจากเซิร์ฟเวอร์ว่างเปล่า", "Couldn't get the list of external mount points: {type}" : "ไม่สามารถรับรายชื่อของจุดเชื่อมต่อภายนอก: {type}", - "There was an error with message: " : "มีข้อความแสดงข้อผิดพลาด", - "External mount error" : "การติดจากตั้งภายนอกเกิดข้อผิดพลาด", - "external-storage" : "ที่จัดเก็บข้อมูลภายนอก", - "Please enter the credentials for the {mount} mount" : "กรุณากรอกข้อมูลประจำตัวสำหรับ {mount} ", - "Username" : "ชื่อผู้ใช้งาน", + "There was an error with message: " : "มีข้อผิดพลาดพร้อมข้อความ:", + "External mount error" : "ข้อผิดพลาดจุดเชื่อมต่อภายนอก", + "external-storage" : "external-storage", + "Please enter the credentials for the {mount} mount" : "กรุณากรอกข้อมูลประจำตัวสำหรับจุดเชื่อมต่อ {mount} ", + "Username" : "ชื่อผู้ใช้", "Password" : "รหัสผ่าน", - "Credentials saved" : "ข้อมูลประจำตัวได้ถูกบันทึก", + "Credentials saved" : "บันทึกข้อมูลประจำตัวแล้ว", "Credentials saving failed" : "บันทึกข้อมูลประจำตัวล้มเหลว", "Credentials required" : "จำเป็นต้องระบุข้อมูลประจำตัว", - "Invalid backend or authentication mechanism class" : "แบ็กเอนด์ไม่ถูกต้องหรือระดับการรับรองความถูกต้องไม่เพียงพอ", - "Invalid mount point" : "จุดเชื่อมต่อที่ไม่ถูกต้อง", - "Objectstore forbidden" : "เก็บวัตถุต้องห้าม", - "Invalid storage backend \"%s\"" : "การจัดเก็บข้อมูลแบ็กเอนด์ไม่ถูกต้อง \"%s\"", + "Invalid backend or authentication mechanism class" : "แบ็กเอนด์หรือกลไกการรับรองความถูกต้องไม่ถูกต้อง", + "Invalid mount point" : "จุดเชื่อมต่อไม่ถูกต้อง", + "Objectstore forbidden" : "ที่เก็บวัตถุไม่ได้รับอนุญาต", + "Invalid storage backend \"%s\"" : "แบ็กเอนด์การจัดเก็บข้อมูล \"%s\" ไม่ถูกต้อง", "Not permitted to use backend \"%s\"" : "ไม่อนุญาตให้ใช้แบ็กเอนด์ \"%s\"", - "Not permitted to use authentication mechanism \"%s\"" : "ไม่อนุญาตให้ตรวจสอบการรับรองความถูกต้อง \"%s\"", - "Unsatisfied backend parameters" : "พารามิเตอร์แบ็กเอนด์ไม่ได้รับอนุญาต", - "Unsatisfied authentication mechanism parameters" : "การรับรองความถูกต้องไม่เพียงพอ", + "Not permitted to use authentication mechanism \"%s\"" : "ไม่อนุญาตให้ใช้กลไกตรวจสอบการรับรองความถูกต้อง \"%s\"", + "Unsatisfied backend parameters" : "พารามิเตอร์แบ็กเอนด์ไม่เพียงพอ", + "Unsatisfied authentication mechanism parameters" : "พารามิเตอร์การรับรองความถูกต้องไม่เพียงพอ", "Insufficient data: %s" : "ข้อมูลไม่เพียงพอ: %s", "%s" : "%s", "Access key" : "คีย์การเข้าถึง", @@ -46,19 +46,19 @@ OC.L10N.register( "Builtin" : "ในตัว", "None" : "ไม่มี", "OAuth1" : "OAuth1", - "App key" : "App key", - "App secret" : "App secret", + "App key" : "คีย์แอป", + "App secret" : "ข้อมูลลับแอป", "OAuth2" : "OAuth2", - "Client ID" : "Client ID", - "Client secret" : "Client secret", + "Client ID" : "รหัสไคลเอ็นต์", + "Client secret" : "ข้อมูลลับไคลเอ็นต์", "Tenant name" : "ชื่อผู้เช่า", "Identity endpoint URL" : "ตัวตนของ URL ปลายทาง", "Domain" : "โดเมน", "Rackspace" : "Rackspace", "API key" : "รหัส API", "Username and password" : "ชื่อผู้ใช้และรหัสผ่าน", - "Log-in credentials, save in session" : "ข้อมูลประจำตัวสำหรับเข้าสู่ระบบ, บันทึกลงในช่วงเวลาเข้าใช้งาน", - "RSA public key" : "RSA คีย์สาธารณะ", + "Log-in credentials, save in session" : "ข้อมูลประจำตัวสำหรับเข้าสู่ระบบ, บันทึกในเซสชัน", + "RSA public key" : "คีย์สาธารณะ RSA", "Public key" : "คีย์สาธารณะ", "Amazon S3" : "Amazon S3", "Bucket" : "Bucket", @@ -75,26 +75,26 @@ OC.L10N.register( "Host" : "โฮสต์", "Secure ftps://" : "โหมดปลอดภัย ftps://", "Local" : "ต้นทาง", - "Location" : "ตำแหน่งที่อยู่", + "Location" : "ตำแหน่ง", "SFTP" : "SFTP", "Root" : "รูท", - "SFTP with secret key login" : "SFTP กับคีย์ลับสำหรับเข้าสู่ระบบ", + "SFTP with secret key login" : "SFTP เข้าสู่ระบบด้วยคีย์ลับ", "Share" : "แชร์", "Show hidden files" : "แสดงไฟล์ที่ซ่อนอยู่", "Username as share" : "ชื่อผู้ใช้ที่แชร์", - "OpenStack Object Storage" : "OpenStack Object Storage", + "OpenStack Object Storage" : "ที่เก็บวัตถุ OpenStack", "Service name" : "ชื่อบริการ", - "Request timeout (seconds)" : "หมดเวลาการร้องขอ (วินาที)", + "Request timeout (seconds)" : "หมดเวลาคำขอ (วินาที)", "Name" : "ชื่อ", "Storage type" : "ชนิดการจัดเก็บข้อมูล", "Scope" : "ขอบเขต", "Open documentation" : "เปิดเอกสาร", "Folder name" : "ชื่อโฟลเดอร์", - "Authentication" : "รับรองความถูกต้อง", + "Authentication" : "การรับรองความถูกต้อง", "Configuration" : "การกำหนดค่า", - "Available for" : "สามารถใช้ได้สำหรับ", + "Available for" : "ใช้ได้สำหรับ", "Add storage" : "เพิ่มพื้นที่จัดเก็บข้อมูล", - "Advanced settings" : "ตั้งค่าขั้นสูง", + "Advanced settings" : "การตั้งค่าขั้นสูง", "Allow users to mount external storage" : "อนุญาตให้ผู้ใช้ติดตั้งการจัดเก็บข้อมูลภายนอก", "All users. Type to select user or group." : "ผู้ใช้ทุกคน พิมพ์เพื่อเลือกผู้ใช้หรือกลุ่ม" }, diff --git a/apps/files_external/l10n/th.json b/apps/files_external/l10n/th.json index ac15d0906de..b0d371ceb2a 100644 --- a/apps/files_external/l10n/th.json +++ b/apps/files_external/l10n/th.json @@ -1,42 +1,42 @@ { "translations": { - "External storage" : "จัดเก็บข้อมูลภายนอก", + "External storage" : "พื้นที่จัดเก็บข้อมูลภายนอก", "Personal" : "ส่วนตัว", "System" : "ระบบ", - "Grant access" : "อนุญาตให้เข้าถึงได้", + "Grant access" : "อนุญาตให้เข้าถึง", "Error configuring OAuth1" : "ข้อผิดพลาดในการกำหนดค่า OAuth1", - "Please provide a valid app key and secret." : "โปรดระบุคีย์และรหัสลับของแอพฯ ให้ถูกต้อง", + "Please provide a valid app key and secret." : "โปรดระบุคีย์และรหัสลับของแอปให้ถูกต้อง", "Error configuring OAuth2" : "ข้อผิดพลาดในการกำหนดค่า OAuth2", "Generate keys" : "สร้างคีย์", - "Error generating key pair" : "ข้อผิดพลาดในการสร้างคีย์แบบเป็นคู่", + "Error generating key pair" : "ข้อผิดพลาดในการสร้างคู่ของคีย์", "Enable encryption" : "เปิดใช้งานการเข้ารหัส", "Enable previews" : "เปิดใช้งานการแสดงตัวอย่าง", "Enable sharing" : "เปิดให้สามารถแชร์ได้", "Check for changes" : "ตรวจสอบการเปลี่ยนแปลง", "Never" : "ไม่เคย", - "Once every direct access" : "เมื่อทุกคนเข้าถึงโดยตรง", - "Admin defined" : "ถูกกำหนดโดยผู้ดูแลระบบ", + "Once every direct access" : "ทุก ๆ การเข้าถึงโดยตรง", + "Admin defined" : "กำหนดโดยผู้ดูแลระบบ", "Saved" : "บันทึกแล้ว", "Saving …" : "กำลังบันทึก …", "Save" : "บันทึก", - "Empty response from the server" : "ไม่มีการตอบสนองจากเซิร์ฟเวอร์", + "Empty response from the server" : "การตอบสนองจากเซิร์ฟเวอร์ว่างเปล่า", "Couldn't get the list of external mount points: {type}" : "ไม่สามารถรับรายชื่อของจุดเชื่อมต่อภายนอก: {type}", - "There was an error with message: " : "มีข้อความแสดงข้อผิดพลาด", - "External mount error" : "การติดจากตั้งภายนอกเกิดข้อผิดพลาด", - "external-storage" : "ที่จัดเก็บข้อมูลภายนอก", - "Please enter the credentials for the {mount} mount" : "กรุณากรอกข้อมูลประจำตัวสำหรับ {mount} ", - "Username" : "ชื่อผู้ใช้งาน", + "There was an error with message: " : "มีข้อผิดพลาดพร้อมข้อความ:", + "External mount error" : "ข้อผิดพลาดจุดเชื่อมต่อภายนอก", + "external-storage" : "external-storage", + "Please enter the credentials for the {mount} mount" : "กรุณากรอกข้อมูลประจำตัวสำหรับจุดเชื่อมต่อ {mount} ", + "Username" : "ชื่อผู้ใช้", "Password" : "รหัสผ่าน", - "Credentials saved" : "ข้อมูลประจำตัวได้ถูกบันทึก", + "Credentials saved" : "บันทึกข้อมูลประจำตัวแล้ว", "Credentials saving failed" : "บันทึกข้อมูลประจำตัวล้มเหลว", "Credentials required" : "จำเป็นต้องระบุข้อมูลประจำตัว", - "Invalid backend or authentication mechanism class" : "แบ็กเอนด์ไม่ถูกต้องหรือระดับการรับรองความถูกต้องไม่เพียงพอ", - "Invalid mount point" : "จุดเชื่อมต่อที่ไม่ถูกต้อง", - "Objectstore forbidden" : "เก็บวัตถุต้องห้าม", - "Invalid storage backend \"%s\"" : "การจัดเก็บข้อมูลแบ็กเอนด์ไม่ถูกต้อง \"%s\"", + "Invalid backend or authentication mechanism class" : "แบ็กเอนด์หรือกลไกการรับรองความถูกต้องไม่ถูกต้อง", + "Invalid mount point" : "จุดเชื่อมต่อไม่ถูกต้อง", + "Objectstore forbidden" : "ที่เก็บวัตถุไม่ได้รับอนุญาต", + "Invalid storage backend \"%s\"" : "แบ็กเอนด์การจัดเก็บข้อมูล \"%s\" ไม่ถูกต้อง", "Not permitted to use backend \"%s\"" : "ไม่อนุญาตให้ใช้แบ็กเอนด์ \"%s\"", - "Not permitted to use authentication mechanism \"%s\"" : "ไม่อนุญาตให้ตรวจสอบการรับรองความถูกต้อง \"%s\"", - "Unsatisfied backend parameters" : "พารามิเตอร์แบ็กเอนด์ไม่ได้รับอนุญาต", - "Unsatisfied authentication mechanism parameters" : "การรับรองความถูกต้องไม่เพียงพอ", + "Not permitted to use authentication mechanism \"%s\"" : "ไม่อนุญาตให้ใช้กลไกตรวจสอบการรับรองความถูกต้อง \"%s\"", + "Unsatisfied backend parameters" : "พารามิเตอร์แบ็กเอนด์ไม่เพียงพอ", + "Unsatisfied authentication mechanism parameters" : "พารามิเตอร์การรับรองความถูกต้องไม่เพียงพอ", "Insufficient data: %s" : "ข้อมูลไม่เพียงพอ: %s", "%s" : "%s", "Access key" : "คีย์การเข้าถึง", @@ -44,19 +44,19 @@ "Builtin" : "ในตัว", "None" : "ไม่มี", "OAuth1" : "OAuth1", - "App key" : "App key", - "App secret" : "App secret", + "App key" : "คีย์แอป", + "App secret" : "ข้อมูลลับแอป", "OAuth2" : "OAuth2", - "Client ID" : "Client ID", - "Client secret" : "Client secret", + "Client ID" : "รหัสไคลเอ็นต์", + "Client secret" : "ข้อมูลลับไคลเอ็นต์", "Tenant name" : "ชื่อผู้เช่า", "Identity endpoint URL" : "ตัวตนของ URL ปลายทาง", "Domain" : "โดเมน", "Rackspace" : "Rackspace", "API key" : "รหัส API", "Username and password" : "ชื่อผู้ใช้และรหัสผ่าน", - "Log-in credentials, save in session" : "ข้อมูลประจำตัวสำหรับเข้าสู่ระบบ, บันทึกลงในช่วงเวลาเข้าใช้งาน", - "RSA public key" : "RSA คีย์สาธารณะ", + "Log-in credentials, save in session" : "ข้อมูลประจำตัวสำหรับเข้าสู่ระบบ, บันทึกในเซสชัน", + "RSA public key" : "คีย์สาธารณะ RSA", "Public key" : "คีย์สาธารณะ", "Amazon S3" : "Amazon S3", "Bucket" : "Bucket", @@ -73,26 +73,26 @@ "Host" : "โฮสต์", "Secure ftps://" : "โหมดปลอดภัย ftps://", "Local" : "ต้นทาง", - "Location" : "ตำแหน่งที่อยู่", + "Location" : "ตำแหน่ง", "SFTP" : "SFTP", "Root" : "รูท", - "SFTP with secret key login" : "SFTP กับคีย์ลับสำหรับเข้าสู่ระบบ", + "SFTP with secret key login" : "SFTP เข้าสู่ระบบด้วยคีย์ลับ", "Share" : "แชร์", "Show hidden files" : "แสดงไฟล์ที่ซ่อนอยู่", "Username as share" : "ชื่อผู้ใช้ที่แชร์", - "OpenStack Object Storage" : "OpenStack Object Storage", + "OpenStack Object Storage" : "ที่เก็บวัตถุ OpenStack", "Service name" : "ชื่อบริการ", - "Request timeout (seconds)" : "หมดเวลาการร้องขอ (วินาที)", + "Request timeout (seconds)" : "หมดเวลาคำขอ (วินาที)", "Name" : "ชื่อ", "Storage type" : "ชนิดการจัดเก็บข้อมูล", "Scope" : "ขอบเขต", "Open documentation" : "เปิดเอกสาร", "Folder name" : "ชื่อโฟลเดอร์", - "Authentication" : "รับรองความถูกต้อง", + "Authentication" : "การรับรองความถูกต้อง", "Configuration" : "การกำหนดค่า", - "Available for" : "สามารถใช้ได้สำหรับ", + "Available for" : "ใช้ได้สำหรับ", "Add storage" : "เพิ่มพื้นที่จัดเก็บข้อมูล", - "Advanced settings" : "ตั้งค่าขั้นสูง", + "Advanced settings" : "การตั้งค่าขั้นสูง", "Allow users to mount external storage" : "อนุญาตให้ผู้ใช้ติดตั้งการจัดเก็บข้อมูลภายนอก", "All users. Type to select user or group." : "ผู้ใช้ทุกคน พิมพ์เพื่อเลือกผู้ใช้หรือกลุ่ม" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/files_sharing/l10n/bg.js b/apps/files_sharing/l10n/bg.js index 88c9a89d6f3..ae97519e579 100644 --- a/apps/files_sharing/l10n/bg.js +++ b/apps/files_sharing/l10n/bg.js @@ -268,9 +268,6 @@ OC.L10N.register( "One or more of your shares will expire tomorrow" : "Едно или повече от вашите спделяния изтичат утре", "Copy to clipboard" : "Копирай", "Sorry, this link doesn’t seem to work anymore." : "Връзката вече не е активна.", - "Toggle grid view" : "Превключи решетъчния изглед", - "Share label saved" : "Запазен е етикет за споделяне", - "Share password saved" : "Запазена е парола за споделяне", - "Share note saved" : "Запазена е бележка за споделяне" + "Toggle grid view" : "Превключи решетъчния изглед" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/bg.json b/apps/files_sharing/l10n/bg.json index 9a9fe4d33e5..7aad06c6268 100644 --- a/apps/files_sharing/l10n/bg.json +++ b/apps/files_sharing/l10n/bg.json @@ -266,9 +266,6 @@ "One or more of your shares will expire tomorrow" : "Едно или повече от вашите спделяния изтичат утре", "Copy to clipboard" : "Копирай", "Sorry, this link doesn’t seem to work anymore." : "Връзката вече не е активна.", - "Toggle grid view" : "Превключи решетъчния изглед", - "Share label saved" : "Запазен е етикет за споделяне", - "Share password saved" : "Запазена е парола за споделяне", - "Share note saved" : "Запазена е бележка за споделяне" + "Toggle grid view" : "Превключи решетъчния изглед" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/ca.js b/apps/files_sharing/l10n/ca.js index d663ebb4381..0a4f5a87729 100644 --- a/apps/files_sharing/l10n/ca.js +++ b/apps/files_sharing/l10n/ca.js @@ -261,9 +261,6 @@ OC.L10N.register( "One or more of your shares will expire tomorrow" : "Una o més de les teves compartició caducaran demà", "Copy to clipboard" : "Copia-ho al porta-papers", "Sorry, this link doesn’t seem to work anymore." : "Aquest enllaç sembla que no funciona.", - "Toggle grid view" : "Commuta la vista de la graella", - "Share label saved" : "S'ha desat l'etiqueta de compartició", - "Share password saved" : "S’ha desat la contrasenya de compartició", - "Share note saved" : "S'ha desat la nota de compartició" + "Toggle grid view" : "Commuta la vista de la graella" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/ca.json b/apps/files_sharing/l10n/ca.json index b337502bcd2..da5aaea4bc1 100644 --- a/apps/files_sharing/l10n/ca.json +++ b/apps/files_sharing/l10n/ca.json @@ -259,9 +259,6 @@ "One or more of your shares will expire tomorrow" : "Una o més de les teves compartició caducaran demà", "Copy to clipboard" : "Copia-ho al porta-papers", "Sorry, this link doesn’t seem to work anymore." : "Aquest enllaç sembla que no funciona.", - "Toggle grid view" : "Commuta la vista de la graella", - "Share label saved" : "S'ha desat l'etiqueta de compartició", - "Share password saved" : "S’ha desat la contrasenya de compartició", - "Share note saved" : "S'ha desat la nota de compartició" + "Toggle grid view" : "Commuta la vista de la graella" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/cs.js b/apps/files_sharing/l10n/cs.js index c39c9376644..b3b39c3af48 100644 --- a/apps/files_sharing/l10n/cs.js +++ b/apps/files_sharing/l10n/cs.js @@ -269,8 +269,6 @@ OC.L10N.register( "Copy to clipboard" : "Zkopírovat do schránky", "Sorry, this link doesn’t seem to work anymore." : "Je nám líto, ale tento odkaz už není funkční.", "Toggle grid view" : "Vyp/zap. zobrazení v mřížce", - "Share label saved" : "Štítek sdílení uložen", - "Share password saved" : "Heslo ke sdílení uloženo", - "Share note saved" : "Poznámka ke sdílení uložena" + "Error generating password from password_policy" : "Chyba při vytváření hesla ze zásady pro hesla" }, "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_sharing/l10n/cs.json b/apps/files_sharing/l10n/cs.json index 8280cf3fc5d..a8d248de31c 100644 --- a/apps/files_sharing/l10n/cs.json +++ b/apps/files_sharing/l10n/cs.json @@ -267,8 +267,6 @@ "Copy to clipboard" : "Zkopírovat do schránky", "Sorry, this link doesn’t seem to work anymore." : "Je nám líto, ale tento odkaz už není funkční.", "Toggle grid view" : "Vyp/zap. zobrazení v mřížce", - "Share label saved" : "Štítek sdílení uložen", - "Share password saved" : "Heslo ke sdílení uloženo", - "Share note saved" : "Poznámka ke sdílení uložena" + "Error generating password from password_policy" : "Chyba při vytváření hesla ze zásady pro hesla" },"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_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js index e243829b039..598dd66ab60 100644 --- a/apps/files_sharing/l10n/de.js +++ b/apps/files_sharing/l10n/de.js @@ -26,7 +26,7 @@ OC.L10N.register( "Something happened. Unable to accept the share." : "Die Freigabe konnte nicht akzeptiert werden.", "Reject share" : "Freigabe ablehnen", "Something happened. Unable to reject the share." : "Die Freigabe konnte nicht abgelehnt werden.", - "Waiting…" : "Warte…", + "Waiting…" : "Warte …", "error" : "Fehler", "finished" : "Abgeschlossen", "This will stop your current uploads." : "Hiermit werden die aktuellen Uploads angehalten.", @@ -140,7 +140,7 @@ OC.L10N.register( "You received {share} to group {group} as a share by {user}" : "Du hast {share} zur Gruppe {group} als Freigabe von {user} empfangen", "Accept" : "Akzeptieren", "Reject" : "Ablehnen", - "This application enables users to share files within Nextcloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within Nextcloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of Nextcloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices.\nTurning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the Nextcloud Documentation." : "Diese App ermöglicht es Nutzern, Dateien innerhalb von Nextcloud freizugeben. Bei aktivierter App kann der Administrator einstellen, welchen Gruppen das Freigeben von Dateien erlaubt ist.. Der zugelassene Nutzer kann dann Dateien und Ordner für andere Gruppen und Nutzer innerhalb der Nextcloud freigeben. Darüberhinaus kann der Administrator die Link-Teilen Funktion freigeben, mit der ein externer Link um Dateien für Nutzer außerhalb der Nextcloud freizugeben. Schließlich kann der Administrator noch Passwortrichtlinien und Ablaufzeiträume vorgeben sowie das Freigeben von Mobilgeräten ermöglichen.\nDas Ausschalten dieser App entfernt die bis dahin erstellten Freigaben für alle Empfänger wie auch für die Sync-Clients und die Apss für Mobilgeräte. Weitere Informationen können in der Nextcloud-Dokumentation abgerufen werden.", + "This application enables users to share files within Nextcloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within Nextcloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of Nextcloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices.\nTurning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the Nextcloud Documentation." : "Diese App ermöglicht es Nutzern, Dateien innerhalb von Nextcloud freizugeben. Bei aktivierter App kann der Administrator einstellen, welchen Gruppen das Freigeben von Dateien erlaubt ist. Der zugelassene Nutzer kann dann Dateien und Ordner für andere Gruppen und Nutzer innerhalb der Nextcloud freigeben. Darüberhinaus kann der Administrator die Link-Teilen Funktion freigeben, mit der ein externer Link um Dateien für Nutzer außerhalb der Nextcloud freizugeben. Schließlich kann der Administrator noch Passwortrichtlinien und Ablaufzeiträume vorgeben sowie das Freigeben von Mobilgeräten ermöglichen.\nDas Ausschalten dieser App entfernt die bis dahin erstellten Freigaben für alle Empfänger wie auch für die Sync-Clients und die Apss für Mobilgeräte. Weitere Informationen können in der Nextcloud-Dokumentation abgerufen werden.", "Sharing" : "Teilen", "Accept user and group shares by default" : "Benutzer- und Gruppenfreigaben standardmäßig akzeptieren", "Error while toggling options" : "Fehler beim Umschalten der Optionen", @@ -269,8 +269,6 @@ OC.L10N.register( "Copy to clipboard" : "In die Zwischenablage kopieren", "Sorry, this link doesn’t seem to work anymore." : "Entschuldigung, dieser Link scheint nicht mehr zu funktionieren.", "Toggle grid view" : "Rasteransicht umschalten", - "Share label saved" : "Freigabe-Label gespeichert", - "Share password saved" : "Freigabe-Passwort gespeichert", - "Share note saved" : "Freigabe-Notiz gespeichert" + "Error generating password from password_policy" : "Fehler beim Erzeugen des Passworts basierend auf der Passwort-Policy" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json index 6ee7fc568e3..3911e9ebcaa 100644 --- a/apps/files_sharing/l10n/de.json +++ b/apps/files_sharing/l10n/de.json @@ -24,7 +24,7 @@ "Something happened. Unable to accept the share." : "Die Freigabe konnte nicht akzeptiert werden.", "Reject share" : "Freigabe ablehnen", "Something happened. Unable to reject the share." : "Die Freigabe konnte nicht abgelehnt werden.", - "Waiting…" : "Warte…", + "Waiting…" : "Warte …", "error" : "Fehler", "finished" : "Abgeschlossen", "This will stop your current uploads." : "Hiermit werden die aktuellen Uploads angehalten.", @@ -138,7 +138,7 @@ "You received {share} to group {group} as a share by {user}" : "Du hast {share} zur Gruppe {group} als Freigabe von {user} empfangen", "Accept" : "Akzeptieren", "Reject" : "Ablehnen", - "This application enables users to share files within Nextcloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within Nextcloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of Nextcloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices.\nTurning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the Nextcloud Documentation." : "Diese App ermöglicht es Nutzern, Dateien innerhalb von Nextcloud freizugeben. Bei aktivierter App kann der Administrator einstellen, welchen Gruppen das Freigeben von Dateien erlaubt ist.. Der zugelassene Nutzer kann dann Dateien und Ordner für andere Gruppen und Nutzer innerhalb der Nextcloud freigeben. Darüberhinaus kann der Administrator die Link-Teilen Funktion freigeben, mit der ein externer Link um Dateien für Nutzer außerhalb der Nextcloud freizugeben. Schließlich kann der Administrator noch Passwortrichtlinien und Ablaufzeiträume vorgeben sowie das Freigeben von Mobilgeräten ermöglichen.\nDas Ausschalten dieser App entfernt die bis dahin erstellten Freigaben für alle Empfänger wie auch für die Sync-Clients und die Apss für Mobilgeräte. Weitere Informationen können in der Nextcloud-Dokumentation abgerufen werden.", + "This application enables users to share files within Nextcloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within Nextcloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of Nextcloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices.\nTurning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the Nextcloud Documentation." : "Diese App ermöglicht es Nutzern, Dateien innerhalb von Nextcloud freizugeben. Bei aktivierter App kann der Administrator einstellen, welchen Gruppen das Freigeben von Dateien erlaubt ist. Der zugelassene Nutzer kann dann Dateien und Ordner für andere Gruppen und Nutzer innerhalb der Nextcloud freigeben. Darüberhinaus kann der Administrator die Link-Teilen Funktion freigeben, mit der ein externer Link um Dateien für Nutzer außerhalb der Nextcloud freizugeben. Schließlich kann der Administrator noch Passwortrichtlinien und Ablaufzeiträume vorgeben sowie das Freigeben von Mobilgeräten ermöglichen.\nDas Ausschalten dieser App entfernt die bis dahin erstellten Freigaben für alle Empfänger wie auch für die Sync-Clients und die Apss für Mobilgeräte. Weitere Informationen können in der Nextcloud-Dokumentation abgerufen werden.", "Sharing" : "Teilen", "Accept user and group shares by default" : "Benutzer- und Gruppenfreigaben standardmäßig akzeptieren", "Error while toggling options" : "Fehler beim Umschalten der Optionen", @@ -267,8 +267,6 @@ "Copy to clipboard" : "In die Zwischenablage kopieren", "Sorry, this link doesn’t seem to work anymore." : "Entschuldigung, dieser Link scheint nicht mehr zu funktionieren.", "Toggle grid view" : "Rasteransicht umschalten", - "Share label saved" : "Freigabe-Label gespeichert", - "Share password saved" : "Freigabe-Passwort gespeichert", - "Share note saved" : "Freigabe-Notiz gespeichert" + "Error generating password from password_policy" : "Fehler beim Erzeugen des Passworts basierend auf der Passwort-Policy" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js index b256f42792f..96d1adfa4cd 100644 --- a/apps/files_sharing/l10n/de_DE.js +++ b/apps/files_sharing/l10n/de_DE.js @@ -269,8 +269,6 @@ OC.L10N.register( "Copy to clipboard" : "In die Zwischenablage kopieren", "Sorry, this link doesn’t seem to work anymore." : "Entschuldigung, dieser Link scheint nicht mehr zu funktionieren.", "Toggle grid view" : "Rasteransicht umschalten", - "Share label saved" : "Freigabe-Label gespeichert", - "Share password saved" : "Freigabe-Passwort gespeichert", - "Share note saved" : "Freigabe-Notiz gespeichert" + "Error generating password from password_policy" : "Fehler beim Erzeugen des Passworts basierend auf der Kennwortrichtlinie" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json index 8a8fc183f33..a2ae8152aee 100644 --- a/apps/files_sharing/l10n/de_DE.json +++ b/apps/files_sharing/l10n/de_DE.json @@ -267,8 +267,6 @@ "Copy to clipboard" : "In die Zwischenablage kopieren", "Sorry, this link doesn’t seem to work anymore." : "Entschuldigung, dieser Link scheint nicht mehr zu funktionieren.", "Toggle grid view" : "Rasteransicht umschalten", - "Share label saved" : "Freigabe-Label gespeichert", - "Share password saved" : "Freigabe-Passwort gespeichert", - "Share note saved" : "Freigabe-Notiz gespeichert" + "Error generating password from password_policy" : "Fehler beim Erzeugen des Passworts basierend auf der Kennwortrichtlinie" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/el.js b/apps/files_sharing/l10n/el.js index 83ea3ce3cbf..ffcb787409b 100644 --- a/apps/files_sharing/l10n/el.js +++ b/apps/files_sharing/l10n/el.js @@ -249,8 +249,6 @@ OC.L10N.register( "One or more of your shares will expire tomorrow" : "Μία ή περισσότερες κοινές χρήσης θα λήξουν ούριο", "Copy to clipboard" : "Αντιγραφή στο πρόχειρο", "Sorry, this link doesn’t seem to work anymore." : "Συγγνώμη, αυτός ο σύνδεσμος μοιάζει να μην ισχύει πια.", - "Toggle grid view" : "Εναλλαγή σε προβολή πλέγματος", - "Share label saved" : "Διαμοιρασμένη ετικέτα αποθηκεύτηκε ", - "Share password saved" : "Διαμοιρασμένο συνθηματικό αποθηκεύτηκε " + "Toggle grid view" : "Εναλλαγή σε προβολή πλέγματος" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/el.json b/apps/files_sharing/l10n/el.json index 45e434c8bf2..2791a1c3e98 100644 --- a/apps/files_sharing/l10n/el.json +++ b/apps/files_sharing/l10n/el.json @@ -247,8 +247,6 @@ "One or more of your shares will expire tomorrow" : "Μία ή περισσότερες κοινές χρήσης θα λήξουν ούριο", "Copy to clipboard" : "Αντιγραφή στο πρόχειρο", "Sorry, this link doesn’t seem to work anymore." : "Συγγνώμη, αυτός ο σύνδεσμος μοιάζει να μην ισχύει πια.", - "Toggle grid view" : "Εναλλαγή σε προβολή πλέγματος", - "Share label saved" : "Διαμοιρασμένη ετικέτα αποθηκεύτηκε ", - "Share password saved" : "Διαμοιρασμένο συνθηματικό αποθηκεύτηκε " + "Toggle grid view" : "Εναλλαγή σε προβολή πλέγματος" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/en_GB.js b/apps/files_sharing/l10n/en_GB.js index 828f6149857..c0c06f8f69e 100644 --- a/apps/files_sharing/l10n/en_GB.js +++ b/apps/files_sharing/l10n/en_GB.js @@ -269,8 +269,6 @@ OC.L10N.register( "Copy to clipboard" : "Copy to clipboard", "Sorry, this link doesn’t seem to work anymore." : "Sorry, this link doesn’t seem to work any more.", "Toggle grid view" : "Toggle grid view", - "Share label saved" : "Share label saved", - "Share password saved" : "Share password saved", - "Share note saved" : "Share note saved" + "Error generating password from password_policy" : "Error generating password from password policy" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/en_GB.json b/apps/files_sharing/l10n/en_GB.json index 3e3ec765cd0..8ee58135717 100644 --- a/apps/files_sharing/l10n/en_GB.json +++ b/apps/files_sharing/l10n/en_GB.json @@ -267,8 +267,6 @@ "Copy to clipboard" : "Copy to clipboard", "Sorry, this link doesn’t seem to work anymore." : "Sorry, this link doesn’t seem to work any more.", "Toggle grid view" : "Toggle grid view", - "Share label saved" : "Share label saved", - "Share password saved" : "Share password saved", - "Share note saved" : "Share note saved" + "Error generating password from password_policy" : "Error generating password from password policy" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js index f66a08dd778..4a053148d78 100644 --- a/apps/files_sharing/l10n/es.js +++ b/apps/files_sharing/l10n/es.js @@ -268,9 +268,6 @@ OC.L10N.register( "One or more of your shares will expire tomorrow" : "Uno o más de sus recursos compartidos caducarán mañana", "Copy to clipboard" : "Copiar al portapapeles", "Sorry, this link doesn’t seem to work anymore." : "Vaya, este enlace parece que no volverá a funcionar.", - "Toggle grid view" : "Alternar vista de cuadrícula", - "Share label saved" : "Se ha guardado la etiqueta del recurso compartido", - "Share password saved" : "Se ha guardado la contraseña del recurso compartido", - "Share note saved" : "Se ha guardado la nota del recurso compartido" + "Toggle grid view" : "Alternar vista de cuadrícula" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json index eca5cdc228b..12ec5b4afeb 100644 --- a/apps/files_sharing/l10n/es.json +++ b/apps/files_sharing/l10n/es.json @@ -266,9 +266,6 @@ "One or more of your shares will expire tomorrow" : "Uno o más de sus recursos compartidos caducarán mañana", "Copy to clipboard" : "Copiar al portapapeles", "Sorry, this link doesn’t seem to work anymore." : "Vaya, este enlace parece que no volverá a funcionar.", - "Toggle grid view" : "Alternar vista de cuadrícula", - "Share label saved" : "Se ha guardado la etiqueta del recurso compartido", - "Share password saved" : "Se ha guardado la contraseña del recurso compartido", - "Share note saved" : "Se ha guardado la nota del recurso compartido" + "Toggle grid view" : "Alternar vista de cuadrícula" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/eu.js b/apps/files_sharing/l10n/eu.js index 663a2ee0d98..f1868b96136 100644 --- a/apps/files_sharing/l10n/eu.js +++ b/apps/files_sharing/l10n/eu.js @@ -261,9 +261,6 @@ OC.L10N.register( "One or more of your shares will expire tomorrow" : "Zure partekatzeetako bat gutxienez bihar iraungiko da", "Copy to clipboard" : "Kopiatu arbelera", "Sorry, this link doesn’t seem to work anymore." : "Barkatu, esteka hori jada ez dabilela dirudi.", - "Toggle grid view" : "Txandakatu sareta ikuspegia", - "Share label saved" : "Partekatu etiketa gorde da", - "Share password saved" : "Partekatu pasahitza gorde da", - "Share note saved" : "Partekatu oharra gorde da" + "Toggle grid view" : "Txandakatu sareta ikuspegia" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/eu.json b/apps/files_sharing/l10n/eu.json index 49c056c1de6..0c813907d0d 100644 --- a/apps/files_sharing/l10n/eu.json +++ b/apps/files_sharing/l10n/eu.json @@ -259,9 +259,6 @@ "One or more of your shares will expire tomorrow" : "Zure partekatzeetako bat gutxienez bihar iraungiko da", "Copy to clipboard" : "Kopiatu arbelera", "Sorry, this link doesn’t seem to work anymore." : "Barkatu, esteka hori jada ez dabilela dirudi.", - "Toggle grid view" : "Txandakatu sareta ikuspegia", - "Share label saved" : "Partekatu etiketa gorde da", - "Share password saved" : "Partekatu pasahitza gorde da", - "Share note saved" : "Partekatu oharra gorde da" + "Toggle grid view" : "Txandakatu sareta ikuspegia" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/fi.js b/apps/files_sharing/l10n/fi.js index 975df6e7193..11c47d5e2f8 100644 --- a/apps/files_sharing/l10n/fi.js +++ b/apps/files_sharing/l10n/fi.js @@ -123,6 +123,7 @@ OC.L10N.register( "Could not lock node" : "Solmua ei voitu lukita", "Could not lock path" : "Polun lukitseminen ei onnistunut", "Wrong or no update parameter given" : "Päivitettävä parametri puuttuu tai on väärin", + "Share must at least have READ or CREATE permissions" : "Jaolla tulee olla vähintään luku- tai kirjoitusoikeus", "shared by %s" : "käyttäjän %s jakama", "Download all files" : "Lataa kaikki tiedostot", "Direct link" : "Suora linkki", @@ -130,6 +131,7 @@ OC.L10N.register( "Share API is disabled" : "Jakamisrajapinta on poistettu käytöstä", "File sharing" : "Tiedostonjako", "Share will expire tomorrow" : "Jako vanhenee huomenna", + "Your share of {node} will expire tomorrow" : "Jakosi {node} vanhenee huomenna", "You received {share} as a share by {user}" : "Vastaanotit jaon {share} käyttäjältä {user}", "You received {share} to group {group} as a share by {user}" : "Vastaanotit jaon {share} ryhmään {group} käyttäjältä {user}", "Accept" : "Hyväksy", @@ -194,8 +196,14 @@ OC.L10N.register( "Shared via link by {initiator}" : "Jaettu linkin kautta käyttäjältä {initiator}", "Mail share ({label})" : "Sähköpostijako ({label})", "Share link ({label})" : "Jaa linkki ({label})", + "Share link ({index})" : "Jaa linkki ({index})", "Share link" : "Jaa linkki", + "Actions for \"{title}\"" : "Toiminnot kohteelle \"{title}\"", + "Copy public link of \"{title}\" to clipboard" : "Kopioi kohteen \"{title}\" julkinen linkki leikepöydälle", "Error, please enter proper password and/or expiration date" : "Virhe, lisää kelvollinen salasana ja/tai päättymispäivä", + "Link share created" : "Linkkijako luotu", + "Error while creating the share" : "Virhe jakoa luotaessa", + "Search for share recipients" : "Etsi jaon vastaanottajia", "No recommendations. Start typing." : "Ei suosituksia. Aloita kirjoittaminen.", "Resharing is not allowed" : "Uudelleenjako ei ole sallittu", "Name or email …" : "Nimi tai sähköposti...", @@ -217,9 +225,11 @@ OC.L10N.register( "Error creating the share" : "Virhe jakoa luotaessa", "Error updating the share: {errorMessage}" : "Virhe päivittäessä jakoa: {errorMessage}", "Error updating the share" : "Virhe jakoa päivittäessä", + "Share {propertyName} saved" : "Jako {propertyName} tallennettu", "Shared" : "Jaettu", "Share" : "Jaa", "Shared with" : "Jaettu", + "Password created successfully" : "Salasana luotu onnistuneesti", "Shared with you and the group {group} by {owner}" : "Jaettu sinun ja ryhmän {group} kanssa käyttäjältä {owner}", "Shared with you and {circle} by {owner}" : "{owner} on jakanut tämän sinun ja piirin {circle} kanssa", "Shared with you and the conversation {conversation} by {owner}" : "{owner} on jakanut tämän sinun ja keskustelun {conversation} kanssa", diff --git a/apps/files_sharing/l10n/fi.json b/apps/files_sharing/l10n/fi.json index 67f2a901696..f3aaa780adf 100644 --- a/apps/files_sharing/l10n/fi.json +++ b/apps/files_sharing/l10n/fi.json @@ -121,6 +121,7 @@ "Could not lock node" : "Solmua ei voitu lukita", "Could not lock path" : "Polun lukitseminen ei onnistunut", "Wrong or no update parameter given" : "Päivitettävä parametri puuttuu tai on väärin", + "Share must at least have READ or CREATE permissions" : "Jaolla tulee olla vähintään luku- tai kirjoitusoikeus", "shared by %s" : "käyttäjän %s jakama", "Download all files" : "Lataa kaikki tiedostot", "Direct link" : "Suora linkki", @@ -128,6 +129,7 @@ "Share API is disabled" : "Jakamisrajapinta on poistettu käytöstä", "File sharing" : "Tiedostonjako", "Share will expire tomorrow" : "Jako vanhenee huomenna", + "Your share of {node} will expire tomorrow" : "Jakosi {node} vanhenee huomenna", "You received {share} as a share by {user}" : "Vastaanotit jaon {share} käyttäjältä {user}", "You received {share} to group {group} as a share by {user}" : "Vastaanotit jaon {share} ryhmään {group} käyttäjältä {user}", "Accept" : "Hyväksy", @@ -192,8 +194,14 @@ "Shared via link by {initiator}" : "Jaettu linkin kautta käyttäjältä {initiator}", "Mail share ({label})" : "Sähköpostijako ({label})", "Share link ({label})" : "Jaa linkki ({label})", + "Share link ({index})" : "Jaa linkki ({index})", "Share link" : "Jaa linkki", + "Actions for \"{title}\"" : "Toiminnot kohteelle \"{title}\"", + "Copy public link of \"{title}\" to clipboard" : "Kopioi kohteen \"{title}\" julkinen linkki leikepöydälle", "Error, please enter proper password and/or expiration date" : "Virhe, lisää kelvollinen salasana ja/tai päättymispäivä", + "Link share created" : "Linkkijako luotu", + "Error while creating the share" : "Virhe jakoa luotaessa", + "Search for share recipients" : "Etsi jaon vastaanottajia", "No recommendations. Start typing." : "Ei suosituksia. Aloita kirjoittaminen.", "Resharing is not allowed" : "Uudelleenjako ei ole sallittu", "Name or email …" : "Nimi tai sähköposti...", @@ -215,9 +223,11 @@ "Error creating the share" : "Virhe jakoa luotaessa", "Error updating the share: {errorMessage}" : "Virhe päivittäessä jakoa: {errorMessage}", "Error updating the share" : "Virhe jakoa päivittäessä", + "Share {propertyName} saved" : "Jako {propertyName} tallennettu", "Shared" : "Jaettu", "Share" : "Jaa", "Shared with" : "Jaettu", + "Password created successfully" : "Salasana luotu onnistuneesti", "Shared with you and the group {group} by {owner}" : "Jaettu sinun ja ryhmän {group} kanssa käyttäjältä {owner}", "Shared with you and {circle} by {owner}" : "{owner} on jakanut tämän sinun ja piirin {circle} kanssa", "Shared with you and the conversation {conversation} by {owner}" : "{owner} on jakanut tämän sinun ja keskustelun {conversation} kanssa", diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js index f3da53239e9..8bf7e7b8234 100644 --- a/apps/files_sharing/l10n/fr.js +++ b/apps/files_sharing/l10n/fr.js @@ -269,8 +269,6 @@ OC.L10N.register( "Copy to clipboard" : "Copier dans le presse-papier", "Sorry, this link doesn’t seem to work anymore." : "Désolé, ce lien semble ne plus fonctionner.", "Toggle grid view" : "Activer/Désactiver l'affichage mosaïque", - "Share label saved" : "Étiquette collaborative enregistrée", - "Share password saved" : "Mot de passe partagé enregistré", - "Share note saved" : "Note partagée enregistrée" + "Error generating password from password_policy" : "Erreur de génération de mot de passe à partir de password_policy" }, "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json index 3a2fe5aefc1..c11b25506c1 100644 --- a/apps/files_sharing/l10n/fr.json +++ b/apps/files_sharing/l10n/fr.json @@ -267,8 +267,6 @@ "Copy to clipboard" : "Copier dans le presse-papier", "Sorry, this link doesn’t seem to work anymore." : "Désolé, ce lien semble ne plus fonctionner.", "Toggle grid view" : "Activer/Désactiver l'affichage mosaïque", - "Share label saved" : "Étiquette collaborative enregistrée", - "Share password saved" : "Mot de passe partagé enregistré", - "Share note saved" : "Note partagée enregistrée" + "Error generating password from password_policy" : "Erreur de génération de mot de passe à partir de password_policy" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/hu.js b/apps/files_sharing/l10n/hu.js index bb9cc088bab..0c8858a6d08 100644 --- a/apps/files_sharing/l10n/hu.js +++ b/apps/files_sharing/l10n/hu.js @@ -269,8 +269,6 @@ OC.L10N.register( "Copy to clipboard" : "Másolás a vágólapra", "Sorry, this link doesn’t seem to work anymore." : "Sajnos úgy tűnik, ez a hivatkozás már nem működik.", "Toggle grid view" : "Rácsnézet be/ki", - "Share label saved" : "A megosztás címkéje mentve", - "Share password saved" : "A megosztás jelszava mentve", - "Share note saved" : "A megosztás jegyzete mentve" + "Error generating password from password_policy" : "Hiba a password_policy használatával történő jelszó előállításakor" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/hu.json b/apps/files_sharing/l10n/hu.json index 9b951b6d306..b05b8f1609d 100644 --- a/apps/files_sharing/l10n/hu.json +++ b/apps/files_sharing/l10n/hu.json @@ -267,8 +267,6 @@ "Copy to clipboard" : "Másolás a vágólapra", "Sorry, this link doesn’t seem to work anymore." : "Sajnos úgy tűnik, ez a hivatkozás már nem működik.", "Toggle grid view" : "Rácsnézet be/ki", - "Share label saved" : "A megosztás címkéje mentve", - "Share password saved" : "A megosztás jelszava mentve", - "Share note saved" : "A megosztás jegyzete mentve" + "Error generating password from password_policy" : "Hiba a password_policy használatával történő jelszó előállításakor" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/mk.js b/apps/files_sharing/l10n/mk.js index 06d72960e30..15e023da79b 100644 --- a/apps/files_sharing/l10n/mk.js +++ b/apps/files_sharing/l10n/mk.js @@ -261,9 +261,6 @@ OC.L10N.register( "One or more of your shares will expire tomorrow" : "Едно или повеќе од твојте споделувања ќе истечат утре", "Copy to clipboard" : "Копирај во клипборд", "Sorry, this link doesn’t seem to work anymore." : "Извенете, но овој линк повеќе не функционира.", - "Toggle grid view" : "Промена во мрежа", - "Share label saved" : "Ознаката е зачувана", - "Share password saved" : "Лозинката е зачувана", - "Share note saved" : "Забелешката е зачувана" + "Toggle grid view" : "Промена во мрежа" }, "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); diff --git a/apps/files_sharing/l10n/mk.json b/apps/files_sharing/l10n/mk.json index ddddb82854b..8e24ac69c7c 100644 --- a/apps/files_sharing/l10n/mk.json +++ b/apps/files_sharing/l10n/mk.json @@ -259,9 +259,6 @@ "One or more of your shares will expire tomorrow" : "Едно или повеќе од твојте споделувања ќе истечат утре", "Copy to clipboard" : "Копирај во клипборд", "Sorry, this link doesn’t seem to work anymore." : "Извенете, но овој линк повеќе не функционира.", - "Toggle grid view" : "Промена во мрежа", - "Share label saved" : "Ознаката е зачувана", - "Share password saved" : "Лозинката е зачувана", - "Share note saved" : "Забелешката е зачувана" + "Toggle grid view" : "Промена во мрежа" },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/pl.js b/apps/files_sharing/l10n/pl.js index a0ffcfda5f4..4dd355416e4 100644 --- a/apps/files_sharing/l10n/pl.js +++ b/apps/files_sharing/l10n/pl.js @@ -269,8 +269,6 @@ OC.L10N.register( "Copy to clipboard" : "Kopiuj do schowka", "Sorry, this link doesn’t seem to work anymore." : "Niestety, ten link już nie działa.", "Toggle grid view" : "Przełącz widok siatki", - "Share label saved" : "Etykieta udostępnienia zapisana", - "Share password saved" : "Hasło udostępnienia zapisane", - "Share note saved" : "Notatka udostępnienia zapisana" + "Error generating password from password_policy" : "Błąd podczas generowania hasła z password_policy" }, "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_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json index 02d2c7e8c8f..bc38a7917c9 100644 --- a/apps/files_sharing/l10n/pl.json +++ b/apps/files_sharing/l10n/pl.json @@ -267,8 +267,6 @@ "Copy to clipboard" : "Kopiuj do schowka", "Sorry, this link doesn’t seem to work anymore." : "Niestety, ten link już nie działa.", "Toggle grid view" : "Przełącz widok siatki", - "Share label saved" : "Etykieta udostępnienia zapisana", - "Share password saved" : "Hasło udostępnienia zapisane", - "Share note saved" : "Notatka udostępnienia zapisana" + "Error generating password from password_policy" : "Błąd podczas generowania hasła z password_policy" },"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_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js index fe455e66b2b..255fd77df97 100644 --- a/apps/files_sharing/l10n/pt_BR.js +++ b/apps/files_sharing/l10n/pt_BR.js @@ -269,8 +269,6 @@ OC.L10N.register( "Copy to clipboard" : "Copiar para a área de transferência", "Sorry, this link doesn’t seem to work anymore." : "Desculpe, este link parece não funcionar mais.", "Toggle grid view" : "Alternar a visão em grade", - "Share label saved" : "Marcador de compartilhamento salvo", - "Share password saved" : "Compartilhar senha salva", - "Share note saved" : "Compartilhar nota salva" + "Error generating password from password_policy" : "Erro ao gerar senha de password_policy" }, "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json index f766e5ce092..b13c9feac34 100644 --- a/apps/files_sharing/l10n/pt_BR.json +++ b/apps/files_sharing/l10n/pt_BR.json @@ -267,8 +267,6 @@ "Copy to clipboard" : "Copiar para a área de transferência", "Sorry, this link doesn’t seem to work anymore." : "Desculpe, este link parece não funcionar mais.", "Toggle grid view" : "Alternar a visão em grade", - "Share label saved" : "Marcador de compartilhamento salvo", - "Share password saved" : "Compartilhar senha salva", - "Share note saved" : "Compartilhar nota salva" + "Error generating password from password_policy" : "Erro ao gerar senha de password_policy" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/sv.js b/apps/files_sharing/l10n/sv.js index 148e813088a..fba7d9522a1 100644 --- a/apps/files_sharing/l10n/sv.js +++ b/apps/files_sharing/l10n/sv.js @@ -269,8 +269,6 @@ OC.L10N.register( "Copy to clipboard" : "Kopiera till urklipp", "Sorry, this link doesn’t seem to work anymore." : "Tyvärr, denna länk verkar inte fungera längre.", "Toggle grid view" : "Växla rutnätsvy", - "Share label saved" : "Delningsetikett sparad", - "Share password saved" : "Lösenord för delning sparad", - "Share note saved" : "Notering för delning sparad" + "Error generating password from password_policy" : "Fel vid generering av lösenord från lösenordspolicy" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_sharing/l10n/sv.json b/apps/files_sharing/l10n/sv.json index b3da90cefe2..e222fe030fe 100644 --- a/apps/files_sharing/l10n/sv.json +++ b/apps/files_sharing/l10n/sv.json @@ -267,8 +267,6 @@ "Copy to clipboard" : "Kopiera till urklipp", "Sorry, this link doesn’t seem to work anymore." : "Tyvärr, denna länk verkar inte fungera längre.", "Toggle grid view" : "Växla rutnätsvy", - "Share label saved" : "Delningsetikett sparad", - "Share password saved" : "Lösenord för delning sparad", - "Share note saved" : "Notering för delning sparad" + "Error generating password from password_policy" : "Fel vid generering av lösenord från lösenordspolicy" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/tr.js b/apps/files_sharing/l10n/tr.js index 51598a91672..41c1031ef4d 100644 --- a/apps/files_sharing/l10n/tr.js +++ b/apps/files_sharing/l10n/tr.js @@ -269,8 +269,6 @@ OC.L10N.register( "Copy to clipboard" : "Panoya kopyala", "Sorry, this link doesn’t seem to work anymore." : "Ne yazık ki, bu bağlantı artık çalışmıyor gibi görünüyor.", "Toggle grid view" : "Tablo görünümünü değiştir", - "Share label saved" : "Paylaşım etiketi kaydedildi", - "Share password saved" : "Paylaşım parolası kaydedildi", - "Share note saved" : "Paylaşım notu kaydedildi" + "Error generating password from password_policy" : "password_policy ile parola oluşturulurken sorun çıktı" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/files_sharing/l10n/tr.json b/apps/files_sharing/l10n/tr.json index a20d159ac2a..6a17fea0fe6 100644 --- a/apps/files_sharing/l10n/tr.json +++ b/apps/files_sharing/l10n/tr.json @@ -267,8 +267,6 @@ "Copy to clipboard" : "Panoya kopyala", "Sorry, this link doesn’t seem to work anymore." : "Ne yazık ki, bu bağlantı artık çalışmıyor gibi görünüyor.", "Toggle grid view" : "Tablo görünümünü değiştir", - "Share label saved" : "Paylaşım etiketi kaydedildi", - "Share password saved" : "Paylaşım parolası kaydedildi", - "Share note saved" : "Paylaşım notu kaydedildi" + "Error generating password from password_policy" : "password_policy ile parola oluşturulurken sorun çıktı" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/zh_HK.js b/apps/files_sharing/l10n/zh_HK.js index 6dea0024e87..54512bc5bad 100644 --- a/apps/files_sharing/l10n/zh_HK.js +++ b/apps/files_sharing/l10n/zh_HK.js @@ -269,8 +269,6 @@ OC.L10N.register( "Copy to clipboard" : "複製到剪貼板", "Sorry, this link doesn’t seem to work anymore." : "抱歉,此連結已經失效", "Toggle grid view" : "切換網格檢視", - "Share label saved" : "已保存分享標籤", - "Share password saved" : "已保存分享密碼", - "Share note saved" : "已保存分享筆記" + "Error generating password from password_policy" : "從密碼策略生成密碼時出錯" }, "nplurals=1; plural=0;"); diff --git a/apps/files_sharing/l10n/zh_HK.json b/apps/files_sharing/l10n/zh_HK.json index d67496cfcca..3d9be0f03b2 100644 --- a/apps/files_sharing/l10n/zh_HK.json +++ b/apps/files_sharing/l10n/zh_HK.json @@ -267,8 +267,6 @@ "Copy to clipboard" : "複製到剪貼板", "Sorry, this link doesn’t seem to work anymore." : "抱歉,此連結已經失效", "Toggle grid view" : "切換網格檢視", - "Share label saved" : "已保存分享標籤", - "Share password saved" : "已保存分享密碼", - "Share note saved" : "已保存分享筆記" + "Error generating password from password_policy" : "從密碼策略生成密碼時出錯" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/zh_TW.js b/apps/files_sharing/l10n/zh_TW.js index f0058f555ff..452f49fd537 100644 --- a/apps/files_sharing/l10n/zh_TW.js +++ b/apps/files_sharing/l10n/zh_TW.js @@ -261,9 +261,6 @@ OC.L10N.register( "One or more of your shares will expire tomorrow" : "您的一個或多個分享將於明天到期", "Copy to clipboard" : "複製到剪貼簿", "Sorry, this link doesn’t seem to work anymore." : "抱歉,此連結已經失效", - "Toggle grid view" : "切換網格檢視", - "Share label saved" : "分享標籤已儲存", - "Share password saved" : "分享密碼已儲存", - "Share note saved" : "分享筆記已儲存" + "Toggle grid view" : "切換網格檢視" }, "nplurals=1; plural=0;"); diff --git a/apps/files_sharing/l10n/zh_TW.json b/apps/files_sharing/l10n/zh_TW.json index dff239d4bc3..417c0c6f74b 100644 --- a/apps/files_sharing/l10n/zh_TW.json +++ b/apps/files_sharing/l10n/zh_TW.json @@ -259,9 +259,6 @@ "One or more of your shares will expire tomorrow" : "您的一個或多個分享將於明天到期", "Copy to clipboard" : "複製到剪貼簿", "Sorry, this link doesn’t seem to work anymore." : "抱歉,此連結已經失效", - "Toggle grid view" : "切換網格檢視", - "Share label saved" : "分享標籤已儲存", - "Share password saved" : "分享密碼已儲存", - "Share note saved" : "分享筆記已儲存" + "Toggle grid view" : "切換網格檢視" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_trashbin/l10n/th.js b/apps/files_trashbin/l10n/th.js index 5e275c4275b..a3dea845a7e 100644 --- a/apps/files_trashbin/l10n/th.js +++ b/apps/files_trashbin/l10n/th.js @@ -2,11 +2,11 @@ OC.L10N.register( "files_trashbin", { "Deleted files" : "ไฟล์ที่ถูกลบ", - "restored" : "การเรียกคืน", + "restored" : "เรียกคืนแล้ว", "Restore" : "คืนค่า", "Delete permanently" : "ลบแบบถาวร", "This operation is forbidden" : "การดำเนินการนี้ถูกห้าม", - "This directory is unavailable, please check the logs or contact the administrator" : "ไม่สามารถใช้งานไดเรกทอรีนี้โปรดตรวจสอบบันทึกหรือติดต่อผู้ดูแลระบบ", + "This directory is unavailable, please check the logs or contact the administrator" : "ไม่สามารถใช้งานไดเรกทอรีนี้ โปรดตรวจสอบบันทึกหรือติดต่อผู้ดูแลระบบ", "No deleted files" : "ไม่มีไฟล์ที่ถูกลบ", "You will be able to recover deleted files from here" : "คุณจะสามารถกู้คืนไฟล์ที่ถูกได้ลบจากที่นี่", "No entries found in this folder" : "ไม่พบรายการในโฟลเดอร์นี้", diff --git a/apps/files_trashbin/l10n/th.json b/apps/files_trashbin/l10n/th.json index a331dbc5066..657d912535a 100644 --- a/apps/files_trashbin/l10n/th.json +++ b/apps/files_trashbin/l10n/th.json @@ -1,10 +1,10 @@ { "translations": { "Deleted files" : "ไฟล์ที่ถูกลบ", - "restored" : "การเรียกคืน", + "restored" : "เรียกคืนแล้ว", "Restore" : "คืนค่า", "Delete permanently" : "ลบแบบถาวร", "This operation is forbidden" : "การดำเนินการนี้ถูกห้าม", - "This directory is unavailable, please check the logs or contact the administrator" : "ไม่สามารถใช้งานไดเรกทอรีนี้โปรดตรวจสอบบันทึกหรือติดต่อผู้ดูแลระบบ", + "This directory is unavailable, please check the logs or contact the administrator" : "ไม่สามารถใช้งานไดเรกทอรีนี้ โปรดตรวจสอบบันทึกหรือติดต่อผู้ดูแลระบบ", "No deleted files" : "ไม่มีไฟล์ที่ถูกลบ", "You will be able to recover deleted files from here" : "คุณจะสามารถกู้คืนไฟล์ที่ถูกได้ลบจากที่นี่", "No entries found in this folder" : "ไม่พบรายการในโฟลเดอร์นี้", diff --git a/apps/files_versions/l10n/de.js b/apps/files_versions/l10n/de.js index 55c613e9f46..0bb1436d1ad 100644 --- a/apps/files_versions/l10n/de.js +++ b/apps/files_versions/l10n/de.js @@ -4,6 +4,11 @@ OC.L10N.register( "Versions" : "Versionen", "This application automatically maintains older versions of files that are changed." : "Diese App verwaltet automatisch ältere Versionen geänderter Dateien.", "This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user's directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the user does not run out of Quota because of versions.\n\t\tIn addition to the expiry of versions, the versions app makes certain never to use more than 50% of the user's currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation." : "Diese Anwendung verwaltet automatisch ältere Versionen von Dateien, die geändert werden. Wenn aktiviert, wird ein Ordner mit versteckten Versionen im Verzeichnis jedes Benutzers bereitgestellt und wird zum Speichern alter Dateiversionen verwendet. Ein Benutzer kann jederzeit über die Web-Oberfläche auf eine ältere Version zurückgreifen, wobei die ersetzte Datei dann eine Version wird. Die App verwaltet automatisch den Versionsordner, um sicherzustellen, dass dem Benutzer nicht der Speicherplatz aufgrund von zu vielen Versionen ausgeht.\nZusätzlich zum Ablauf der Versionen stellt die Versions-App sicher, dass nie mehr als 50% des derzeit verfügbaren freien Speicherplatzes des Benutzers für die Versionierung genutzt werden. Wenn gespeicherte Versionen diese Grenze überschreiten, löscht die App zuerst die ältesten Versionen, bis sie die 50% Grenze erreicht hat. Weitere Informationen findest du in der Versionsdokumentation.", + "Download version" : "Version herunterladen", + "Restore version" : "Version wiederherstellen", + "No versions yet" : "Bislang keine Versionen", + "Version restored" : "Version wiederhergestellt", + "Could not restore version" : "Version konnte nicht wiederhergestellt werden", "Version" : "Version", "This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user’s directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the user doesn’t run out of Quota because of versions.\n\t\tIn addition to the expiry of versions, the versions app makes certain never to use more than 50% of the user’s currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation." : "Diese Anwendung verwaltet automatisch ältere Versionen von Dateien, die geändert werden. Wenn aktiviert, wird ein Ordner mit versteckten Versionen im Verzeichnis jedes Benutzers bereitgestellt und wird zum Speichern alter Dateiversionen verwendet. Ein Benutzer kann jederzeit über die Web-Oberfläche auf eine ältere Version zurückgreifen, wobei die ersetzte Datei dann eine Version wird. Die App verwaltet automatisch den Versionsordner, um sicherzustellen, dass dem Benutzer nicht der Speicherplatz aufgrund von zu vielen Versionen ausgeht.\n\t\tZusätzlich zum Ablauf der Versionen stellt die Versions-App sicher, dass nie mehr als 50% des derzeit verfügbaren freien Speicherplatzes des Benutzers für die Versionierung genutzt werden. Wenn gespeicherte Versionen diese Grenze überschreiten, löscht die App zuerst die ältesten Versionen, bis sie die 50% Grenze erreicht hat. Weitere Informationen findest du in der Versionsdokumentation.", "Failed to revert {file} to revision {timestamp}." : "Konnte {file} nicht auf Revision {timestamp} zurücksetzen.", diff --git a/apps/files_versions/l10n/de.json b/apps/files_versions/l10n/de.json index 4360052bd25..8e5d4fdce08 100644 --- a/apps/files_versions/l10n/de.json +++ b/apps/files_versions/l10n/de.json @@ -2,6 +2,11 @@ "Versions" : "Versionen", "This application automatically maintains older versions of files that are changed." : "Diese App verwaltet automatisch ältere Versionen geänderter Dateien.", "This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user's directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the user does not run out of Quota because of versions.\n\t\tIn addition to the expiry of versions, the versions app makes certain never to use more than 50% of the user's currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation." : "Diese Anwendung verwaltet automatisch ältere Versionen von Dateien, die geändert werden. Wenn aktiviert, wird ein Ordner mit versteckten Versionen im Verzeichnis jedes Benutzers bereitgestellt und wird zum Speichern alter Dateiversionen verwendet. Ein Benutzer kann jederzeit über die Web-Oberfläche auf eine ältere Version zurückgreifen, wobei die ersetzte Datei dann eine Version wird. Die App verwaltet automatisch den Versionsordner, um sicherzustellen, dass dem Benutzer nicht der Speicherplatz aufgrund von zu vielen Versionen ausgeht.\nZusätzlich zum Ablauf der Versionen stellt die Versions-App sicher, dass nie mehr als 50% des derzeit verfügbaren freien Speicherplatzes des Benutzers für die Versionierung genutzt werden. Wenn gespeicherte Versionen diese Grenze überschreiten, löscht die App zuerst die ältesten Versionen, bis sie die 50% Grenze erreicht hat. Weitere Informationen findest du in der Versionsdokumentation.", + "Download version" : "Version herunterladen", + "Restore version" : "Version wiederherstellen", + "No versions yet" : "Bislang keine Versionen", + "Version restored" : "Version wiederhergestellt", + "Could not restore version" : "Version konnte nicht wiederhergestellt werden", "Version" : "Version", "This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user’s directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the user doesn’t run out of Quota because of versions.\n\t\tIn addition to the expiry of versions, the versions app makes certain never to use more than 50% of the user’s currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation." : "Diese Anwendung verwaltet automatisch ältere Versionen von Dateien, die geändert werden. Wenn aktiviert, wird ein Ordner mit versteckten Versionen im Verzeichnis jedes Benutzers bereitgestellt und wird zum Speichern alter Dateiversionen verwendet. Ein Benutzer kann jederzeit über die Web-Oberfläche auf eine ältere Version zurückgreifen, wobei die ersetzte Datei dann eine Version wird. Die App verwaltet automatisch den Versionsordner, um sicherzustellen, dass dem Benutzer nicht der Speicherplatz aufgrund von zu vielen Versionen ausgeht.\n\t\tZusätzlich zum Ablauf der Versionen stellt die Versions-App sicher, dass nie mehr als 50% des derzeit verfügbaren freien Speicherplatzes des Benutzers für die Versionierung genutzt werden. Wenn gespeicherte Versionen diese Grenze überschreiten, löscht die App zuerst die ältesten Versionen, bis sie die 50% Grenze erreicht hat. Weitere Informationen findest du in der Versionsdokumentation.", "Failed to revert {file} to revision {timestamp}." : "Konnte {file} nicht auf Revision {timestamp} zurücksetzen.", diff --git a/apps/settings/l10n/de.js b/apps/settings/l10n/de.js index c5d0dbed70a..0d54e1f3a26 100644 --- a/apps/settings/l10n/de.js +++ b/apps/settings/l10n/de.js @@ -10,7 +10,7 @@ OC.L10N.register( "Published" : "Veröffentlicht", "Synchronize to trusted servers and the global and public address book" : "Mit vertrauenswürdigen Servern und dem globalen und öffentlichen Adressbuch synchronisieren", "Verify" : "Überprüfen", - "Verifying …" : "Überprüfe…", + "Verifying …" : "Überprüfe …", "Unable to change password" : "Passwort konnte nicht geändert werden", "Very weak password" : "Sehr schwaches Passwort", "Weak password" : "Schwaches Passwort", @@ -39,6 +39,7 @@ OC.L10N.register( "You changed your email address" : "Du hast deine E-Mail-Adresse geändert", "Your email address was changed by an administrator" : "Deine E-Mail-Adresse wurde von einem Administrator geändert", "You created an app password for a session named \"{token}\"" : "Du hast ein App-Passwort für eine Sitzung mit dem Namen \"{token}\" erstellt.", + "An administrator created an app password for a session named \"{token}\"" : "Die Administration hat ein App-Passwort für eine Sitzung mit dem Namen \"{token}“ erstellt", "You deleted app password \"{token}\"" : "Du hast das App-Passwort \"{token}\" entfernt", "You renamed app password \"{token}\" to \"{newToken}\"" : "Du hast App-Passwort \"{token}\" in \"{newToken}\" umbenannt", "You granted filesystem access to app password \"{token}\"" : "Du hast Dateisystemzugriff für App-Passwort \"{token}\" erlaubt", @@ -372,7 +373,7 @@ OC.L10N.register( "Add WebAuthn device" : "WebAuthn-Gerät hinzufügen", "Please authorize your WebAuthn device." : "Bitte autorisiere dein WebAuthn-Gerät.", "Name your device" : "Gerät benennen", - "Adding your device …" : "Füge dein Gerät hinzu…", + "Adding your device …" : "Füge dein Gerät hinzu …", "Server error while trying to add WebAuthn device" : "Server-Fehler beim Versuch ein WebAuthn-Gerät hinzuzufügen", "Server error while trying to complete WebAuthn device registration" : "Server-Fehler beim Versuch die WebAuthn-Geräte-Registrierung abzuschließen", "Unnamed device" : "Unbenanntes Gerät", @@ -398,7 +399,7 @@ OC.L10N.register( "Show storage path" : "Zeige Speicherpfad", "Send email to new user" : "E-Mail an neuen Benutzer senden", "Not saved" : "Nicht gespeichert", - "Sending…" : "Senden…", + "Sending…" : "Senden …", "Email sent" : "E-Mail gesendet", "Location" : "Ort", "Profile picture" : "Profilbild", @@ -410,6 +411,7 @@ OC.L10N.register( "Phone number" : "Telefonnummer", "Role" : "Funktion", "Twitter" : "Twitter", + "Fediverse (e.g. Mastodon)" : "Fediverse (wie z. B. Mastodon)", "Website" : "Webseite", "Profile visibility" : "Sichtbarkeit deines Profils", "Not available as this property is required for core functionality including file sharing and calendar invitations" : "Nicht verfügbar, da diese Eigenschaft für Kernfunktionen wie Dateifreigabe und Kalendereinladungen erforderlich ist.", @@ -522,7 +524,7 @@ OC.L10N.register( "Unable to update federation scope of the primary {accountProperty}" : "Der Federation-Bereich des primären {accountProperty} konnte nicht aktualisiert werden", "Unable to update federation scope of additional {accountProperty}" : "Der Federation-Bereich des zusätzlichen {accountProperty} konnte nicht aktualisiert werden", "Migration in progress. Please wait until the migration is finished" : "Migration läuft. Bitte warte, bis die Migration abgeschlossen ist", - "Migration started …" : "Migration begonnen…", + "Migration started …" : "Migration begonnen …", "Address" : "Adresse", "Avatar" : "Avatar", "An error occured during the request. Unable to proceed." : "Es ist ein Fehler bei der Anfrage aufgetreten. Es kann nicht fortgefahren werden.", diff --git a/apps/settings/l10n/de.json b/apps/settings/l10n/de.json index 11804219a59..8fb5f649b16 100644 --- a/apps/settings/l10n/de.json +++ b/apps/settings/l10n/de.json @@ -8,7 +8,7 @@ "Published" : "Veröffentlicht", "Synchronize to trusted servers and the global and public address book" : "Mit vertrauenswürdigen Servern und dem globalen und öffentlichen Adressbuch synchronisieren", "Verify" : "Überprüfen", - "Verifying …" : "Überprüfe…", + "Verifying …" : "Überprüfe …", "Unable to change password" : "Passwort konnte nicht geändert werden", "Very weak password" : "Sehr schwaches Passwort", "Weak password" : "Schwaches Passwort", @@ -37,6 +37,7 @@ "You changed your email address" : "Du hast deine E-Mail-Adresse geändert", "Your email address was changed by an administrator" : "Deine E-Mail-Adresse wurde von einem Administrator geändert", "You created an app password for a session named \"{token}\"" : "Du hast ein App-Passwort für eine Sitzung mit dem Namen \"{token}\" erstellt.", + "An administrator created an app password for a session named \"{token}\"" : "Die Administration hat ein App-Passwort für eine Sitzung mit dem Namen \"{token}“ erstellt", "You deleted app password \"{token}\"" : "Du hast das App-Passwort \"{token}\" entfernt", "You renamed app password \"{token}\" to \"{newToken}\"" : "Du hast App-Passwort \"{token}\" in \"{newToken}\" umbenannt", "You granted filesystem access to app password \"{token}\"" : "Du hast Dateisystemzugriff für App-Passwort \"{token}\" erlaubt", @@ -370,7 +371,7 @@ "Add WebAuthn device" : "WebAuthn-Gerät hinzufügen", "Please authorize your WebAuthn device." : "Bitte autorisiere dein WebAuthn-Gerät.", "Name your device" : "Gerät benennen", - "Adding your device …" : "Füge dein Gerät hinzu…", + "Adding your device …" : "Füge dein Gerät hinzu …", "Server error while trying to add WebAuthn device" : "Server-Fehler beim Versuch ein WebAuthn-Gerät hinzuzufügen", "Server error while trying to complete WebAuthn device registration" : "Server-Fehler beim Versuch die WebAuthn-Geräte-Registrierung abzuschließen", "Unnamed device" : "Unbenanntes Gerät", @@ -396,7 +397,7 @@ "Show storage path" : "Zeige Speicherpfad", "Send email to new user" : "E-Mail an neuen Benutzer senden", "Not saved" : "Nicht gespeichert", - "Sending…" : "Senden…", + "Sending…" : "Senden …", "Email sent" : "E-Mail gesendet", "Location" : "Ort", "Profile picture" : "Profilbild", @@ -408,6 +409,7 @@ "Phone number" : "Telefonnummer", "Role" : "Funktion", "Twitter" : "Twitter", + "Fediverse (e.g. Mastodon)" : "Fediverse (wie z. B. Mastodon)", "Website" : "Webseite", "Profile visibility" : "Sichtbarkeit deines Profils", "Not available as this property is required for core functionality including file sharing and calendar invitations" : "Nicht verfügbar, da diese Eigenschaft für Kernfunktionen wie Dateifreigabe und Kalendereinladungen erforderlich ist.", @@ -520,7 +522,7 @@ "Unable to update federation scope of the primary {accountProperty}" : "Der Federation-Bereich des primären {accountProperty} konnte nicht aktualisiert werden", "Unable to update federation scope of additional {accountProperty}" : "Der Federation-Bereich des zusätzlichen {accountProperty} konnte nicht aktualisiert werden", "Migration in progress. Please wait until the migration is finished" : "Migration läuft. Bitte warte, bis die Migration abgeschlossen ist", - "Migration started …" : "Migration begonnen…", + "Migration started …" : "Migration begonnen …", "Address" : "Adresse", "Avatar" : "Avatar", "An error occured during the request. Unable to proceed." : "Es ist ein Fehler bei der Anfrage aufgetreten. Es kann nicht fortgefahren werden.", diff --git a/apps/settings/l10n/th.js b/apps/settings/l10n/th.js index 37568e61a6c..2a824724b54 100644 --- a/apps/settings/l10n/th.js +++ b/apps/settings/l10n/th.js @@ -46,7 +46,7 @@ OC.L10N.register( "Authentication error" : "เกิดข้อผิดพลาดในการตรวจสอบสิทธิ์", "Please provide an admin recovery password; otherwise, all user data will be lost." : "โปรดใส่รหัสผ่านกู้คืนของผู้ดูแลระบบ มิฉะนั้น ข้อมูลของผู้ใช้ทั้งหมดจะหายไป", "Wrong admin recovery password. Please check the password and try again." : "รหัสผ่านกู้คืนของผู้ดูแลระบบไม่ถูกต้อง กรุณาตรวจสอบรหัสผ่านและลองอีกครั้ง", - "Federated Cloud Sharing" : "แชร์กับสหพันธ์คลาวด์", + "Federated Cloud Sharing" : "คลาวด์แชร์กับสหพันธ์", "cURL is using an outdated %1$s version (%2$s). Please update your operating system or features such as %3$s will not work reliably." : "cURL กำลังใช้ %1$s รุ่นเก่า (%2$s) โปรดอัปเดตระบบปฏิบัติการ ไม่เช่นนั้นคุณสมบัติเช่น %3$s จะไม่สามารถทำงานอย่างมีประสิทธิภาพ", "Administrator documentation" : "เอกสารประกอบสำหรับผู้ดูแลระบบ", "User documentation" : "เอกสารประกอบสำหรับผู้ใช้", @@ -313,7 +313,7 @@ OC.L10N.register( "An error occurred while changing your language. Please reload the page and try again." : "เกิดข้อผิดพลาดขณะเปลี่ยนภาษา กรุณาโหลดหน้าใหม่และลองอีกครั้ง", "An error occurred while changing your locale. Please reload the page and try again." : "เกิดข้อผิดพลาดขณะเปลี่ยนตำแหน่งที่ตั้ง กรุณาโหลดหน้าใหม่และลองอีกครั้ง", "Select a profile picture" : "เลือกรูปภาพโปรไฟล์", - "Week starts on {fdow}" : "เริ่มต้นสัปดาห์วัน{fdow}", + "Week starts on {fdow}" : "เริ่มต้นสัปดาห์{fdow}", "You created app password \"{token}\"" : "คุณสร้างรหัสผ่านแอป \"{token}\" แล้ว", "Couldn't remove app." : "ไม่สามารถลบแอป", "Couldn't update app." : "ไม่สามารถอัปเดตแอป", diff --git a/apps/settings/l10n/th.json b/apps/settings/l10n/th.json index 7b92e630504..64e3c2043e0 100644 --- a/apps/settings/l10n/th.json +++ b/apps/settings/l10n/th.json @@ -44,7 +44,7 @@ "Authentication error" : "เกิดข้อผิดพลาดในการตรวจสอบสิทธิ์", "Please provide an admin recovery password; otherwise, all user data will be lost." : "โปรดใส่รหัสผ่านกู้คืนของผู้ดูแลระบบ มิฉะนั้น ข้อมูลของผู้ใช้ทั้งหมดจะหายไป", "Wrong admin recovery password. Please check the password and try again." : "รหัสผ่านกู้คืนของผู้ดูแลระบบไม่ถูกต้อง กรุณาตรวจสอบรหัสผ่านและลองอีกครั้ง", - "Federated Cloud Sharing" : "แชร์กับสหพันธ์คลาวด์", + "Federated Cloud Sharing" : "คลาวด์แชร์กับสหพันธ์", "cURL is using an outdated %1$s version (%2$s). Please update your operating system or features such as %3$s will not work reliably." : "cURL กำลังใช้ %1$s รุ่นเก่า (%2$s) โปรดอัปเดตระบบปฏิบัติการ ไม่เช่นนั้นคุณสมบัติเช่น %3$s จะไม่สามารถทำงานอย่างมีประสิทธิภาพ", "Administrator documentation" : "เอกสารประกอบสำหรับผู้ดูแลระบบ", "User documentation" : "เอกสารประกอบสำหรับผู้ใช้", @@ -311,7 +311,7 @@ "An error occurred while changing your language. Please reload the page and try again." : "เกิดข้อผิดพลาดขณะเปลี่ยนภาษา กรุณาโหลดหน้าใหม่และลองอีกครั้ง", "An error occurred while changing your locale. Please reload the page and try again." : "เกิดข้อผิดพลาดขณะเปลี่ยนตำแหน่งที่ตั้ง กรุณาโหลดหน้าใหม่และลองอีกครั้ง", "Select a profile picture" : "เลือกรูปภาพโปรไฟล์", - "Week starts on {fdow}" : "เริ่มต้นสัปดาห์วัน{fdow}", + "Week starts on {fdow}" : "เริ่มต้นสัปดาห์{fdow}", "You created app password \"{token}\"" : "คุณสร้างรหัสผ่านแอป \"{token}\" แล้ว", "Couldn't remove app." : "ไม่สามารถลบแอป", "Couldn't update app." : "ไม่สามารถอัปเดตแอป", diff --git a/apps/settings/lib/Controller/CheckSetupController.php b/apps/settings/lib/Controller/CheckSetupController.php index eaaacc3fd22..a5c158d2602 100644 --- a/apps/settings/lib/Controller/CheckSetupController.php +++ b/apps/settings/lib/Controller/CheckSetupController.php @@ -524,11 +524,11 @@ Raw output } if ( - empty($status['interned_strings_usage']['free_memory']) || + // Do not recommend to raise the interned strings buffer size above a quarter of the total OPcache size + ($this->iniGetWrapper->getNumeric('opcache.interned_strings_buffer') < $this->iniGetWrapper->getNumeric('opcache.memory_consumption') / 4) && ( - ($status['interned_strings_usage']['used_memory'] / $status['interned_strings_usage']['free_memory'] > 9) && - // Do not recommend to raise the interned strings buffer size above a quarter of the total OPcache size - ($this->iniGetWrapper->getNumeric('opcache.interned_strings_buffer') < $this->iniGetWrapper->getNumeric('opcache.memory_consumption') / 4) + empty($status['interned_strings_usage']['free_memory']) || + ($status['interned_strings_usage']['used_memory'] / $status['interned_strings_usage']['free_memory'] > 9) ) ) { $recommendations[] = $this->l10n->t('The OPcache interned strings buffer is nearly full. To assure that repeating strings can be effectively cached, it is recommended to apply <code>opcache.interned_strings_buffer</code> to your PHP configuration with a value higher than <code>%s</code>.', [($this->iniGetWrapper->getNumeric('opcache.interned_strings_buffer') ?: 'currently')]); diff --git a/apps/systemtags/l10n/de.js b/apps/systemtags/l10n/de.js index 8cda9530563..ce5b384346c 100644 --- a/apps/systemtags/l10n/de.js +++ b/apps/systemtags/l10n/de.js @@ -43,7 +43,7 @@ OC.L10N.register( "%s (invisible)" : "%s (unsichtbar)", "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert", "Tags" : "Tags", - "All tagged %s …" : "Alle Schlagwörter %s hinzugefügt ....", + "All tagged %s …" : "Alle Schlagwörter %s hinzugefügt …", "tagged %s" : "Schlagwort %s hinzugefügt", "Collaborative tags" : "Kollaborative Tags", "Collaborative tagging functionality which shares tags among users." : "Kollaborative Tags Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt.", diff --git a/apps/systemtags/l10n/de.json b/apps/systemtags/l10n/de.json index f75f4f96726..7059730db9c 100644 --- a/apps/systemtags/l10n/de.json +++ b/apps/systemtags/l10n/de.json @@ -41,7 +41,7 @@ "%s (invisible)" : "%s (unsichtbar)", "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei wurden geändert", "Tags" : "Tags", - "All tagged %s …" : "Alle Schlagwörter %s hinzugefügt ....", + "All tagged %s …" : "Alle Schlagwörter %s hinzugefügt …", "tagged %s" : "Schlagwort %s hinzugefügt", "Collaborative tags" : "Kollaborative Tags", "Collaborative tagging functionality which shares tags among users." : "Kollaborative Tags Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt.", diff --git a/apps/systemtags/l10n/de_DE.js b/apps/systemtags/l10n/de_DE.js index 0939418f0a3..5eb7f800063 100644 --- a/apps/systemtags/l10n/de_DE.js +++ b/apps/systemtags/l10n/de_DE.js @@ -42,17 +42,17 @@ OC.L10N.register( "%s (restricted)" : "%s (eingeschränkt)", "%s (invisible)" : "%s (unsichtbar)", "<strong>System tags</strong> for a file have been modified" : "<strong>System-Schlagwort</strong> für eine Datei wurde geändert", - "Tags" : "Schlagwörter", - "All tagged %s …" : "Alle Schlagwörter %s hinzugefügt ....", + "Tags" : "Schlagworte", + "All tagged %s …" : "Alle Schlagwort %s hinzugefügt ....", "tagged %s" : "Schlagwort %s hinzugefügt", - "Collaborative tags" : "Kollaborative Schlagwörter", + "Collaborative tags" : "Kollaborative Schlagworte", "Collaborative tagging functionality which shares tags among users." : "Gemeinschaftliche Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Gemeinschaftliche Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt. Sehr gut für Gruppen.\n\t(Wenn Sie ein Anbieter mit einer Mehrkundeninstallation sind, so ist angeraten diese App zu deaktiveren, da die Schlagworte mit allen Kunden geteilt werden.)", - "Tagged files" : "Mit Schlagwörter versehene Dateien", - "Select tags to filter by" : "Wählen Sie Schlagwörter nach denen gefiltert werden soll", - "No tags found" : "Keine Schlagwörter gefunden", - "Please select tags to filter by" : "Bitte wählen Sie Schlagwörter, nach denen gefiltert werden soll", - "No files found for the selected tags" : "Keine Dateien für die ausgewählten Schlagwörter gefunden", + "Tagged files" : "Mit Schlagworten versehene Dateien", + "Select tags to filter by" : "Wählen Sie Schlagworte nach denen gefiltert werden soll", + "No tags found" : "Keine Schlagworte gefunden", + "Please select tags to filter by" : "Bitte wählen Sie Schlagworte, nach denen gefiltert werden soll", + "No files found for the selected tags" : "Keine Dateien für die ausgewählten Schlagworte gefunden", "Collaborative tags are available for all users. Restricted tags are visible to users but cannot be assigned by them. Invisible tags are for internal use, since users cannot see or assign them." : "Gemeinschaftliche Schlagworte sind für alle Benutzer verfügbar. Eingeschränkte Schlagworte sind für alle Benutzer sichtbar, können jedoch nicht zugewiesen werden. Nicht sichtbare Schlagworte sind für interne Verwendung und können vom Benutzer nicht eingesehen und nicht zugewiesen werden.", "Create a new tag" : "Neues Schlagwort erstellen", "Name" : "Name", diff --git a/apps/systemtags/l10n/de_DE.json b/apps/systemtags/l10n/de_DE.json index 46447b61e49..52f49cf683e 100644 --- a/apps/systemtags/l10n/de_DE.json +++ b/apps/systemtags/l10n/de_DE.json @@ -40,17 +40,17 @@ "%s (restricted)" : "%s (eingeschränkt)", "%s (invisible)" : "%s (unsichtbar)", "<strong>System tags</strong> for a file have been modified" : "<strong>System-Schlagwort</strong> für eine Datei wurde geändert", - "Tags" : "Schlagwörter", - "All tagged %s …" : "Alle Schlagwörter %s hinzugefügt ....", + "Tags" : "Schlagworte", + "All tagged %s …" : "Alle Schlagwort %s hinzugefügt ....", "tagged %s" : "Schlagwort %s hinzugefügt", - "Collaborative tags" : "Kollaborative Schlagwörter", + "Collaborative tags" : "Kollaborative Schlagworte", "Collaborative tagging functionality which shares tags among users." : "Gemeinschaftliche Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt.", "Collaborative tagging functionality which shares tags among users. Great for teams.\n\t(If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)" : "Gemeinschaftliche Schlagwort-Funktionalität, welche Schlagworte unter den Benutzern teilt. Sehr gut für Gruppen.\n\t(Wenn Sie ein Anbieter mit einer Mehrkundeninstallation sind, so ist angeraten diese App zu deaktiveren, da die Schlagworte mit allen Kunden geteilt werden.)", - "Tagged files" : "Mit Schlagwörter versehene Dateien", - "Select tags to filter by" : "Wählen Sie Schlagwörter nach denen gefiltert werden soll", - "No tags found" : "Keine Schlagwörter gefunden", - "Please select tags to filter by" : "Bitte wählen Sie Schlagwörter, nach denen gefiltert werden soll", - "No files found for the selected tags" : "Keine Dateien für die ausgewählten Schlagwörter gefunden", + "Tagged files" : "Mit Schlagworten versehene Dateien", + "Select tags to filter by" : "Wählen Sie Schlagworte nach denen gefiltert werden soll", + "No tags found" : "Keine Schlagworte gefunden", + "Please select tags to filter by" : "Bitte wählen Sie Schlagworte, nach denen gefiltert werden soll", + "No files found for the selected tags" : "Keine Dateien für die ausgewählten Schlagworte gefunden", "Collaborative tags are available for all users. Restricted tags are visible to users but cannot be assigned by them. Invisible tags are for internal use, since users cannot see or assign them." : "Gemeinschaftliche Schlagworte sind für alle Benutzer verfügbar. Eingeschränkte Schlagworte sind für alle Benutzer sichtbar, können jedoch nicht zugewiesen werden. Nicht sichtbare Schlagworte sind für interne Verwendung und können vom Benutzer nicht eingesehen und nicht zugewiesen werden.", "Create a new tag" : "Neues Schlagwort erstellen", "Name" : "Name", diff --git a/apps/theming/l10n/cs.js b/apps/theming/l10n/cs.js index 63841f2e610..ff9f26978c0 100644 --- a/apps/theming/l10n/cs.js +++ b/apps/theming/l10n/cs.js @@ -95,6 +95,8 @@ OC.L10N.register( "Login image" : "Přihlašovací obrázek", "Upload new login background" : "Nahrát nové pozadí pro přihlašovací obrazovku", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Nainstalujte rozšíření Imagemagick PHP s podporou obrázků SVG, které automaticky vytváří favicon na základě nahraného loga a barvy.", + "Migrate and cleanup admin theming images" : "Přemigrovat a uklidit v obrázcích pro opatřování vzhledem správcem", + "Failed to cleanup the old admin image folder" : "Nepodařilo se uklidit v původní složce s obrázky určovanými správcem", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "V některých případech klávesové zkratky kolidují s nástroji pro zpřístupnění. Aby bylo zajištěno správné zaměřování vámi využívaného nástroje, je zde možné vypnout veškeré klávesové zkratky pro Nextcloud. Toto také vypne veškeré zkratky, které jsou k dispozici v aplikacích.", "Pick from Files" : "Vybrat ze souborů", "Default image" : "Výchozí obrázek", diff --git a/apps/theming/l10n/cs.json b/apps/theming/l10n/cs.json index cb528e8ddb8..1fa8cc4a5e4 100644 --- a/apps/theming/l10n/cs.json +++ b/apps/theming/l10n/cs.json @@ -93,6 +93,8 @@ "Login image" : "Přihlašovací obrázek", "Upload new login background" : "Nahrát nové pozadí pro přihlašovací obrazovku", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Nainstalujte rozšíření Imagemagick PHP s podporou obrázků SVG, které automaticky vytváří favicon na základě nahraného loga a barvy.", + "Migrate and cleanup admin theming images" : "Přemigrovat a uklidit v obrázcích pro opatřování vzhledem správcem", + "Failed to cleanup the old admin image folder" : "Nepodařilo se uklidit v původní složce s obrázky určovanými správcem", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "V některých případech klávesové zkratky kolidují s nástroji pro zpřístupnění. Aby bylo zajištěno správné zaměřování vámi využívaného nástroje, je zde možné vypnout veškeré klávesové zkratky pro Nextcloud. Toto také vypne veškeré zkratky, které jsou k dispozici v aplikacích.", "Pick from Files" : "Vybrat ze souborů", "Default image" : "Výchozí obrázek", diff --git a/apps/theming/l10n/de.js b/apps/theming/l10n/de.js index 5f70b806ab6..4cad2698696 100644 --- a/apps/theming/l10n/de.js +++ b/apps/theming/l10n/de.js @@ -76,14 +76,17 @@ OC.L10N.register( "Set a custom background" : "Einen benutzerdefinierten Hintergrund setzen", "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." : "Der unbeschränkte Zugang ist für uns sehr wichtig. Wir halten uns an Webstandards und prüfen, ob alles auch ohne Maus und unterstützende Software wie Screenreader nutzbar ist. Wir streben die Einhaltung der {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 auf AA-Niveau an, mit dem kontrastreichen Design sogar auf AAA-Niveau.", "If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Wenn du Fehler findest, melde sie bitte im {issuetracker}Problemverfolgungssystem{linkend}. Und wenn du mithelfen willst, tritt dem {designteam}Designteam{linkend} bei!", + "Custom background" : "Benutzerdefinierter Hintergrund", + "Default background" : "Standardhintergrund", "Change color" : "Farbe ändern", + "Remove background" : "Hintergrund entfernen", "Select a background from your files" : "Wähle einen Hintergrund aus deinen Dateien", "Theme selection is enforced" : "Designauswahl wird erzwungen", "Select a custom color" : "Eine benutzerdefinierte Farbe auswählen", "Reset to default" : " Auf Standard zurücksetzen ", "Upload" : "Hochladen", "Remove background image" : "Hintergrundbild entfernen", - "Loading preview…" : "Lade Vorschau…", + "Loading preview…" : "Lade Vorschau …", "Admin" : "Administrator", "Error uploading the file" : "Fehler beim Hochladen der Datei", "Name cannot be empty" : "Der Name darf nicht leer sein", @@ -92,6 +95,8 @@ OC.L10N.register( "Login image" : "Anmeldebild", "Upload new login background" : "Neuen Anmelde-Hintergrund hochladen", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Installiere die Imagemagick PHP-Erweiterung mit Unterstützung für SVG-Bilder, um automatisch Favicons auf Basis des hochgeladenen Logos und der Farbe zu erstellen.", + "Migrate and cleanup admin theming images" : "Admin-Designbilder migrieren und bereinigen", + "Failed to cleanup the old admin image folder" : "Fehler beim Bereinigen des alten Admin Bilderordners", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "In einigen Fällen können Tastenkombinationen Werkzeuge zur Barrierefreiheit beeinträchtigen. Damit du dich richtig auf dein Werkzeug konzentrieren kannst, kannst du hier alle Tastaturkürzel deaktivieren. Dadurch werden auch alle verfügbaren Verknüpfungen in Apps deaktiviert.", "Pick from Files" : "Aus Dateien auswählen", "Default image" : "Standardbild", diff --git a/apps/theming/l10n/de.json b/apps/theming/l10n/de.json index 2e13f850eb1..a2735928c35 100644 --- a/apps/theming/l10n/de.json +++ b/apps/theming/l10n/de.json @@ -74,14 +74,17 @@ "Set a custom background" : "Einen benutzerdefinierten Hintergrund setzen", "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." : "Der unbeschränkte Zugang ist für uns sehr wichtig. Wir halten uns an Webstandards und prüfen, ob alles auch ohne Maus und unterstützende Software wie Screenreader nutzbar ist. Wir streben die Einhaltung der {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 auf AA-Niveau an, mit dem kontrastreichen Design sogar auf AAA-Niveau.", "If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Wenn du Fehler findest, melde sie bitte im {issuetracker}Problemverfolgungssystem{linkend}. Und wenn du mithelfen willst, tritt dem {designteam}Designteam{linkend} bei!", + "Custom background" : "Benutzerdefinierter Hintergrund", + "Default background" : "Standardhintergrund", "Change color" : "Farbe ändern", + "Remove background" : "Hintergrund entfernen", "Select a background from your files" : "Wähle einen Hintergrund aus deinen Dateien", "Theme selection is enforced" : "Designauswahl wird erzwungen", "Select a custom color" : "Eine benutzerdefinierte Farbe auswählen", "Reset to default" : " Auf Standard zurücksetzen ", "Upload" : "Hochladen", "Remove background image" : "Hintergrundbild entfernen", - "Loading preview…" : "Lade Vorschau…", + "Loading preview…" : "Lade Vorschau …", "Admin" : "Administrator", "Error uploading the file" : "Fehler beim Hochladen der Datei", "Name cannot be empty" : "Der Name darf nicht leer sein", @@ -90,6 +93,8 @@ "Login image" : "Anmeldebild", "Upload new login background" : "Neuen Anmelde-Hintergrund hochladen", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Installiere die Imagemagick PHP-Erweiterung mit Unterstützung für SVG-Bilder, um automatisch Favicons auf Basis des hochgeladenen Logos und der Farbe zu erstellen.", + "Migrate and cleanup admin theming images" : "Admin-Designbilder migrieren und bereinigen", + "Failed to cleanup the old admin image folder" : "Fehler beim Bereinigen des alten Admin Bilderordners", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "In einigen Fällen können Tastenkombinationen Werkzeuge zur Barrierefreiheit beeinträchtigen. Damit du dich richtig auf dein Werkzeug konzentrieren kannst, kannst du hier alle Tastaturkürzel deaktivieren. Dadurch werden auch alle verfügbaren Verknüpfungen in Apps deaktiviert.", "Pick from Files" : "Aus Dateien auswählen", "Default image" : "Standardbild", diff --git a/apps/theming/l10n/de_DE.js b/apps/theming/l10n/de_DE.js index 166499ffe04..5d71c2c9399 100644 --- a/apps/theming/l10n/de_DE.js +++ b/apps/theming/l10n/de_DE.js @@ -21,7 +21,7 @@ OC.L10N.register( "Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden", "A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt", "No file uploaded" : "Keine Datei hochgeladen", - "Cleanup old theming cache" : "Alten Design-Cache leeren", + "Cleanup old theming cache" : "Alten Design-Zwischenspeicher leeren", "Failed to delete folder: \"%1$s\", error: %2$s" : "Ordner konnte nicht gelöscht werden: \"%1$s\", Fehler: %2$s", "You are already using a custom theme. Theming app settings might be overwritten by that." : "Sie benutzen bereits ein benutzerdefiniertes Design. Die App \"Theming\" würde dies überschreiben.", "Theming" : "Design", @@ -95,6 +95,8 @@ OC.L10N.register( "Login image" : "Anmeldebild", "Upload new login background" : "Neuen Anmelde-Hintergrund hochladen", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Installieren Sie die Imagemagick PHP-Erweiterung mit Unterstützung für SVG-Bilder, um automatisch Favicons auf Basis des hochgeladenen Logos und der Farbe zu erstellen.", + "Migrate and cleanup admin theming images" : "Admin-Designbilder migrieren und bereinigen", + "Failed to cleanup the old admin image folder" : "Fehler beim Bereinigen des alten Admin Bilderordners", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "In einigen Fällen können Tastenkombinationen Barrierefreiheits-Tools beeinträchtigen. Damit Sie sich richtig auf Ihr Werkzeug konzentrieren können, können Sie hier alle Tastaturkürzel deaktivieren. Dadurch werden auch alle verfügbaren Verknüpfungen in Apps deaktiviert.", "Pick from Files" : "Aus Dateien auswählen", "Default image" : "Standardbild", diff --git a/apps/theming/l10n/de_DE.json b/apps/theming/l10n/de_DE.json index 240a17f9926..661e98ea8bf 100644 --- a/apps/theming/l10n/de_DE.json +++ b/apps/theming/l10n/de_DE.json @@ -19,7 +19,7 @@ "Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden", "A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt", "No file uploaded" : "Keine Datei hochgeladen", - "Cleanup old theming cache" : "Alten Design-Cache leeren", + "Cleanup old theming cache" : "Alten Design-Zwischenspeicher leeren", "Failed to delete folder: \"%1$s\", error: %2$s" : "Ordner konnte nicht gelöscht werden: \"%1$s\", Fehler: %2$s", "You are already using a custom theme. Theming app settings might be overwritten by that." : "Sie benutzen bereits ein benutzerdefiniertes Design. Die App \"Theming\" würde dies überschreiben.", "Theming" : "Design", @@ -93,6 +93,8 @@ "Login image" : "Anmeldebild", "Upload new login background" : "Neuen Anmelde-Hintergrund hochladen", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Installieren Sie die Imagemagick PHP-Erweiterung mit Unterstützung für SVG-Bilder, um automatisch Favicons auf Basis des hochgeladenen Logos und der Farbe zu erstellen.", + "Migrate and cleanup admin theming images" : "Admin-Designbilder migrieren und bereinigen", + "Failed to cleanup the old admin image folder" : "Fehler beim Bereinigen des alten Admin Bilderordners", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "In einigen Fällen können Tastenkombinationen Barrierefreiheits-Tools beeinträchtigen. Damit Sie sich richtig auf Ihr Werkzeug konzentrieren können, können Sie hier alle Tastaturkürzel deaktivieren. Dadurch werden auch alle verfügbaren Verknüpfungen in Apps deaktiviert.", "Pick from Files" : "Aus Dateien auswählen", "Default image" : "Standardbild", diff --git a/apps/theming/l10n/en_GB.js b/apps/theming/l10n/en_GB.js index 09d13d440fe..b9f59a5319a 100644 --- a/apps/theming/l10n/en_GB.js +++ b/apps/theming/l10n/en_GB.js @@ -95,6 +95,8 @@ OC.L10N.register( "Login image" : "Login image", "Upload new login background" : "Upload new login background", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and colour.", + "Migrate and cleanup admin theming images" : "Migrate and clean up admin theming images", + "Failed to cleanup the old admin image folder" : "Failed to clean up the old admin image folder", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps.", "Pick from Files" : "Pick from Files", "Default image" : "Default image", diff --git a/apps/theming/l10n/en_GB.json b/apps/theming/l10n/en_GB.json index 2b1b845a50b..afe6e84832b 100644 --- a/apps/theming/l10n/en_GB.json +++ b/apps/theming/l10n/en_GB.json @@ -93,6 +93,8 @@ "Login image" : "Login image", "Upload new login background" : "Upload new login background", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and colour.", + "Migrate and cleanup admin theming images" : "Migrate and clean up admin theming images", + "Failed to cleanup the old admin image folder" : "Failed to clean up the old admin image folder", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps.", "Pick from Files" : "Pick from Files", "Default image" : "Default image", diff --git a/apps/theming/l10n/hu.js b/apps/theming/l10n/hu.js index cf1dcbb50ff..153be88d2f0 100644 --- a/apps/theming/l10n/hu.js +++ b/apps/theming/l10n/hu.js @@ -95,6 +95,8 @@ OC.L10N.register( "Login image" : "Bejelentkező kép", "Upload new login background" : "Új bejelentkező kép feltöltése", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Telepítse az Imagemagick PHP kiterjesztést SVG képtámogatással, hogy automatikusan előállítsa a kedvencek ikont a feltöltött logó és szín alapján.", + "Migrate and cleanup admin theming images" : "Rendszergazdai témázó képek áthelyezése és tisztítása", + "Failed to cleanup the old admin image folder" : "Nem sikerült megtisztítani a régi rendszergazdai képmappát", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "Egyes esetekben a gyorsbillentyűk összeakadhatnak az akadálymentesítési eszközökkel. Hogy helyesen tudjon fókuszálni az eszközre, itt letilthatja a gyorsbillentyűket. Ez az alkalmazásokban is letiltja az összes elérhető gyorsbillentyűt.", "Pick from Files" : "Válasszon a Fájlokból", "Default image" : "Alapértelmezett kép", diff --git a/apps/theming/l10n/hu.json b/apps/theming/l10n/hu.json index ce13597bbef..a84348bc58d 100644 --- a/apps/theming/l10n/hu.json +++ b/apps/theming/l10n/hu.json @@ -93,6 +93,8 @@ "Login image" : "Bejelentkező kép", "Upload new login background" : "Új bejelentkező kép feltöltése", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Telepítse az Imagemagick PHP kiterjesztést SVG képtámogatással, hogy automatikusan előállítsa a kedvencek ikont a feltöltött logó és szín alapján.", + "Migrate and cleanup admin theming images" : "Rendszergazdai témázó képek áthelyezése és tisztítása", + "Failed to cleanup the old admin image folder" : "Nem sikerült megtisztítani a régi rendszergazdai képmappát", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "Egyes esetekben a gyorsbillentyűk összeakadhatnak az akadálymentesítési eszközökkel. Hogy helyesen tudjon fókuszálni az eszközre, itt letilthatja a gyorsbillentyűket. Ez az alkalmazásokban is letiltja az összes elérhető gyorsbillentyűt.", "Pick from Files" : "Válasszon a Fájlokból", "Default image" : "Alapértelmezett kép", diff --git a/apps/theming/l10n/pl.js b/apps/theming/l10n/pl.js index d2f61311b45..f825a4e144f 100644 --- a/apps/theming/l10n/pl.js +++ b/apps/theming/l10n/pl.js @@ -95,6 +95,8 @@ OC.L10N.register( "Login image" : "Obraz logowania", "Upload new login background" : "Wyślij nowe tło logowania", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Zainstaluj rozszerzenie Imagemagick PHP z obsługą obrazów SVG, aby automatycznie generować favicony w oparciu o wysłane logo i kolor.", + "Migrate and cleanup admin theming images" : "Migruj i wyczyść obrazy motywów administracyjnych", + "Failed to cleanup the old admin image folder" : "Nie udało się wyczyścić starego katalogu obrazu administratora", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "W niektórych przypadkach skróty klawiaturowe mogą kolidować z narzędziami ułatwień dostępu. Aby umożliwić prawidłowe skupienie się na narzędziu, możesz tutaj wyłączyć wszystkie skróty klawiaturowe. Spowoduje to również wyłączenie wszystkich dostępnych skrótów w aplikacjach.", "Pick from Files" : "Wybierz z Plików", "Default image" : "Obraz domyślny", diff --git a/apps/theming/l10n/pl.json b/apps/theming/l10n/pl.json index e5a3527f662..b63f9a1ac9e 100644 --- a/apps/theming/l10n/pl.json +++ b/apps/theming/l10n/pl.json @@ -93,6 +93,8 @@ "Login image" : "Obraz logowania", "Upload new login background" : "Wyślij nowe tło logowania", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Zainstaluj rozszerzenie Imagemagick PHP z obsługą obrazów SVG, aby automatycznie generować favicony w oparciu o wysłane logo i kolor.", + "Migrate and cleanup admin theming images" : "Migruj i wyczyść obrazy motywów administracyjnych", + "Failed to cleanup the old admin image folder" : "Nie udało się wyczyścić starego katalogu obrazu administratora", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "W niektórych przypadkach skróty klawiaturowe mogą kolidować z narzędziami ułatwień dostępu. Aby umożliwić prawidłowe skupienie się na narzędziu, możesz tutaj wyłączyć wszystkie skróty klawiaturowe. Spowoduje to również wyłączenie wszystkich dostępnych skrótów w aplikacjach.", "Pick from Files" : "Wybierz z Plików", "Default image" : "Obraz domyślny", diff --git a/apps/theming/l10n/sv.js b/apps/theming/l10n/sv.js index ac8f1e228db..0eed3d1c5a8 100644 --- a/apps/theming/l10n/sv.js +++ b/apps/theming/l10n/sv.js @@ -49,6 +49,7 @@ OC.L10N.register( "Adjust the Nextcloud theme" : "Justera Nextcloud-tema", "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Teman gör det möjligt att enkelt skräddarsy utseendet på ditt moln. Detta kommer att synas för alla användare.", "Advanced options" : "Avancerade inställningar", + "Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Installera Imagemagick PHP-tillägget med stöd för SVG-bilder för att automatiskt generera favicons baserat på den uppladdade logotypen och färgen.", "Name" : "Namn", "Web link" : "Webblänk", "a safe home for all your data" : "ett säkert hem för all din data", @@ -66,7 +67,9 @@ OC.L10N.register( "Upload new favicon" : "Ladda upp nya favicon", "User settings" : "Användarinställningar", "Disable user theming" : "Inaktivera teman för användare", + "Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can toggle this on." : "Även om du kan välja och anpassa din instans kan användare ändra sin bakgrund och färger. Om du vill genomdriva din anpassning kan du aktivera detta.", "Keyboard shortcuts" : "Tangentbordsgenvägar", + "In some cases keyboard shortcuts can interfere with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "I vissa fall kan tangentbordsgenvägar störa tillgänglighetsverktyg. För att kunna fokusera på ditt verktyg korrekt kan du inaktivera alla tangentbordsgenvägar här. Detta kommer också att inaktivera alla tillgängliga genvägar i appar.", "Disable all keyboard shortcuts" : "Inaktivera alla tangentbordsgenvägar", "Background" : "Bakgrund", "Customization has been disabled by your administrator" : "Anpassning har inaktiverats av din administratör", @@ -78,6 +81,7 @@ OC.L10N.register( "Change color" : "Ändra färg", "Remove background" : "Ta bort bakgrund", "Select a background from your files" : "Välj en bakgrund från dina filer", + "Theme selection is enforced" : "Temaval är tvingande", "Select a custom color" : "Välj en anpassad färg", "Reset to default" : "Återställ till grundinställningar", "Upload" : "Ladda upp", @@ -91,11 +95,14 @@ OC.L10N.register( "Login image" : "Inloggningsbild", "Upload new login background" : "Ladda upp ny bakgrundsbild", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Installera Imagemagick PHP-tillägget med stöd för SVG-bilder för att automatiskt generera favicons baserat på den uppladdade logotypen och färgen.", + "Migrate and cleanup admin theming images" : "Migrera och rensa admin temabilder", + "Failed to cleanup the old admin image folder" : "Misslyckades att rensa den gamla admin bildmappen", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "I vissa fall kan tangentbordsgenvägar störa tillgänglighetsverktyg. För att kunna fokusera på ditt verktyg korrekt kan du inaktivera alla tangentbordsgenvägar här. Detta kommer också att inaktivera alla tillgängliga genvägar i appar.", "Pick from Files" : "Välj från filer", "Default image" : "Standardbild", "Custom color" : "Anpassad färg", "Plain background" : "Enkel bakgrund", - "Insert from {productName}" : "Infoga från {productName}" + "Insert from {productName}" : "Infoga från {productName}", + "Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can check this box." : "Även om du kan välja och anpassa din instans kan användare ändra sin bakgrund och färger. Om du vill tvinga din anpassning kan du markera den här rutan." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/theming/l10n/sv.json b/apps/theming/l10n/sv.json index 2ef8ebfee08..ad6940a0c23 100644 --- a/apps/theming/l10n/sv.json +++ b/apps/theming/l10n/sv.json @@ -47,6 +47,7 @@ "Adjust the Nextcloud theme" : "Justera Nextcloud-tema", "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Teman gör det möjligt att enkelt skräddarsy utseendet på ditt moln. Detta kommer att synas för alla användare.", "Advanced options" : "Avancerade inställningar", + "Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Installera Imagemagick PHP-tillägget med stöd för SVG-bilder för att automatiskt generera favicons baserat på den uppladdade logotypen och färgen.", "Name" : "Namn", "Web link" : "Webblänk", "a safe home for all your data" : "ett säkert hem för all din data", @@ -64,7 +65,9 @@ "Upload new favicon" : "Ladda upp nya favicon", "User settings" : "Användarinställningar", "Disable user theming" : "Inaktivera teman för användare", + "Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can toggle this on." : "Även om du kan välja och anpassa din instans kan användare ändra sin bakgrund och färger. Om du vill genomdriva din anpassning kan du aktivera detta.", "Keyboard shortcuts" : "Tangentbordsgenvägar", + "In some cases keyboard shortcuts can interfere with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "I vissa fall kan tangentbordsgenvägar störa tillgänglighetsverktyg. För att kunna fokusera på ditt verktyg korrekt kan du inaktivera alla tangentbordsgenvägar här. Detta kommer också att inaktivera alla tillgängliga genvägar i appar.", "Disable all keyboard shortcuts" : "Inaktivera alla tangentbordsgenvägar", "Background" : "Bakgrund", "Customization has been disabled by your administrator" : "Anpassning har inaktiverats av din administratör", @@ -76,6 +79,7 @@ "Change color" : "Ändra färg", "Remove background" : "Ta bort bakgrund", "Select a background from your files" : "Välj en bakgrund från dina filer", + "Theme selection is enforced" : "Temaval är tvingande", "Select a custom color" : "Välj en anpassad färg", "Reset to default" : "Återställ till grundinställningar", "Upload" : "Ladda upp", @@ -89,11 +93,14 @@ "Login image" : "Inloggningsbild", "Upload new login background" : "Ladda upp ny bakgrundsbild", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Installera Imagemagick PHP-tillägget med stöd för SVG-bilder för att automatiskt generera favicons baserat på den uppladdade logotypen och färgen.", + "Migrate and cleanup admin theming images" : "Migrera och rensa admin temabilder", + "Failed to cleanup the old admin image folder" : "Misslyckades att rensa den gamla admin bildmappen", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "I vissa fall kan tangentbordsgenvägar störa tillgänglighetsverktyg. För att kunna fokusera på ditt verktyg korrekt kan du inaktivera alla tangentbordsgenvägar här. Detta kommer också att inaktivera alla tillgängliga genvägar i appar.", "Pick from Files" : "Välj från filer", "Default image" : "Standardbild", "Custom color" : "Anpassad färg", "Plain background" : "Enkel bakgrund", - "Insert from {productName}" : "Infoga från {productName}" + "Insert from {productName}" : "Infoga från {productName}", + "Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can check this box." : "Även om du kan välja och anpassa din instans kan användare ändra sin bakgrund och färger. Om du vill tvinga din anpassning kan du markera den här rutan." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/theming/l10n/tr.js b/apps/theming/l10n/tr.js index 0557406dcc1..95756258740 100644 --- a/apps/theming/l10n/tr.js +++ b/apps/theming/l10n/tr.js @@ -95,6 +95,8 @@ OC.L10N.register( "Login image" : "Oturum açma görseli", "Upload new login background" : "Yeni oturum açma arka planı yükle", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Yüklenen logo ve renge göre otomatik olarak favicon üretilmesi için Imagemagick PHP eklentisini SVG desteği ile kurun.", + "Migrate and cleanup admin theming images" : "Yönetim teması görsellerini aktar ve temizle", + "Failed to cleanup the old admin image folder" : "Eski yönetim image klasörü temizlenemedi", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "Bazı durumlarda klavye kısayolları erişilebilirlik araçlarına etki edebilir. Aracınıza doğru şekilde odaklanmanızı sağlamak için tüm klavye kısayollarını buradan devre dışı bırakabilirsiniz. Bu aynı zamanda uygulamalarda var olan tüm kısayolları da devre dışı bırakır.", "Pick from Files" : "Dosyalardan seçin", "Default image" : "Varsayılan görsel", diff --git a/apps/theming/l10n/tr.json b/apps/theming/l10n/tr.json index a4800e904e0..3f905387662 100644 --- a/apps/theming/l10n/tr.json +++ b/apps/theming/l10n/tr.json @@ -93,6 +93,8 @@ "Login image" : "Oturum açma görseli", "Upload new login background" : "Yeni oturum açma arka planı yükle", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Yüklenen logo ve renge göre otomatik olarak favicon üretilmesi için Imagemagick PHP eklentisini SVG desteği ile kurun.", + "Migrate and cleanup admin theming images" : "Yönetim teması görsellerini aktar ve temizle", + "Failed to cleanup the old admin image folder" : "Eski yönetim image klasörü temizlenemedi", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "Bazı durumlarda klavye kısayolları erişilebilirlik araçlarına etki edebilir. Aracınıza doğru şekilde odaklanmanızı sağlamak için tüm klavye kısayollarını buradan devre dışı bırakabilirsiniz. Bu aynı zamanda uygulamalarda var olan tüm kısayolları da devre dışı bırakır.", "Pick from Files" : "Dosyalardan seçin", "Default image" : "Varsayılan görsel", diff --git a/apps/theming/l10n/uk.js b/apps/theming/l10n/uk.js index 0d1df953b5f..06df5238f19 100644 --- a/apps/theming/l10n/uk.js +++ b/apps/theming/l10n/uk.js @@ -68,6 +68,7 @@ OC.L10N.register( "Keyboard shortcuts" : "Скорочення", "Disable all keyboard shortcuts" : "Вимкнути всі комбінації клавіш", "Background" : "Тло", + "Customization has been disabled by your administrator" : "Налаштування персоналізації вимкнено адміністатором.", "Set a custom background" : "Встановити спеціальне зображення тла", "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." : "Для нас дуже важливо забезпечити доступ для всіх. Ми дотримуємось веб-стандартів і перевіряємо, щоб забезпечити зручність користування без комп'ютерної миші, а також за допомогую допоміжного програмного забезпечення, наприклад, програми зчитування з екрана. Ми прагнемо відповідати {guidelines} Правила доступу до веб-вмісту {linkend} 2.1 на рівні AA, а з темою високої контрастності навіть на рівні AAA.", "If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Якщо ви виявите будь-які проблеми, не соромтеся повідомити про них на {issuetracker}нашій системі відстеження проблем{linkend}. І якщо ви хочете взяти участь, приєднуйтесь до {designteam}нашої команди дизайнерів{linkend}!", diff --git a/apps/theming/l10n/uk.json b/apps/theming/l10n/uk.json index 75ce1864b9f..f6fc1c3f2ee 100644 --- a/apps/theming/l10n/uk.json +++ b/apps/theming/l10n/uk.json @@ -66,6 +66,7 @@ "Keyboard shortcuts" : "Скорочення", "Disable all keyboard shortcuts" : "Вимкнути всі комбінації клавіш", "Background" : "Тло", + "Customization has been disabled by your administrator" : "Налаштування персоналізації вимкнено адміністатором.", "Set a custom background" : "Встановити спеціальне зображення тла", "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." : "Для нас дуже важливо забезпечити доступ для всіх. Ми дотримуємось веб-стандартів і перевіряємо, щоб забезпечити зручність користування без комп'ютерної миші, а також за допомогую допоміжного програмного забезпечення, наприклад, програми зчитування з екрана. Ми прагнемо відповідати {guidelines} Правила доступу до веб-вмісту {linkend} 2.1 на рівні AA, а з темою високої контрастності навіть на рівні AAA.", "If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Якщо ви виявите будь-які проблеми, не соромтеся повідомити про них на {issuetracker}нашій системі відстеження проблем{linkend}. І якщо ви хочете взяти участь, приєднуйтесь до {designteam}нашої команди дизайнерів{linkend}!", diff --git a/apps/theming/l10n/zh_HK.js b/apps/theming/l10n/zh_HK.js index 12db31e6403..ccbbaeff83e 100644 --- a/apps/theming/l10n/zh_HK.js +++ b/apps/theming/l10n/zh_HK.js @@ -95,6 +95,8 @@ OC.L10N.register( "Login image" : "登入圖像", "Upload new login background" : "上傳新的登入頁背景", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "安裝支援 SVG 圖片的 PHP ImageMagick 擴充元件,以上傳的圖示與顏色為基礎生成 favicons。", + "Migrate and cleanup admin theming images" : "遷移和清理管理主題圖像", + "Failed to cleanup the old admin image folder" : "無法清理舊的管理圖像資料夾", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "在某些情況下,鍵盤快捷鍵可能會干擾輔助工具。 為了允許正確地專注於您的工具,您可以在此處禁用所有鍵盤快捷鍵。 這還將禁用應用程式中的所有可用快捷方式。", "Pick from Files" : "從檔案選取", "Default image" : "默認圖像", diff --git a/apps/theming/l10n/zh_HK.json b/apps/theming/l10n/zh_HK.json index e9793b8a9c9..6d7b87fee32 100644 --- a/apps/theming/l10n/zh_HK.json +++ b/apps/theming/l10n/zh_HK.json @@ -93,6 +93,8 @@ "Login image" : "登入圖像", "Upload new login background" : "上傳新的登入頁背景", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "安裝支援 SVG 圖片的 PHP ImageMagick 擴充元件,以上傳的圖示與顏色為基礎生成 favicons。", + "Migrate and cleanup admin theming images" : "遷移和清理管理主題圖像", + "Failed to cleanup the old admin image folder" : "無法清理舊的管理圖像資料夾", "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "在某些情況下,鍵盤快捷鍵可能會干擾輔助工具。 為了允許正確地專注於您的工具,您可以在此處禁用所有鍵盤快捷鍵。 這還將禁用應用程式中的所有可用快捷方式。", "Pick from Files" : "從檔案選取", "Default image" : "默認圖像", diff --git a/apps/user_ldap/l10n/de.js b/apps/user_ldap/l10n/de.js index f2669fbf4a8..f20c62122eb 100644 --- a/apps/user_ldap/l10n/de.js +++ b/apps/user_ldap/l10n/de.js @@ -10,16 +10,17 @@ OC.L10N.register( "No action specified" : "Keine Aktion angegeben", "No configuration specified" : "Keine Konfiguration angegeben", "No data specified" : "Keine Daten angegeben", + "Invalid data specified" : "Ungültige Daten angegeben", " Could not set configuration %s" : "Die Konfiguration %s konnte nicht gesetzt werden", "Action does not exist" : "Aktion existiert nicht", - "Renewing …" : "Erneuere…", + "Renewing …" : "Erneuere …", "Very weak password" : "Sehr schwaches Passwort", "Weak password" : "Schwaches Passwort", "So-so password" : "Passables Passwort", "Good password" : "Gutes Passwort", "Strong password" : "Starkes Passwort", "The Base DN appears to be wrong" : "Die Base-DN scheint falsch zu sein", - "Testing configuration…" : "Teste Konfiguration…", + "Testing configuration…" : "Teste Konfiguration …", "Configuration incorrect" : "Konfiguration falsch", "Configuration incomplete" : "Konfiguration unvollständig", "Configuration OK" : "Konfiguration OK", diff --git a/apps/user_ldap/l10n/de.json b/apps/user_ldap/l10n/de.json index 18cfaa6baa6..b3ebfc6a0cf 100644 --- a/apps/user_ldap/l10n/de.json +++ b/apps/user_ldap/l10n/de.json @@ -8,16 +8,17 @@ "No action specified" : "Keine Aktion angegeben", "No configuration specified" : "Keine Konfiguration angegeben", "No data specified" : "Keine Daten angegeben", + "Invalid data specified" : "Ungültige Daten angegeben", " Could not set configuration %s" : "Die Konfiguration %s konnte nicht gesetzt werden", "Action does not exist" : "Aktion existiert nicht", - "Renewing …" : "Erneuere…", + "Renewing …" : "Erneuere …", "Very weak password" : "Sehr schwaches Passwort", "Weak password" : "Schwaches Passwort", "So-so password" : "Passables Passwort", "Good password" : "Gutes Passwort", "Strong password" : "Starkes Passwort", "The Base DN appears to be wrong" : "Die Base-DN scheint falsch zu sein", - "Testing configuration…" : "Teste Konfiguration…", + "Testing configuration…" : "Teste Konfiguration …", "Configuration incorrect" : "Konfiguration falsch", "Configuration incomplete" : "Konfiguration unvollständig", "Configuration OK" : "Konfiguration OK", diff --git a/apps/user_ldap/l10n/th.js b/apps/user_ldap/l10n/th.js index f0537e1ce56..bff42828ffc 100644 --- a/apps/user_ldap/l10n/th.js +++ b/apps/user_ldap/l10n/th.js @@ -1,141 +1,141 @@ OC.L10N.register( "user_ldap", { - "Failed to clear the mappings." : "ล้มเหลวขณะล้าง Mappings", + "Failed to clear the mappings." : "ไม่สามารถล้างการแมป", "Failed to delete the server configuration" : "ลบการกำหนดค่าเซิร์ฟเวอร์ล้มเหลว", "No action specified" : "ไม่ได้ระบุการดำเนินการ", - "No configuration specified" : "ไม่ได้กำหนดค่า", - "No data specified" : "ไม่มีข้อมูลที่ระบุ", - " Could not set configuration %s" : "ไม่สามารถตั้งค่า %s", - "Action does not exist" : "ไม่มีการดำเนินการ", - "Very weak password" : "รหัสผ่านระดับต่ำมาก", - "Weak password" : "รหัสผ่านระดับต่ำ", - "So-so password" : "รหัสผ่านระดับปกติ", + "No configuration specified" : "ไม่ได้ระบุการกำหนดค่า", + "No data specified" : "ไม่ได้ระบุข้อมูล", + " Could not set configuration %s" : "ไม่สามารถกำหนดค่า %s", + "Action does not exist" : "ไม่มีการดำเนินการนี้อยู่", + "Very weak password" : "รหัสผ่านคาดเดาง่ายมาก", + "Weak password" : "รหัสผ่านคาดเดาง่าย", + "So-so password" : "รหัสผ่านระดับพอใช้", "Good password" : "รหัสผ่านระดับดี", - "Strong password" : "รหัสผ่านระดับดีมาก", + "Strong password" : "รหัสผ่านคาดเดายาก", "The Base DN appears to be wrong" : "Base DN ดูเหมือนจะไม่ถูกต้อง", - "Testing configuration…" : "กำลังทดสอบการตั้งค่า ...", + "Testing configuration…" : "กำลังทดสอบการตั้งค่า...", "Configuration incorrect" : "การกำหนดค่าไม่ถูกต้อง", - "Configuration incomplete" : "กำหนดค่าไม่สำเร็จ", - "Configuration OK" : "กำหนดค่าเสร็จสมบูรณ์", + "Configuration incomplete" : "การกำหนดค่าไม่ครบถ้วน", + "Configuration OK" : "การกำหนดค่าใช้งานได้", "Select groups" : "เลือกกลุ่ม", "Select object classes" : "เลือกคลาสวัตถุ", - "Please check the credentials, they seem to be wrong." : "กรุณาตรวจสอบข้อมูลประจำตัวของพวกเขาดูเหมือนจะมีข้อผิดพลาด", - "Please specify the port, it could not be auto-detected." : "กรุณาระบุพอร์ต มันไม่สามารถตรวจพบอัตโนมัติ", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN ไม่สามารถตรวจพบโดยอัตโนมัติกรุณาแก้ไขข้อมูลของโฮสต์และพอร์ต", - "Could not detect Base DN, please enter it manually." : "ไม่สามารถตรวจสอบ Base DN โปรดเลือกด้วยตนเอง", + "Please check the credentials, they seem to be wrong." : "กรุณาตรวจสอบข้อมูลประจำตัว ดูเหมือนจะใส่ไม่ถูกต้อง", + "Please specify the port, it could not be auto-detected." : "กรุณาระบุพอร์ต เนื่องจากไม่สามารถตรวจพบโดยอัตโนมัติ", + "Base DN could not be auto-detected, please revise credentials, host and port." : "ไม่สามารถตรวจพบ Base DN โดยอัตโนมัติ กรุณาแก้ไขข้อมูลประจำตัว โฮสต์ และพอร์ต", + "Could not detect Base DN, please enter it manually." : "ไม่สามารถตรวจสอบ Base DN โปรดระบุด้วยตนเอง", "{nthServer}. Server" : "เซิร์ฟเวอร์ {nthServer}", - "No object found in the given Base DN. Please revise." : "ไม่พบวัตถุที่กำหนดใน Base DN กรุณาแก้ไข", + "No object found in the given Base DN. Please revise." : "ไม่พบวัตถุใน Base DN ที่ให้ไว้ กรุณาแก้ไข", "More than 1,000 directory entries available." : "ไดเรกทอรีมีอยู่มากกว่า 1,000 รายการ", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "เกิดข้อผิดพลาด กรุณาตรวจสอบ Base DN เช่นเดียวกับการตั้งค่าการเชื่อมต่อและข้อมูลที่สำคัญ", - "Do you really want to delete the current Server Configuration?" : "คุณแน่ใจแล้วหรือว่าต้องการลบการกำหนดค่าเซิร์ฟเวอร์ปัจจุบันทิ้งไป?", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "เกิดข้อผิดพลาด กรุณาตรวจสอบ Base DN รวมถึงการตั้งค่าการเชื่อมต่อและข้อมูลประจำตัว", + "Do you really want to delete the current Server Configuration?" : "คุณแน่ใจหรือไม่ว่าต้องการลบการกำหนดค่าเซิร์ฟเวอร์ปัจจุบัน?", "Confirm Deletion" : "ยืนยันการลบทิ้ง", - "Mappings cleared successfully!" : "ล้าง Mappings เรียบร้อยแล้ว", - "Error while clearing the mappings." : "เกิดข้อผิดพลาดขณะล้าง Mappings", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "บุคคลนิรนามไม่ได้รับอนุญาต กรุณาระบุ DN ของผู้ใช้และรหัสผ่าน", - "LDAP Operations error. Anonymous bind might not be allowed." : "ข้อผิดพลาดในการดำเนินการ LDAP บุคคลนิรนามอาจจะไม่ได้รับอนุญาต ", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "บันทึกล้มเหลว โปรดตรวจสอบฐานข้อมูลที่อยู่ในการดำเนินงาน โหลดหน้าใหม่อีกครั้งก่อนดำเนินการต่อ", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "โหมดสลับจะช่วยค้นหา LDAP อัตโนมัติ ขึ้นอยู่กับขนาด LDAP ของคุณมันอาจใช้เวลาสักครู่ คุณยังยังต้องการใช้โหมดสลับ?", - "Mode switch" : "โหมดสลับ", - "Select attributes" : "เลือกคุณลักษณะ", + "Mappings cleared successfully!" : "ล้างการแมปเรียบร้อยแล้ว", + "Error while clearing the mappings." : "เกิดข้อผิดพลาดขณะล้างการแมป", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "การผูกนิรนามไม่ได้รับอนุญาต กรุณาระบุ DN ของผู้ใช้และรหัสผ่าน", + "LDAP Operations error. Anonymous bind might not be allowed." : "ข้อผิดพลาดในการดำเนินการ LDAP การผูกนิรนามอาจจะไม่ได้รับอนุญาต ", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "การบันทึกล้มเหลว โปรดตรวจสอบว่าฐานข้อมูลอยู่ใน Operation โหลดหน้าใหม่ก่อนดำเนินการต่อ", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "การสลับโหมดจะเปิดใช้คิวรี LDAP อัตโนมัติ ซึ่งอาจใช้เวลาสักครู่ขึ้นอยู่กับขนาด LDAP ของคุณ คุณยังต้องการสลับโหมดหรือไม่?", + "Mode switch" : "สลับโหมด", + "Select attributes" : "เลือกแอททริบิวต์", "User found and settings verified." : "พบผู้ใช้และการตั้งค่าได้รับการตรวจสอบแล้ว", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "ตัวกรองการค้นหาไม่ถูกต้องอาจเป็นเพราะปัญหาไวยากรณ์เช่นหมายเลขที่ไม่สม่ำเสมอของวงเล็บเปิดและปิด กรุณาแก้ไข", - "Please provide a login name to test against" : "โปรดระบุชื่อที่ใช้ในการเข้าสู่ระบบเพื่อทดสอบข้อขัดแย้ง", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "ตัวกรองการค้นหาไม่ถูกต้อง อาจเป็นเพราะปัญหาไวยากรณ์ เช่น จำนวนวงเล็บเปิดและปิดที่ไม่สม่ำเสมอ กรุณาแก้ไข", + "Please provide a login name to test against" : "โปรดระบุชื่อที่ใช้ในการเข้าสู่ระบบเพื่อทดสอบ", "Could not find the desired feature" : "ไม่พบคุณลักษณะที่ต้องการ", "Invalid Host" : "โฮสต์ไม่ถูกต้อง", "Test Configuration" : "ทดสอบการตั้งค่า", "Help" : "ช่วยเหลือ", - "Groups meeting these criteria are available in %s:" : "การประชุมกลุ่มเหล่านี้มีหลักเกณฑ์อยู่ใน %s:", + "Groups meeting these criteria are available in %s:" : "กลุ่มที่เข้าเกณฑ์เหล่านี้มีอยู่ใน %s:", "Only these object classes:" : "เฉพาะคลาสของวัตถุเหล่านี้:", "Only from these groups:" : "เฉพาะจากกลุ่มเหล่านี้:", "Search groups" : "ค้นหากลุ่ม", "Available groups" : "กลุ่มที่สามารถใช้ได้", "Selected groups" : "กลุ่มที่เลือก", - "Edit LDAP Query" : "แก้ไข LDAP Query", + "Edit LDAP Query" : "แก้ไขคิวรี LDAP", "LDAP Filter:" : "ตัวกรอง LDAP:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "ระบุตัวกรองกลุ่ม LDAP ที่จะเข้าถึง %s", - "When logging in, %s will find the user based on the following attributes:" : "เมื่อเข้าสู่ระบบ %s จะได้พบกับผู้ใช้ตามลักษณะดังต่อไปนี้:", - "Other Attributes:" : "คุณลักษณะอื่นๆ:", - "Test Loginname" : "ทดสอบชื่อที่ใช้ในการเข้าสู่ระบบ", + "The filter specifies which LDAP groups shall have access to the %s instance." : "ตัวกรองระบุว่ากลุ่ม LDAP ใดบ้างจะสามารถเข้าถึงเซิร์ฟเวอร์ %s", + "When logging in, %s will find the user based on the following attributes:" : "เมื่อเข้าสู่ระบบ %s จะค้นหาผู้ใช้ตามแอททริบิวต์ดังต่อไปนี้:", + "Other Attributes:" : "คุณลักษณะอื่น ๆ:", + "Test Loginname" : "ทดสอบชื่อที่ใช้เข้าสู่ระบบ", "Verify settings" : "ตรวจสอบการตั้งค่า", - "%s. Server:" : "เซิร์ฟเวอร์%s", - "Copy current configuration into new directory binding" : "คัดลอกการตั้งค่าปัจจุบันลงในไดเรกทอรีใหม่ที่ผูกกัน", - "Delete the current configuration" : "ลบการตั้งค่าปัจจุบัน", + "%s. Server:" : "%s เซิร์ฟเวอร์:", + "Copy current configuration into new directory binding" : "คัดลอกการตั้งค่าปัจจุบันลงในการผูกไดเรกทอรีใหม่", + "Delete the current configuration" : "ลบการกำหนดค่าปัจจุบัน", "Host" : "โฮสต์", "Port" : "พอร์ต", - "Detect Port" : "ตรวจพบพอร์ต", + "Detect Port" : "ตรวจจับพอร์ต", "User DN" : "DN ของผู้ใช้งาน", - "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "DN ของผู้ใช้ไคลเอ็นต์อะไรก็ตามที่ผูกอยู่ด้วย เช่น uid=agent, dc=example, dc=com, สำหรับการเข้าถึงโดยบุคคลนิรนาม, ให้เว้นว่าง DN และรหัสผ่านเอาไว้", + "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "DN ของผู้ใช้ไคลเอ็นต์ที่ต้องการทำการผูก เช่น uid=agent,dc=example,dc=com สำหรับการเข้าถึงโดยบุคคลนิรนาม ให้เว้นว่างช่อง DN และรหัสผ่าน", "Password" : "รหัสผ่าน", - "For anonymous access, leave DN and Password empty." : "สำหรับการเข้าถึงโดยบุคคลนิรนาม ให้เว้นว่าง DN และรหัสผ่านไว้", + "For anonymous access, leave DN and Password empty." : "สำหรับการเข้าถึงนิรนาม ให้เว้นช่อง DN และรหัสผ่านไว้", "One Base DN per line" : "หนึ่ง Base DN ต่อหนึ่งบรรทัด", - "You can specify Base DN for users and groups in the Advanced tab" : "คุณสามารถระบุ Base DN หลักสำหรับผู้ใช้งานและกลุ่มต่างๆในแท็บขั้นสูงได้", - "Detect Base DN" : "ตรวจพบ Base DN", + "You can specify Base DN for users and groups in the Advanced tab" : "คุณสามารถระบุ Base DN หลักสำหรับผู้ใช้งานและกลุ่มต่าง ๆ ได้ในแท็บขั้นสูง", + "Detect Base DN" : "ตรวจจับ Base DN", "Test Base DN" : "ทดสอบ Base DN", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "หลีกเลี่ยงการร้องขอ LDAP อัตโนมัติ ดีกว่าสำหรับการตั้งค่าที่มากกว่า แต่ต้องมีความรู้เรื่อง LDAP", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "หลีกเลี่ยงคำขอ LDAP อัตโนมัติ ดีกว่าสำหรับการตั้งค่าที่มากกว่า แต่ต้องพอมีความรู้เรื่อง LDAP", "Manually enter LDAP filters (recommended for large directories)" : "ป้อนตัวกรอง LDAP ด้วยตนเอง (แนะนำสำหรับไดเรกทอรีขนาดใหญ่)", - "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "คลาสวัตถุที่พบมากที่สุดสำหรับผู้ใช้มี organizationalPerson, person, user และ inetOrgPerson หากคุณไม่แน่ใจว่าต้องเลือกคลาสวัตถุตัวไหนโปรดปรึกษาผู้ดูแลระบบไดเรกทอรีของคุณ", - "The filter specifies which LDAP users shall have access to the %s instance." : "ระบุตัวกรองที่ผู้ใช้ LDAP จะมีการเข้าถึง %s", - "Verify settings and count users" : "ตรวจสอบการตั้งค่าและการนับจำนวนผู้ใช้", - "Saving" : "บันทึก", + "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "คลาสวัตถุที่พบมากที่สุดสำหรับผู้ใช้มี organizationalPerson, person, user และ inetOrgPerson หากคุณไม่แน่ใจว่าต้องเลือกคลาสวัตถุตัวไหน โปรดปรึกษาผู้ดูแลระบบไดเรกทอรีของคุณ", + "The filter specifies which LDAP users shall have access to the %s instance." : "ตัวกรองระบุว่าผู้ใช้ LDAP ใดบ้างจะสามารถเข้าถึงเซิร์ฟเวอร์ %s", + "Verify settings and count users" : "ตรวจสอบการตั้งค่าและนับจำนวนผู้ใช้", + "Saving" : "กำลังบันทึก", "Back" : "ย้อนกลับ", "Continue" : "ดำเนินการต่อ", "An internal error occurred." : "เกิดข้อผิดพลาดภายใน", - "Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ", + "Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบของคุณ", "Current password" : "รหัสผ่านปัจจุบัน", "New password" : "รหัสผ่านใหม่", - "Wrong password." : "รหัสผ่านผิดพลาด", + "Wrong password." : "รหัสผ่านไม่ถูกต้อง", "Cancel" : "ยกเลิก", "Server" : "เซิร์ฟเวอร์", "Users" : "ผู้ใช้งาน", - "Login Attributes" : "คุณลักษณะการเข้าสู่ระบบ", + "Login Attributes" : "แอททริบิวต์การเข้าสู่ระบบ", "Groups" : "กลุ่ม", "Expert" : "ผู้เชี่ยวชาญ", "Advanced" : "ขั้นสูง", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>คำเตือน:</b> โมดูล PHP LDAP ยังไม่ได้ถูกติดตั้ง, ระบบด้านหลังจะไม่สามารถทำงานได้ กรุณาติดต่อผู้ดูแลระบบของคุณเพื่อทำการติดตั้งโมดูลดังกล่าว", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>คำเตือน:</b> โมดูล PHP LDAP ยังไม่ได้ถูกติดตั้ง แบ็กเอนด์จะไม่สามารถทำงานได้ กรุณาติดต่อให้ผู้ดูแลระบบของคุณทำการติดตั้ง", "Connection Settings" : "ตั้งค่าการเชื่อมต่อ", - "Configuration Active" : "ตั้งค่าการใช้งาน", - "When unchecked, this configuration will be skipped." : "ถ้าไม่เลือก การตั้งค่านี้จะถูกข้ามไป", - "Backup (Replica) Host" : "การสำรองข้อมูลโฮสต์ (สำรอง) ", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "ให้โฮสต์สำรองข้อมูลที่จำเป็นของเซิร์ฟเวอร์ LDAP/AD หลัก", - "Backup (Replica) Port" : "สำรองข้อมูลพอร์ต (จำลอง) ", + "Configuration Active" : "การกำหนดค่าใช้งานอยู่", + "When unchecked, this configuration will be skipped." : "เมื่อไม่เลือก การกำหนดค่านี้จะถูกข้ามไป", + "Backup (Replica) Host" : "โฮสต์สำรอง (จำลอง) ", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "ให้โฮสต์สำรอง (ไม่จำเป็น) ซึ่งต้องเป็นแบบจำลองของเซิร์ฟเวอร์ LDAP/AD หลัก", + "Backup (Replica) Port" : "พอร์ตสำรอง (จำลอง) ", "Disable Main Server" : "ปิดใช้งานเซิร์ฟเวอร์หลัก", - "Only connect to the replica server." : "เฉพาะเชื่อมต่อกับเซิร์ฟเวอร์แบบจำลอง", - "Turn off SSL certificate validation." : "ปิดใช้งานการตรวจสอบความถูกต้องของใบรับรองความปลอดภัย SSL", - "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "ไม่แนะนำ ควรใช้สำหรับการทดสอบเท่านั้น! ถ้าการเชื่อมต่อใช้งานได้เฉพาะกับตัวเลือกนี้ นำเข้าใบรับรอง SSL เซิร์ฟเวอร์ LDAP ในเซิร์ฟเวอร์ %s ของคุณ ", - "Cache Time-To-Live" : "แคช TTL", - "in seconds. A change empties the cache." : "ในอีกไม่กี่วินาที ระบบจะล้างข้อมูลในแคชให้ว่างเปล่า", - "Directory Settings" : "ตั้งค่าไดเร็กทอรี่", - "User Display Name Field" : "ช่องแสดงชื่อผู้ใช้งาน", - "The LDAP attribute to use to generate the user's display name." : "คุณลักษณะ LDAP เพื่อใช้ในการสร้างชื่อที่ปรากฏของผู้ใช้", - "2nd User Display Name Field" : "ช่องแสดงชื่อผู้ใช้งานคนที่ 2", + "Only connect to the replica server." : "เชื่อมต่อกับเซิร์ฟเวอร์แบบจำลองเท่านั้น", + "Turn off SSL certificate validation." : "ปิดใช้งานการตรวจสอบใบรับรอง SSL", + "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "ไม่แนะนำ ควรใช้สำหรับการทดสอบเท่านั้น! ถ้าการเชื่อมต่อใช้งานได้เฉพาะกับตัวเลือกนี้ นำเข้าใบรับรอง SSL ของเซิร์ฟเวอร์ LDAP ในเซิร์ฟเวอร์ %s ของคุณ ", + "Cache Time-To-Live" : "เวลาที่ดำรงอยู่ของแคช", + "in seconds. A change empties the cache." : "ในวินาที การเปลี่ยนค่านี้จะล้างข้อมูลในแคช", + "Directory Settings" : "ตั้งค่าไดเร็กทอรี", + "User Display Name Field" : "ช่องชื่อที่แสดงของผู้ใช้", + "The LDAP attribute to use to generate the user's display name." : "แอททริบิวต์ LDAP เพื่อใช้ในการสร้างชื่อที่แสดงของผู้ใช้", + "2nd User Display Name Field" : "ช่องชื่อที่แสดงของผู้ใช้ที่ 2", "Base User Tree" : "รายการผู้ใช้งานหลักแบบ Tree", - "One User Base DN per line" : "หนึ่งผู้ใช้ Base DN ต่อหนึ่งบรรทัด", + "One User Base DN per line" : "หนึ่ง Base DN ผู้ใช้ ต่อหนึ่งบรรทัด", "User Search Attributes" : "คุณลักษณะการค้นหาชื่อผู้ใช้", "Optional; one attribute per line" : "ตัวเลือกเพิ่มเติม; หนึ่งคุณลักษณะต่อบรรทัด", - "Group Display Name Field" : "ช่องแสดงชื่อกลุ่มที่ต้องการ", - "The LDAP attribute to use to generate the groups's display name." : "คุณลักษณะ LDAP เพื่อใช้ในการสร้างชื่อที่ปรากฏของกลุ่ม", + "Group Display Name Field" : "ช่องชื่อที่แสดงของกลุ่ม", + "The LDAP attribute to use to generate the groups's display name." : "แอททริบิวต์ LDAP เพื่อใช้ในการสร้างชื่อที่ปรากฏของกลุ่ม", "Base Group Tree" : "รายการกลุ่มหลักแบบ Tree", - "One Group Base DN per line" : "หนึ่ง Group Base DN ต่อหนึ่งบรรทัด", - "Group Search Attributes" : "คุณลักษณะการค้นหาแบบกลุ่ม", - "Group-Member association" : "ความสัมพันธ์ของสมาชิกในกลุ่ม", + "One Group Base DN per line" : "หนึ่ง Base DN กลุ่ม ต่อหนึ่งบรรทัด", + "Group Search Attributes" : "แอททริบิวต์การค้นหากลุ่ม", + "Group-Member association" : "ความสัมพันธ์ของกลุ่ม-สมาชิก", "Nested Groups" : "กลุ่มที่ซ้อนกัน", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "เมื่อเปิดสวิตซ์ กลุ่มจะได้รับการสนันสนุน (เฉพาะการทำงานถ้าคุณลักษณะสมาชิกกลุ่มมี DN)", - "Paging chunksize" : "ขนาด Paging chunk", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize ใช้สำหรับการค้นหาเพจ LDAP มันส่งคืนผลลัพธ์ที่มีขนาดใหญ่เช่นการนับผู้ใช้หรือกลุ่ม (ตั้งค่าเป็น 0 เพื่อปิดการใช้งาน)", - "Special Attributes" : "คุณลักษณะพิเศษ", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "เมื่อเปิดสวิตซ์ กลุ่มที่มีกลุ่มอยู่ด้านในจะได้รับการสนับสนุน (ใช้ได้เฉพาะถ้าแอททริบิวต์สมาชิกกลุ่มมี DN)", + "Paging chunksize" : "ขนาดกลุ่มเพจ", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "ขนาดกลุ่มที่ใช้สำหรับการค้นหา LDAP แบบเพจ ที่อาจส่งคืนผลลัพธ์ขนาดใหญ่ เช่น การนับผู้ใช้หรือกลุ่ม (ตั้งค่าเป็น 0 เพื่อปิดการใช้งานการค้นหา LDAP แบบเพจในสถานการณ์เหล่านั้น)", + "Special Attributes" : "แอททริบิวต์พิเศษ", "Quota Field" : "ช่องโควต้า", "Quota Default" : "โควต้าเริ่มต้น", "Email Field" : "ช่องอีเมล", - "User Home Folder Naming Rule" : "กฎการตั้งชื่อโฟลเดอร์แรกของผู้ใช้", + "User Home Folder Naming Rule" : "กฎการตั้งชื่อโฮมโฟลเดอร์ของผู้ใช้", "Internal Username" : "ชื่อผู้ใช้ภายใน", - "Internal Username Attribute:" : "ชื่อผู้ใช้ภายในคุณสมบัติ:", - "Override UUID detection" : "แทนที่การตรวจสอบ UUID", - "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "โดยค่าเริ่มต้นแอตทริบิวต์ UUID มีถูกตรวจพบโดยอัตโนมัติ แอตทริบิวต์ UUID จะใช้เพื่อระบุผู้ใช้ของ LDAP และกลุ่ม นอกจากนี้ยังมีชื่อผู้ใช้ภายในจะถูกสร้างขึ้นบนพื้นฐาน UUID หากไม่ได้ระบุไว้ข้างต้น คุณสามารถแทนที่การตั้งค่าและส่งแอตทริบิวต์ที่คุณเลือก คุณต้องให้แน่ใจว่าแอตทริบิวต์ที่คุณเลือกสามารถเป็นจริงสำหรับทั้งผู้ใช้และกลุ่มและมันควรจะไม่ซ้ำกัน ปล่อยให้มันว่างเปล่าสำหรับการทำงานเริ่มต้น การเปลี่ยนแปลงจะมีผลเฉพาะในแมปใหม่ (เพิ่ม) ผู้ใช้ LDAP และกลุ่ม", - "UUID Attribute for Users:" : "แอตทริบิวต์ UUID สำหรับผู้ใช้:", - "UUID Attribute for Groups:" : "แอตทริบิวต์ UUID สำหรับกลุ่ม:", - "Username-LDAP User Mapping" : "Username-LDAP ผู้ใช้ Mapping", - "Clear Username-LDAP User Mapping" : "ล้าง Username-LDAP ผู้ใช้ Mapping", - "Clear Groupname-LDAP Group Mapping" : "ล้าง Groupname-LDAP กลุ่ม Mapping" + "Internal Username Attribute:" : "แอททริบิวต์ชื่อผู้ใช้ภายใน:", + "Override UUID detection" : "ยกเว้นการตรวจสอบ UUID", + "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "โดยค่าเริ่มต้น แอททริบิวต์ UUID จะถูกตรวจพบโดยอัตโนมัติ แอททริบิวต์ UUID จะใช้เพื่อระบุผู้ใช้และกลุ่มของ LDAP โดยไม่ต้องสงสัย นอกจากนี้ หากไม่ได้ระบุไว้ข้างต้น ชื่อผู้ใช้ภายในจะถูกสร้างขึ้นโดยใช้ UUID เป็นฐาน คุณสามารถแทนที่การตั้งค่าและส่งแอททริบิวต์ที่คุณเลือกได้ คุณต้องให้แน่ใจว่าแอททริบิวต์ที่คุณเลือกสามารถดึงได้สำหรับทั้งผู้ใช้และกลุ่มและต้องไม่ซ้ำกัน ปล่อยว่างไว้สำหรับรูปแบบการทำงานเริ่มต้น การเปลี่ยนแปลงจะมีผลเฉพาะผู้ใช้ LDAP และกลุ่มที่เพิ่งแมปใหม่ (เพิ่งเพิ่ม)", + "UUID Attribute for Users:" : "แอททริบิวต์ UUID สำหรับผู้ใช้:", + "UUID Attribute for Groups:" : "แอททริบิวต์ UUID สำหรับกลุ่ม:", + "Username-LDAP User Mapping" : "การแมปชื่อผู้ใช้-ผู้ใช้ LDAP", + "Clear Username-LDAP User Mapping" : "ล้างการแมปชื่อผู้ใช้-ผู้ใช้ LDAP", + "Clear Groupname-LDAP Group Mapping" : "ล้างการแมปกลุ่ม Groupname-LDAP" }, "nplurals=1; plural=0;"); diff --git a/apps/user_ldap/l10n/th.json b/apps/user_ldap/l10n/th.json index 29f532b9ba0..d73ad550ee3 100644 --- a/apps/user_ldap/l10n/th.json +++ b/apps/user_ldap/l10n/th.json @@ -1,139 +1,139 @@ { "translations": { - "Failed to clear the mappings." : "ล้มเหลวขณะล้าง Mappings", + "Failed to clear the mappings." : "ไม่สามารถล้างการแมป", "Failed to delete the server configuration" : "ลบการกำหนดค่าเซิร์ฟเวอร์ล้มเหลว", "No action specified" : "ไม่ได้ระบุการดำเนินการ", - "No configuration specified" : "ไม่ได้กำหนดค่า", - "No data specified" : "ไม่มีข้อมูลที่ระบุ", - " Could not set configuration %s" : "ไม่สามารถตั้งค่า %s", - "Action does not exist" : "ไม่มีการดำเนินการ", - "Very weak password" : "รหัสผ่านระดับต่ำมาก", - "Weak password" : "รหัสผ่านระดับต่ำ", - "So-so password" : "รหัสผ่านระดับปกติ", + "No configuration specified" : "ไม่ได้ระบุการกำหนดค่า", + "No data specified" : "ไม่ได้ระบุข้อมูล", + " Could not set configuration %s" : "ไม่สามารถกำหนดค่า %s", + "Action does not exist" : "ไม่มีการดำเนินการนี้อยู่", + "Very weak password" : "รหัสผ่านคาดเดาง่ายมาก", + "Weak password" : "รหัสผ่านคาดเดาง่าย", + "So-so password" : "รหัสผ่านระดับพอใช้", "Good password" : "รหัสผ่านระดับดี", - "Strong password" : "รหัสผ่านระดับดีมาก", + "Strong password" : "รหัสผ่านคาดเดายาก", "The Base DN appears to be wrong" : "Base DN ดูเหมือนจะไม่ถูกต้อง", - "Testing configuration…" : "กำลังทดสอบการตั้งค่า ...", + "Testing configuration…" : "กำลังทดสอบการตั้งค่า...", "Configuration incorrect" : "การกำหนดค่าไม่ถูกต้อง", - "Configuration incomplete" : "กำหนดค่าไม่สำเร็จ", - "Configuration OK" : "กำหนดค่าเสร็จสมบูรณ์", + "Configuration incomplete" : "การกำหนดค่าไม่ครบถ้วน", + "Configuration OK" : "การกำหนดค่าใช้งานได้", "Select groups" : "เลือกกลุ่ม", "Select object classes" : "เลือกคลาสวัตถุ", - "Please check the credentials, they seem to be wrong." : "กรุณาตรวจสอบข้อมูลประจำตัวของพวกเขาดูเหมือนจะมีข้อผิดพลาด", - "Please specify the port, it could not be auto-detected." : "กรุณาระบุพอร์ต มันไม่สามารถตรวจพบอัตโนมัติ", - "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN ไม่สามารถตรวจพบโดยอัตโนมัติกรุณาแก้ไขข้อมูลของโฮสต์และพอร์ต", - "Could not detect Base DN, please enter it manually." : "ไม่สามารถตรวจสอบ Base DN โปรดเลือกด้วยตนเอง", + "Please check the credentials, they seem to be wrong." : "กรุณาตรวจสอบข้อมูลประจำตัว ดูเหมือนจะใส่ไม่ถูกต้อง", + "Please specify the port, it could not be auto-detected." : "กรุณาระบุพอร์ต เนื่องจากไม่สามารถตรวจพบโดยอัตโนมัติ", + "Base DN could not be auto-detected, please revise credentials, host and port." : "ไม่สามารถตรวจพบ Base DN โดยอัตโนมัติ กรุณาแก้ไขข้อมูลประจำตัว โฮสต์ และพอร์ต", + "Could not detect Base DN, please enter it manually." : "ไม่สามารถตรวจสอบ Base DN โปรดระบุด้วยตนเอง", "{nthServer}. Server" : "เซิร์ฟเวอร์ {nthServer}", - "No object found in the given Base DN. Please revise." : "ไม่พบวัตถุที่กำหนดใน Base DN กรุณาแก้ไข", + "No object found in the given Base DN. Please revise." : "ไม่พบวัตถุใน Base DN ที่ให้ไว้ กรุณาแก้ไข", "More than 1,000 directory entries available." : "ไดเรกทอรีมีอยู่มากกว่า 1,000 รายการ", - "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "เกิดข้อผิดพลาด กรุณาตรวจสอบ Base DN เช่นเดียวกับการตั้งค่าการเชื่อมต่อและข้อมูลที่สำคัญ", - "Do you really want to delete the current Server Configuration?" : "คุณแน่ใจแล้วหรือว่าต้องการลบการกำหนดค่าเซิร์ฟเวอร์ปัจจุบันทิ้งไป?", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "เกิดข้อผิดพลาด กรุณาตรวจสอบ Base DN รวมถึงการตั้งค่าการเชื่อมต่อและข้อมูลประจำตัว", + "Do you really want to delete the current Server Configuration?" : "คุณแน่ใจหรือไม่ว่าต้องการลบการกำหนดค่าเซิร์ฟเวอร์ปัจจุบัน?", "Confirm Deletion" : "ยืนยันการลบทิ้ง", - "Mappings cleared successfully!" : "ล้าง Mappings เรียบร้อยแล้ว", - "Error while clearing the mappings." : "เกิดข้อผิดพลาดขณะล้าง Mappings", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "บุคคลนิรนามไม่ได้รับอนุญาต กรุณาระบุ DN ของผู้ใช้และรหัสผ่าน", - "LDAP Operations error. Anonymous bind might not be allowed." : "ข้อผิดพลาดในการดำเนินการ LDAP บุคคลนิรนามอาจจะไม่ได้รับอนุญาต ", - "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "บันทึกล้มเหลว โปรดตรวจสอบฐานข้อมูลที่อยู่ในการดำเนินงาน โหลดหน้าใหม่อีกครั้งก่อนดำเนินการต่อ", - "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "โหมดสลับจะช่วยค้นหา LDAP อัตโนมัติ ขึ้นอยู่กับขนาด LDAP ของคุณมันอาจใช้เวลาสักครู่ คุณยังยังต้องการใช้โหมดสลับ?", - "Mode switch" : "โหมดสลับ", - "Select attributes" : "เลือกคุณลักษณะ", + "Mappings cleared successfully!" : "ล้างการแมปเรียบร้อยแล้ว", + "Error while clearing the mappings." : "เกิดข้อผิดพลาดขณะล้างการแมป", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "การผูกนิรนามไม่ได้รับอนุญาต กรุณาระบุ DN ของผู้ใช้และรหัสผ่าน", + "LDAP Operations error. Anonymous bind might not be allowed." : "ข้อผิดพลาดในการดำเนินการ LDAP การผูกนิรนามอาจจะไม่ได้รับอนุญาต ", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "การบันทึกล้มเหลว โปรดตรวจสอบว่าฐานข้อมูลอยู่ใน Operation โหลดหน้าใหม่ก่อนดำเนินการต่อ", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "การสลับโหมดจะเปิดใช้คิวรี LDAP อัตโนมัติ ซึ่งอาจใช้เวลาสักครู่ขึ้นอยู่กับขนาด LDAP ของคุณ คุณยังต้องการสลับโหมดหรือไม่?", + "Mode switch" : "สลับโหมด", + "Select attributes" : "เลือกแอททริบิวต์", "User found and settings verified." : "พบผู้ใช้และการตั้งค่าได้รับการตรวจสอบแล้ว", - "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "ตัวกรองการค้นหาไม่ถูกต้องอาจเป็นเพราะปัญหาไวยากรณ์เช่นหมายเลขที่ไม่สม่ำเสมอของวงเล็บเปิดและปิด กรุณาแก้ไข", - "Please provide a login name to test against" : "โปรดระบุชื่อที่ใช้ในการเข้าสู่ระบบเพื่อทดสอบข้อขัดแย้ง", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "ตัวกรองการค้นหาไม่ถูกต้อง อาจเป็นเพราะปัญหาไวยากรณ์ เช่น จำนวนวงเล็บเปิดและปิดที่ไม่สม่ำเสมอ กรุณาแก้ไข", + "Please provide a login name to test against" : "โปรดระบุชื่อที่ใช้ในการเข้าสู่ระบบเพื่อทดสอบ", "Could not find the desired feature" : "ไม่พบคุณลักษณะที่ต้องการ", "Invalid Host" : "โฮสต์ไม่ถูกต้อง", "Test Configuration" : "ทดสอบการตั้งค่า", "Help" : "ช่วยเหลือ", - "Groups meeting these criteria are available in %s:" : "การประชุมกลุ่มเหล่านี้มีหลักเกณฑ์อยู่ใน %s:", + "Groups meeting these criteria are available in %s:" : "กลุ่มที่เข้าเกณฑ์เหล่านี้มีอยู่ใน %s:", "Only these object classes:" : "เฉพาะคลาสของวัตถุเหล่านี้:", "Only from these groups:" : "เฉพาะจากกลุ่มเหล่านี้:", "Search groups" : "ค้นหากลุ่ม", "Available groups" : "กลุ่มที่สามารถใช้ได้", "Selected groups" : "กลุ่มที่เลือก", - "Edit LDAP Query" : "แก้ไข LDAP Query", + "Edit LDAP Query" : "แก้ไขคิวรี LDAP", "LDAP Filter:" : "ตัวกรอง LDAP:", - "The filter specifies which LDAP groups shall have access to the %s instance." : "ระบุตัวกรองกลุ่ม LDAP ที่จะเข้าถึง %s", - "When logging in, %s will find the user based on the following attributes:" : "เมื่อเข้าสู่ระบบ %s จะได้พบกับผู้ใช้ตามลักษณะดังต่อไปนี้:", - "Other Attributes:" : "คุณลักษณะอื่นๆ:", - "Test Loginname" : "ทดสอบชื่อที่ใช้ในการเข้าสู่ระบบ", + "The filter specifies which LDAP groups shall have access to the %s instance." : "ตัวกรองระบุว่ากลุ่ม LDAP ใดบ้างจะสามารถเข้าถึงเซิร์ฟเวอร์ %s", + "When logging in, %s will find the user based on the following attributes:" : "เมื่อเข้าสู่ระบบ %s จะค้นหาผู้ใช้ตามแอททริบิวต์ดังต่อไปนี้:", + "Other Attributes:" : "คุณลักษณะอื่น ๆ:", + "Test Loginname" : "ทดสอบชื่อที่ใช้เข้าสู่ระบบ", "Verify settings" : "ตรวจสอบการตั้งค่า", - "%s. Server:" : "เซิร์ฟเวอร์%s", - "Copy current configuration into new directory binding" : "คัดลอกการตั้งค่าปัจจุบันลงในไดเรกทอรีใหม่ที่ผูกกัน", - "Delete the current configuration" : "ลบการตั้งค่าปัจจุบัน", + "%s. Server:" : "%s เซิร์ฟเวอร์:", + "Copy current configuration into new directory binding" : "คัดลอกการตั้งค่าปัจจุบันลงในการผูกไดเรกทอรีใหม่", + "Delete the current configuration" : "ลบการกำหนดค่าปัจจุบัน", "Host" : "โฮสต์", "Port" : "พอร์ต", - "Detect Port" : "ตรวจพบพอร์ต", + "Detect Port" : "ตรวจจับพอร์ต", "User DN" : "DN ของผู้ใช้งาน", - "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "DN ของผู้ใช้ไคลเอ็นต์อะไรก็ตามที่ผูกอยู่ด้วย เช่น uid=agent, dc=example, dc=com, สำหรับการเข้าถึงโดยบุคคลนิรนาม, ให้เว้นว่าง DN และรหัสผ่านเอาไว้", + "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "DN ของผู้ใช้ไคลเอ็นต์ที่ต้องการทำการผูก เช่น uid=agent,dc=example,dc=com สำหรับการเข้าถึงโดยบุคคลนิรนาม ให้เว้นว่างช่อง DN และรหัสผ่าน", "Password" : "รหัสผ่าน", - "For anonymous access, leave DN and Password empty." : "สำหรับการเข้าถึงโดยบุคคลนิรนาม ให้เว้นว่าง DN และรหัสผ่านไว้", + "For anonymous access, leave DN and Password empty." : "สำหรับการเข้าถึงนิรนาม ให้เว้นช่อง DN และรหัสผ่านไว้", "One Base DN per line" : "หนึ่ง Base DN ต่อหนึ่งบรรทัด", - "You can specify Base DN for users and groups in the Advanced tab" : "คุณสามารถระบุ Base DN หลักสำหรับผู้ใช้งานและกลุ่มต่างๆในแท็บขั้นสูงได้", - "Detect Base DN" : "ตรวจพบ Base DN", + "You can specify Base DN for users and groups in the Advanced tab" : "คุณสามารถระบุ Base DN หลักสำหรับผู้ใช้งานและกลุ่มต่าง ๆ ได้ในแท็บขั้นสูง", + "Detect Base DN" : "ตรวจจับ Base DN", "Test Base DN" : "ทดสอบ Base DN", - "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "หลีกเลี่ยงการร้องขอ LDAP อัตโนมัติ ดีกว่าสำหรับการตั้งค่าที่มากกว่า แต่ต้องมีความรู้เรื่อง LDAP", + "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "หลีกเลี่ยงคำขอ LDAP อัตโนมัติ ดีกว่าสำหรับการตั้งค่าที่มากกว่า แต่ต้องพอมีความรู้เรื่อง LDAP", "Manually enter LDAP filters (recommended for large directories)" : "ป้อนตัวกรอง LDAP ด้วยตนเอง (แนะนำสำหรับไดเรกทอรีขนาดใหญ่)", - "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "คลาสวัตถุที่พบมากที่สุดสำหรับผู้ใช้มี organizationalPerson, person, user และ inetOrgPerson หากคุณไม่แน่ใจว่าต้องเลือกคลาสวัตถุตัวไหนโปรดปรึกษาผู้ดูแลระบบไดเรกทอรีของคุณ", - "The filter specifies which LDAP users shall have access to the %s instance." : "ระบุตัวกรองที่ผู้ใช้ LDAP จะมีการเข้าถึง %s", - "Verify settings and count users" : "ตรวจสอบการตั้งค่าและการนับจำนวนผู้ใช้", - "Saving" : "บันทึก", + "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "คลาสวัตถุที่พบมากที่สุดสำหรับผู้ใช้มี organizationalPerson, person, user และ inetOrgPerson หากคุณไม่แน่ใจว่าต้องเลือกคลาสวัตถุตัวไหน โปรดปรึกษาผู้ดูแลระบบไดเรกทอรีของคุณ", + "The filter specifies which LDAP users shall have access to the %s instance." : "ตัวกรองระบุว่าผู้ใช้ LDAP ใดบ้างจะสามารถเข้าถึงเซิร์ฟเวอร์ %s", + "Verify settings and count users" : "ตรวจสอบการตั้งค่าและนับจำนวนผู้ใช้", + "Saving" : "กำลังบันทึก", "Back" : "ย้อนกลับ", "Continue" : "ดำเนินการต่อ", "An internal error occurred." : "เกิดข้อผิดพลาดภายใน", - "Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ", + "Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบของคุณ", "Current password" : "รหัสผ่านปัจจุบัน", "New password" : "รหัสผ่านใหม่", - "Wrong password." : "รหัสผ่านผิดพลาด", + "Wrong password." : "รหัสผ่านไม่ถูกต้อง", "Cancel" : "ยกเลิก", "Server" : "เซิร์ฟเวอร์", "Users" : "ผู้ใช้งาน", - "Login Attributes" : "คุณลักษณะการเข้าสู่ระบบ", + "Login Attributes" : "แอททริบิวต์การเข้าสู่ระบบ", "Groups" : "กลุ่ม", "Expert" : "ผู้เชี่ยวชาญ", "Advanced" : "ขั้นสูง", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>คำเตือน:</b> โมดูล PHP LDAP ยังไม่ได้ถูกติดตั้ง, ระบบด้านหลังจะไม่สามารถทำงานได้ กรุณาติดต่อผู้ดูแลระบบของคุณเพื่อทำการติดตั้งโมดูลดังกล่าว", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>คำเตือน:</b> โมดูล PHP LDAP ยังไม่ได้ถูกติดตั้ง แบ็กเอนด์จะไม่สามารถทำงานได้ กรุณาติดต่อให้ผู้ดูแลระบบของคุณทำการติดตั้ง", "Connection Settings" : "ตั้งค่าการเชื่อมต่อ", - "Configuration Active" : "ตั้งค่าการใช้งาน", - "When unchecked, this configuration will be skipped." : "ถ้าไม่เลือก การตั้งค่านี้จะถูกข้ามไป", - "Backup (Replica) Host" : "การสำรองข้อมูลโฮสต์ (สำรอง) ", - "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "ให้โฮสต์สำรองข้อมูลที่จำเป็นของเซิร์ฟเวอร์ LDAP/AD หลัก", - "Backup (Replica) Port" : "สำรองข้อมูลพอร์ต (จำลอง) ", + "Configuration Active" : "การกำหนดค่าใช้งานอยู่", + "When unchecked, this configuration will be skipped." : "เมื่อไม่เลือก การกำหนดค่านี้จะถูกข้ามไป", + "Backup (Replica) Host" : "โฮสต์สำรอง (จำลอง) ", + "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "ให้โฮสต์สำรอง (ไม่จำเป็น) ซึ่งต้องเป็นแบบจำลองของเซิร์ฟเวอร์ LDAP/AD หลัก", + "Backup (Replica) Port" : "พอร์ตสำรอง (จำลอง) ", "Disable Main Server" : "ปิดใช้งานเซิร์ฟเวอร์หลัก", - "Only connect to the replica server." : "เฉพาะเชื่อมต่อกับเซิร์ฟเวอร์แบบจำลอง", - "Turn off SSL certificate validation." : "ปิดใช้งานการตรวจสอบความถูกต้องของใบรับรองความปลอดภัย SSL", - "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "ไม่แนะนำ ควรใช้สำหรับการทดสอบเท่านั้น! ถ้าการเชื่อมต่อใช้งานได้เฉพาะกับตัวเลือกนี้ นำเข้าใบรับรอง SSL เซิร์ฟเวอร์ LDAP ในเซิร์ฟเวอร์ %s ของคุณ ", - "Cache Time-To-Live" : "แคช TTL", - "in seconds. A change empties the cache." : "ในอีกไม่กี่วินาที ระบบจะล้างข้อมูลในแคชให้ว่างเปล่า", - "Directory Settings" : "ตั้งค่าไดเร็กทอรี่", - "User Display Name Field" : "ช่องแสดงชื่อผู้ใช้งาน", - "The LDAP attribute to use to generate the user's display name." : "คุณลักษณะ LDAP เพื่อใช้ในการสร้างชื่อที่ปรากฏของผู้ใช้", - "2nd User Display Name Field" : "ช่องแสดงชื่อผู้ใช้งานคนที่ 2", + "Only connect to the replica server." : "เชื่อมต่อกับเซิร์ฟเวอร์แบบจำลองเท่านั้น", + "Turn off SSL certificate validation." : "ปิดใช้งานการตรวจสอบใบรับรอง SSL", + "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "ไม่แนะนำ ควรใช้สำหรับการทดสอบเท่านั้น! ถ้าการเชื่อมต่อใช้งานได้เฉพาะกับตัวเลือกนี้ นำเข้าใบรับรอง SSL ของเซิร์ฟเวอร์ LDAP ในเซิร์ฟเวอร์ %s ของคุณ ", + "Cache Time-To-Live" : "เวลาที่ดำรงอยู่ของแคช", + "in seconds. A change empties the cache." : "ในวินาที การเปลี่ยนค่านี้จะล้างข้อมูลในแคช", + "Directory Settings" : "ตั้งค่าไดเร็กทอรี", + "User Display Name Field" : "ช่องชื่อที่แสดงของผู้ใช้", + "The LDAP attribute to use to generate the user's display name." : "แอททริบิวต์ LDAP เพื่อใช้ในการสร้างชื่อที่แสดงของผู้ใช้", + "2nd User Display Name Field" : "ช่องชื่อที่แสดงของผู้ใช้ที่ 2", "Base User Tree" : "รายการผู้ใช้งานหลักแบบ Tree", - "One User Base DN per line" : "หนึ่งผู้ใช้ Base DN ต่อหนึ่งบรรทัด", + "One User Base DN per line" : "หนึ่ง Base DN ผู้ใช้ ต่อหนึ่งบรรทัด", "User Search Attributes" : "คุณลักษณะการค้นหาชื่อผู้ใช้", "Optional; one attribute per line" : "ตัวเลือกเพิ่มเติม; หนึ่งคุณลักษณะต่อบรรทัด", - "Group Display Name Field" : "ช่องแสดงชื่อกลุ่มที่ต้องการ", - "The LDAP attribute to use to generate the groups's display name." : "คุณลักษณะ LDAP เพื่อใช้ในการสร้างชื่อที่ปรากฏของกลุ่ม", + "Group Display Name Field" : "ช่องชื่อที่แสดงของกลุ่ม", + "The LDAP attribute to use to generate the groups's display name." : "แอททริบิวต์ LDAP เพื่อใช้ในการสร้างชื่อที่ปรากฏของกลุ่ม", "Base Group Tree" : "รายการกลุ่มหลักแบบ Tree", - "One Group Base DN per line" : "หนึ่ง Group Base DN ต่อหนึ่งบรรทัด", - "Group Search Attributes" : "คุณลักษณะการค้นหาแบบกลุ่ม", - "Group-Member association" : "ความสัมพันธ์ของสมาชิกในกลุ่ม", + "One Group Base DN per line" : "หนึ่ง Base DN กลุ่ม ต่อหนึ่งบรรทัด", + "Group Search Attributes" : "แอททริบิวต์การค้นหากลุ่ม", + "Group-Member association" : "ความสัมพันธ์ของกลุ่ม-สมาชิก", "Nested Groups" : "กลุ่มที่ซ้อนกัน", - "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "เมื่อเปิดสวิตซ์ กลุ่มจะได้รับการสนันสนุน (เฉพาะการทำงานถ้าคุณลักษณะสมาชิกกลุ่มมี DN)", - "Paging chunksize" : "ขนาด Paging chunk", - "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "Chunksize ใช้สำหรับการค้นหาเพจ LDAP มันส่งคืนผลลัพธ์ที่มีขนาดใหญ่เช่นการนับผู้ใช้หรือกลุ่ม (ตั้งค่าเป็น 0 เพื่อปิดการใช้งาน)", - "Special Attributes" : "คุณลักษณะพิเศษ", + "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "เมื่อเปิดสวิตซ์ กลุ่มที่มีกลุ่มอยู่ด้านในจะได้รับการสนับสนุน (ใช้ได้เฉพาะถ้าแอททริบิวต์สมาชิกกลุ่มมี DN)", + "Paging chunksize" : "ขนาดกลุ่มเพจ", + "Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)" : "ขนาดกลุ่มที่ใช้สำหรับการค้นหา LDAP แบบเพจ ที่อาจส่งคืนผลลัพธ์ขนาดใหญ่ เช่น การนับผู้ใช้หรือกลุ่ม (ตั้งค่าเป็น 0 เพื่อปิดการใช้งานการค้นหา LDAP แบบเพจในสถานการณ์เหล่านั้น)", + "Special Attributes" : "แอททริบิวต์พิเศษ", "Quota Field" : "ช่องโควต้า", "Quota Default" : "โควต้าเริ่มต้น", "Email Field" : "ช่องอีเมล", - "User Home Folder Naming Rule" : "กฎการตั้งชื่อโฟลเดอร์แรกของผู้ใช้", + "User Home Folder Naming Rule" : "กฎการตั้งชื่อโฮมโฟลเดอร์ของผู้ใช้", "Internal Username" : "ชื่อผู้ใช้ภายใน", - "Internal Username Attribute:" : "ชื่อผู้ใช้ภายในคุณสมบัติ:", - "Override UUID detection" : "แทนที่การตรวจสอบ UUID", - "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "โดยค่าเริ่มต้นแอตทริบิวต์ UUID มีถูกตรวจพบโดยอัตโนมัติ แอตทริบิวต์ UUID จะใช้เพื่อระบุผู้ใช้ของ LDAP และกลุ่ม นอกจากนี้ยังมีชื่อผู้ใช้ภายในจะถูกสร้างขึ้นบนพื้นฐาน UUID หากไม่ได้ระบุไว้ข้างต้น คุณสามารถแทนที่การตั้งค่าและส่งแอตทริบิวต์ที่คุณเลือก คุณต้องให้แน่ใจว่าแอตทริบิวต์ที่คุณเลือกสามารถเป็นจริงสำหรับทั้งผู้ใช้และกลุ่มและมันควรจะไม่ซ้ำกัน ปล่อยให้มันว่างเปล่าสำหรับการทำงานเริ่มต้น การเปลี่ยนแปลงจะมีผลเฉพาะในแมปใหม่ (เพิ่ม) ผู้ใช้ LDAP และกลุ่ม", - "UUID Attribute for Users:" : "แอตทริบิวต์ UUID สำหรับผู้ใช้:", - "UUID Attribute for Groups:" : "แอตทริบิวต์ UUID สำหรับกลุ่ม:", - "Username-LDAP User Mapping" : "Username-LDAP ผู้ใช้ Mapping", - "Clear Username-LDAP User Mapping" : "ล้าง Username-LDAP ผู้ใช้ Mapping", - "Clear Groupname-LDAP Group Mapping" : "ล้าง Groupname-LDAP กลุ่ม Mapping" + "Internal Username Attribute:" : "แอททริบิวต์ชื่อผู้ใช้ภายใน:", + "Override UUID detection" : "ยกเว้นการตรวจสอบ UUID", + "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "โดยค่าเริ่มต้น แอททริบิวต์ UUID จะถูกตรวจพบโดยอัตโนมัติ แอททริบิวต์ UUID จะใช้เพื่อระบุผู้ใช้และกลุ่มของ LDAP โดยไม่ต้องสงสัย นอกจากนี้ หากไม่ได้ระบุไว้ข้างต้น ชื่อผู้ใช้ภายในจะถูกสร้างขึ้นโดยใช้ UUID เป็นฐาน คุณสามารถแทนที่การตั้งค่าและส่งแอททริบิวต์ที่คุณเลือกได้ คุณต้องให้แน่ใจว่าแอททริบิวต์ที่คุณเลือกสามารถดึงได้สำหรับทั้งผู้ใช้และกลุ่มและต้องไม่ซ้ำกัน ปล่อยว่างไว้สำหรับรูปแบบการทำงานเริ่มต้น การเปลี่ยนแปลงจะมีผลเฉพาะผู้ใช้ LDAP และกลุ่มที่เพิ่งแมปใหม่ (เพิ่งเพิ่ม)", + "UUID Attribute for Users:" : "แอททริบิวต์ UUID สำหรับผู้ใช้:", + "UUID Attribute for Groups:" : "แอททริบิวต์ UUID สำหรับกลุ่ม:", + "Username-LDAP User Mapping" : "การแมปชื่อผู้ใช้-ผู้ใช้ LDAP", + "Clear Username-LDAP User Mapping" : "ล้างการแมปชื่อผู้ใช้-ผู้ใช้ LDAP", + "Clear Groupname-LDAP Group Mapping" : "ล้างการแมปกลุ่ม Groupname-LDAP" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/user_status/src/components/CustomMessageInput.vue b/apps/user_status/src/components/CustomMessageInput.vue index 3e121f02e4a..4fd649dc166 100644 --- a/apps/user_status/src/components/CustomMessageInput.vue +++ b/apps/user_status/src/components/CustomMessageInput.vue @@ -19,25 +19,27 @@ - --> <template> - <div class="custom-input__form"> - <NcEmojiPicker container=".custom-input__form" @select="setIcon"> - <NcButton class="custom-input__emoji-button" type="tertiary-no-background"> + <div class="custom-input"> + <NcEmojiPicker container=".custom-input" @select="setIcon"> + <NcButton class="custom-input__emoji-button" type="tertiary"> {{ visibleIcon }} </NcButton> </NcEmojiPicker> - <label class="hidden-visually" for="user_status_message"> - {{ t('user_status', 'What is your status?') }} - </label> - <input id="user_status_message" - ref="input" - maxlength="80" - :disabled="disabled" - :placeholder="$t('user_status', 'What is your status?')" - type="text" - :value="message" - @change="onChange" - @keyup="onKeyup" - @paste="onKeyup"> + <div class="custom-input__container"> + <label class="hidden-visually" for="user_status_message"> + {{ t('user_status', 'What is your status?') }} + </label> + <input id="user_status_message" + ref="input" + maxlength="80" + :disabled="disabled" + :placeholder="$t('user_status', 'What is your status?')" + type="text" + :value="message" + @change="onChange" + @keyup="onKeyup" + @paste="onKeyup"> + </div> </div> </template> @@ -112,18 +114,30 @@ export default { </script> <style lang="scss" scoped> -.custom-input__form { - flex-grow: 1; - position: relative; +.custom-input { + display: flex; + width: 100%; - .v-popper { - position: absolute; + &__emoji-button { + min-height: 36px; + padding: 0; + border: 2px solid var(--color-border-maxcontrast); + border-right: none; + border-radius: var(--border-radius) 0 0 var(--border-radius); + + &:hover { + border-color: var(--color-primary-element); + } } - input { + &__container { width: 100%; - border-radius: 0 var(--border-radius) var(--border-radius) 0; - padding-left: 44px !important; + + input { + width: 100%; + margin: 0; + border-radius: 0 var(--border-radius) var(--border-radius) 0; + } } } </style> diff --git a/apps/user_status/src/components/SetStatusModal.vue b/apps/user_status/src/components/SetStatusModal.vue index 2d500464bff..d7adc99da14 100644 --- a/apps/user_status/src/components/SetStatusModal.vue +++ b/apps/user_status/src/components/SetStatusModal.vue @@ -246,16 +246,6 @@ export default { display: flex; width: 100%; margin-bottom: 10px; - - .custom-input__emoji-button { - flex-basis: 40px; - flex-grow: 0; - width: 40px; - height: 34px; - margin-right: 0; - border-right: none; - border-radius: var(--border-radius) 0 0 var(--border-radius); - } } .status-buttons { diff --git a/build/psalm-baseline-ocp.xml b/build/psalm-baseline-ocp.xml index c3bf00b8926..e993e85e5a2 100644 --- a/build/psalm-baseline-ocp.xml +++ b/build/psalm-baseline-ocp.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<files psalm-version="4.18.1@dda05fa913f4dc6eb3386f2f7ce5a45d37a71bcb"> +<files psalm-version="4.30.0@d0bc6e25d89f649e4f36a534f330f8bb4643dd69"> <file src="lib/private/legacy/OC_Template.php"> <UndefinedClass occurrences="1"> <code>OC</code> @@ -10,11 +10,6 @@ <code>$this->request->server</code> </NoInterfaceProperties> </file> - <file src="lib/public/Server.php"> - <InvalidThrow occurrences="2"> - <code>ContainerExceptionInterface</code> - </InvalidThrow> - </file> <file src="lib/public/AppFramework/App.php"> <InternalMethod occurrences="1"> <code>new RouteConfig($this->container, $router, $routes)</code> @@ -23,11 +18,6 @@ <code>\OC</code> </UndefinedClass> </file> - <file src="lib/public/AppFramework/Bootstrap/IBootContext.php"> - <InvalidThrow occurrences="1"> - <code>ContainerExceptionInterface</code> - </InvalidThrow> - </file> <file src="lib/public/AppFramework/Db/Entity.php"> <InvalidNullableReturnType occurrences="1"> <code>string</code> @@ -133,12 +123,6 @@ <code>\OC</code> </UndefinedClass> </file> - <file src="lib/public/IContainer.php"> - <InvalidThrow occurrences="2"> - <code>ContainerExceptionInterface</code> - <code>ContainerExceptionInterface</code> - </InvalidThrow> - </file> <file src="lib/public/Template.php"> <UndefinedFunction occurrences="7"> <code>\html_select_options($options, $selected, $params)</code> diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml index 5c8b4d7e67b..ed7b19eaa7f 100644 --- a/build/psalm-baseline.xml +++ b/build/psalm-baseline.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<files psalm-version="4.18.1@dda05fa913f4dc6eb3386f2f7ce5a45d37a71bcb"> +<files psalm-version="4.30.0@d0bc6e25d89f649e4f36a534f330f8bb4643dd69"> <file src="3rdparty/sabre/dav/lib/CalDAV/Calendar.php"> <MoreSpecificImplementedParamType occurrences="1"> <code>$calendarData</code> @@ -37,9 +37,6 @@ </LessSpecificImplementedReturnType> </file> <file src="apps/cloud_federation_api/lib/Controller/RequestHandlerController.php"> - <InvalidScalarArgument occurrences="1"> - <code>$e->getCode()</code> - </InvalidScalarArgument> <TypeDoesNotContainType occurrences="1"> <code>!is_array($notification)</code> </TypeDoesNotContainType> @@ -391,11 +388,6 @@ <code>\Sabre\HTTP\toDate($value)</code> </UndefinedFunction> </file> - <file src="apps/dav/lib/Comments/EntityTypeCollection.php"> - <TypeDoesNotContainType occurrences="1"> - <code>!is_string($name)</code> - </TypeDoesNotContainType> - </file> <file src="apps/dav/lib/Comments/RootCollection.php"> <InvalidArgument occurrences="1"> <code>CommentsEntityEvent::EVENT_ENTITY</code> @@ -437,9 +429,6 @@ <InvalidReturnType occurrences="1"> <code>\Sabre\DAV\INode[]</code> </InvalidReturnType> - <InvalidScalarArgument occurrences="1"> - <code>$e->getCode()</code> - </InvalidScalarArgument> <NullArgument occurrences="3"> <code>null</code> <code>null</code> @@ -808,7 +797,7 @@ <code>$userSession</code> <code>$userSession</code> </RedundantCondition> - <TypeDoesNotContainType occurrences="2"> + <TypeDoesNotContainType occurrences="1"> <code>get_class($res) === 'OpenSSLAsymmetricKey'</code> </TypeDoesNotContainType> </file> @@ -952,14 +941,6 @@ <code>null</code> </NullArgument> </file> - <file src="apps/files/lib/Command/TransferOwnership.php"> - <InvalidReturnStatement occurrences="1"> - <code>$e->getCode() !== 0 ? $e->getCode() : 1</code> - </InvalidReturnStatement> - <InvalidReturnType occurrences="1"> - <code>int</code> - </InvalidReturnType> - </file> <file src="apps/files/lib/Controller/DirectEditingController.php"> <InvalidArgument occurrences="1"> <code>$templateId</code> @@ -1025,12 +1006,6 @@ <code>$this</code> </InvalidScope> </file> - <file src="apps/files_external/lib/Command/Verify.php"> - <InvalidScalarArgument occurrences="2"> - <code>$e->getCode()</code> - <code>$status</code> - </InvalidScalarArgument> - </file> <file src="apps/files_external/lib/Config/ConfigAdapter.php"> <UndefinedClass occurrences="1"> <code>new $objectClass($objectStore)</code> @@ -1551,13 +1526,6 @@ <code>['app' => Application::APP_ID, 'class' => get_class($subject)]</code> </InvalidArgument> </file> - <file src="apps/workflowengine/lib/Controller/AWorkflowController.php"> - <InvalidScalarArgument occurrences="3"> - <code>$e->getCode()</code> - <code>$e->getCode()</code> - <code>$e->getCode()</code> - </InvalidScalarArgument> - </file> <file src="apps/workflowengine/lib/Entity/File.php"> <InvalidReturnType occurrences="1"> <code>string</code> @@ -1768,10 +1736,6 @@ </RedundantCondition> </file> <file src="lib/base.php"> - <InternalMethod occurrences="2"> - <code>getAppsNeedingUpgrade</code> - <code>getIncompatibleApps</code> - </InternalMethod> <InvalidArgument occurrences="1"> <code>$restrictions</code> </InvalidArgument> @@ -1941,34 +1905,22 @@ <InternalMethod occurrences="1"> <code>setOCSVersion</code> </InternalMethod> - <InvalidScalarArgument occurrences="1"> - <code>$code</code> - </InvalidScalarArgument> </file> <file src="lib/private/AppFramework/Middleware/Security/CORSMiddleware.php"> - <InvalidScalarArgument occurrences="1"> - <code>$exception->getCode()</code> - </InvalidScalarArgument> <NoInterfaceProperties occurrences="2"> <code>$this->request->server</code> <code>$this->request->server</code> </NoInterfaceProperties> </file> <file src="lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php"> - <InvalidScalarArgument occurrences="6"> + <InvalidScalarArgument occurrences="4"> <code>$anonLimit</code> <code>$anonPeriod</code> - <code>$exception->getCode()</code> - <code>$exception->getCode()</code> <code>$userLimit</code> <code>$userPeriod</code> </InvalidScalarArgument> </file> <file src="lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php"> - <InvalidScalarArgument occurrences="2"> - <code>$exception->getCode()</code> - <code>$exception->getCode()</code> - </InvalidScalarArgument> <NoInterfaceProperties occurrences="1"> <code>$this->request->server</code> </NoInterfaceProperties> @@ -1976,16 +1928,6 @@ <code>\OCA\Talk\Controller\PageController</code> </UndefinedClass> </file> - <file src="lib/private/AppFramework/OCS/V1Response.php"> - <InvalidScalarArgument occurrences="1"> - <code>$meta</code> - </InvalidScalarArgument> - </file> - <file src="lib/private/AppFramework/OCS/V2Response.php"> - <InvalidScalarArgument occurrences="1"> - <code>$meta</code> - </InvalidScalarArgument> - </file> <file src="lib/private/AppFramework/Routing/RouteConfig.php"> <InvalidArrayOffset occurrences="1"> <code>$action['url-postfix']</code> @@ -2007,24 +1949,7 @@ </RedundantCondition> </file> <file src="lib/private/Authentication/Token/PublicKeyToken.php"> - <UndefinedMagicMethod occurrences="16"> - <code>parent::getExpires()</code> - <code>parent::getLastCheck()</code> - <code>parent::getLoginName()</code> - <code>parent::getName()</code> - <code>parent::getPassword()</code> - <code>parent::getRemember()</code> - <code>parent::getScope()</code> - <code>parent::setExpires($expires)</code> - <code>parent::setLastCheck($time)</code> - <code>parent::setName($name)</code> - <code>parent::setPassword($password)</code> - <code>parent::setPasswordInvalid($invalid)</code> - <code>parent::setScope((string)$scope)</code> - <code>parent::setScope(json_encode($scope))</code> - <code>parent::setToken($token)</code> - <code>parent::setType(IToken::WIPE_TOKEN)</code> - </UndefinedMagicMethod> + <UndefinedMagicMethod occurrences="16"/> </file> <file src="lib/private/Authentication/TwoFactorAuth/Db/ProviderUserAssignmentDao.php"> <InvalidReturnStatement occurrences="1"/> @@ -2183,9 +2108,6 @@ <InvalidReturnType occurrences="1"> <code>string</code> </InvalidReturnType> - <InvalidScalarArgument occurrences="1"> - <code>$e->getCode()</code> - </InvalidScalarArgument> <ParamNameMismatch occurrences="2"> <code>$seqName</code> <code>$statement</code> @@ -2999,9 +2921,8 @@ </LessSpecificImplementedReturnType> </file> <file src="lib/private/LargeFileHelper.php"> - <InvalidOperand occurrences="2"> + <InvalidOperand occurrences="1"> <code>$matches[1]</code> - <code>$result</code> </InvalidOperand> <InvalidScalarArgument occurrences="1"> <code>$data</code> @@ -3112,9 +3033,6 @@ <code>$id</code> </ParamNameMismatch> </file> - <file src="lib/private/Notification/Manager.php"> - <InvalidCatch occurrences="3"/> - </file> <file src="lib/private/Preview/BackgroundCleanupJob.php"> <InvalidReturnStatement occurrences="1"> <code>[]</code> @@ -3271,7 +3189,6 @@ <InvalidArgument occurrences="1"> <code>new GenericEvent($user)</code> </InvalidArgument> - <InvalidCatch occurrences="1"/> <UndefinedDocblockClass occurrences="1"> <code>\OC\OCSClient</code> </UndefinedDocblockClass> @@ -3662,11 +3579,6 @@ <code>new RouteConfig($this->container, $router, $routes)</code> </InternalMethod> </file> - <file src="lib/public/AppFramework/Bootstrap/IBootContext.php"> - <InvalidThrow occurrences="1"> - <code>ContainerExceptionInterface</code> - </InvalidThrow> - </file> <file src="lib/public/AppFramework/Db/Entity.php"> <InvalidNullableReturnType occurrences="1"> <code>string</code> @@ -3703,21 +3615,4 @@ <code>array</code> </InvalidParamDefault> </file> - <file src="lib/public/IContainer.php"> - <InvalidThrow occurrences="2"> - <code>ContainerExceptionInterface</code> - <code>ContainerExceptionInterface</code> - </InvalidThrow> - </file> - <file src="lib/public/Server.php"> - <InvalidThrow occurrences="2"> - <code>ContainerExceptionInterface</code> - <code>NotFoundExceptionInterface</code> - </InvalidThrow> - </file> - <file src="remote.php"> - <InvalidScalarArgument occurrences="1"> - <code>$e->getCode()</code> - </InvalidScalarArgument> - </file> </files> diff --git a/core/l10n/de.js b/core/l10n/de.js index 4ab99762448..ca7ab6bd5e3 100644 --- a/core/l10n/de.js +++ b/core/l10n/de.js @@ -42,6 +42,7 @@ OC.L10N.register( "Some of your link shares have been removed" : "Einige der geteilten Freigaben wurden entfernt", "Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Aufgrund eines Sicherheitsfehlers mussten einige der geteilten Freigaben entfernt werden. Weitere Informationen im Link.", "The user limit of this instance is reached." : "Die Benutzergrenze dieser Instanz ist erreicht.", + "Enter your subscription key in the support app in order to increase the user limit. This does also grant you all additional benefits that Nextcloud Enterprise offers and is highly recommended for the operation in companies." : "Gebe deinen Abonnementschlüssel in der Support-App ein, um das Benutzerlimit zu erhöhen. Dies gewährt dir auch alle zusätzlichen Vorteile, die Nextcloud Enterprise bietet und für den Betrieb in Unternehmen sehr zu empfehlen ist.", "Learn more ↗" : "Erfahre mehr ↗", "Preparing update" : "Update vorbereiten", "[%d / %d]: %s" : "[%d / %d]: %s", @@ -80,6 +81,7 @@ OC.L10N.register( "Your installation has no default phone region set. This is required to validate phone numbers in the profile settings without a country code. To allow numbers without a country code, please add \"default_phone_region\" with the respective {linkstart}ISO 3166-1 code ↗{linkend} of the region to your config file." : "Für deine Installation ist keine Standard-Telefonregion festgelegt. Dies ist erforderlich, um Telefonnummern in den Profileinstellungen ohne Ländercode überprüfen zu können. Um Nummern ohne Ländercode zuzulassen, füge bitte \"default_phone_region\" mit dem entsprechenden {linkstart}ISO 3166-1-Code ↗{linkend} der gewünschten Region hinzu.", "It was not possible to execute the cron job via CLI. The following technical errors have appeared:" : "Die Ausführung des Cron-Jobs über die Kommandozeile war nicht möglich. Die folgenden technischen Fehler sind dabei aufgetreten: ", "Last background job execution ran {relativeTime}. Something seems wrong. {linkstart}Check the background job settings ↗{linkend}." : "Letzte Cron-Job-Ausführung: {relativeTime}. {linkstart}Check the background job settings ↗{linkend}.", + "This is the unsupported community build of Nextcloud. Given the size of this instance, performance, reliability and scalability cannot be guaranteed. Push notifications are limited to avoid overloading our free service. Learn more about the benefits of Nextcloud Enterprise at {linkstart}https://nextcloud.com/enterprise{linkend}." : "Dies ist der nicht unterstützte Community-Build von Nextcloud. Angesichts der Größe dieser Instanz können Leistung, Zuverlässigkeit und Skalierbarkeit nicht garantiert werden. Push-Benachrichtigungen wurden beschränkt, um eine Überlastung unseres kostenlosen Dienstes zu vermeiden. Erfahre mehr über die Vorteile von Nextcloud Enterprise unter {linkstart}https://nextcloud.com/enterprise{linkend}.", "This server has no working internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. Establish a connection from this server to the internet to enjoy all features." : "Dieser Server hat keine funktionierende Internetverbindung: Mehrere Ziele konnten nicht erreicht werden. Dies bedeutet, dass einige Funktionen, wie das Einhängen externer Speicher, Benachrichtigungen über Updates oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Zugriff auf entfernte Dateien und das Senden von E-Mail-Benachrichtigungen wird wahrscheinlich ebenfalls nicht funktionieren. Um alle Funktionen nutzen zu können, stelle bitte eine Internet-Verbindung für diesen Server her.", "No memory cache has been configured. To enhance performance, please configure a memcache, if available. Further information can be found in the {linkstart}documentation ↗{linkend}." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen findest du in unserer {linkstart}Dokumentation ↗{linkend}.", "No suitable source for randomness found by PHP which is highly discouraged for security reasons. Further information can be found in the {linkstart}documentation ↗{linkend}." : "Von PHP wurde keine geeignete Quelle für Zufälligkeit gefunden, aus Sicht der Sicherheit ist dies bedenklich. Weitere Informationen sind in der {linkstart}Dokumentation ↗{linkend} zu finden.", @@ -140,7 +142,7 @@ OC.L10N.register( "Currently open" : "Derzeit geöffnet", "_{count} notification_::_{count} notifications_" : ["{count} Benachrichtigung","{count} Benachrichtigungen"], "Log in" : "Anmelden", - "Logging in …" : "Melde an…", + "Logging in …" : "Melde an …", "Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!", "Please contact your administrator." : "Bitte kontaktiere den Administrator.", "An internal error occurred." : "Es ist ein interner Fehler aufgetreten.", @@ -198,7 +200,7 @@ OC.L10N.register( "No results for {query}" : "Keine Suchergebnisse zu {query}", "Press enter to start searching" : "Zum Suchen Enter drücken", "Start typing to search" : "Beginne mit der Eingabe, um zu suchen", - "Loading more results …" : "Lade weitere Ergebnisse…", + "Loading more results …" : "Lade weitere Ergebnisse …", "Load more results" : "Weitere Ergebnisse laden", "Search" : "Suche", "An error occurred while searching for {type}" : "Es ist ein Fehler beim Suchen nach {type} aufgetreten", @@ -207,15 +209,16 @@ OC.L10N.register( "Your browser is not supported. Please upgrade to a newer version or a supported one." : "Dein Browser wird nicht unterstützt. Bitte aktualisieren deinen Browser auf eine neuere oder unterstützte Version.", "Continue with this unsupported browser" : "Mit diesem nicht unterstützten Browser fortfahren.", "Supported versions" : "Unterstützte Versionen", - "Search {types} …" : "Suche {types}…", + "{name} version {version} and above" : "{name} Version {version} und neuer", + "Search {types} …" : "Suche {types} …", "Settings" : "Einstellungen", "Could not load your contacts" : "Deine Kontakte konnten nicht geladen werden", - "Search contacts …" : "Kontakte suchen…", + "Search contacts …" : "Kontakte suchen …", "No contacts found" : "Keine Kontakte gefunden", - "Show all contacts …" : "Zeige alle Kontakte…", + "Show all contacts …" : "Zeige alle Kontakte …", "Install the Contacts app" : "Kontakte-App installieren", - "Loading your contacts …" : "Lade deine Kontakte…", - "Looking for {term} …" : "Suche nach {term}…", + "Loading your contacts …" : "Lade deine Kontakte …", + "Looking for {term} …" : "Suche nach {term} …", "No" : "Nein", "Yes" : "Ja", "No files in here" : "Keine Dateien vorhanden", @@ -295,6 +298,7 @@ OC.L10N.register( "The profile does not exist." : "Das Profil existiert nicht", "Back to %s" : "Zurück zu %s", "Page not found" : "Seite nicht gefunden", + "The page could not be found on the server." : "Die Seite konnte auf dem Server nicht gefunden werden.", "Too many requests" : "Zu viele Anfragen", "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Zu viele Anfragen aus deinem Netzwerk. Versuche es später erneut oder wende dich an deinen Administrator, wenn dies ein Fehler sein sollte.", "Error" : "Fehler", diff --git a/core/l10n/de.json b/core/l10n/de.json index a0dbc72e98f..64dd7e8f348 100644 --- a/core/l10n/de.json +++ b/core/l10n/de.json @@ -40,6 +40,7 @@ "Some of your link shares have been removed" : "Einige der geteilten Freigaben wurden entfernt", "Due to a security bug we had to remove some of your link shares. Please see the link for more information." : "Aufgrund eines Sicherheitsfehlers mussten einige der geteilten Freigaben entfernt werden. Weitere Informationen im Link.", "The user limit of this instance is reached." : "Die Benutzergrenze dieser Instanz ist erreicht.", + "Enter your subscription key in the support app in order to increase the user limit. This does also grant you all additional benefits that Nextcloud Enterprise offers and is highly recommended for the operation in companies." : "Gebe deinen Abonnementschlüssel in der Support-App ein, um das Benutzerlimit zu erhöhen. Dies gewährt dir auch alle zusätzlichen Vorteile, die Nextcloud Enterprise bietet und für den Betrieb in Unternehmen sehr zu empfehlen ist.", "Learn more ↗" : "Erfahre mehr ↗", "Preparing update" : "Update vorbereiten", "[%d / %d]: %s" : "[%d / %d]: %s", @@ -78,6 +79,7 @@ "Your installation has no default phone region set. This is required to validate phone numbers in the profile settings without a country code. To allow numbers without a country code, please add \"default_phone_region\" with the respective {linkstart}ISO 3166-1 code ↗{linkend} of the region to your config file." : "Für deine Installation ist keine Standard-Telefonregion festgelegt. Dies ist erforderlich, um Telefonnummern in den Profileinstellungen ohne Ländercode überprüfen zu können. Um Nummern ohne Ländercode zuzulassen, füge bitte \"default_phone_region\" mit dem entsprechenden {linkstart}ISO 3166-1-Code ↗{linkend} der gewünschten Region hinzu.", "It was not possible to execute the cron job via CLI. The following technical errors have appeared:" : "Die Ausführung des Cron-Jobs über die Kommandozeile war nicht möglich. Die folgenden technischen Fehler sind dabei aufgetreten: ", "Last background job execution ran {relativeTime}. Something seems wrong. {linkstart}Check the background job settings ↗{linkend}." : "Letzte Cron-Job-Ausführung: {relativeTime}. {linkstart}Check the background job settings ↗{linkend}.", + "This is the unsupported community build of Nextcloud. Given the size of this instance, performance, reliability and scalability cannot be guaranteed. Push notifications are limited to avoid overloading our free service. Learn more about the benefits of Nextcloud Enterprise at {linkstart}https://nextcloud.com/enterprise{linkend}." : "Dies ist der nicht unterstützte Community-Build von Nextcloud. Angesichts der Größe dieser Instanz können Leistung, Zuverlässigkeit und Skalierbarkeit nicht garantiert werden. Push-Benachrichtigungen wurden beschränkt, um eine Überlastung unseres kostenlosen Dienstes zu vermeiden. Erfahre mehr über die Vorteile von Nextcloud Enterprise unter {linkstart}https://nextcloud.com/enterprise{linkend}.", "This server has no working internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. Establish a connection from this server to the internet to enjoy all features." : "Dieser Server hat keine funktionierende Internetverbindung: Mehrere Ziele konnten nicht erreicht werden. Dies bedeutet, dass einige Funktionen, wie das Einhängen externer Speicher, Benachrichtigungen über Updates oder die Installation von Drittanbieter-Apps nicht funktionieren. Der Zugriff auf entfernte Dateien und das Senden von E-Mail-Benachrichtigungen wird wahrscheinlich ebenfalls nicht funktionieren. Um alle Funktionen nutzen zu können, stelle bitte eine Internet-Verbindung für diesen Server her.", "No memory cache has been configured. To enhance performance, please configure a memcache, if available. Further information can be found in the {linkstart}documentation ↗{linkend}." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen findest du in unserer {linkstart}Dokumentation ↗{linkend}.", "No suitable source for randomness found by PHP which is highly discouraged for security reasons. Further information can be found in the {linkstart}documentation ↗{linkend}." : "Von PHP wurde keine geeignete Quelle für Zufälligkeit gefunden, aus Sicht der Sicherheit ist dies bedenklich. Weitere Informationen sind in der {linkstart}Dokumentation ↗{linkend} zu finden.", @@ -138,7 +140,7 @@ "Currently open" : "Derzeit geöffnet", "_{count} notification_::_{count} notifications_" : ["{count} Benachrichtigung","{count} Benachrichtigungen"], "Log in" : "Anmelden", - "Logging in …" : "Melde an…", + "Logging in …" : "Melde an …", "Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!", "Please contact your administrator." : "Bitte kontaktiere den Administrator.", "An internal error occurred." : "Es ist ein interner Fehler aufgetreten.", @@ -196,7 +198,7 @@ "No results for {query}" : "Keine Suchergebnisse zu {query}", "Press enter to start searching" : "Zum Suchen Enter drücken", "Start typing to search" : "Beginne mit der Eingabe, um zu suchen", - "Loading more results …" : "Lade weitere Ergebnisse…", + "Loading more results …" : "Lade weitere Ergebnisse …", "Load more results" : "Weitere Ergebnisse laden", "Search" : "Suche", "An error occurred while searching for {type}" : "Es ist ein Fehler beim Suchen nach {type} aufgetreten", @@ -205,15 +207,16 @@ "Your browser is not supported. Please upgrade to a newer version or a supported one." : "Dein Browser wird nicht unterstützt. Bitte aktualisieren deinen Browser auf eine neuere oder unterstützte Version.", "Continue with this unsupported browser" : "Mit diesem nicht unterstützten Browser fortfahren.", "Supported versions" : "Unterstützte Versionen", - "Search {types} …" : "Suche {types}…", + "{name} version {version} and above" : "{name} Version {version} und neuer", + "Search {types} …" : "Suche {types} …", "Settings" : "Einstellungen", "Could not load your contacts" : "Deine Kontakte konnten nicht geladen werden", - "Search contacts …" : "Kontakte suchen…", + "Search contacts …" : "Kontakte suchen …", "No contacts found" : "Keine Kontakte gefunden", - "Show all contacts …" : "Zeige alle Kontakte…", + "Show all contacts …" : "Zeige alle Kontakte …", "Install the Contacts app" : "Kontakte-App installieren", - "Loading your contacts …" : "Lade deine Kontakte…", - "Looking for {term} …" : "Suche nach {term}…", + "Loading your contacts …" : "Lade deine Kontakte …", + "Looking for {term} …" : "Suche nach {term} …", "No" : "Nein", "Yes" : "Ja", "No files in here" : "Keine Dateien vorhanden", @@ -293,6 +296,7 @@ "The profile does not exist." : "Das Profil existiert nicht", "Back to %s" : "Zurück zu %s", "Page not found" : "Seite nicht gefunden", + "The page could not be found on the server." : "Die Seite konnte auf dem Server nicht gefunden werden.", "Too many requests" : "Zu viele Anfragen", "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Zu viele Anfragen aus deinem Netzwerk. Versuche es später erneut oder wende dich an deinen Administrator, wenn dies ein Fehler sein sollte.", "Error" : "Fehler", diff --git a/core/l10n/eo.js b/core/l10n/eo.js index 8a6e3ba3a5e..d701615a297 100644 --- a/core/l10n/eo.js +++ b/core/l10n/eo.js @@ -27,9 +27,11 @@ OC.L10N.register( "Could not complete login" : "Ensaluto ne eblis", "Your login token is invalid or has expired" : "Via ensaluta ĵetono ne validas aŭ senvalidiĝis", "Login" : "Login", + "Please try again" : "Bonvolu reprovi", "Password reset is disabled" : "Pasvorta restarigo malebligita", "Could not reset password because the token is expired" : "Ne eblis restarigi pasvorton, ĉar la ĵetono senvalidiĝis", "Could not reset password because the token is invalid" : "Ne eblis restarigi pasvorton, ĉar la ĵetono ne validas", + "Password is too long. Maximum allowed length is 469 characters." : "La pasvorto tro longas. Ĝia maksimuma longo estas 469 signoj.", "%s password reset" : "Restarigo de pasvorto %s", "Password reset" : "Restarigi pasvorton", "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Alklaku la jenan butonon por restarigi vian pasvorton. Si vi ne petis restarigon de via pasvorto, simple ignoru tiun ĉi retmesaĝon.", diff --git a/core/l10n/eo.json b/core/l10n/eo.json index d1933ba6eca..4cc828090fa 100644 --- a/core/l10n/eo.json +++ b/core/l10n/eo.json @@ -25,9 +25,11 @@ "Could not complete login" : "Ensaluto ne eblis", "Your login token is invalid or has expired" : "Via ensaluta ĵetono ne validas aŭ senvalidiĝis", "Login" : "Login", + "Please try again" : "Bonvolu reprovi", "Password reset is disabled" : "Pasvorta restarigo malebligita", "Could not reset password because the token is expired" : "Ne eblis restarigi pasvorton, ĉar la ĵetono senvalidiĝis", "Could not reset password because the token is invalid" : "Ne eblis restarigi pasvorton, ĉar la ĵetono ne validas", + "Password is too long. Maximum allowed length is 469 characters." : "La pasvorto tro longas. Ĝia maksimuma longo estas 469 signoj.", "%s password reset" : "Restarigo de pasvorto %s", "Password reset" : "Restarigi pasvorton", "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Alklaku la jenan butonon por restarigi vian pasvorton. Si vi ne petis restarigon de via pasvorto, simple ignoru tiun ĉi retmesaĝon.", diff --git a/core/l10n/eu.js b/core/l10n/eu.js index 4348580d1dd..c0abcf17002 100644 --- a/core/l10n/eu.js +++ b/core/l10n/eu.js @@ -28,6 +28,7 @@ OC.L10N.register( "Your login token is invalid or has expired" : "Zure saio-hasierako tokena baliogabea da edo iraungi da", "This community release of Nextcloud is unsupported and push notifications are limited." : "Nextcloud komunitate bertsio honek ez du laguntza-zerbitzurik eta push jakinarazpenak mugatuak dira.", "Login" : "Hasi saioa", + "Please try again" : "Mesedez saiatu berriro", "Password reset is disabled" : "Pasahitza berrezartzea desgaituta dago", "Could not reset password because the token is expired" : "Ezin izan da pasahitza berrezarri tokena iraungi delako", "Could not reset password because the token is invalid" : "Ezin izan da pasahitza berrezarri tokena baliogabea delako", @@ -182,6 +183,7 @@ OC.L10N.register( "Simple email app nicely integrated with Files, Contacts and Calendar." : "Fitxategiak, Kontaktuak eta Egutegiarekin integratutako posta elektronikoko aplikazio soila.", "Chatting, video calls, screensharing, online meetings and web conferencing – in your browser and with mobile apps." : "Txata, bideo-deiak, pantaila partekatzea, lineako bilerak eta web konferentziak - zure nabigatzailean eta mugikorrerako aplikazioekin.", "Collaborative documents, spreadsheets and presentations, built on Collabora Online." : "Dokumentu, kalkulu-orri eta aurkezpen kolaboratiboak, Collabora Online-en sortuak.", + "Search contacts" : "Bilatu kontaktuak", "Forgot password?" : "Pasahitza ahaztu duzu?", "Log in with a device" : "Hasi saioa gailu batekin", "Back" : "Atzera", diff --git a/core/l10n/eu.json b/core/l10n/eu.json index a276c5ed9bc..e676791f394 100644 --- a/core/l10n/eu.json +++ b/core/l10n/eu.json @@ -26,6 +26,7 @@ "Your login token is invalid or has expired" : "Zure saio-hasierako tokena baliogabea da edo iraungi da", "This community release of Nextcloud is unsupported and push notifications are limited." : "Nextcloud komunitate bertsio honek ez du laguntza-zerbitzurik eta push jakinarazpenak mugatuak dira.", "Login" : "Hasi saioa", + "Please try again" : "Mesedez saiatu berriro", "Password reset is disabled" : "Pasahitza berrezartzea desgaituta dago", "Could not reset password because the token is expired" : "Ezin izan da pasahitza berrezarri tokena iraungi delako", "Could not reset password because the token is invalid" : "Ezin izan da pasahitza berrezarri tokena baliogabea delako", @@ -180,6 +181,7 @@ "Simple email app nicely integrated with Files, Contacts and Calendar." : "Fitxategiak, Kontaktuak eta Egutegiarekin integratutako posta elektronikoko aplikazio soila.", "Chatting, video calls, screensharing, online meetings and web conferencing – in your browser and with mobile apps." : "Txata, bideo-deiak, pantaila partekatzea, lineako bilerak eta web konferentziak - zure nabigatzailean eta mugikorrerako aplikazioekin.", "Collaborative documents, spreadsheets and presentations, built on Collabora Online." : "Dokumentu, kalkulu-orri eta aurkezpen kolaboratiboak, Collabora Online-en sortuak.", + "Search contacts" : "Bilatu kontaktuak", "Forgot password?" : "Pasahitza ahaztu duzu?", "Log in with a device" : "Hasi saioa gailu batekin", "Back" : "Atzera", diff --git a/core/l10n/hu.js b/core/l10n/hu.js index 93f0ca76bf1..7dbe83860bf 100644 --- a/core/l10n/hu.js +++ b/core/l10n/hu.js @@ -28,6 +28,7 @@ OC.L10N.register( "Your login token is invalid or has expired" : "A bejelentkezési token érvénytelen vagy lejárt", "This community release of Nextcloud is unsupported and push notifications are limited." : "A Nextcloud e közösségi kiadása nem támogatott, és a leküldéses értesítések korlátozottak.", "Login" : "Bejelentkezés", + "Please try again" : "Kérjük próbálja újra", "Password reset is disabled" : "Jelszó visszaállítás letiltva", "Could not reset password because the token is expired" : "A jelszót nem lehet visszaállítani, mert a token lejárt", "Could not reset password because the token is invalid" : "A jelszót nem lehet visszaállítani, mert a token érvénytelen", diff --git a/core/l10n/hu.json b/core/l10n/hu.json index aeb331dcf67..9bd37b5a9f6 100644 --- a/core/l10n/hu.json +++ b/core/l10n/hu.json @@ -26,6 +26,7 @@ "Your login token is invalid or has expired" : "A bejelentkezési token érvénytelen vagy lejárt", "This community release of Nextcloud is unsupported and push notifications are limited." : "A Nextcloud e közösségi kiadása nem támogatott, és a leküldéses értesítések korlátozottak.", "Login" : "Bejelentkezés", + "Please try again" : "Kérjük próbálja újra", "Password reset is disabled" : "Jelszó visszaállítás letiltva", "Could not reset password because the token is expired" : "A jelszót nem lehet visszaállítani, mert a token lejárt", "Could not reset password because the token is invalid" : "A jelszót nem lehet visszaállítani, mert a token érvénytelen", diff --git a/core/l10n/pl.js b/core/l10n/pl.js index 0588a017df3..c7a68dff515 100644 --- a/core/l10n/pl.js +++ b/core/l10n/pl.js @@ -28,6 +28,7 @@ OC.L10N.register( "Your login token is invalid or has expired" : "Token logowania jest nieprawidłowy lub wygasł", "This community release of Nextcloud is unsupported and push notifications are limited." : "To wydanie społecznościowe Nextcloud nie jest obsługiwane, a powiadomienia Push są ograniczone.", "Login" : "Zaloguj", + "Please try again" : "Spróbuj ponownie", "Password reset is disabled" : "Resetowanie hasła jest wyłączone", "Could not reset password because the token is expired" : "Nie można zresetować hasła, ponieważ token wygasł", "Could not reset password because the token is invalid" : "Nie można zresetować hasła, ponieważ token jest nieprawidłowy", diff --git a/core/l10n/pl.json b/core/l10n/pl.json index cf399530187..9f79c2074ec 100644 --- a/core/l10n/pl.json +++ b/core/l10n/pl.json @@ -26,6 +26,7 @@ "Your login token is invalid or has expired" : "Token logowania jest nieprawidłowy lub wygasł", "This community release of Nextcloud is unsupported and push notifications are limited." : "To wydanie społecznościowe Nextcloud nie jest obsługiwane, a powiadomienia Push są ograniczone.", "Login" : "Zaloguj", + "Please try again" : "Spróbuj ponownie", "Password reset is disabled" : "Resetowanie hasła jest wyłączone", "Could not reset password because the token is expired" : "Nie można zresetować hasła, ponieważ token wygasł", "Could not reset password because the token is invalid" : "Nie można zresetować hasła, ponieważ token jest nieprawidłowy", diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js index 5704c2aef17..e1621f75a93 100644 --- a/core/l10n/pt_BR.js +++ b/core/l10n/pt_BR.js @@ -28,6 +28,7 @@ OC.L10N.register( "Your login token is invalid or has expired" : "Seu token de login é inválido ou expirou", "This community release of Nextcloud is unsupported and push notifications are limited." : "Esta versão da comunidade do Nextcloud não é compatível e as notificações por push são limitadas.", "Login" : "Entrar", + "Please try again" : "Por favor, tente novamente", "Password reset is disabled" : "A redefinição de senha está desabilitada", "Could not reset password because the token is expired" : "Não foi possível redefinir a senha porque o token expirou", "Could not reset password because the token is invalid" : "Não foi possível redefinir a senha porque o token é inválido", diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json index f68072a3543..837a19f9858 100644 --- a/core/l10n/pt_BR.json +++ b/core/l10n/pt_BR.json @@ -26,6 +26,7 @@ "Your login token is invalid or has expired" : "Seu token de login é inválido ou expirou", "This community release of Nextcloud is unsupported and push notifications are limited." : "Esta versão da comunidade do Nextcloud não é compatível e as notificações por push são limitadas.", "Login" : "Entrar", + "Please try again" : "Por favor, tente novamente", "Password reset is disabled" : "A redefinição de senha está desabilitada", "Could not reset password because the token is expired" : "Não foi possível redefinir a senha porque o token expirou", "Could not reset password because the token is invalid" : "Não foi possível redefinir a senha porque o token é inválido", diff --git a/dist/federatedfilesharing-vue-settings-personal.js b/dist/federatedfilesharing-vue-settings-personal.js index c81d3fd9daf..7ac7694c29e 100644 --- a/dist/federatedfilesharing-vue-settings-personal.js +++ b/dist/federatedfilesharing-vue-settings-personal.js @@ -1,2 +1,2 @@ -!function(){"use strict";var e,n={6024:function(e,n,r){var o=r(20144),i=r(45994),a=r(31352),c=(r(36144),r(26932)),l=r(79954),s=r(13299),d=r.n(s),u=r(10861),f=r.n(u),p=r(67185),h=r(1381),g=r(97859),m=r(70386);function v(t,e,n,r,o,i,a){try{var c=t[i](a),l=c.value}catch(t){return void n(t)}c.done?e(l):Promise.resolve(l).then(r,o)}var y={name:"PersonalSettings",components:{NcButton:f(),NcSettingsSection:d(),Twitter:p.Z,Facebook:h.Z,Web:g.Z,Clipboard:m.Z},data:function(){return{color:(0,l.j)("federatedfilesharing","color"),textColor:(0,l.j)("federatedfilesharing","textColor"),logoPath:(0,l.j)("federatedfilesharing","logoPath"),reference:(0,l.j)("federatedfilesharing","reference"),cloudId:(0,l.j)("federatedfilesharing","cloudId"),docUrlFederated:(0,l.j)("federatedfilesharing","docUrlFederated"),showHtml:!1,isCopied:!1}},computed:{messageWithURL:function(){return t("federatedfilesharing","Share with me through my #Nextcloud Federated Cloud ID, see {url}",{url:this.reference})},messageWithoutURL:function(){return t("federatedfilesharing","Share with me through my #Nextcloud Federated Cloud ID")},shareDiasporaUrl:function(){return"https://share.diasporafoundation.org/?title=".concat(encodeURIComponent(this.messageWithoutURL),"&url=").concat(encodeURIComponent(this.reference))},shareTwitterUrl:function(){return"https://twitter.com/intent/tweet?text=".concat(encodeURIComponent(this.messageWithURL))},shareFacebookUrl:function(){return"https://www.facebook.com/sharer/sharer.php?u=".concat(encodeURIComponent(this.reference))},logoPathAbsolute:function(){return window.location.protocol+"//"+window.location.host+this.logoPath},backgroundStyle:function(){return"padding:10px;background-color:".concat(this.color,";color:").concat(this.textColor,";border-radius:3px;padding-left:4px;")},linkStyle:function(){return"background-image:url(".concat(this.logoPathAbsolute,");width:50px;height:30px;position:relative;top:8px;background-size:contain;display:inline-block;background-repeat:no-repeat; background-position: center center;")},htmlCode:function(){return'<a target="_blank" rel="noreferrer noopener" href="'.concat(this.reference,'" style="').concat(this.backgroundStyle,'">\n\t<span style="').concat(this.linkStyle,'"></span>\n\t').concat(t("federatedfilesharing","Share with me via Nextcloud"),"\n</a>")},copyLinkTooltip:function(){return this.isCopied?t("federatedfilesharing","Cloud ID copied to the clipboard"):t("federatedfilesharing","Copy to clipboard")}},methods:{copyCloudId:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.clipboard){e.next=3;break}return(0,c.x2)(t("federatedfilesharing","Clipboard is not available")),e.abrupt("return");case 3:return e.next=5,navigator.clipboard.writeText(n.cloudId);case 5:n.isCopied=!0,n.$refs.clipboard.$el.focus();case 7:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(t){v(i,r,o,a,c,"next",t)}function c(t){v(i,r,o,a,c,"throw",t)}a(void 0)}))})()},goTo:function(t){window.location.href=t}}},b=y,A=r(93379),C=r.n(A),x=r(7795),w=r.n(x),I=r(90569),k=r.n(I),_=r(3565),M=r.n(_),T=r(19216),D=r.n(T),S=r(44589),j=r.n(S),N=r(85071),Z={};Z.styleTagTransform=j(),Z.setAttributes=M(),Z.insert=k().bind(null,"head"),Z.domAPI=w(),Z.insertStyleElement=D(),C()(N.Z,Z),N.Z&&N.Z.locals&&N.Z.locals;var P=(0,r(51900).Z)(b,(function(){var t=this,e=t._self._c;return e("NcSettingsSection",{attrs:{title:t.t("federatedfilesharing","Federated Cloud"),description:t.t("federatedfilesharing","You can share with anyone who uses a Nextcloud server or other Open Cloud Mesh (OCM) compatible servers and services! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com"),"doc-url":t.docUrlFederated}},[e("p",{staticClass:"cloud-id-text"},[t._v("\n\t\t"+t._s(t.t("federatedfilesharing","Your Federated Cloud ID:"))+"\n\t\t"),e("strong",{attrs:{id:"cloudid"}},[t._v(t._s(t.cloudId))]),t._v(" "),e("NcButton",{ref:"clipboard",staticClass:"clipboard",attrs:{title:t.copyLinkTooltip,"aria-label":t.copyLinkTooltip,type:"tertiary-no-background"},on:{click:function(e){return e.preventDefault(),t.copyCloudId.apply(null,arguments)}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Clipboard",{attrs:{size:20}})]},proxy:!0}])})],1),t._v(" "),e("p",{staticClass:"social-button"},[t._v("\n\t\t"+t._s(t.t("federatedfilesharing","Share it so your friends can share files with you:"))),e("br"),t._v(" "),e("NcButton",{on:{click:function(e){return t.goTo(t.shareFacebookUrl)}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Facebook",{attrs:{size:20}})]},proxy:!0}])},[t._v("\n\t\t\t"+t._s(t.t("federatedfilesharing","Facebook"))+"\n\t\t\t")]),t._v(" "),e("NcButton",{on:{click:function(e){return t.goTo(t.shareTwitterUrl)}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Twitter",{attrs:{size:20}})]},proxy:!0}])},[t._v("\n\t\t\t"+t._s(t.t("federatedfilesharing","Twitter"))+"\n\t\t\t")]),t._v(" "),e("NcButton",{on:{click:function(e){return t.goTo(t.shareDiasporaUrl)}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("svg",{attrs:{width:"20",height:"20",viewBox:"-10 -5 1034 1034",xmlns:"http://www.w3.org/2000/svg"}},[e("path",{attrs:{fill:"currentColor",d:"M502 197q-96 0-96.5 1.5t-1.5 137-1.5 138-2 2.5T266 432.5 132.5 390t-30 94T74 578l232 77q21 8 21 10t-79.5 117.5T168 899t79.5 56.5T328 1011t81-110 82-110 41 55l83 115q43 60 44 60t79.5-58 79-59-76-112.5-76-113.5T795 632.5t129.5-44-28-94T867 400t-128 42-128.5 43-2.5-7.5-1-38.5l-3-108q-4-133-5-133.5t-97-.5z"}})])]},proxy:!0}])},[t._v("\n\t\t\t"+t._s(t.t("federatedfilesharing","Diaspora"))+"\n\t\t\t")]),t._v(" "),e("NcButton",{on:{click:function(e){t.showHtml=!t.showHtml}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Web",{attrs:{size:20}})]},proxy:!0}])},[t._v("\n\t\t\t"+t._s(t.t("federatedfilesharing","Add to your website"))+"\n\t\t")])],1),t._v(" "),t.showHtml?[e("p",{staticStyle:{margin:"10px 0"}},[e("a",{style:t.backgroundStyle,attrs:{target:"_blank",rel:"noreferrer noopener",href:t.reference}},[e("span",{style:t.linkStyle}),t._v("\n\t\t\t\t"+t._s(t.t("federatedfilesharing","Share with me via Nextcloud"))+"\n\t\t\t")])]),t._v(" "),e("p",[t._v("\n\t\t\t"+t._s(t.t("federatedfilesharing","HTML Code:"))+"\n\t\t\t"),e("br"),t._v(" "),e("pre",[t._v(t._s(t.htmlCode))])])]:t._e()],2)}),[],!1,null,"592de450",null),B=P.exports;r.nc=btoa((0,i.IH)()),o.ZP.mixin({methods:{t:a.Iu}}),(new(o.ZP.extend(B))).$mount("#vue-personal-federated")},85071:function(t,e,n){var r=n(87537),o=n.n(r),i=n(23645),a=n.n(i)()(o());a.push([t.id,".social-button[data-v-592de450]{margin-top:.5rem}.social-button button[data-v-592de450]{display:inline-flex;margin-left:.5rem;margin-top:1rem}.cloud-id-text[data-v-592de450]{display:flex;align-items:center}.cloud-id-text button[data-v-592de450]{display:inline-flex}pre[data-v-592de450]{margin-top:0;white-space:pre-wrap}#cloudid[data-v-592de450]{margin-left:.25rem}","",{version:3,sources:["webpack://./apps/federatedfilesharing/src/components/PersonalSettings.vue"],names:[],mappings:"AACA,gCACC,gBAAA,CACA,uCACC,mBAAA,CACA,iBAAA,CACA,eAAA,CAGF,gCACC,YAAA,CACA,kBAAA,CACA,uCACC,mBAAA,CAGF,qBACC,YAAA,CACA,oBAAA,CAED,0BACC,kBAAA",sourcesContent:["\n.social-button {\n\tmargin-top: 0.5rem;\n\tbutton {\n\t\tdisplay: inline-flex;\n\t\tmargin-left: 0.5rem;\n\t\tmargin-top: 1rem;\n\t}\n}\n.cloud-id-text {\n\tdisplay: flex;\n\talign-items: center;\n\tbutton {\n\t\tdisplay: inline-flex;\n\t}\n}\npre {\n\tmargin-top: 0;\n\twhite-space: pre-wrap;\n}\n#cloudid {\n\tmargin-left: 0.25rem;\n}\n"],sourceRoot:""}]),e.Z=a},81490:function(t){t.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiI+CiAgPHBhdGggZD0iTTE0IDEyLjNMMTIuMyAxNCA4IDkuNyAzLjcgMTQgMiAxMi4zIDYuMyA4IDIgMy43IDMuNyAyIDggNi4zIDEyLjMgMiAxNCAzLjcgOS43IDh6Ii8+Cjwvc3ZnPgo="},90888:function(t){t.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiI+CiAgPHBhdGggZD0iTTE0IDEyLjNMMTIuMyAxNCA4IDkuNyAzLjcgMTQgMiAxMi4zIDYuMyA4IDIgMy43IDMuNyAyIDggNi4zIDEyLjMgMiAxNCAzLjcgOS43IDh6IiBzdHlsZT0iZmlsbC1vcGFjaXR5OjE7ZmlsbDojZmZmZmZmIi8+Cjwvc3ZnPgo="}},r={};function o(t){var e=r[t];if(void 0!==e)return e.exports;var i=r[t]={id:t,loaded:!1,exports:{}};return n[t].call(i.exports,i,i.exports,o),i.loaded=!0,i.exports}o.m=n,e=[],o.O=function(t,n,r,i){if(!n){var a=1/0;for(d=0;d<e.length;d++){n=e[d][0],r=e[d][1],i=e[d][2];for(var c=!0,l=0;l<n.length;l++)(!1&i||a>=i)&&Object.keys(o.O).every((function(t){return o.O[t](n[l])}))?n.splice(l--,1):(c=!1,i<a&&(a=i));if(c){e.splice(d--,1);var s=r();void 0!==s&&(t=s)}}return t}i=i||0;for(var d=e.length;d>0&&e[d-1][2]>i;d--)e[d]=e[d-1];e[d]=[n,r,i]},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,{a:e}),e},o.d=function(t,e){for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},o.j=5855,function(){o.b=document.baseURI||self.location.href;var t={5855:0};o.O.j=function(e){return 0===t[e]};var e=function(e,n){var r,i,a=n[0],c=n[1],l=n[2],s=0;if(a.some((function(e){return 0!==t[e]}))){for(r in c)o.o(c,r)&&(o.m[r]=c[r]);if(l)var d=l(o)}for(e&&e(n);s<a.length;s++)i=a[s],o.o(t,i)&&t[i]&&t[i][0](),t[i]=0;return o.O(d)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),o.nc=void 0;var i=o.O(void 0,[7874],(function(){return o(6024)}));i=o.O(i)}(); -//# sourceMappingURL=federatedfilesharing-vue-settings-personal.js.map?v=c3e5d45b4818c3a2ded7
\ No newline at end of file +!function(){"use strict";var e,n={763:function(e,n,r){var o=r(20144),i=r(45994),a=r(31352),c=(r(36144),r(26932)),l=r(79954),s=r(13299),d=r.n(s),u=r(10861),f=r.n(u),p=r(67185),h=r(1381),g=r(97859),m=r(70386);function v(t,e,n,r,o,i,a){try{var c=t[i](a),l=c.value}catch(t){return void n(t)}c.done?e(l):Promise.resolve(l).then(r,o)}var b={name:"PersonalSettings",components:{NcButton:f(),NcSettingsSection:d(),Twitter:p.Z,Facebook:h.Z,Web:g.Z,Clipboard:m.Z},data:function(){return{color:(0,l.j)("federatedfilesharing","color"),textColor:(0,l.j)("federatedfilesharing","textColor"),logoPath:(0,l.j)("federatedfilesharing","logoPath"),reference:(0,l.j)("federatedfilesharing","reference"),cloudId:(0,l.j)("federatedfilesharing","cloudId"),docUrlFederated:(0,l.j)("federatedfilesharing","docUrlFederated"),showHtml:!1,isCopied:!1}},computed:{messageWithURL:function(){return t("federatedfilesharing","Share with me through my #Nextcloud Federated Cloud ID, see {url}",{url:this.reference})},messageWithoutURL:function(){return t("federatedfilesharing","Share with me through my #Nextcloud Federated Cloud ID")},shareDiasporaUrl:function(){return"https://share.diasporafoundation.org/?title=".concat(encodeURIComponent(this.messageWithoutURL),"&url=").concat(encodeURIComponent(this.reference))},shareTwitterUrl:function(){return"https://twitter.com/intent/tweet?text=".concat(encodeURIComponent(this.messageWithURL))},shareFacebookUrl:function(){return"https://www.facebook.com/sharer/sharer.php?u=".concat(encodeURIComponent(this.reference))},logoPathAbsolute:function(){return window.location.protocol+"//"+window.location.host+this.logoPath},backgroundStyle:function(){return"padding:10px;background-color:".concat(this.color,";color:").concat(this.textColor,";border-radius:3px;padding-left:4px;")},linkStyle:function(){return"background-image:url(".concat(this.logoPathAbsolute,");width:50px;height:30px;position:relative;top:8px;background-size:contain;display:inline-block;background-repeat:no-repeat; background-position: center center;")},htmlCode:function(){return'<a target="_blank" rel="noreferrer noopener" href="'.concat(this.reference,'" style="').concat(this.backgroundStyle,'">\n\t<span style="').concat(this.linkStyle,'"></span>\n\t').concat(t("federatedfilesharing","Share with me via Nextcloud"),"\n</a>")},copyLinkTooltip:function(){return this.isCopied?t("federatedfilesharing","Cloud ID copied to the clipboard"):t("federatedfilesharing","Copy to clipboard")}},methods:{copyCloudId:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(navigator.clipboard){e.next=3;break}return(0,c.x2)(t("federatedfilesharing","Clipboard is not available")),e.abrupt("return");case 3:return e.next=5,navigator.clipboard.writeText(n.cloudId);case 5:n.isCopied=!0,(0,c.s$)(t("federatedfilesharing","Copied!")),n.$refs.clipboard.$el.focus();case 8:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(t){v(i,r,o,a,c,"next",t)}function c(t){v(i,r,o,a,c,"throw",t)}a(void 0)}))})()},goTo:function(t){window.location.href=t}}},y=b,A=r(93379),C=r.n(A),x=r(7795),w=r.n(x),I=r(90569),k=r.n(I),_=r(3565),M=r.n(_),T=r(19216),D=r.n(T),S=r(44589),j=r.n(S),N=r(15892),Z={};Z.styleTagTransform=j(),Z.setAttributes=M(),Z.insert=k().bind(null,"head"),Z.domAPI=w(),Z.insertStyleElement=D(),C()(N.Z,Z),N.Z&&N.Z.locals&&N.Z.locals;var P=(0,r(51900).Z)(y,(function(){var t=this,e=t._self._c;return e("NcSettingsSection",{attrs:{title:t.t("federatedfilesharing","Federated Cloud"),description:t.t("federatedfilesharing","You can share with anyone who uses a Nextcloud server or other Open Cloud Mesh (OCM) compatible servers and services! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com"),"doc-url":t.docUrlFederated}},[e("p",{staticClass:"cloud-id-text"},[t._v("\n\t\t"+t._s(t.t("federatedfilesharing","Your Federated Cloud ID:"))+"\n\t\t"),e("strong",{attrs:{id:"cloudid"}},[t._v(t._s(t.cloudId))]),t._v(" "),e("NcButton",{ref:"clipboard",staticClass:"clipboard",attrs:{title:t.copyLinkTooltip,"aria-label":t.copyLinkTooltip,type:"tertiary-no-background"},on:{click:function(e){return e.preventDefault(),t.copyCloudId.apply(null,arguments)}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Clipboard",{attrs:{size:20}})]},proxy:!0}])})],1),t._v(" "),e("p",{staticClass:"social-button"},[t._v("\n\t\t"+t._s(t.t("federatedfilesharing","Share it so your friends can share files with you:"))),e("br"),t._v(" "),e("NcButton",{on:{click:function(e){return t.goTo(t.shareFacebookUrl)}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Facebook",{attrs:{size:20}})]},proxy:!0}])},[t._v("\n\t\t\t"+t._s(t.t("federatedfilesharing","Facebook"))+"\n\t\t\t")]),t._v(" "),e("NcButton",{on:{click:function(e){return t.goTo(t.shareTwitterUrl)}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Twitter",{attrs:{size:20}})]},proxy:!0}])},[t._v("\n\t\t\t"+t._s(t.t("federatedfilesharing","Twitter"))+"\n\t\t\t")]),t._v(" "),e("NcButton",{on:{click:function(e){return t.goTo(t.shareDiasporaUrl)}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("svg",{attrs:{width:"20",height:"20",viewBox:"-10 -5 1034 1034",xmlns:"http://www.w3.org/2000/svg"}},[e("path",{attrs:{fill:"currentColor",d:"M502 197q-96 0-96.5 1.5t-1.5 137-1.5 138-2 2.5T266 432.5 132.5 390t-30 94T74 578l232 77q21 8 21 10t-79.5 117.5T168 899t79.5 56.5T328 1011t81-110 82-110 41 55l83 115q43 60 44 60t79.5-58 79-59-76-112.5-76-113.5T795 632.5t129.5-44-28-94T867 400t-128 42-128.5 43-2.5-7.5-1-38.5l-3-108q-4-133-5-133.5t-97-.5z"}})])]},proxy:!0}])},[t._v("\n\t\t\t"+t._s(t.t("federatedfilesharing","Diaspora"))+"\n\t\t\t")]),t._v(" "),e("NcButton",{on:{click:function(e){t.showHtml=!t.showHtml}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Web",{attrs:{size:20}})]},proxy:!0}])},[t._v("\n\t\t\t"+t._s(t.t("federatedfilesharing","Add to your website"))+"\n\t\t")])],1),t._v(" "),t.showHtml?[e("p",{staticStyle:{margin:"10px 0"}},[e("a",{style:t.backgroundStyle,attrs:{target:"_blank",rel:"noreferrer noopener",href:t.reference}},[e("span",{style:t.linkStyle}),t._v("\n\t\t\t\t"+t._s(t.t("federatedfilesharing","Share with me via Nextcloud"))+"\n\t\t\t")])]),t._v(" "),e("p",[t._v("\n\t\t\t"+t._s(t.t("federatedfilesharing","HTML Code:"))+"\n\t\t\t"),e("br"),t._v(" "),e("pre",[t._v(t._s(t.htmlCode))])])]:t._e()],2)}),[],!1,null,"356b343c",null),B=P.exports;r.nc=btoa((0,i.IH)()),o.ZP.mixin({methods:{t:a.Iu}}),(new(o.ZP.extend(B))).$mount("#vue-personal-federated")},15892:function(t,e,n){var r=n(87537),o=n.n(r),i=n(23645),a=n.n(i)()(o());a.push([t.id,".social-button[data-v-356b343c]{margin-top:.5rem}.social-button button[data-v-356b343c]{display:inline-flex;margin-left:.5rem;margin-top:1rem}.cloud-id-text[data-v-356b343c]{display:flex;align-items:center}.cloud-id-text button[data-v-356b343c]{display:inline-flex}pre[data-v-356b343c]{margin-top:0;white-space:pre-wrap}#cloudid[data-v-356b343c]{margin-left:.25rem}","",{version:3,sources:["webpack://./apps/federatedfilesharing/src/components/PersonalSettings.vue"],names:[],mappings:"AACA,gCACC,gBAAA,CACA,uCACC,mBAAA,CACA,iBAAA,CACA,eAAA,CAGF,gCACC,YAAA,CACA,kBAAA,CACA,uCACC,mBAAA,CAGF,qBACC,YAAA,CACA,oBAAA,CAED,0BACC,kBAAA",sourcesContent:["\n.social-button {\n\tmargin-top: 0.5rem;\n\tbutton {\n\t\tdisplay: inline-flex;\n\t\tmargin-left: 0.5rem;\n\t\tmargin-top: 1rem;\n\t}\n}\n.cloud-id-text {\n\tdisplay: flex;\n\talign-items: center;\n\tbutton {\n\t\tdisplay: inline-flex;\n\t}\n}\npre {\n\tmargin-top: 0;\n\twhite-space: pre-wrap;\n}\n#cloudid {\n\tmargin-left: 0.25rem;\n}\n"],sourceRoot:""}]),e.Z=a},81490:function(t){t.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiI+CiAgPHBhdGggZD0iTTE0IDEyLjNMMTIuMyAxNCA4IDkuNyAzLjcgMTQgMiAxMi4zIDYuMyA4IDIgMy43IDMuNyAyIDggNi4zIDEyLjMgMiAxNCAzLjcgOS43IDh6Ii8+Cjwvc3ZnPgo="},90888:function(t){t.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiI+CiAgPHBhdGggZD0iTTE0IDEyLjNMMTIuMyAxNCA4IDkuNyAzLjcgMTQgMiAxMi4zIDYuMyA4IDIgMy43IDMuNyAyIDggNi4zIDEyLjMgMiAxNCAzLjcgOS43IDh6IiBzdHlsZT0iZmlsbC1vcGFjaXR5OjE7ZmlsbDojZmZmZmZmIi8+Cjwvc3ZnPgo="}},r={};function o(t){var e=r[t];if(void 0!==e)return e.exports;var i=r[t]={id:t,loaded:!1,exports:{}};return n[t].call(i.exports,i,i.exports,o),i.loaded=!0,i.exports}o.m=n,e=[],o.O=function(t,n,r,i){if(!n){var a=1/0;for(d=0;d<e.length;d++){n=e[d][0],r=e[d][1],i=e[d][2];for(var c=!0,l=0;l<n.length;l++)(!1&i||a>=i)&&Object.keys(o.O).every((function(t){return o.O[t](n[l])}))?n.splice(l--,1):(c=!1,i<a&&(a=i));if(c){e.splice(d--,1);var s=r();void 0!==s&&(t=s)}}return t}i=i||0;for(var d=e.length;d>0&&e[d-1][2]>i;d--)e[d]=e[d-1];e[d]=[n,r,i]},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,{a:e}),e},o.d=function(t,e){for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},o.j=5855,function(){o.b=document.baseURI||self.location.href;var t={5855:0};o.O.j=function(e){return 0===t[e]};var e=function(e,n){var r,i,a=n[0],c=n[1],l=n[2],s=0;if(a.some((function(e){return 0!==t[e]}))){for(r in c)o.o(c,r)&&(o.m[r]=c[r]);if(l)var d=l(o)}for(e&&e(n);s<a.length;s++)i=a[s],o.o(t,i)&&t[i]&&t[i][0](),t[i]=0;return o.O(d)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),o.nc=void 0;var i=o.O(void 0,[7874],(function(){return o(763)}));i=o.O(i)}(); +//# sourceMappingURL=federatedfilesharing-vue-settings-personal.js.map?v=db7de41601b486bb8de9
\ No newline at end of file diff --git a/dist/federatedfilesharing-vue-settings-personal.js.map b/dist/federatedfilesharing-vue-settings-personal.js.map index 71c02cca168..e908edb3235 100644 --- a/dist/federatedfilesharing-vue-settings-personal.js.map +++ b/dist/federatedfilesharing-vue-settings-personal.js.map @@ -1 +1 @@ -{"version":3,"file":"federatedfilesharing-vue-settings-personal.js?v=c3e5d45b4818c3a2ded7","mappings":"6BAAIA,E,0SCkGJ,OACAC,KAAAA,mBACAC,WAAAA,CACAC,SAAAA,IACAC,kBAAAA,IACAC,QAAAA,EAAAA,EACAC,SAAAA,EAAAA,EACAC,IAAAA,EAAAA,EACAC,UAAAA,EAAAA,GAEAC,KAAAA,WACA,OACAC,OAAAA,EAAAA,EAAAA,GAAAA,uBAAAA,SACAC,WAAAA,EAAAA,EAAAA,GAAAA,uBAAAA,aACAC,UAAAA,EAAAA,EAAAA,GAAAA,uBAAAA,YACAC,WAAAA,EAAAA,EAAAA,GAAAA,uBAAAA,aACAC,SAAAA,EAAAA,EAAAA,GAAAA,uBAAAA,WACAC,iBAAAA,EAAAA,EAAAA,GAAAA,uBAAAA,mBACAC,UAAAA,EACAC,UAAAA,EAEA,EACAC,SAAAA,CACAC,eAAAA,WACA,qGAAAC,IAAAA,KAAAA,WACA,EACAC,kBAAAA,WACA,yFACA,EACAC,iBAAAA,WACA,0JACA,EACAC,gBAAAA,WACA,8FACA,EACAC,iBAAAA,WACA,gGACA,EACAC,iBAAAA,WACA,uEACA,EACAC,gBAAAA,WACA,iIACA,EACAC,UAAAA,WACA,8NACA,EACAC,SAAAA,WACA,yJACA,uCACAC,EAAAA,uBAAAA,+BAAAA,SAEA,EACAC,gBAAAA,WACA,+HACA,GAEAC,QAAAA,CACAC,YAAAA,WAAA,I,EAAA,c,EAAA,yHACAC,UAAAA,UAAAA,CAAA,eAEA,OAAAC,EAAAA,EAAAA,IAAAA,EAAAA,uBAAAA,+BAAA,0CAGAD,UAAAA,UAAAA,UAAAA,EAAAA,SAAA,OACA,cACA,wE,gLACA,EACAE,KAAAA,SAAAA,GACAC,OAAAA,SAAAA,KAAAA,CACA,ICxK6L,I,iICWzLC,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IAElBF,EAAQG,OAAS,SAAc,KAAM,QAE3CH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKJ,KAAW,YAAiB,WALlD,ICbIM,GAAY,E,SAAA,GACd,GCTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,oBAAoB,CAACE,MAAM,CAAC,MAAQJ,EAAIf,EAAE,uBAAwB,mBAAmB,YAAce,EAAIf,EAAE,uBAAwB,uNAAuN,UAAUe,EAAI7B,kBAAkB,CAAC+B,EAAG,IAAI,CAACG,YAAY,iBAAiB,CAACL,EAAIM,GAAG,SAASN,EAAIO,GAAGP,EAAIf,EAAE,uBAAwB,6BAA6B,UAAUiB,EAAG,SAAS,CAACE,MAAM,CAAC,GAAK,YAAY,CAACJ,EAAIM,GAAGN,EAAIO,GAAGP,EAAI9B,YAAY8B,EAAIM,GAAG,KAAKJ,EAAG,WAAW,CAACM,IAAI,YAAYH,YAAY,YAAYD,MAAM,CAAC,MAAQJ,EAAId,gBAAgB,aAAac,EAAId,gBAAgB,KAAO,0BAA0BuB,GAAG,CAAC,MAAQ,SAASC,GAAgC,OAAxBA,EAAOC,iBAAwBX,EAAIZ,YAAYwB,MAAM,KAAMC,UAAU,GAAGC,YAAYd,EAAIe,GAAG,CAAC,CAACC,IAAI,OAAOC,GAAG,WAAW,MAAO,CAACf,EAAG,YAAY,CAACE,MAAM,CAAC,KAAO,MAAM,EAAEc,OAAM,QAAW,GAAGlB,EAAIM,GAAG,KAAKJ,EAAG,IAAI,CAACG,YAAY,iBAAiB,CAACL,EAAIM,GAAG,SAASN,EAAIO,GAAGP,EAAIf,EAAE,uBAAwB,wDAAwDiB,EAAG,MAAMF,EAAIM,GAAG,KAAKJ,EAAG,WAAW,CAACO,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOV,EAAIT,KAAKS,EAAIpB,iBAAiB,GAAGkC,YAAYd,EAAIe,GAAG,CAAC,CAACC,IAAI,OAAOC,GAAG,WAAW,MAAO,CAACf,EAAG,WAAW,CAACE,MAAM,CAAC,KAAO,MAAM,EAAEc,OAAM,MAAS,CAAClB,EAAIM,GAAG,WAAWN,EAAIO,GAAGP,EAAIf,EAAE,uBAAwB,aAAa,cAAce,EAAIM,GAAG,KAAKJ,EAAG,WAAW,CAACO,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOV,EAAIT,KAAKS,EAAIrB,gBAAgB,GAAGmC,YAAYd,EAAIe,GAAG,CAAC,CAACC,IAAI,OAAOC,GAAG,WAAW,MAAO,CAACf,EAAG,UAAU,CAACE,MAAM,CAAC,KAAO,MAAM,EAAEc,OAAM,MAAS,CAAClB,EAAIM,GAAG,WAAWN,EAAIO,GAAGP,EAAIf,EAAE,uBAAwB,YAAY,cAAce,EAAIM,GAAG,KAAKJ,EAAG,WAAW,CAACO,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOV,EAAIT,KAAKS,EAAItB,iBAAiB,GAAGoC,YAAYd,EAAIe,GAAG,CAAC,CAACC,IAAI,OAAOC,GAAG,WAAW,MAAO,CAACf,EAAG,MAAM,CAACE,MAAM,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,mBAAmB,MAAQ,+BAA+B,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,uTAAuT,EAAEc,OAAM,MAAS,CAAClB,EAAIM,GAAG,WAAWN,EAAIO,GAAGP,EAAIf,EAAE,uBAAwB,aAAa,cAAce,EAAIM,GAAG,KAAKJ,EAAG,WAAW,CAACO,GAAG,CAAC,MAAQ,SAASC,GAAQV,EAAI5B,UAAY4B,EAAI5B,QAAQ,GAAG0C,YAAYd,EAAIe,GAAG,CAAC,CAACC,IAAI,OAAOC,GAAG,WAAW,MAAO,CAACf,EAAG,MAAM,CAACE,MAAM,CAAC,KAAO,MAAM,EAAEc,OAAM,MAAS,CAAClB,EAAIM,GAAG,WAAWN,EAAIO,GAAGP,EAAIf,EAAE,uBAAwB,wBAAwB,aAAa,GAAGe,EAAIM,GAAG,KAAMN,EAAI5B,SAAU,CAAC8B,EAAG,IAAI,CAACiB,YAAY,CAAC,OAAS,WAAW,CAACjB,EAAG,IAAI,CAACkB,MAAOpB,EAAIlB,gBAAiBsB,MAAM,CAAC,OAAS,SAAS,IAAM,sBAAsB,KAAOJ,EAAI/B,YAAY,CAACiC,EAAG,OAAO,CAACkB,MAAOpB,EAAIjB,YAAaiB,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIf,EAAE,uBAAwB,gCAAgC,gBAAgBe,EAAIM,GAAG,KAAKJ,EAAG,IAAI,CAACF,EAAIM,GAAG,WAAWN,EAAIO,GAAGP,EAAIf,EAAE,uBAAwB,eAAe,YAAYiB,EAAG,MAAMF,EAAIM,GAAG,KAAKJ,EAAG,MAAM,CAACF,EAAIM,GAAGN,EAAIO,GAAGP,EAAIhB,gBAAgBgB,EAAIqB,MAAM,EAC/rG,GACsB,IDUpB,EACA,KACA,WACA,MAIF,EAAetB,EAAiB,QEOhCuB,EAAAA,GAAoBC,MAAKC,EAAAA,EAAAA,OAEzBC,EAAAA,GAAAA,MAAU,CACTtC,QAAS,CACRF,EAAAA,EAAAA,OAKF,IAD6BwC,EAAAA,GAAAA,OAAWC,KACbC,OAAO,0B,2DChC9BC,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,gXAAiX,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,6EAA6E,MAAQ,GAAG,SAAW,iJAAiJ,eAAiB,CAAC,wVAAwV,WAAa,MAEhiC,K,umBCNIC,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaE,QAGrB,IAAIP,EAASE,EAAyBE,GAAY,CACjDH,GAAIG,EACJI,QAAQ,EACRD,QAAS,CAAC,GAUX,OANAE,EAAoBL,GAAUM,KAAKV,EAAOO,QAASP,EAAQA,EAAOO,QAASJ,GAG3EH,EAAOQ,QAAS,EAGTR,EAAOO,OACf,CAGAJ,EAAoBQ,EAAIF,ER5BpBnF,EAAW,GACf6E,EAAoBS,EAAI,SAASC,EAAQC,EAAU3B,EAAI4B,GACtD,IAAGD,EAAH,CAMA,IAAIE,EAAeC,IACnB,IAASC,EAAI,EAAGA,EAAI5F,EAAS6F,OAAQD,IAAK,CACrCJ,EAAWxF,EAAS4F,GAAG,GACvB/B,EAAK7D,EAAS4F,GAAG,GACjBH,EAAWzF,EAAS4F,GAAG,GAE3B,IAJA,IAGIE,GAAY,EACPC,EAAI,EAAGA,EAAIP,EAASK,OAAQE,MACpB,EAAXN,GAAsBC,GAAgBD,IAAaO,OAAOC,KAAKpB,EAAoBS,GAAGY,OAAM,SAAStC,GAAO,OAAOiB,EAAoBS,EAAE1B,GAAK4B,EAASO,GAAK,IAChKP,EAASW,OAAOJ,IAAK,IAErBD,GAAY,EACTL,EAAWC,IAAcA,EAAeD,IAG7C,GAAGK,EAAW,CACb9F,EAASmG,OAAOP,IAAK,GACrB,IAAIQ,EAAIvC,SACEmB,IAANoB,IAAiBb,EAASa,EAC/B,CACD,CACA,OAAOb,CArBP,CAJCE,EAAWA,GAAY,EACvB,IAAI,IAAIG,EAAI5F,EAAS6F,OAAQD,EAAI,GAAK5F,EAAS4F,EAAI,GAAG,GAAKH,EAAUG,IAAK5F,EAAS4F,GAAK5F,EAAS4F,EAAI,GACrG5F,EAAS4F,GAAK,CAACJ,EAAU3B,EAAI4B,EAwB/B,ES5BAZ,EAAoBwB,EAAI,SAAS3B,GAChC,IAAI4B,EAAS5B,GAAUA,EAAO6B,WAC7B,WAAa,OAAO7B,EAAgB,OAAG,EACvC,WAAa,OAAOA,CAAQ,EAE7B,OADAG,EAAoB2B,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CACR,ECNAzB,EAAoB2B,EAAI,SAASvB,EAASyB,GACzC,IAAI,IAAI9C,KAAO8C,EACX7B,EAAoB8B,EAAED,EAAY9C,KAASiB,EAAoB8B,EAAE1B,EAASrB,IAC5EoC,OAAOY,eAAe3B,EAASrB,EAAK,CAAEiD,YAAY,EAAMC,IAAKJ,EAAW9C,IAG3E,ECPAiB,EAAoBkC,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOnE,MAAQ,IAAIoE,SAAS,cAAb,EAGhB,CAFE,MAAOC,GACR,GAAsB,iBAAX9E,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxByC,EAAoB8B,EAAI,SAASQ,EAAKC,GAAQ,OAAOpB,OAAOqB,UAAUC,eAAelC,KAAK+B,EAAKC,EAAO,ECCtGvC,EAAoBuB,EAAI,SAASnB,GACX,oBAAXsC,QAA0BA,OAAOC,aAC1CxB,OAAOY,eAAe3B,EAASsC,OAAOC,YAAa,CAAEC,MAAO,WAE7DzB,OAAOY,eAAe3B,EAAS,aAAc,CAAEwC,OAAO,GACvD,ECNA5C,EAAoB6C,IAAM,SAAShD,GAGlC,OAFAA,EAAOiD,MAAQ,GACVjD,EAAOkD,WAAUlD,EAAOkD,SAAW,IACjClD,CACR,ECJAG,EAAoBkB,EAAI,K,WCAxBlB,EAAoBgD,EAAIC,SAASC,SAAWC,KAAKC,SAASC,KAK1D,IAAIC,EAAkB,CACrB,KAAM,GAaPtD,EAAoBS,EAAES,EAAI,SAASqC,GAAW,OAAoC,IAA7BD,EAAgBC,EAAgB,EAGrF,IAAIC,EAAuB,SAASC,EAA4B7H,GAC/D,IAKIqE,EAAUsD,EALV5C,EAAW/E,EAAK,GAChB8H,EAAc9H,EAAK,GACnB+H,EAAU/H,EAAK,GAGImF,EAAI,EAC3B,GAAGJ,EAASiD,MAAK,SAAS9D,GAAM,OAA+B,IAAxBwD,EAAgBxD,EAAW,IAAI,CACrE,IAAIG,KAAYyD,EACZ1D,EAAoB8B,EAAE4B,EAAazD,KACrCD,EAAoBQ,EAAEP,GAAYyD,EAAYzD,IAGhD,GAAG0D,EAAS,IAAIjD,EAASiD,EAAQ3D,EAClC,CAEA,IADGyD,GAA4BA,EAA2B7H,GACrDmF,EAAIJ,EAASK,OAAQD,IACzBwC,EAAU5C,EAASI,GAChBf,EAAoB8B,EAAEwB,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBC,GAAW,EAE5B,OAAOvD,EAAoBS,EAAEC,EAC9B,EAEImD,EAAqBV,KAA4B,sBAAIA,KAA4B,uBAAK,GAC1FU,EAAmBC,QAAQN,EAAqBO,KAAK,KAAM,IAC3DF,EAAmBjE,KAAO4D,EAAqBO,KAAK,KAAMF,EAAmBjE,KAAKmE,KAAKF,G,IClDvF7D,EAAoBgE,QAAK7D,ECGzB,IAAI8D,EAAsBjE,EAAoBS,OAAEN,EAAW,CAAC,OAAO,WAAa,OAAOH,EAAoB,KAAO,IAClHiE,EAAsBjE,EAAoBS,EAAEwD,E","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/federatedfilesharing/src/components/PersonalSettings.vue","webpack:///nextcloud/apps/federatedfilesharing/src/components/PersonalSettings.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/federatedfilesharing/src/components/PersonalSettings.vue?7f03","webpack://nextcloud/./apps/federatedfilesharing/src/components/PersonalSettings.vue?80b9","webpack://nextcloud/./apps/federatedfilesharing/src/components/PersonalSettings.vue?2cda","webpack:///nextcloud/apps/federatedfilesharing/src/main-personal.js","webpack:///nextcloud/apps/federatedfilesharing/src/components/PersonalSettings.vue?vue&type=style&index=0&id=592de450&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","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/runtime/nonce","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};","<!--\nSPDX-FileLicenseText: 2022 Carl Schwan <carl@carlschwan.eu>\nSPDX-License-Identifier: AGPL-3.0-or-later\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU Affero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public License\nalong with this program. If not, see <http://www.gnu.org/licenses/>.\n-->\n\n<template>\n\t<NcSettingsSection :title=\"t('federatedfilesharing', 'Federated Cloud')\"\n\t\t:description=\"t('federatedfilesharing', 'You can share with anyone who uses a Nextcloud server or other Open Cloud Mesh (OCM) compatible servers and services! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com')\"\n\t\t:doc-url=\"docUrlFederated\">\n\t\t<p class=\"cloud-id-text\">\n\t\t\t{{ t('federatedfilesharing', 'Your Federated Cloud ID:') }}\n\t\t\t<strong id=\"cloudid\">{{ cloudId }}</strong>\n\t\t\t<NcButton ref=\"clipboard\"\n\t\t\t\t:title=\"copyLinkTooltip\"\n\t\t\t\t:aria-label=\"copyLinkTooltip\"\n\t\t\t\tclass=\"clipboard\"\n\t\t\t\ttype=\"tertiary-no-background\"\n\t\t\t\t@click.prevent=\"copyCloudId\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Clipboard :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</p>\n\n\t\t<p class=\"social-button\">\n\t\t\t{{ t('federatedfilesharing', 'Share it so your friends can share files with you:') }}<br>\n\t\t\t<NcButton @click=\"goTo(shareFacebookUrl)\">\n\t\t\t\t{{ t('federatedfilesharing', 'Facebook') }}\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Facebook :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton @click=\"goTo(shareTwitterUrl)\">\n\t\t\t\t{{ t('federatedfilesharing', 'Twitter') }}\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Twitter :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton @click=\"goTo(shareDiasporaUrl)\">\n\t\t\t\t{{ t('federatedfilesharing', 'Diaspora') }}\n\t\t\t\t<template #icon>\n\t\t\t\t\t<svg width=\"20\"\n\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\tviewBox=\"-10 -5 1034 1034\"\n\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"><path fill=\"currentColor\" d=\"M502 197q-96 0-96.5 1.5t-1.5 137-1.5 138-2 2.5T266 432.5 132.5 390t-30 94T74 578l232 77q21 8 21 10t-79.5 117.5T168 899t79.5 56.5T328 1011t81-110 82-110 41 55l83 115q43 60 44 60t79.5-58 79-59-76-112.5-76-113.5T795 632.5t129.5-44-28-94T867 400t-128 42-128.5 43-2.5-7.5-1-38.5l-3-108q-4-133-5-133.5t-97-.5z\" /></svg>\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton @click=\"showHtml = !showHtml\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Web :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('federatedfilesharing', 'Add to your website') }}\n\t\t\t</NcButton>\n\t\t</p>\n\n\t\t<template v-if=\"showHtml\">\n\t\t\t<p style=\"margin: 10px 0\">\n\t\t\t\t<a target=\"_blank\"\n\t\t\t\t\trel=\"noreferrer noopener\"\n\t\t\t\t\t:href=\"reference\"\n\t\t\t\t\t:style=\"backgroundStyle\">\n\t\t\t\t\t<span :style=\"linkStyle\" />\n\t\t\t\t\t{{ t('federatedfilesharing', 'Share with me via Nextcloud') }}\n\t\t\t\t</a>\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\t\t{{ t('federatedfilesharing', 'HTML Code:') }}\n\t\t\t\t<br>\n\t\t\t\t<pre>{{ htmlCode }}</pre>\n\t\t\t</p>\n\t\t</template>\n\t</NcSettingsSection>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\nimport NcSettingsSection from '@nextcloud/vue/dist/Components/NcSettingsSection'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton'\nimport Twitter from 'vue-material-design-icons/Twitter'\nimport Facebook from 'vue-material-design-icons/Facebook'\nimport Web from 'vue-material-design-icons/Web'\nimport Clipboard from 'vue-material-design-icons/Clipboard'\n\nexport default {\n\tname: 'PersonalSettings',\n\tcomponents: {\n\t\tNcButton,\n\t\tNcSettingsSection,\n\t\tTwitter,\n\t\tFacebook,\n\t\tWeb,\n\t\tClipboard,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcolor: loadState('federatedfilesharing', 'color'),\n\t\t\ttextColor: loadState('federatedfilesharing', 'textColor'),\n\t\t\tlogoPath: loadState('federatedfilesharing', 'logoPath'),\n\t\t\treference: loadState('federatedfilesharing', 'reference'),\n\t\t\tcloudId: loadState('federatedfilesharing', 'cloudId'),\n\t\t\tdocUrlFederated: loadState('federatedfilesharing', 'docUrlFederated'),\n\t\t\tshowHtml: false,\n\t\t\tisCopied: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tmessageWithURL() {\n\t\t\treturn t('federatedfilesharing', 'Share with me through my #Nextcloud Federated Cloud ID, see {url}', { url: this.reference })\n\t\t},\n\t\tmessageWithoutURL() {\n\t\t\treturn t('federatedfilesharing', 'Share with me through my #Nextcloud Federated Cloud ID')\n\t\t},\n\t\tshareDiasporaUrl() {\n\t\t\treturn `https://share.diasporafoundation.org/?title=${encodeURIComponent(this.messageWithoutURL)}&url=${encodeURIComponent(this.reference)}`\n\t\t},\n\t\tshareTwitterUrl() {\n\t\t\treturn `https://twitter.com/intent/tweet?text=${encodeURIComponent(this.messageWithURL)}`\n\t\t},\n\t\tshareFacebookUrl() {\n\t\t\treturn `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(this.reference)}`\n\t\t},\n\t\tlogoPathAbsolute() {\n\t\t\treturn window.location.protocol + '//' + window.location.host + this.logoPath\n\t\t},\n\t\tbackgroundStyle() {\n\t\t\treturn `padding:10px;background-color:${this.color};color:${this.textColor};border-radius:3px;padding-left:4px;`\n\t\t},\n\t\tlinkStyle() {\n\t\t\treturn `background-image:url(${this.logoPathAbsolute});width:50px;height:30px;position:relative;top:8px;background-size:contain;display:inline-block;background-repeat:no-repeat; background-position: center center;`\n\t\t},\n\t\thtmlCode() {\n\t\t\treturn `<a target=\"_blank\" rel=\"noreferrer noopener\" href=\"${this.reference}\" style=\"${this.backgroundStyle}\">\n\t<span style=\"${this.linkStyle}\"></span>\n\t${t('federatedfilesharing', 'Share with me via Nextcloud')}\n</a>`\n\t\t},\n\t\tcopyLinkTooltip() {\n\t\t\treturn this.isCopied ? t('federatedfilesharing', 'Cloud ID copied to the clipboard') : t('federatedfilesharing', 'Copy to clipboard')\n\t\t},\n\t},\n\tmethods: {\n\t\tasync copyCloudId() {\n\t\t\tif (!navigator.clipboard) {\n\t\t\t\t// Clipboard API not available\n\t\t\t\tshowError(t('federatedfilesharing', 'Clipboard is not available'))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tawait navigator.clipboard.writeText(this.cloudId)\n\t\t\tthis.isCopied = true\n\t\t\tthis.$refs.clipboard.$el.focus()\n\t\t},\n\t\tgoTo(url) {\n\t\t\twindow.location.href = url\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.social-button {\n\t\tmargin-top: 0.5rem;\n\t\tbutton {\n\t\t\tdisplay: inline-flex;\n\t\t\tmargin-left: 0.5rem;\n\t\t\tmargin-top: 1rem;\n\t\t}\n\t}\n\t.cloud-id-text {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tbutton {\n\t\t\tdisplay: inline-flex;\n\t\t}\n\t}\n\tpre {\n\t\tmargin-top: 0;\n\t\twhite-space: pre-wrap;\n\t}\n\t#cloudid {\n\t\tmargin-left: 0.25rem;\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!./PersonalSettings.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!./PersonalSettings.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!./PersonalSettings.vue?vue&type=style&index=0&id=592de450&prod&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!./PersonalSettings.vue?vue&type=style&index=0&id=592de450&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PersonalSettings.vue?vue&type=template&id=592de450&scoped=true&\"\nimport script from \"./PersonalSettings.vue?vue&type=script&lang=js&\"\nexport * from \"./PersonalSettings.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PersonalSettings.vue?vue&type=style&index=0&id=592de450&prod&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 \"592de450\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcSettingsSection',{attrs:{\"title\":_vm.t('federatedfilesharing', 'Federated Cloud'),\"description\":_vm.t('federatedfilesharing', 'You can share with anyone who uses a Nextcloud server or other Open Cloud Mesh (OCM) compatible servers and services! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com'),\"doc-url\":_vm.docUrlFederated}},[_c('p',{staticClass:\"cloud-id-text\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('federatedfilesharing', 'Your Federated Cloud ID:'))+\"\\n\\t\\t\"),_c('strong',{attrs:{\"id\":\"cloudid\"}},[_vm._v(_vm._s(_vm.cloudId))]),_vm._v(\" \"),_c('NcButton',{ref:\"clipboard\",staticClass:\"clipboard\",attrs:{\"title\":_vm.copyLinkTooltip,\"aria-label\":_vm.copyLinkTooltip,\"type\":\"tertiary-no-background\"},on:{\"click\":function($event){$event.preventDefault();return _vm.copyCloudId.apply(null, arguments)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Clipboard',{attrs:{\"size\":20}})]},proxy:true}])})],1),_vm._v(\" \"),_c('p',{staticClass:\"social-button\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('federatedfilesharing', 'Share it so your friends can share files with you:'))),_c('br'),_vm._v(\" \"),_c('NcButton',{on:{\"click\":function($event){return _vm.goTo(_vm.shareFacebookUrl)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Facebook',{attrs:{\"size\":20}})]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('federatedfilesharing', 'Facebook'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{on:{\"click\":function($event){return _vm.goTo(_vm.shareTwitterUrl)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Twitter',{attrs:{\"size\":20}})]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('federatedfilesharing', 'Twitter'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{on:{\"click\":function($event){return _vm.goTo(_vm.shareDiasporaUrl)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('svg',{attrs:{\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"-10 -5 1034 1034\",\"xmlns\":\"http://www.w3.org/2000/svg\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M502 197q-96 0-96.5 1.5t-1.5 137-1.5 138-2 2.5T266 432.5 132.5 390t-30 94T74 578l232 77q21 8 21 10t-79.5 117.5T168 899t79.5 56.5T328 1011t81-110 82-110 41 55l83 115q43 60 44 60t79.5-58 79-59-76-112.5-76-113.5T795 632.5t129.5-44-28-94T867 400t-128 42-128.5 43-2.5-7.5-1-38.5l-3-108q-4-133-5-133.5t-97-.5z\"}})])]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('federatedfilesharing', 'Diaspora'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{on:{\"click\":function($event){_vm.showHtml = !_vm.showHtml}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Web',{attrs:{\"size\":20}})]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('federatedfilesharing', 'Add to your website'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.showHtml)?[_c('p',{staticStyle:{\"margin\":\"10px 0\"}},[_c('a',{style:(_vm.backgroundStyle),attrs:{\"target\":\"_blank\",\"rel\":\"noreferrer noopener\",\"href\":_vm.reference}},[_c('span',{style:(_vm.linkStyle)}),_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('federatedfilesharing', 'Share with me via Nextcloud'))+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('federatedfilesharing', 'HTML Code:'))+\"\\n\\t\\t\\t\"),_c('br'),_vm._v(\" \"),_c('pre',[_vm._v(_vm._s(_vm.htmlCode))])])]:_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * SPDX-FileLicenseText: 2022 Carl Schwan <carl@carlschwan.eu>\n * SPDX-License-Identifier: 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 { getRequestToken } from '@nextcloud/auth'\nimport { translate as t } from '@nextcloud/l10n'\nimport '@nextcloud/dialogs/dist/index.css'\n\nimport PersonalSettings from './components/PersonalSettings'\n\n__webpack_nonce__ = btoa(getRequestToken())\n\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t},\n})\n\nconst PersonalSettingsView = Vue.extend(PersonalSettings)\nnew PersonalSettingsView().$mount('#vue-personal-federated')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.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, \".social-button[data-v-592de450]{margin-top:.5rem}.social-button button[data-v-592de450]{display:inline-flex;margin-left:.5rem;margin-top:1rem}.cloud-id-text[data-v-592de450]{display:flex;align-items:center}.cloud-id-text button[data-v-592de450]{display:inline-flex}pre[data-v-592de450]{margin-top:0;white-space:pre-wrap}#cloudid[data-v-592de450]{margin-left:.25rem}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/federatedfilesharing/src/components/PersonalSettings.vue\"],\"names\":[],\"mappings\":\"AACA,gCACC,gBAAA,CACA,uCACC,mBAAA,CACA,iBAAA,CACA,eAAA,CAGF,gCACC,YAAA,CACA,kBAAA,CACA,uCACC,mBAAA,CAGF,qBACC,YAAA,CACA,oBAAA,CAED,0BACC,kBAAA\",\"sourcesContent\":[\"\\n.social-button {\\n\\tmargin-top: 0.5rem;\\n\\tbutton {\\n\\t\\tdisplay: inline-flex;\\n\\t\\tmargin-left: 0.5rem;\\n\\t\\tmargin-top: 1rem;\\n\\t}\\n}\\n.cloud-id-text {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tbutton {\\n\\t\\tdisplay: inline-flex;\\n\\t}\\n}\\npre {\\n\\tmargin-top: 0;\\n\\twhite-space: pre-wrap;\\n}\\n#cloudid {\\n\\tmargin-left: 0.25rem;\\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","// 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 = 5855;","__webpack_require__.b = document.baseURI || self.location.href;\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\t5855: 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));","__webpack_require__.nc = undefined;","// 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, [7874], function() { return __webpack_require__(6024); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","name","components","NcButton","NcSettingsSection","Twitter","Facebook","Web","Clipboard","data","color","textColor","logoPath","reference","cloudId","docUrlFederated","showHtml","isCopied","computed","messageWithURL","url","messageWithoutURL","shareDiasporaUrl","shareTwitterUrl","shareFacebookUrl","logoPathAbsolute","backgroundStyle","linkStyle","htmlCode","t","copyLinkTooltip","methods","copyCloudId","navigator","showError","goTo","window","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_c","_self","attrs","staticClass","_v","_s","ref","on","$event","preventDefault","apply","arguments","scopedSlots","_u","key","fn","proxy","staticStyle","style","_e","__webpack_nonce__","btoa","getRequestToken","Vue","PersonalSettings","$mount","___CSS_LOADER_EXPORT___","push","module","id","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","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","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","value","nmd","paths","children","b","document","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"federatedfilesharing-vue-settings-personal.js?v=db7de41601b486bb8de9","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/federatedfilesharing/src/components/PersonalSettings.vue","webpack:///nextcloud/apps/federatedfilesharing/src/components/PersonalSettings.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/federatedfilesharing/src/components/PersonalSettings.vue?7c19","webpack://nextcloud/./apps/federatedfilesharing/src/components/PersonalSettings.vue?80b9","webpack://nextcloud/./apps/federatedfilesharing/src/components/PersonalSettings.vue?2cda","webpack:///nextcloud/apps/federatedfilesharing/src/main-personal.js","webpack:///nextcloud/apps/federatedfilesharing/src/components/PersonalSettings.vue?vue&type=style&index=0&id=356b343c&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","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/runtime/nonce","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};","<!--\nSPDX-FileLicenseText: 2022 Carl Schwan <carl@carlschwan.eu>\nSPDX-License-Identifier: AGPL-3.0-or-later\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as\npublished by the Free Software Foundation, either version 3 of the\nLicense, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU Affero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public License\nalong with this program. If not, see <http://www.gnu.org/licenses/>.\n-->\n\n<template>\n\t<NcSettingsSection :title=\"t('federatedfilesharing', 'Federated Cloud')\"\n\t\t:description=\"t('federatedfilesharing', 'You can share with anyone who uses a Nextcloud server or other Open Cloud Mesh (OCM) compatible servers and services! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com')\"\n\t\t:doc-url=\"docUrlFederated\">\n\t\t<p class=\"cloud-id-text\">\n\t\t\t{{ t('federatedfilesharing', 'Your Federated Cloud ID:') }}\n\t\t\t<strong id=\"cloudid\">{{ cloudId }}</strong>\n\t\t\t<NcButton ref=\"clipboard\"\n\t\t\t\t:title=\"copyLinkTooltip\"\n\t\t\t\t:aria-label=\"copyLinkTooltip\"\n\t\t\t\tclass=\"clipboard\"\n\t\t\t\ttype=\"tertiary-no-background\"\n\t\t\t\t@click.prevent=\"copyCloudId\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Clipboard :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</p>\n\n\t\t<p class=\"social-button\">\n\t\t\t{{ t('federatedfilesharing', 'Share it so your friends can share files with you:') }}<br>\n\t\t\t<NcButton @click=\"goTo(shareFacebookUrl)\">\n\t\t\t\t{{ t('federatedfilesharing', 'Facebook') }}\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Facebook :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton @click=\"goTo(shareTwitterUrl)\">\n\t\t\t\t{{ t('federatedfilesharing', 'Twitter') }}\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Twitter :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton @click=\"goTo(shareDiasporaUrl)\">\n\t\t\t\t{{ t('federatedfilesharing', 'Diaspora') }}\n\t\t\t\t<template #icon>\n\t\t\t\t\t<svg width=\"20\"\n\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\tviewBox=\"-10 -5 1034 1034\"\n\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"><path fill=\"currentColor\" d=\"M502 197q-96 0-96.5 1.5t-1.5 137-1.5 138-2 2.5T266 432.5 132.5 390t-30 94T74 578l232 77q21 8 21 10t-79.5 117.5T168 899t79.5 56.5T328 1011t81-110 82-110 41 55l83 115q43 60 44 60t79.5-58 79-59-76-112.5-76-113.5T795 632.5t129.5-44-28-94T867 400t-128 42-128.5 43-2.5-7.5-1-38.5l-3-108q-4-133-5-133.5t-97-.5z\" /></svg>\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton @click=\"showHtml = !showHtml\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Web :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('federatedfilesharing', 'Add to your website') }}\n\t\t\t</NcButton>\n\t\t</p>\n\n\t\t<template v-if=\"showHtml\">\n\t\t\t<p style=\"margin: 10px 0\">\n\t\t\t\t<a target=\"_blank\"\n\t\t\t\t\trel=\"noreferrer noopener\"\n\t\t\t\t\t:href=\"reference\"\n\t\t\t\t\t:style=\"backgroundStyle\">\n\t\t\t\t\t<span :style=\"linkStyle\" />\n\t\t\t\t\t{{ t('federatedfilesharing', 'Share with me via Nextcloud') }}\n\t\t\t\t</a>\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\t\t{{ t('federatedfilesharing', 'HTML Code:') }}\n\t\t\t\t<br>\n\t\t\t\t<pre>{{ htmlCode }}</pre>\n\t\t\t</p>\n\t\t</template>\n\t</NcSettingsSection>\n</template>\n\n<script>\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\nimport NcSettingsSection from '@nextcloud/vue/dist/Components/NcSettingsSection'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton'\nimport Twitter from 'vue-material-design-icons/Twitter'\nimport Facebook from 'vue-material-design-icons/Facebook'\nimport Web from 'vue-material-design-icons/Web'\nimport Clipboard from 'vue-material-design-icons/Clipboard'\n\nexport default {\n\tname: 'PersonalSettings',\n\tcomponents: {\n\t\tNcButton,\n\t\tNcSettingsSection,\n\t\tTwitter,\n\t\tFacebook,\n\t\tWeb,\n\t\tClipboard,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcolor: loadState('federatedfilesharing', 'color'),\n\t\t\ttextColor: loadState('federatedfilesharing', 'textColor'),\n\t\t\tlogoPath: loadState('federatedfilesharing', 'logoPath'),\n\t\t\treference: loadState('federatedfilesharing', 'reference'),\n\t\t\tcloudId: loadState('federatedfilesharing', 'cloudId'),\n\t\t\tdocUrlFederated: loadState('federatedfilesharing', 'docUrlFederated'),\n\t\t\tshowHtml: false,\n\t\t\tisCopied: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tmessageWithURL() {\n\t\t\treturn t('federatedfilesharing', 'Share with me through my #Nextcloud Federated Cloud ID, see {url}', { url: this.reference })\n\t\t},\n\t\tmessageWithoutURL() {\n\t\t\treturn t('federatedfilesharing', 'Share with me through my #Nextcloud Federated Cloud ID')\n\t\t},\n\t\tshareDiasporaUrl() {\n\t\t\treturn `https://share.diasporafoundation.org/?title=${encodeURIComponent(this.messageWithoutURL)}&url=${encodeURIComponent(this.reference)}`\n\t\t},\n\t\tshareTwitterUrl() {\n\t\t\treturn `https://twitter.com/intent/tweet?text=${encodeURIComponent(this.messageWithURL)}`\n\t\t},\n\t\tshareFacebookUrl() {\n\t\t\treturn `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(this.reference)}`\n\t\t},\n\t\tlogoPathAbsolute() {\n\t\t\treturn window.location.protocol + '//' + window.location.host + this.logoPath\n\t\t},\n\t\tbackgroundStyle() {\n\t\t\treturn `padding:10px;background-color:${this.color};color:${this.textColor};border-radius:3px;padding-left:4px;`\n\t\t},\n\t\tlinkStyle() {\n\t\t\treturn `background-image:url(${this.logoPathAbsolute});width:50px;height:30px;position:relative;top:8px;background-size:contain;display:inline-block;background-repeat:no-repeat; background-position: center center;`\n\t\t},\n\t\thtmlCode() {\n\t\t\treturn `<a target=\"_blank\" rel=\"noreferrer noopener\" href=\"${this.reference}\" style=\"${this.backgroundStyle}\">\n\t<span style=\"${this.linkStyle}\"></span>\n\t${t('federatedfilesharing', 'Share with me via Nextcloud')}\n</a>`\n\t\t},\n\t\tcopyLinkTooltip() {\n\t\t\treturn this.isCopied ? t('federatedfilesharing', 'Cloud ID copied to the clipboard') : t('federatedfilesharing', 'Copy to clipboard')\n\t\t},\n\t},\n\tmethods: {\n\t\tasync copyCloudId() {\n\t\t\tif (!navigator.clipboard) {\n\t\t\t\t// Clipboard API not available\n\t\t\t\tshowError(t('federatedfilesharing', 'Clipboard is not available'))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tawait navigator.clipboard.writeText(this.cloudId)\n\t\t\tthis.isCopied = true\n\t\t\tshowSuccess(t('federatedfilesharing', 'Copied!'))\n\t\t\tthis.$refs.clipboard.$el.focus()\n\t\t},\n\t\tgoTo(url) {\n\t\t\twindow.location.href = url\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.social-button {\n\t\tmargin-top: 0.5rem;\n\t\tbutton {\n\t\t\tdisplay: inline-flex;\n\t\t\tmargin-left: 0.5rem;\n\t\t\tmargin-top: 1rem;\n\t\t}\n\t}\n\t.cloud-id-text {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tbutton {\n\t\t\tdisplay: inline-flex;\n\t\t}\n\t}\n\tpre {\n\t\tmargin-top: 0;\n\t\twhite-space: pre-wrap;\n\t}\n\t#cloudid {\n\t\tmargin-left: 0.25rem;\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!./PersonalSettings.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!./PersonalSettings.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!./PersonalSettings.vue?vue&type=style&index=0&id=356b343c&prod&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!./PersonalSettings.vue?vue&type=style&index=0&id=356b343c&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PersonalSettings.vue?vue&type=template&id=356b343c&scoped=true&\"\nimport script from \"./PersonalSettings.vue?vue&type=script&lang=js&\"\nexport * from \"./PersonalSettings.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PersonalSettings.vue?vue&type=style&index=0&id=356b343c&prod&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 \"356b343c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcSettingsSection',{attrs:{\"title\":_vm.t('federatedfilesharing', 'Federated Cloud'),\"description\":_vm.t('federatedfilesharing', 'You can share with anyone who uses a Nextcloud server or other Open Cloud Mesh (OCM) compatible servers and services! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com'),\"doc-url\":_vm.docUrlFederated}},[_c('p',{staticClass:\"cloud-id-text\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('federatedfilesharing', 'Your Federated Cloud ID:'))+\"\\n\\t\\t\"),_c('strong',{attrs:{\"id\":\"cloudid\"}},[_vm._v(_vm._s(_vm.cloudId))]),_vm._v(\" \"),_c('NcButton',{ref:\"clipboard\",staticClass:\"clipboard\",attrs:{\"title\":_vm.copyLinkTooltip,\"aria-label\":_vm.copyLinkTooltip,\"type\":\"tertiary-no-background\"},on:{\"click\":function($event){$event.preventDefault();return _vm.copyCloudId.apply(null, arguments)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Clipboard',{attrs:{\"size\":20}})]},proxy:true}])})],1),_vm._v(\" \"),_c('p',{staticClass:\"social-button\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('federatedfilesharing', 'Share it so your friends can share files with you:'))),_c('br'),_vm._v(\" \"),_c('NcButton',{on:{\"click\":function($event){return _vm.goTo(_vm.shareFacebookUrl)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Facebook',{attrs:{\"size\":20}})]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('federatedfilesharing', 'Facebook'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{on:{\"click\":function($event){return _vm.goTo(_vm.shareTwitterUrl)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Twitter',{attrs:{\"size\":20}})]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('federatedfilesharing', 'Twitter'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{on:{\"click\":function($event){return _vm.goTo(_vm.shareDiasporaUrl)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('svg',{attrs:{\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"-10 -5 1034 1034\",\"xmlns\":\"http://www.w3.org/2000/svg\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M502 197q-96 0-96.5 1.5t-1.5 137-1.5 138-2 2.5T266 432.5 132.5 390t-30 94T74 578l232 77q21 8 21 10t-79.5 117.5T168 899t79.5 56.5T328 1011t81-110 82-110 41 55l83 115q43 60 44 60t79.5-58 79-59-76-112.5-76-113.5T795 632.5t129.5-44-28-94T867 400t-128 42-128.5 43-2.5-7.5-1-38.5l-3-108q-4-133-5-133.5t-97-.5z\"}})])]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('federatedfilesharing', 'Diaspora'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{on:{\"click\":function($event){_vm.showHtml = !_vm.showHtml}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Web',{attrs:{\"size\":20}})]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('federatedfilesharing', 'Add to your website'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.showHtml)?[_c('p',{staticStyle:{\"margin\":\"10px 0\"}},[_c('a',{style:(_vm.backgroundStyle),attrs:{\"target\":\"_blank\",\"rel\":\"noreferrer noopener\",\"href\":_vm.reference}},[_c('span',{style:(_vm.linkStyle)}),_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('federatedfilesharing', 'Share with me via Nextcloud'))+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('federatedfilesharing', 'HTML Code:'))+\"\\n\\t\\t\\t\"),_c('br'),_vm._v(\" \"),_c('pre',[_vm._v(_vm._s(_vm.htmlCode))])])]:_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * SPDX-FileLicenseText: 2022 Carl Schwan <carl@carlschwan.eu>\n * SPDX-License-Identifier: 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 { getRequestToken } from '@nextcloud/auth'\nimport { translate as t } from '@nextcloud/l10n'\nimport '@nextcloud/dialogs/dist/index.css'\n\nimport PersonalSettings from './components/PersonalSettings'\n\n__webpack_nonce__ = btoa(getRequestToken())\n\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t},\n})\n\nconst PersonalSettingsView = Vue.extend(PersonalSettings)\nnew PersonalSettingsView().$mount('#vue-personal-federated')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.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, \".social-button[data-v-356b343c]{margin-top:.5rem}.social-button button[data-v-356b343c]{display:inline-flex;margin-left:.5rem;margin-top:1rem}.cloud-id-text[data-v-356b343c]{display:flex;align-items:center}.cloud-id-text button[data-v-356b343c]{display:inline-flex}pre[data-v-356b343c]{margin-top:0;white-space:pre-wrap}#cloudid[data-v-356b343c]{margin-left:.25rem}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/federatedfilesharing/src/components/PersonalSettings.vue\"],\"names\":[],\"mappings\":\"AACA,gCACC,gBAAA,CACA,uCACC,mBAAA,CACA,iBAAA,CACA,eAAA,CAGF,gCACC,YAAA,CACA,kBAAA,CACA,uCACC,mBAAA,CAGF,qBACC,YAAA,CACA,oBAAA,CAED,0BACC,kBAAA\",\"sourcesContent\":[\"\\n.social-button {\\n\\tmargin-top: 0.5rem;\\n\\tbutton {\\n\\t\\tdisplay: inline-flex;\\n\\t\\tmargin-left: 0.5rem;\\n\\t\\tmargin-top: 1rem;\\n\\t}\\n}\\n.cloud-id-text {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tbutton {\\n\\t\\tdisplay: inline-flex;\\n\\t}\\n}\\npre {\\n\\tmargin-top: 0;\\n\\twhite-space: pre-wrap;\\n}\\n#cloudid {\\n\\tmargin-left: 0.25rem;\\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","// 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 = 5855;","__webpack_require__.b = document.baseURI || self.location.href;\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\t5855: 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));","__webpack_require__.nc = undefined;","// 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, [7874], function() { return __webpack_require__(763); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","name","components","NcButton","NcSettingsSection","Twitter","Facebook","Web","Clipboard","data","color","textColor","logoPath","reference","cloudId","docUrlFederated","showHtml","isCopied","computed","messageWithURL","url","messageWithoutURL","shareDiasporaUrl","shareTwitterUrl","shareFacebookUrl","logoPathAbsolute","backgroundStyle","linkStyle","htmlCode","t","copyLinkTooltip","methods","copyCloudId","navigator","showError","showSuccess","goTo","window","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_c","_self","attrs","staticClass","_v","_s","ref","on","$event","preventDefault","apply","arguments","scopedSlots","_u","key","fn","proxy","staticStyle","style","_e","__webpack_nonce__","btoa","getRequestToken","Vue","PersonalSettings","$mount","___CSS_LOADER_EXPORT___","push","module","id","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","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","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","value","nmd","paths","children","b","document","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/user-status-modal-8299.js b/dist/user-status-modal-8299.js index 57278c25a72..afdd5c3c9b1 100644 --- a/dist/user-status-modal-8299.js +++ b/dist/user-status-modal-8299.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[8299],{24275:function(t,e,s){var n=s(87537),a=s.n(n),r=s(23645),i=s.n(r)()(a());i.push([t.id,".clear-at-select[data-v-26e5baab]{display:flex;margin-bottom:10px;align-items:center}.clear-at-select__label[data-v-26e5baab]{margin-right:10px}.clear-at-select .multiselect[data-v-26e5baab]{flex-grow:1;min-width:130px}","",{version:3,sources:["webpack://./apps/user_status/src/components/ClearAtSelect.vue"],names:[],mappings:"AACA,kCACC,YAAA,CACA,kBAAA,CACA,kBAAA,CAEA,yCACC,iBAAA,CAGD,+CACC,WAAA,CACA,eAAA",sourcesContent:["\n.clear-at-select {\n\tdisplay: flex;\n\tmargin-bottom: 10px;\n\talign-items: center;\n\n\t&__label {\n\t\tmargin-right: 10px;\n\t}\n\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmin-width: 130px;\n\t}\n}\n"],sourceRoot:""}]),e.Z=i},47510:function(t,e,s){var n=s(87537),a=s.n(n),r=s(23645),i=s.n(r)()(a());i.push([t.id,".custom-input__form[data-v-622c310f]{flex-grow:1;position:relative}.custom-input__form .v-popper[data-v-622c310f]{position:absolute}.custom-input__form input[data-v-622c310f]{width:100%;border-radius:0 var(--border-radius) var(--border-radius) 0;padding-left:44px !important}","",{version:3,sources:["webpack://./apps/user_status/src/components/CustomMessageInput.vue"],names:[],mappings:"AACA,qCACC,WAAA,CACA,iBAAA,CAEA,+CACC,iBAAA,CAGD,2CACC,UAAA,CACA,2DAAA,CACA,4BAAA",sourcesContent:["\n.custom-input__form {\n\tflex-grow: 1;\n\tposition: relative;\n\n\t.v-popper {\n\t\tposition: absolute;\n\t}\n\n\tinput {\n\t\twidth: 100%;\n\t\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\n\t\tpadding-left: 44px !important;\n\t}\n}\n"],sourceRoot:""}]),e.Z=i},38490:function(t,e,s){var n=s(87537),a=s.n(n),r=s(23645),i=s.n(r)()(a());i.push([t.id,".user-status-online-select__input[data-v-f8d7a000]{position:absolute;top:auto;left:-10000px;overflow:hidden;width:1px;height:1px}.user-status-online-select__label[data-v-f8d7a000]{position:relative;display:block;margin:8px;padding:8px;padding-left:40px;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-color:var(--color-background-hover);background-position:8px center;background-size:24px}.user-status-online-select__label span[data-v-f8d7a000],.user-status-online-select__label[data-v-f8d7a000]{cursor:pointer}.user-status-online-select__label span[data-v-f8d7a000]{position:absolute;top:calc(50% - 12px);left:8px;display:block;width:24px;height:24px}.user-status-online-select__input:checked+.user-status-online-select__label[data-v-f8d7a000],.user-status-online-select__input:focus+.user-status-online-select__label[data-v-f8d7a000],.user-status-online-select__label[data-v-f8d7a000]:hover{border-color:var(--color-primary)}.user-status-online-select__label[data-v-f8d7a000]:active{border-color:var(--color-border-dark)}.user-status-online-select__subline[data-v-f8d7a000]{display:block;color:var(--color-text-lighter)}","",{version:3,sources:["webpack://./apps/user_status/src/components/OnlineStatusSelect.vue"],names:[],mappings:"AAOC,mDACC,iBAAA,CACA,QAAA,CACA,aAAA,CACA,eAAA,CACA,SAAA,CACA,UAAA,CAGD,mDACC,iBAAA,CACA,aAAA,CACA,UAhBc,CAiBd,WAjBc,CAkBd,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,8CAAA,CACA,8BAAA,CACA,oBAxBU,CA0BV,2GAEC,cAAA,CAGD,wDACC,iBAAA,CACA,oBAAA,CACA,QAjCa,CAkCb,aAAA,CACA,UApCS,CAqCT,WArCS,CAyCX,iPAGC,iCAAA,CAGD,0DACC,qCAAA,CAGD,qDACC,aAAA,CACA,+BAAA",sourcesContent:["\n@use 'sass:math';\n$icon-size: 24px;\n$label-padding: 8px;\n\n.user-status-online-select {\n\t// Inputs are here for keyboard navigation, they are not visually visible\n\t&__input {\n\t\tposition: absolute;\n\t\ttop: auto;\n\t\tleft: -10000px;\n\t\toverflow: hidden;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t}\n\n\t&__label {\n\t\tposition: relative;\n\t\tdisplay: block;\n\t\tmargin: $label-padding;\n\t\tpadding: $label-padding;\n\t\tpadding-left: $icon-size + $label-padding * 2;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-background-hover);\n\t\tbackground-position: $label-padding center;\n\t\tbackground-size: $icon-size;\n\n\t\tspan,\n\t\t& {\n\t\t\tcursor: pointer;\n\t\t}\n\n\t\tspan {\n\t\t\tposition: absolute;\n\t\t\ttop: calc(50% - math.div($icon-size, 2));\n\t\t\tleft: $label-padding;\n\t\t\tdisplay: block;\n\t\t\twidth: $icon-size;\n\t\t\theight: $icon-size;\n\t\t}\n\t}\n\n\t&__input:checked + &__label,\n\t&__input:focus + &__label,\n\t&__label:hover {\n\t\tborder-color: var(--color-primary);\n\t}\n\n\t&__label:active {\n\t\tborder-color: var(--color-border-dark);\n\t}\n\n\t&__subline {\n\t\tdisplay: block;\n\t\tcolor: var(--color-text-lighter);\n\t}\n}\n\n"],sourceRoot:""}]),e.Z=i},44671:function(t,e,s){var n=s(87537),a=s.n(n),r=s(23645),i=s.n(r)()(a());i.push([t.id,'.predefined-status[data-v-c2934592]{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status[data-v-c2934592]:hover,.predefined-status[data-v-c2934592]:focus{background-color:var(--color-background-hover)}.predefined-status[data-v-c2934592]:active{background-color:var(--color-background-dark)}.predefined-status__icon[data-v-c2934592]{flex-basis:40px;text-align:center}.predefined-status__message[data-v-c2934592]{font-weight:bold;padding:0 6px}.predefined-status__clear-at[data-v-c2934592]{opacity:.7}.predefined-status__clear-at[data-v-c2934592]::before{content:" – "}',"",{version:3,sources:["webpack://./PredefinedStatus.vue","webpack://./apps/user_status/src/components/PredefinedStatus.vue"],names:[],mappings:"AAAA,oCCCA,YACC,CAAA,gBACA,CAAA,0BACA,CAAA,eACA,CAAA,kCACA,CAAA,kBACA,CAAA,eACA,CAAA,oFAEA,8CAEC,CAAA,2CAGD,6CACC,CAAA,0CAGD,eACC,CAAA,iBACA,CAAA,6CAGD,gBACC,CAAA,aACA,CAAA,8CAGD,UACC,CAAA,sDAEA,aACC",sourcesContent:['.predefined-status{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status:hover,.predefined-status:focus{background-color:var(--color-background-hover)}.predefined-status:active{background-color:var(--color-background-dark)}.predefined-status__icon{flex-basis:40px;text-align:center}.predefined-status__message{font-weight:bold;padding:0 6px}.predefined-status__clear-at{opacity:.7}.predefined-status__clear-at::before{content:" – "}',"\n.predefined-status {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\tjustify-content: flex-start;\n\tflex-basis: 100%;\n\tborder-radius: var(--border-radius);\n\talign-items: center;\n\tmin-height: 44px;\n\n\t&:hover,\n\t&:focus {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n\n\t&:active{\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\n\t&__icon {\n\t\tflex-basis: 40px;\n\t\ttext-align: center;\n\t}\n\n\t&__message {\n\t\tfont-weight: bold;\n\t\tpadding: 0 6px;\n\t}\n\n\t&__clear-at {\n\t\topacity: .7;\n\n\t\t&::before {\n\t\t\tcontent: ' – ';\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=i},9169:function(t,e,s){var n=s(87537),a=s.n(n),r=s(23645),i=s.n(r)()(a());i.push([t.id,".predefined-statuses-list[data-v-fddcc16e]{display:flex;flex-direction:column;margin-bottom:10px}","",{version:3,sources:["webpack://./apps/user_status/src/components/PredefinedStatusesList.vue"],names:[],mappings:"AACA,2CACC,YAAA,CACA,qBAAA,CACA,kBAAA",sourcesContent:["\n.predefined-statuses-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 10px;\n}\n"],sourceRoot:""}]),e.Z=i},33955:function(t,e,s){var n=s(87537),a=s.n(n),r=s(23645),i=s.n(r)()(a());i.push([t.id,".set-status-modal[data-v-b51631c8]{padding:8px 20px 20px 20px}.set-status-modal__header[data-v-b51631c8]{text-align:center;font-weight:bold;margin:15px 0}.set-status-modal__online-status[data-v-b51631c8]{display:grid;grid-template-columns:1fr 1fr}.set-status-modal__custom-input[data-v-b51631c8]{display:flex;width:100%;margin-bottom:10px}.set-status-modal__custom-input .custom-input__emoji-button[data-v-b51631c8]{flex-basis:40px;flex-grow:0;width:40px;height:34px;margin-right:0;border-right:none;border-radius:var(--border-radius) 0 0 var(--border-radius)}.set-status-modal .status-buttons[data-v-b51631c8]{display:flex;padding:3px;padding-left:0;gap:3px}@media only screen and (max-width: 500px){.set-status-modal__online-status[data-v-b51631c8]{grid-template-columns:none !important}}","",{version:3,sources:["webpack://./apps/user_status/src/components/SetStatusModal.vue"],names:[],mappings:"AAEA,mCACC,0BAAA,CAEA,2CACC,iBAAA,CACA,gBAAA,CACA,aAAA,CAGD,kDACC,YAAA,CACA,6BAAA,CAGD,iDACC,YAAA,CACA,UAAA,CACA,kBAAA,CAEA,6EACC,eAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,cAAA,CACA,iBAAA,CACA,2DAAA,CAIF,mDACC,YAAA,CACA,WAAA,CACA,cAAA,CACA,OAAA,CAIF,0CACC,kDACC,qCAAA,CAAA",sourcesContent:["\n\n.set-status-modal {\n\tpadding: 8px 20px 20px 20px;\n\n\t&__header {\n\t\ttext-align: center;\n\t\tfont-weight: bold;\n\t\tmargin: 15px 0;\n\t}\n\n\t&__online-status {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n\n\t&__custom-input {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tmargin-bottom: 10px;\n\n\t\t.custom-input__emoji-button {\n\t\t\tflex-basis: 40px;\n\t\t\tflex-grow: 0;\n\t\t\twidth: 40px;\n\t\t\theight: 34px;\n\t\t\tmargin-right: 0;\n\t\t\tborder-right: none;\n\t\t\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\n\t\t}\n\t}\n\n\t.status-buttons {\n\t\tdisplay: flex;\n\t\tpadding: 3px;\n\t\tpadding-left:0;\n\t\tgap: 3px;\n\t}\n}\n\n@media only screen and (max-width: 500px) {\n\t.set-status-modal__online-status {\n\t\tgrid-template-columns: none !important;\n\t}\n}\n\n"],sourceRoot:""}]),e.Z=i},29169:function(t,e,s){s.r(e),s.d(e,{default:function(){return rt}});var n=s(26932),a=s(70110),r=s.n(a),i=s(10861),o=s.n(i),u=s(31352),l=s(84387),c=s(80351),d=s.n(c),A=s(64039),p=function(t){if(null===t)return(0,u.Iu)("user_status","Don't clear");if("end-of"===t.type)switch(t.time){case"day":return(0,u.Iu)("user_status","Today");case"week":return(0,u.Iu)("user_status","This week");default:return null}if("period"===t.type)return d().duration(1e3*t.time).humanize();if("_time"===t.type){var e=d()((0,A.n)()),s=d()(t.time,"X");return d().duration(e.diff(s)).humanize()}return null},f={name:"PredefinedStatus",filters:{clearAtFilter:p},props:{messageId:{type:String,required:!0},icon:{type:String,required:!0},message:{type:String,required:!0},clearAt:{type:Object,required:!1,default:null}},methods:{select:function(){this.$emit("select")}}},m=s(93379),C=s.n(m),b=s(7795),g=s.n(b),_=s(90569),v=s.n(_),h=s(3565),y=s.n(h),x=s(19216),S=s.n(x),k=s(44589),w=s.n(k),I=s(44671),$={};$.styleTagTransform=w(),$.setAttributes=y(),$.insert=v().bind(null,"head"),$.domAPI=g(),$.insertStyleElement=S(),C()(I.Z,$),I.Z&&I.Z.locals&&I.Z.locals;var B=s(51900),P=(0,B.Z)(f,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"predefined-status",attrs:{tabindex:"0"},on:{keyup:[function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.select.apply(null,arguments)},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"space",32,e.key,[" ","Spacebar"])?null:t.select.apply(null,arguments)}],click:t.select}},[e("span",{staticClass:"predefined-status__icon"},[t._v("\n\t\t"+t._s(t.icon)+"\n\t")]),t._v(" "),e("span",{staticClass:"predefined-status__message"},[t._v("\n\t\t"+t._s(t.message)+"\n\t")]),t._v(" "),e("span",{staticClass:"predefined-status__clear-at"},[t._v("\n\t\t"+t._s(t._f("clearAtFilter")(t.clearAt))+"\n\t")])])}),[],!1,null,"c2934592",null);function Z(t){return Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Z(t)}function D(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,n)}return s}function O(t){for(var e=1;e<arguments.length;e++){var s=null!=arguments[e]?arguments[e]:{};e%2?D(Object(s),!0).forEach((function(e){j(t,e,s[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(s)):D(Object(s)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(s,e))}))}return t}function j(t,e,s){return(e=function(t){var e=function(t,e){if("object"!==Z(t)||null===t)return t;var s=t[Symbol.toPrimitive];if(void 0!==s){var n=s.call(t,e);if("object"!==Z(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===Z(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}var M={name:"PredefinedStatusesList",components:{PredefinedStatus:P.exports},computed:O(O({},(0,s(20629).rn)({predefinedStatuses:function(t){return t.predefinedStatuses.predefinedStatuses}})),{},{hasLoaded:function(){return this.predefinedStatuses.length>0}}),mounted:function(){this.$store.dispatch("loadAllPredefinedStatuses")},methods:{selectStatus:function(t){this.$emit("select-status",t)}}},E=s(9169),T={};T.styleTagTransform=w(),T.setAttributes=y(),T.insert=v().bind(null,"head"),T.domAPI=g(),T.insertStyleElement=S(),C()(E.Z,T),E.Z&&E.Z.locals&&E.Z.locals;var q=(0,B.Z)(M,(function(){var t=this,e=t._self._c;return t.hasLoaded?e("div",{staticClass:"predefined-statuses-list"},t._l(t.predefinedStatuses,(function(s){return e("PredefinedStatus",{key:s.id,attrs:{"message-id":s.id,icon:s.icon,message:s.message,"clear-at":s.clearAt},on:{select:function(e){return t.selectStatus(s)}}})})),1):e("div",{staticClass:"predefined-statuses-list"},[e("div",{staticClass:"icon icon-loading-small"})])}),[],!1,null,"fddcc16e",null).exports,G=s(21968),z=s.n(G),N={name:"CustomMessageInput",components:{NcButton:o(),NcEmojiPicker:z()},props:{icon:{type:String,default:"😀"},message:{type:String,required:!0,default:function(){return""}},disabled:{type:Boolean,default:!1}},emits:["change","submit","icon-selected"],computed:{visibleIcon:function(){return this.icon||"😀"}},methods:{focus:function(){this.$refs.input.focus()},onKeyup:function(t){this.$emit("change",t.target.value)},onChange:function(t){this.$emit("submit",t.target.value)},setIcon:function(t){this.$emit("select-icon",t)}}},R=s(47510),W={};W.styleTagTransform=w(),W.setAttributes=y(),W.insert=v().bind(null,"head"),W.domAPI=g(),W.insertStyleElement=S(),C()(R.Z,W),R.Z&&R.Z.locals&&R.Z.locals;var U=(0,B.Z)(N,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"custom-input__form"},[e("NcEmojiPicker",{attrs:{container:".custom-input__form"},on:{select:t.setIcon}},[e("NcButton",{staticClass:"custom-input__emoji-button",attrs:{type:"tertiary-no-background"}},[t._v("\n\t\t\t"+t._s(t.visibleIcon)+"\n\t\t")])],1),t._v(" "),e("label",{staticClass:"hidden-visually",attrs:{for:"user_status_message"}},[t._v("\n\t\t"+t._s(t.t("user_status","What is your status?"))+"\n\t")]),t._v(" "),e("input",{ref:"input",attrs:{id:"user_status_message",maxlength:"80",disabled:t.disabled,placeholder:t.$t("user_status","What is your status?"),type:"text"},domProps:{value:t.message},on:{change:t.onChange,keyup:t.onKeyup,paste:t.onKeyup}})],1)}),[],!1,null,"622c310f",null).exports,L=s(98266),Y={name:"ClearAtSelect",components:{NcMultiselect:s.n(L)()},props:{clearAt:{type:Object,default:null}},data:function(){return{options:[{label:(0,u.Iu)("user_status","Don't clear"),clearAt:null},{label:(0,u.Iu)("user_status","30 minutes"),clearAt:{type:"period",time:1800}},{label:(0,u.Iu)("user_status","1 hour"),clearAt:{type:"period",time:3600}},{label:(0,u.Iu)("user_status","4 hours"),clearAt:{type:"period",time:14400}},{label:(0,u.Iu)("user_status","Today"),clearAt:{type:"end-of",time:"day"}},{label:(0,u.Iu)("user_status","This week"),clearAt:{type:"end-of",time:"week"}}]}},computed:{option:function(){return{clearAt:this.clearAt,label:p(this.clearAt)}}},methods:{select:function(t){t&&this.$emit("select-clear-at",t.clearAt)}}},F=s(24275),K={};K.styleTagTransform=w(),K.setAttributes=y(),K.insert=v().bind(null,"head"),K.domAPI=g(),K.insertStyleElement=S(),C()(F.Z,K),F.Z&&F.Z.locals&&F.Z.locals;var Q=(0,B.Z)(Y,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"clear-at-select"},[e("label",{staticClass:"clear-at-select__label",attrs:{for:"clearStatus"}},[t._v("\n\t\t"+t._s(t.$t("user_status","Clear status after"))+"\n\t")]),t._v(" "),e("NcMultiselect",{attrs:{id:"clearStatus",label:"label",value:t.option,options:t.options,"open-direction":"top"},on:{select:t.select}})],1)}),[],!1,null,"26e5baab",null).exports,X={name:"OnlineStatusSelect",props:{checked:{type:Boolean,default:!1},icon:{type:String,required:!0},type:{type:String,required:!0},label:{type:String,required:!0},subline:{type:String,default:null}},computed:{id:function(){return"user-status-online-status-".concat(this.type)}},methods:{onChange:function(){this.$emit("select",this.type)}}},V=s(38490),H={};H.styleTagTransform=w(),H.setAttributes=y(),H.insert=v().bind(null,"head"),H.domAPI=g(),H.insertStyleElement=S(),C()(V.Z,H),V.Z&&V.Z.locals&&V.Z.locals;var J=(0,B.Z)(X,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"user-status-online-select"},[e("input",{staticClass:"user-status-online-select__input",attrs:{id:t.id,type:"radio",name:"user-status-online"},domProps:{checked:t.checked},on:{change:t.onChange}}),t._v(" "),e("label",{staticClass:"user-status-online-select__label",attrs:{for:t.id}},[t._v("\n\t\t"+t._s(t.label)+"\n\t\t"),e("span",{class:t.icon,attrs:{role:"img"}}),t._v(" "),e("em",{staticClass:"user-status-online-select__subline"},[t._v(t._s(t.subline))])])])}),[],!1,null,"f8d7a000",null).exports;function tt(t,e,s,n,a,r,i){try{var o=t[r](i),u=o.value}catch(t){return void s(t)}o.done?e(u):Promise.resolve(u).then(n,a)}function et(t){return function(){var e=this,s=arguments;return new Promise((function(n,a){var r=t.apply(e,s);function i(t){tt(r,n,a,i,o,"next",t)}function o(t){tt(r,n,a,i,o,"throw",t)}i(void 0)}))}}var st={name:"SetStatusModal",components:{ClearAtSelect:Q,CustomMessageInput:U,NcModal:r(),OnlineStatusSelect:J,PredefinedStatusesList:q,NcButton:o()},mixins:[l.Z],data:function(){return{clearAt:null,icon:null,message:"",messageId:"",isSavingStatus:!1,statuses:[{type:"online",label:(0,u.Iu)("user_status","Online"),icon:"icon-user-status-online"},{type:"away",label:(0,u.Iu)("user_status","Away"),icon:"icon-user-status-away"},{type:"dnd",label:(0,u.Iu)("user_status","Do not disturb"),subline:(0,u.Iu)("user_status","Mute all notifications"),icon:"icon-user-status-dnd"},{type:"invisible",label:(0,u.Iu)("user_status","Invisible"),subline:(0,u.Iu)("user_status","Appear offline"),icon:"icon-user-status-invisible"}]}},mounted:function(){this.messageId=this.$store.state.userStatus.messageId,this.icon=this.$store.state.userStatus.icon,this.message=this.$store.state.userStatus.message||"",null!==this.$store.state.userStatus.clearAt&&(this.clearAt={type:"_time",time:this.$store.state.userStatus.clearAt})},methods:{closeModal:function(){this.$emit("close")},setIcon:function(t){var e=this;this.messageId=null,this.icon=t,this.$nextTick((function(){e.$refs.customMessageInput.focus()}))},setMessage:function(t){this.messageId=null,this.message=t},setClearAt:function(t){this.clearAt=t},selectPredefinedMessage:function(t){this.messageId=t.id,this.clearAt=t.clearAt,this.icon=t.icon,this.message=t.message},saveStatus:function(){var t=this;return et(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!t.isSavingStatus){e.next=2;break}return e.abrupt("return");case 2:if(e.prev=2,t.isSavingStatus=!0,void 0===t.messageId||null===t.messageId){e.next=9;break}return e.next=7,t.$store.dispatch("setPredefinedMessage",{messageId:t.messageId,clearAt:t.clearAt});case 7:e.next=11;break;case 9:return e.next=11,t.$store.dispatch("setCustomMessage",{message:t.message,icon:t.icon,clearAt:t.clearAt});case 11:e.next=19;break;case 13:return e.prev=13,e.t0=e.catch(2),(0,n.x2)(t.$t("user_status","There was an error saving the status")),console.debug(e.t0),t.isSavingStatus=!1,e.abrupt("return");case 19:t.isSavingStatus=!1,t.closeModal();case 21:case"end":return e.stop()}}),e,null,[[2,13]])})))()},clearStatus:function(){var t=this;return et(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,t.isSavingStatus=!0,e.next=4,t.$store.dispatch("clearMessage");case 4:e.next=12;break;case 6:return e.prev=6,e.t0=e.catch(0),(0,n.x2)(t.$t("user_status","There was an error clearing the status")),console.debug(e.t0),t.isSavingStatus=!1,e.abrupt("return");case 12:t.isSavingStatus=!1,t.closeModal();case 14:case"end":return e.stop()}}),e,null,[[0,6]])})))()}}},nt=s(33955),at={};at.styleTagTransform=w(),at.setAttributes=y(),at.insert=v().bind(null,"head"),at.domAPI=g(),at.insertStyleElement=S(),C()(nt.Z,at),nt.Z&&nt.Z.locals&&nt.Z.locals;var rt=(0,B.Z)(st,(function(){var t=this,e=t._self._c;return e("NcModal",{attrs:{size:"normal",title:t.$t("user_status","Set status")},on:{close:t.closeModal}},[e("div",{staticClass:"set-status-modal"},[e("div",{staticClass:"set-status-modal__header"},[e("h2",[t._v(t._s(t.$t("user_status","Online status")))])]),t._v(" "),e("div",{staticClass:"set-status-modal__online-status"},t._l(t.statuses,(function(s){return e("OnlineStatusSelect",t._b({key:s.type,attrs:{checked:s.type===t.statusType},on:{select:t.changeStatus}},"OnlineStatusSelect",s,!1))})),1),t._v(" "),e("div",{staticClass:"set-status-modal__header"},[e("h2",[t._v(t._s(t.$t("user_status","Status message")))])]),t._v(" "),e("div",{staticClass:"set-status-modal__custom-input"},[e("CustomMessageInput",{ref:"customMessageInput",attrs:{icon:t.icon,message:t.message},on:{change:t.setMessage,submit:t.saveStatus,"select-icon":t.setIcon}})],1),t._v(" "),e("PredefinedStatusesList",{on:{"select-status":t.selectPredefinedMessage}}),t._v(" "),e("ClearAtSelect",{attrs:{"clear-at":t.clearAt},on:{"select-clear-at":t.setClearAt}}),t._v(" "),e("div",{staticClass:"status-buttons"},[e("NcButton",{attrs:{wide:!0,type:"tertiary",text:t.$t("user_status","Clear status message"),disabled:t.isSavingStatus},on:{click:t.clearStatus}},[t._v("\n\t\t\t\t"+t._s(t.$t("user_status","Clear status message"))+"\n\t\t\t")]),t._v(" "),e("NcButton",{attrs:{wide:!0,type:"primary",text:t.$t("user_status","Set status message"),disabled:t.isSavingStatus},on:{click:t.saveStatus}},[t._v("\n\t\t\t\t"+t._s(t.$t("user_status","Set status message"))+"\n\t\t\t")])],1)],1)])}),[],!1,null,"b51631c8",null).exports}}]); -//# sourceMappingURL=user-status-modal-8299.js.map?v=417fd9cbcaff10be4a4e
\ No newline at end of file +"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[8299],{24275:function(t,e,s){var n=s(87537),a=s.n(n),r=s(23645),i=s.n(r)()(a());i.push([t.id,".clear-at-select[data-v-26e5baab]{display:flex;margin-bottom:10px;align-items:center}.clear-at-select__label[data-v-26e5baab]{margin-right:10px}.clear-at-select .multiselect[data-v-26e5baab]{flex-grow:1;min-width:130px}","",{version:3,sources:["webpack://./apps/user_status/src/components/ClearAtSelect.vue"],names:[],mappings:"AACA,kCACC,YAAA,CACA,kBAAA,CACA,kBAAA,CAEA,yCACC,iBAAA,CAGD,+CACC,WAAA,CACA,eAAA",sourcesContent:["\n.clear-at-select {\n\tdisplay: flex;\n\tmargin-bottom: 10px;\n\talign-items: center;\n\n\t&__label {\n\t\tmargin-right: 10px;\n\t}\n\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmin-width: 130px;\n\t}\n}\n"],sourceRoot:""}]),e.Z=i},54254:function(t,e,s){var n=s(87537),a=s.n(n),r=s(23645),i=s.n(r)()(a());i.push([t.id,".custom-input[data-v-59f118ca]{display:flex;width:100%}.custom-input__emoji-button[data-v-59f118ca]{min-height:36px;padding:0;border:2px solid var(--color-border-maxcontrast);border-right:none;border-radius:var(--border-radius) 0 0 var(--border-radius)}.custom-input__emoji-button[data-v-59f118ca]:hover{border-color:var(--color-primary-element)}.custom-input__container[data-v-59f118ca]{width:100%}.custom-input__container input[data-v-59f118ca]{width:100%;margin:0;border-radius:0 var(--border-radius) var(--border-radius) 0}","",{version:3,sources:["webpack://./apps/user_status/src/components/CustomMessageInput.vue"],names:[],mappings:"AACA,+BACC,YAAA,CACA,UAAA,CAEA,6CACC,eAAA,CACA,SAAA,CACA,gDAAA,CACA,iBAAA,CACA,2DAAA,CAEA,mDACC,yCAAA,CAIF,0CACC,UAAA,CAEA,gDACC,UAAA,CACA,QAAA,CACA,2DAAA",sourcesContent:["\n.custom-input {\n\tdisplay: flex;\n\twidth: 100%;\n\n\t&__emoji-button {\n\t\tmin-height: 36px;\n\t\tpadding: 0;\n\t\tborder: 2px solid var(--color-border-maxcontrast);\n\t\tborder-right: none;\n\t\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\n\n\t\t&:hover {\n\t\t\tborder-color: var(--color-primary-element);\n\t\t}\n\t}\n\n\t&__container {\n\t\twidth: 100%;\n\n\t\tinput {\n\t\t\twidth: 100%;\n\t\t\tmargin: 0;\n\t\t\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=i},38490:function(t,e,s){var n=s(87537),a=s.n(n),r=s(23645),i=s.n(r)()(a());i.push([t.id,".user-status-online-select__input[data-v-f8d7a000]{position:absolute;top:auto;left:-10000px;overflow:hidden;width:1px;height:1px}.user-status-online-select__label[data-v-f8d7a000]{position:relative;display:block;margin:8px;padding:8px;padding-left:40px;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-color:var(--color-background-hover);background-position:8px center;background-size:24px}.user-status-online-select__label span[data-v-f8d7a000],.user-status-online-select__label[data-v-f8d7a000]{cursor:pointer}.user-status-online-select__label span[data-v-f8d7a000]{position:absolute;top:calc(50% - 12px);left:8px;display:block;width:24px;height:24px}.user-status-online-select__input:checked+.user-status-online-select__label[data-v-f8d7a000],.user-status-online-select__input:focus+.user-status-online-select__label[data-v-f8d7a000],.user-status-online-select__label[data-v-f8d7a000]:hover{border-color:var(--color-primary)}.user-status-online-select__label[data-v-f8d7a000]:active{border-color:var(--color-border-dark)}.user-status-online-select__subline[data-v-f8d7a000]{display:block;color:var(--color-text-lighter)}","",{version:3,sources:["webpack://./apps/user_status/src/components/OnlineStatusSelect.vue"],names:[],mappings:"AAOC,mDACC,iBAAA,CACA,QAAA,CACA,aAAA,CACA,eAAA,CACA,SAAA,CACA,UAAA,CAGD,mDACC,iBAAA,CACA,aAAA,CACA,UAhBc,CAiBd,WAjBc,CAkBd,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,8CAAA,CACA,8BAAA,CACA,oBAxBU,CA0BV,2GAEC,cAAA,CAGD,wDACC,iBAAA,CACA,oBAAA,CACA,QAjCa,CAkCb,aAAA,CACA,UApCS,CAqCT,WArCS,CAyCX,iPAGC,iCAAA,CAGD,0DACC,qCAAA,CAGD,qDACC,aAAA,CACA,+BAAA",sourcesContent:["\n@use 'sass:math';\n$icon-size: 24px;\n$label-padding: 8px;\n\n.user-status-online-select {\n\t// Inputs are here for keyboard navigation, they are not visually visible\n\t&__input {\n\t\tposition: absolute;\n\t\ttop: auto;\n\t\tleft: -10000px;\n\t\toverflow: hidden;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t}\n\n\t&__label {\n\t\tposition: relative;\n\t\tdisplay: block;\n\t\tmargin: $label-padding;\n\t\tpadding: $label-padding;\n\t\tpadding-left: $icon-size + $label-padding * 2;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-background-hover);\n\t\tbackground-position: $label-padding center;\n\t\tbackground-size: $icon-size;\n\n\t\tspan,\n\t\t& {\n\t\t\tcursor: pointer;\n\t\t}\n\n\t\tspan {\n\t\t\tposition: absolute;\n\t\t\ttop: calc(50% - math.div($icon-size, 2));\n\t\t\tleft: $label-padding;\n\t\t\tdisplay: block;\n\t\t\twidth: $icon-size;\n\t\t\theight: $icon-size;\n\t\t}\n\t}\n\n\t&__input:checked + &__label,\n\t&__input:focus + &__label,\n\t&__label:hover {\n\t\tborder-color: var(--color-primary);\n\t}\n\n\t&__label:active {\n\t\tborder-color: var(--color-border-dark);\n\t}\n\n\t&__subline {\n\t\tdisplay: block;\n\t\tcolor: var(--color-text-lighter);\n\t}\n}\n\n"],sourceRoot:""}]),e.Z=i},44671:function(t,e,s){var n=s(87537),a=s.n(n),r=s(23645),i=s.n(r)()(a());i.push([t.id,'.predefined-status[data-v-c2934592]{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status[data-v-c2934592]:hover,.predefined-status[data-v-c2934592]:focus{background-color:var(--color-background-hover)}.predefined-status[data-v-c2934592]:active{background-color:var(--color-background-dark)}.predefined-status__icon[data-v-c2934592]{flex-basis:40px;text-align:center}.predefined-status__message[data-v-c2934592]{font-weight:bold;padding:0 6px}.predefined-status__clear-at[data-v-c2934592]{opacity:.7}.predefined-status__clear-at[data-v-c2934592]::before{content:" – "}',"",{version:3,sources:["webpack://./PredefinedStatus.vue","webpack://./apps/user_status/src/components/PredefinedStatus.vue"],names:[],mappings:"AAAA,oCCCA,YACC,CAAA,gBACA,CAAA,0BACA,CAAA,eACA,CAAA,kCACA,CAAA,kBACA,CAAA,eACA,CAAA,oFAEA,8CAEC,CAAA,2CAGD,6CACC,CAAA,0CAGD,eACC,CAAA,iBACA,CAAA,6CAGD,gBACC,CAAA,aACA,CAAA,8CAGD,UACC,CAAA,sDAEA,aACC",sourcesContent:['.predefined-status{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status:hover,.predefined-status:focus{background-color:var(--color-background-hover)}.predefined-status:active{background-color:var(--color-background-dark)}.predefined-status__icon{flex-basis:40px;text-align:center}.predefined-status__message{font-weight:bold;padding:0 6px}.predefined-status__clear-at{opacity:.7}.predefined-status__clear-at::before{content:" – "}',"\n.predefined-status {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\tjustify-content: flex-start;\n\tflex-basis: 100%;\n\tborder-radius: var(--border-radius);\n\talign-items: center;\n\tmin-height: 44px;\n\n\t&:hover,\n\t&:focus {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n\n\t&:active{\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\n\t&__icon {\n\t\tflex-basis: 40px;\n\t\ttext-align: center;\n\t}\n\n\t&__message {\n\t\tfont-weight: bold;\n\t\tpadding: 0 6px;\n\t}\n\n\t&__clear-at {\n\t\topacity: .7;\n\n\t\t&::before {\n\t\t\tcontent: ' – ';\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=i},9169:function(t,e,s){var n=s(87537),a=s.n(n),r=s(23645),i=s.n(r)()(a());i.push([t.id,".predefined-statuses-list[data-v-fddcc16e]{display:flex;flex-direction:column;margin-bottom:10px}","",{version:3,sources:["webpack://./apps/user_status/src/components/PredefinedStatusesList.vue"],names:[],mappings:"AACA,2CACC,YAAA,CACA,qBAAA,CACA,kBAAA",sourcesContent:["\n.predefined-statuses-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 10px;\n}\n"],sourceRoot:""}]),e.Z=i},46608:function(t,e,s){var n=s(87537),a=s.n(n),r=s(23645),i=s.n(r)()(a());i.push([t.id,".set-status-modal[data-v-2e1411e2]{padding:8px 20px 20px 20px}.set-status-modal__header[data-v-2e1411e2]{text-align:center;font-weight:bold;margin:15px 0}.set-status-modal__online-status[data-v-2e1411e2]{display:grid;grid-template-columns:1fr 1fr}.set-status-modal__custom-input[data-v-2e1411e2]{display:flex;width:100%;margin-bottom:10px}.set-status-modal .status-buttons[data-v-2e1411e2]{display:flex;padding:3px;padding-left:0;gap:3px}@media only screen and (max-width: 500px){.set-status-modal__online-status[data-v-2e1411e2]{grid-template-columns:none !important}}","",{version:3,sources:["webpack://./apps/user_status/src/components/SetStatusModal.vue"],names:[],mappings:"AAEA,mCACC,0BAAA,CAEA,2CACC,iBAAA,CACA,gBAAA,CACA,aAAA,CAGD,kDACC,YAAA,CACA,6BAAA,CAGD,iDACC,YAAA,CACA,UAAA,CACA,kBAAA,CAGD,mDACC,YAAA,CACA,WAAA,CACA,cAAA,CACA,OAAA,CAIF,0CACC,kDACC,qCAAA,CAAA",sourcesContent:["\n\n.set-status-modal {\n\tpadding: 8px 20px 20px 20px;\n\n\t&__header {\n\t\ttext-align: center;\n\t\tfont-weight: bold;\n\t\tmargin: 15px 0;\n\t}\n\n\t&__online-status {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n\n\t&__custom-input {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tmargin-bottom: 10px;\n\t}\n\n\t.status-buttons {\n\t\tdisplay: flex;\n\t\tpadding: 3px;\n\t\tpadding-left:0;\n\t\tgap: 3px;\n\t}\n}\n\n@media only screen and (max-width: 500px) {\n\t.set-status-modal__online-status {\n\t\tgrid-template-columns: none !important;\n\t}\n}\n\n"],sourceRoot:""}]),e.Z=i},82637:function(t,e,s){s.r(e),s.d(e,{default:function(){return rt}});var n=s(26932),a=s(70110),r=s.n(a),i=s(10861),o=s.n(i),u=s(31352),l=s(84387),c=s(80351),d=s.n(c),A=s(64039),p=function(t){if(null===t)return(0,u.Iu)("user_status","Don't clear");if("end-of"===t.type)switch(t.time){case"day":return(0,u.Iu)("user_status","Today");case"week":return(0,u.Iu)("user_status","This week");default:return null}if("period"===t.type)return d().duration(1e3*t.time).humanize();if("_time"===t.type){var e=d()((0,A.n)()),s=d()(t.time,"X");return d().duration(e.diff(s)).humanize()}return null},m={name:"PredefinedStatus",filters:{clearAtFilter:p},props:{messageId:{type:String,required:!0},icon:{type:String,required:!0},message:{type:String,required:!0},clearAt:{type:Object,required:!1,default:null}},methods:{select:function(){this.$emit("select")}}},f=s(93379),C=s.n(f),b=s(7795),g=s.n(b),v=s(90569),_=s.n(v),h=s(3565),y=s.n(h),x=s(19216),S=s.n(x),k=s(44589),w=s.n(k),I=s(44671),$={};$.styleTagTransform=w(),$.setAttributes=y(),$.insert=_().bind(null,"head"),$.domAPI=g(),$.insertStyleElement=S(),C()(I.Z,$),I.Z&&I.Z.locals&&I.Z.locals;var B=s(51900),P=(0,B.Z)(m,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"predefined-status",attrs:{tabindex:"0"},on:{keyup:[function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.select.apply(null,arguments)},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"space",32,e.key,[" ","Spacebar"])?null:t.select.apply(null,arguments)}],click:t.select}},[e("span",{staticClass:"predefined-status__icon"},[t._v("\n\t\t"+t._s(t.icon)+"\n\t")]),t._v(" "),e("span",{staticClass:"predefined-status__message"},[t._v("\n\t\t"+t._s(t.message)+"\n\t")]),t._v(" "),e("span",{staticClass:"predefined-status__clear-at"},[t._v("\n\t\t"+t._s(t._f("clearAtFilter")(t.clearAt))+"\n\t")])])}),[],!1,null,"c2934592",null);function Z(t){return Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Z(t)}function D(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,n)}return s}function O(t){for(var e=1;e<arguments.length;e++){var s=null!=arguments[e]?arguments[e]:{};e%2?D(Object(s),!0).forEach((function(e){j(t,e,s[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(s)):D(Object(s)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(s,e))}))}return t}function j(t,e,s){return(e=function(t){var e=function(t,e){if("object"!==Z(t)||null===t)return t;var s=t[Symbol.toPrimitive];if(void 0!==s){var n=s.call(t,e);if("object"!==Z(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===Z(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}var M={name:"PredefinedStatusesList",components:{PredefinedStatus:P.exports},computed:O(O({},(0,s(20629).rn)({predefinedStatuses:function(t){return t.predefinedStatuses.predefinedStatuses}})),{},{hasLoaded:function(){return this.predefinedStatuses.length>0}}),mounted:function(){this.$store.dispatch("loadAllPredefinedStatuses")},methods:{selectStatus:function(t){this.$emit("select-status",t)}}},E=s(9169),T={};T.styleTagTransform=w(),T.setAttributes=y(),T.insert=_().bind(null,"head"),T.domAPI=g(),T.insertStyleElement=S(),C()(E.Z,T),E.Z&&E.Z.locals&&E.Z.locals;var G=(0,B.Z)(M,(function(){var t=this,e=t._self._c;return t.hasLoaded?e("div",{staticClass:"predefined-statuses-list"},t._l(t.predefinedStatuses,(function(s){return e("PredefinedStatus",{key:s.id,attrs:{"message-id":s.id,icon:s.icon,message:s.message,"clear-at":s.clearAt},on:{select:function(e){return t.selectStatus(s)}}})})),1):e("div",{staticClass:"predefined-statuses-list"},[e("div",{staticClass:"icon icon-loading-small"})])}),[],!1,null,"fddcc16e",null).exports,q=s(21968),z=s.n(q),N={name:"CustomMessageInput",components:{NcButton:o(),NcEmojiPicker:z()},props:{icon:{type:String,default:"😀"},message:{type:String,required:!0,default:function(){return""}},disabled:{type:Boolean,default:!1}},emits:["change","submit","icon-selected"],computed:{visibleIcon:function(){return this.icon||"😀"}},methods:{focus:function(){this.$refs.input.focus()},onKeyup:function(t){this.$emit("change",t.target.value)},onChange:function(t){this.$emit("submit",t.target.value)},setIcon:function(t){this.$emit("select-icon",t)}}},R=s(54254),U={};U.styleTagTransform=w(),U.setAttributes=y(),U.insert=_().bind(null,"head"),U.domAPI=g(),U.insertStyleElement=S(),C()(R.Z,U),R.Z&&R.Z.locals&&R.Z.locals;var Y=(0,B.Z)(N,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"custom-input"},[e("NcEmojiPicker",{attrs:{container:".custom-input"},on:{select:t.setIcon}},[e("NcButton",{staticClass:"custom-input__emoji-button",attrs:{type:"tertiary"}},[t._v("\n\t\t\t"+t._s(t.visibleIcon)+"\n\t\t")])],1),t._v(" "),e("div",{staticClass:"custom-input__container"},[e("label",{staticClass:"hidden-visually",attrs:{for:"user_status_message"}},[t._v("\n\t\t\t"+t._s(t.t("user_status","What is your status?"))+"\n\t\t")]),t._v(" "),e("input",{ref:"input",attrs:{id:"user_status_message",maxlength:"80",disabled:t.disabled,placeholder:t.$t("user_status","What is your status?"),type:"text"},domProps:{value:t.message},on:{change:t.onChange,keyup:t.onKeyup,paste:t.onKeyup}})])],1)}),[],!1,null,"59f118ca",null).exports,L=s(98266),W={name:"ClearAtSelect",components:{NcMultiselect:s.n(L)()},props:{clearAt:{type:Object,default:null}},data:function(){return{options:[{label:(0,u.Iu)("user_status","Don't clear"),clearAt:null},{label:(0,u.Iu)("user_status","30 minutes"),clearAt:{type:"period",time:1800}},{label:(0,u.Iu)("user_status","1 hour"),clearAt:{type:"period",time:3600}},{label:(0,u.Iu)("user_status","4 hours"),clearAt:{type:"period",time:14400}},{label:(0,u.Iu)("user_status","Today"),clearAt:{type:"end-of",time:"day"}},{label:(0,u.Iu)("user_status","This week"),clearAt:{type:"end-of",time:"week"}}]}},computed:{option:function(){return{clearAt:this.clearAt,label:p(this.clearAt)}}},methods:{select:function(t){t&&this.$emit("select-clear-at",t.clearAt)}}},F=s(24275),K={};K.styleTagTransform=w(),K.setAttributes=y(),K.insert=_().bind(null,"head"),K.domAPI=g(),K.insertStyleElement=S(),C()(F.Z,K),F.Z&&F.Z.locals&&F.Z.locals;var Q=(0,B.Z)(W,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"clear-at-select"},[e("label",{staticClass:"clear-at-select__label",attrs:{for:"clearStatus"}},[t._v("\n\t\t"+t._s(t.$t("user_status","Clear status after"))+"\n\t")]),t._v(" "),e("NcMultiselect",{attrs:{id:"clearStatus",label:"label",value:t.option,options:t.options,"open-direction":"top"},on:{select:t.select}})],1)}),[],!1,null,"26e5baab",null).exports,X={name:"OnlineStatusSelect",props:{checked:{type:Boolean,default:!1},icon:{type:String,required:!0},type:{type:String,required:!0},label:{type:String,required:!0},subline:{type:String,default:null}},computed:{id:function(){return"user-status-online-status-".concat(this.type)}},methods:{onChange:function(){this.$emit("select",this.type)}}},V=s(38490),H={};H.styleTagTransform=w(),H.setAttributes=y(),H.insert=_().bind(null,"head"),H.domAPI=g(),H.insertStyleElement=S(),C()(V.Z,H),V.Z&&V.Z.locals&&V.Z.locals;var J=(0,B.Z)(X,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"user-status-online-select"},[e("input",{staticClass:"user-status-online-select__input",attrs:{id:t.id,type:"radio",name:"user-status-online"},domProps:{checked:t.checked},on:{change:t.onChange}}),t._v(" "),e("label",{staticClass:"user-status-online-select__label",attrs:{for:t.id}},[t._v("\n\t\t"+t._s(t.label)+"\n\t\t"),e("span",{class:t.icon,attrs:{role:"img"}}),t._v(" "),e("em",{staticClass:"user-status-online-select__subline"},[t._v(t._s(t.subline))])])])}),[],!1,null,"f8d7a000",null).exports;function tt(t,e,s,n,a,r,i){try{var o=t[r](i),u=o.value}catch(t){return void s(t)}o.done?e(u):Promise.resolve(u).then(n,a)}function et(t){return function(){var e=this,s=arguments;return new Promise((function(n,a){var r=t.apply(e,s);function i(t){tt(r,n,a,i,o,"next",t)}function o(t){tt(r,n,a,i,o,"throw",t)}i(void 0)}))}}var st={name:"SetStatusModal",components:{ClearAtSelect:Q,CustomMessageInput:Y,NcModal:r(),OnlineStatusSelect:J,PredefinedStatusesList:G,NcButton:o()},mixins:[l.Z],data:function(){return{clearAt:null,icon:null,message:"",messageId:"",isSavingStatus:!1,statuses:[{type:"online",label:(0,u.Iu)("user_status","Online"),icon:"icon-user-status-online"},{type:"away",label:(0,u.Iu)("user_status","Away"),icon:"icon-user-status-away"},{type:"dnd",label:(0,u.Iu)("user_status","Do not disturb"),subline:(0,u.Iu)("user_status","Mute all notifications"),icon:"icon-user-status-dnd"},{type:"invisible",label:(0,u.Iu)("user_status","Invisible"),subline:(0,u.Iu)("user_status","Appear offline"),icon:"icon-user-status-invisible"}]}},mounted:function(){this.messageId=this.$store.state.userStatus.messageId,this.icon=this.$store.state.userStatus.icon,this.message=this.$store.state.userStatus.message||"",null!==this.$store.state.userStatus.clearAt&&(this.clearAt={type:"_time",time:this.$store.state.userStatus.clearAt})},methods:{closeModal:function(){this.$emit("close")},setIcon:function(t){var e=this;this.messageId=null,this.icon=t,this.$nextTick((function(){e.$refs.customMessageInput.focus()}))},setMessage:function(t){this.messageId=null,this.message=t},setClearAt:function(t){this.clearAt=t},selectPredefinedMessage:function(t){this.messageId=t.id,this.clearAt=t.clearAt,this.icon=t.icon,this.message=t.message},saveStatus:function(){var t=this;return et(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!t.isSavingStatus){e.next=2;break}return e.abrupt("return");case 2:if(e.prev=2,t.isSavingStatus=!0,void 0===t.messageId||null===t.messageId){e.next=9;break}return e.next=7,t.$store.dispatch("setPredefinedMessage",{messageId:t.messageId,clearAt:t.clearAt});case 7:e.next=11;break;case 9:return e.next=11,t.$store.dispatch("setCustomMessage",{message:t.message,icon:t.icon,clearAt:t.clearAt});case 11:e.next=19;break;case 13:return e.prev=13,e.t0=e.catch(2),(0,n.x2)(t.$t("user_status","There was an error saving the status")),console.debug(e.t0),t.isSavingStatus=!1,e.abrupt("return");case 19:t.isSavingStatus=!1,t.closeModal();case 21:case"end":return e.stop()}}),e,null,[[2,13]])})))()},clearStatus:function(){var t=this;return et(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,t.isSavingStatus=!0,e.next=4,t.$store.dispatch("clearMessage");case 4:e.next=12;break;case 6:return e.prev=6,e.t0=e.catch(0),(0,n.x2)(t.$t("user_status","There was an error clearing the status")),console.debug(e.t0),t.isSavingStatus=!1,e.abrupt("return");case 12:t.isSavingStatus=!1,t.closeModal();case 14:case"end":return e.stop()}}),e,null,[[0,6]])})))()}}},nt=s(46608),at={};at.styleTagTransform=w(),at.setAttributes=y(),at.insert=_().bind(null,"head"),at.domAPI=g(),at.insertStyleElement=S(),C()(nt.Z,at),nt.Z&&nt.Z.locals&&nt.Z.locals;var rt=(0,B.Z)(st,(function(){var t=this,e=t._self._c;return e("NcModal",{attrs:{size:"normal",title:t.$t("user_status","Set status")},on:{close:t.closeModal}},[e("div",{staticClass:"set-status-modal"},[e("div",{staticClass:"set-status-modal__header"},[e("h2",[t._v(t._s(t.$t("user_status","Online status")))])]),t._v(" "),e("div",{staticClass:"set-status-modal__online-status"},t._l(t.statuses,(function(s){return e("OnlineStatusSelect",t._b({key:s.type,attrs:{checked:s.type===t.statusType},on:{select:t.changeStatus}},"OnlineStatusSelect",s,!1))})),1),t._v(" "),e("div",{staticClass:"set-status-modal__header"},[e("h2",[t._v(t._s(t.$t("user_status","Status message")))])]),t._v(" "),e("div",{staticClass:"set-status-modal__custom-input"},[e("CustomMessageInput",{ref:"customMessageInput",attrs:{icon:t.icon,message:t.message},on:{change:t.setMessage,submit:t.saveStatus,"select-icon":t.setIcon}})],1),t._v(" "),e("PredefinedStatusesList",{on:{"select-status":t.selectPredefinedMessage}}),t._v(" "),e("ClearAtSelect",{attrs:{"clear-at":t.clearAt},on:{"select-clear-at":t.setClearAt}}),t._v(" "),e("div",{staticClass:"status-buttons"},[e("NcButton",{attrs:{wide:!0,type:"tertiary",text:t.$t("user_status","Clear status message"),disabled:t.isSavingStatus},on:{click:t.clearStatus}},[t._v("\n\t\t\t\t"+t._s(t.$t("user_status","Clear status message"))+"\n\t\t\t")]),t._v(" "),e("NcButton",{attrs:{wide:!0,type:"primary",text:t.$t("user_status","Set status message"),disabled:t.isSavingStatus},on:{click:t.saveStatus}},[t._v("\n\t\t\t\t"+t._s(t.$t("user_status","Set status message"))+"\n\t\t\t")])],1)],1)])}),[],!1,null,"2e1411e2",null).exports}}]); +//# sourceMappingURL=user-status-modal-8299.js.map?v=85e11c4259cd858bd625
\ No newline at end of file diff --git a/dist/user-status-modal-8299.js.map b/dist/user-status-modal-8299.js.map index 26614ec44d1..ef56d37835c 100644 --- a/dist/user-status-modal-8299.js.map +++ b/dist/user-status-modal-8299.js.map @@ -1 +1 @@ -{"version":3,"file":"user-status-modal-8299.js?v=417fd9cbcaff10be4a4e","mappings":"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","sources":["webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=style&index=0&id=26e5baab&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=style&index=0&id=622c310f&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=style&index=0&id=f8d7a000&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=style&index=0&id=c2934592&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=style&index=0&id=b51631c8&prod&lang=scss&scoped=true&","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?dc19","webpack:///nextcloud/apps/user_status/src/filters/clearAtFilter.js","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?94b8","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?159c","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?74a5","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?ad99","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?944d","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?26ad","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?3760","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?87a5","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?d5a9","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue","webpack:///nextcloud/apps/user_status/src/services/clearAtOptionsService.js","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?5c71","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?b1cd","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?2c76","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?3183","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?1ac6","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?12b9","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/services/statusOptionsService.js","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?cb90","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?4fb2"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.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, \".clear-at-select[data-v-26e5baab]{display:flex;margin-bottom:10px;align-items:center}.clear-at-select__label[data-v-26e5baab]{margin-right:10px}.clear-at-select .multiselect[data-v-26e5baab]{flex-grow:1;min-width:130px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/ClearAtSelect.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,YAAA,CACA,kBAAA,CACA,kBAAA,CAEA,yCACC,iBAAA,CAGD,+CACC,WAAA,CACA,eAAA\",\"sourcesContent\":[\"\\n.clear-at-select {\\n\\tdisplay: flex;\\n\\tmargin-bottom: 10px;\\n\\talign-items: center;\\n\\n\\t&__label {\\n\\t\\tmargin-right: 10px;\\n\\t}\\n\\n\\t.multiselect {\\n\\t\\tflex-grow: 1;\\n\\t\\tmin-width: 130px;\\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/sourceMaps.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, \".custom-input__form[data-v-622c310f]{flex-grow:1;position:relative}.custom-input__form .v-popper[data-v-622c310f]{position:absolute}.custom-input__form input[data-v-622c310f]{width:100%;border-radius:0 var(--border-radius) var(--border-radius) 0;padding-left:44px !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/CustomMessageInput.vue\"],\"names\":[],\"mappings\":\"AACA,qCACC,WAAA,CACA,iBAAA,CAEA,+CACC,iBAAA,CAGD,2CACC,UAAA,CACA,2DAAA,CACA,4BAAA\",\"sourcesContent\":[\"\\n.custom-input__form {\\n\\tflex-grow: 1;\\n\\tposition: relative;\\n\\n\\t.v-popper {\\n\\t\\tposition: absolute;\\n\\t}\\n\\n\\tinput {\\n\\t\\twidth: 100%;\\n\\t\\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\\n\\t\\tpadding-left: 44px !important;\\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/sourceMaps.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, \".user-status-online-select__input[data-v-f8d7a000]{position:absolute;top:auto;left:-10000px;overflow:hidden;width:1px;height:1px}.user-status-online-select__label[data-v-f8d7a000]{position:relative;display:block;margin:8px;padding:8px;padding-left:40px;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-color:var(--color-background-hover);background-position:8px center;background-size:24px}.user-status-online-select__label span[data-v-f8d7a000],.user-status-online-select__label[data-v-f8d7a000]{cursor:pointer}.user-status-online-select__label span[data-v-f8d7a000]{position:absolute;top:calc(50% - 12px);left:8px;display:block;width:24px;height:24px}.user-status-online-select__input:checked+.user-status-online-select__label[data-v-f8d7a000],.user-status-online-select__input:focus+.user-status-online-select__label[data-v-f8d7a000],.user-status-online-select__label[data-v-f8d7a000]:hover{border-color:var(--color-primary)}.user-status-online-select__label[data-v-f8d7a000]:active{border-color:var(--color-border-dark)}.user-status-online-select__subline[data-v-f8d7a000]{display:block;color:var(--color-text-lighter)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/OnlineStatusSelect.vue\"],\"names\":[],\"mappings\":\"AAOC,mDACC,iBAAA,CACA,QAAA,CACA,aAAA,CACA,eAAA,CACA,SAAA,CACA,UAAA,CAGD,mDACC,iBAAA,CACA,aAAA,CACA,UAhBc,CAiBd,WAjBc,CAkBd,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,8CAAA,CACA,8BAAA,CACA,oBAxBU,CA0BV,2GAEC,cAAA,CAGD,wDACC,iBAAA,CACA,oBAAA,CACA,QAjCa,CAkCb,aAAA,CACA,UApCS,CAqCT,WArCS,CAyCX,iPAGC,iCAAA,CAGD,0DACC,qCAAA,CAGD,qDACC,aAAA,CACA,+BAAA\",\"sourcesContent\":[\"\\n@use 'sass:math';\\n$icon-size: 24px;\\n$label-padding: 8px;\\n\\n.user-status-online-select {\\n\\t// Inputs are here for keyboard navigation, they are not visually visible\\n\\t&__input {\\n\\t\\tposition: absolute;\\n\\t\\ttop: auto;\\n\\t\\tleft: -10000px;\\n\\t\\toverflow: hidden;\\n\\t\\twidth: 1px;\\n\\t\\theight: 1px;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tposition: relative;\\n\\t\\tdisplay: block;\\n\\t\\tmargin: $label-padding;\\n\\t\\tpadding: $label-padding;\\n\\t\\tpadding-left: $icon-size + $label-padding * 2;\\n\\t\\tborder: 2px solid var(--color-main-background);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\tbackground-position: $label-padding center;\\n\\t\\tbackground-size: $icon-size;\\n\\n\\t\\tspan,\\n\\t\\t& {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t}\\n\\n\\t\\tspan {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\ttop: calc(50% - math.div($icon-size, 2));\\n\\t\\t\\tleft: $label-padding;\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\twidth: $icon-size;\\n\\t\\t\\theight: $icon-size;\\n\\t\\t}\\n\\t}\\n\\n\\t&__input:checked + &__label,\\n\\t&__input:focus + &__label,\\n\\t&__label:hover {\\n\\t\\tborder-color: var(--color-primary);\\n\\t}\\n\\n\\t&__label:active {\\n\\t\\tborder-color: var(--color-border-dark);\\n\\t}\\n\\n\\t&__subline {\\n\\t\\tdisplay: block;\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n}\\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/sourceMaps.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, \".predefined-status[data-v-c2934592]{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status[data-v-c2934592]:hover,.predefined-status[data-v-c2934592]:focus{background-color:var(--color-background-hover)}.predefined-status[data-v-c2934592]:active{background-color:var(--color-background-dark)}.predefined-status__icon[data-v-c2934592]{flex-basis:40px;text-align:center}.predefined-status__message[data-v-c2934592]{font-weight:bold;padding:0 6px}.predefined-status__clear-at[data-v-c2934592]{opacity:.7}.predefined-status__clear-at[data-v-c2934592]::before{content:\\\" – \\\"}\", \"\",{\"version\":3,\"sources\":[\"webpack://./PredefinedStatus.vue\",\"webpack://./apps/user_status/src/components/PredefinedStatus.vue\"],\"names\":[],\"mappings\":\"AAAA,oCCCA,YACC,CAAA,gBACA,CAAA,0BACA,CAAA,eACA,CAAA,kCACA,CAAA,kBACA,CAAA,eACA,CAAA,oFAEA,8CAEC,CAAA,2CAGD,6CACC,CAAA,0CAGD,eACC,CAAA,iBACA,CAAA,6CAGD,gBACC,CAAA,aACA,CAAA,8CAGD,UACC,CAAA,sDAEA,aACC\",\"sourcesContent\":[\".predefined-status{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status:hover,.predefined-status:focus{background-color:var(--color-background-hover)}.predefined-status:active{background-color:var(--color-background-dark)}.predefined-status__icon{flex-basis:40px;text-align:center}.predefined-status__message{font-weight:bold;padding:0 6px}.predefined-status__clear-at{opacity:.7}.predefined-status__clear-at::before{content:\\\" – \\\"}\",\"\\n.predefined-status {\\n\\tdisplay: flex;\\n\\tflex-wrap: nowrap;\\n\\tjustify-content: flex-start;\\n\\tflex-basis: 100%;\\n\\tborder-radius: var(--border-radius);\\n\\talign-items: center;\\n\\tmin-height: 44px;\\n\\n\\t&:hover,\\n\\t&:focus {\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\t}\\n\\n\\t&:active{\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t}\\n\\n\\t&__icon {\\n\\t\\tflex-basis: 40px;\\n\\t\\ttext-align: center;\\n\\t}\\n\\n\\t&__message {\\n\\t\\tfont-weight: bold;\\n\\t\\tpadding: 0 6px;\\n\\t}\\n\\n\\t&__clear-at {\\n\\t\\topacity: .7;\\n\\n\\t\\t&::before {\\n\\t\\t\\tcontent: ' – ';\\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/sourceMaps.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, \".predefined-statuses-list[data-v-fddcc16e]{display:flex;flex-direction:column;margin-bottom:10px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/PredefinedStatusesList.vue\"],\"names\":[],\"mappings\":\"AACA,2CACC,YAAA,CACA,qBAAA,CACA,kBAAA\",\"sourcesContent\":[\"\\n.predefined-statuses-list {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tmargin-bottom: 10px;\\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/sourceMaps.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, \".set-status-modal[data-v-b51631c8]{padding:8px 20px 20px 20px}.set-status-modal__header[data-v-b51631c8]{text-align:center;font-weight:bold;margin:15px 0}.set-status-modal__online-status[data-v-b51631c8]{display:grid;grid-template-columns:1fr 1fr}.set-status-modal__custom-input[data-v-b51631c8]{display:flex;width:100%;margin-bottom:10px}.set-status-modal__custom-input .custom-input__emoji-button[data-v-b51631c8]{flex-basis:40px;flex-grow:0;width:40px;height:34px;margin-right:0;border-right:none;border-radius:var(--border-radius) 0 0 var(--border-radius)}.set-status-modal .status-buttons[data-v-b51631c8]{display:flex;padding:3px;padding-left:0;gap:3px}@media only screen and (max-width: 500px){.set-status-modal__online-status[data-v-b51631c8]{grid-template-columns:none !important}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/SetStatusModal.vue\"],\"names\":[],\"mappings\":\"AAEA,mCACC,0BAAA,CAEA,2CACC,iBAAA,CACA,gBAAA,CACA,aAAA,CAGD,kDACC,YAAA,CACA,6BAAA,CAGD,iDACC,YAAA,CACA,UAAA,CACA,kBAAA,CAEA,6EACC,eAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,cAAA,CACA,iBAAA,CACA,2DAAA,CAIF,mDACC,YAAA,CACA,WAAA,CACA,cAAA,CACA,OAAA,CAIF,0CACC,kDACC,qCAAA,CAAA\",\"sourcesContent\":[\"\\n\\n.set-status-modal {\\n\\tpadding: 8px 20px 20px 20px;\\n\\n\\t&__header {\\n\\t\\ttext-align: center;\\n\\t\\tfont-weight: bold;\\n\\t\\tmargin: 15px 0;\\n\\t}\\n\\n\\t&__online-status {\\n\\t\\tdisplay: grid;\\n\\t\\tgrid-template-columns: 1fr 1fr;\\n\\t}\\n\\n\\t&__custom-input {\\n\\t\\tdisplay: flex;\\n\\t\\twidth: 100%;\\n\\t\\tmargin-bottom: 10px;\\n\\n\\t\\t.custom-input__emoji-button {\\n\\t\\t\\tflex-basis: 40px;\\n\\t\\t\\tflex-grow: 0;\\n\\t\\t\\twidth: 40px;\\n\\t\\t\\theight: 34px;\\n\\t\\t\\tmargin-right: 0;\\n\\t\\t\\tborder-right: none;\\n\\t\\t\\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\\n\\t\\t}\\n\\t}\\n\\n\\t.status-buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tpadding: 3px;\\n\\t\\tpadding-left:0;\\n\\t\\tgap: 3px;\\n\\t}\\n}\\n\\n@media only screen and (max-width: 500px) {\\n\\t.set-status-modal__online-status {\\n\\t\\tgrid-template-columns: none !important;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcModal',{attrs:{\"size\":\"normal\",\"title\":_vm.$t('user_status', 'Set status')},on:{\"close\":_vm.closeModal}},[_c('div',{staticClass:\"set-status-modal\"},[_c('div',{staticClass:\"set-status-modal__header\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('user_status', 'Online status')))])]),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__online-status\"},_vm._l((_vm.statuses),function(status){return _c('OnlineStatusSelect',_vm._b({key:status.type,attrs:{\"checked\":status.type === _vm.statusType},on:{\"select\":_vm.changeStatus}},'OnlineStatusSelect',status,false))}),1),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__header\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('user_status', 'Status message')))])]),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__custom-input\"},[_c('CustomMessageInput',{ref:\"customMessageInput\",attrs:{\"icon\":_vm.icon,\"message\":_vm.message},on:{\"change\":_vm.setMessage,\"submit\":_vm.saveStatus,\"select-icon\":_vm.setIcon}})],1),_vm._v(\" \"),_c('PredefinedStatusesList',{on:{\"select-status\":_vm.selectPredefinedMessage}}),_vm._v(\" \"),_c('ClearAtSelect',{attrs:{\"clear-at\":_vm.clearAt},on:{\"select-clear-at\":_vm.setClearAt}}),_vm._v(\" \"),_c('div',{staticClass:\"status-buttons\"},[_c('NcButton',{attrs:{\"wide\":true,\"type\":\"tertiary\",\"text\":_vm.$t('user_status', 'Clear status message'),\"disabled\":_vm.isSavingStatus},on:{\"click\":_vm.clearStatus}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.$t('user_status', 'Clear status message'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{attrs:{\"wide\":true,\"type\":\"primary\",\"text\":_vm.$t('user_status', 'Set status message'),\"disabled\":_vm.isSavingStatus},on:{\"click\":_vm.saveStatus}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.$t('user_status', 'Set status message'))+\"\\n\\t\\t\\t\")])],1)],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 { translate as t } from '@nextcloud/l10n'\nimport moment from '@nextcloud/moment'\nimport { dateFactory } from '../services/dateService'\n\n/**\n * Formats a clearAt object to be human readable\n *\n * @param {object} clearAt The clearAt object\n * @return {string|null}\n */\nconst clearAtFilter = (clearAt) => {\n\tif (clearAt === null) {\n\t\treturn t('user_status', 'Don\\'t clear')\n\t}\n\n\tif (clearAt.type === 'end-of') {\n\t\tswitch (clearAt.time) {\n\t\tcase 'day':\n\t\t\treturn t('user_status', 'Today')\n\t\tcase 'week':\n\t\t\treturn t('user_status', 'This week')\n\n\t\tdefault:\n\t\t\treturn null\n\t\t}\n\t}\n\n\tif (clearAt.type === 'period') {\n\t\treturn moment.duration(clearAt.time * 1000).humanize()\n\t}\n\n\t// This is not an officially supported type\n\t// but only used internally to show the remaining time\n\t// in the Set Status Modal\n\tif (clearAt.type === '_time') {\n\t\tconst momentNow = moment(dateFactory())\n\t\tconst momentClearAt = moment(clearAt.time, 'X')\n\n\t\treturn moment.duration(momentNow.diff(momentClearAt)).humanize()\n\t}\n\n\treturn null\n}\n\nexport {\n\tclearAtFilter,\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.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!./PredefinedStatus.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\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 class=\"predefined-status\"\n\t\ttabindex=\"0\"\n\t\t@keyup.enter=\"select\"\n\t\t@keyup.space=\"select\"\n\t\t@click=\"select\">\n\t\t<span class=\"predefined-status__icon\">\n\t\t\t{{ icon }}\n\t\t</span>\n\t\t<span class=\"predefined-status__message\">\n\t\t\t{{ message }}\n\t\t</span>\n\t\t<span class=\"predefined-status__clear-at\">\n\t\t\t{{ clearAt | clearAtFilter }}\n\t\t</span>\n\t</div>\n</template>\n\n<script>\nimport { clearAtFilter } from '../filters/clearAtFilter'\n\nexport default {\n\tname: 'PredefinedStatus',\n\tfilters: {\n\t\tclearAtFilter,\n\t},\n\tprops: {\n\t\tmessageId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tclearAt: {\n\t\t\ttype: Object,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Emits an event when the user clicks the row\n\t\t */\n\t\tselect() {\n\t\t\tthis.$emit('select')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.predefined-status {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\tjustify-content: flex-start;\n\tflex-basis: 100%;\n\tborder-radius: var(--border-radius);\n\talign-items: center;\n\tmin-height: 44px;\n\n\t&:hover,\n\t&:focus {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n\n\t&:active{\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\n\t&__icon {\n\t\tflex-basis: 40px;\n\t\ttext-align: center;\n\t}\n\n\t&__message {\n\t\tfont-weight: bold;\n\t\tpadding: 0 6px;\n\t}\n\n\t&__clear-at {\n\t\topacity: .7;\n\n\t\t&::before {\n\t\t\tcontent: ' – ';\n\t\t}\n\t}\n}\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!./PredefinedStatus.vue?vue&type=style&index=0&id=c2934592&prod&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!./PredefinedStatus.vue?vue&type=style&index=0&id=c2934592&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PredefinedStatus.vue?vue&type=template&id=c2934592&scoped=true&\"\nimport script from \"./PredefinedStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./PredefinedStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PredefinedStatus.vue?vue&type=style&index=0&id=c2934592&prod&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 \"c2934592\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"predefined-status\",attrs:{\"tabindex\":\"0\"},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.select.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"]))return null;return _vm.select.apply(null, arguments)}],\"click\":_vm.select}},[_c('span',{staticClass:\"predefined-status__icon\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.icon)+\"\\n\\t\")]),_vm._v(\" \"),_c('span',{staticClass:\"predefined-status__message\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.message)+\"\\n\\t\")]),_vm._v(\" \"),_c('span',{staticClass:\"predefined-status__clear-at\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm._f(\"clearAtFilter\")(_vm.clearAt))+\"\\n\\t\")])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\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\n<template>\n\t<div v-if=\"hasLoaded\"\n\t\tclass=\"predefined-statuses-list\">\n\t\t<PredefinedStatus v-for=\"status in predefinedStatuses\"\n\t\t\t:key=\"status.id\"\n\t\t\t:message-id=\"status.id\"\n\t\t\t:icon=\"status.icon\"\n\t\t\t:message=\"status.message\"\n\t\t\t:clear-at=\"status.clearAt\"\n\t\t\t@select=\"selectStatus(status)\" />\n\t</div>\n\t<div v-else\n\t\tclass=\"predefined-statuses-list\">\n\t\t<div class=\"icon icon-loading-small\" />\n\t</div>\n</template>\n\n<script>\nimport PredefinedStatus from './PredefinedStatus'\nimport { mapState } from 'vuex'\n\nexport default {\n\tname: 'PredefinedStatusesList',\n\tcomponents: {\n\t\tPredefinedStatus,\n\t},\n\tcomputed: {\n\t\t...mapState({\n\t\t\tpredefinedStatuses: state => state.predefinedStatuses.predefinedStatuses,\n\t\t}),\n\t\t/**\n\t\t * Indicator whether the predefined statuses have already been loaded\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasLoaded() {\n\t\t\treturn this.predefinedStatuses.length > 0\n\t\t},\n\t},\n\t/**\n\t * Loads all predefined statuses from the server\n\t * when this component is mounted\n\t */\n\tmounted() {\n\t\tthis.$store.dispatch('loadAllPredefinedStatuses')\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Emits an event when the user selects a status\n\t\t *\n\t\t * @param {object} status The selected status\n\t\t */\n\t\tselectStatus(status) {\n\t\t\tthis.$emit('select-status', status)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.predefined-statuses-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 10px;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.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!./PredefinedStatusesList.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!./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&prod&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!./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PredefinedStatusesList.vue?vue&type=template&id=fddcc16e&scoped=true&\"\nimport script from \"./PredefinedStatusesList.vue?vue&type=script&lang=js&\"\nexport * from \"./PredefinedStatusesList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&prod&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 \"fddcc16e\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.hasLoaded)?_c('div',{staticClass:\"predefined-statuses-list\"},_vm._l((_vm.predefinedStatuses),function(status){return _c('PredefinedStatus',{key:status.id,attrs:{\"message-id\":status.id,\"icon\":status.icon,\"message\":status.message,\"clear-at\":status.clearAt},on:{\"select\":function($event){return _vm.selectStatus(status)}}})}),1):_c('div',{staticClass:\"predefined-statuses-list\"},[_c('div',{staticClass:\"icon icon-loading-small\"})])\n}\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!./CustomMessageInput.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!./CustomMessageInput.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\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 class=\"custom-input__form\">\n\t\t<NcEmojiPicker container=\".custom-input__form\" @select=\"setIcon\">\n\t\t\t<NcButton class=\"custom-input__emoji-button\" type=\"tertiary-no-background\">\n\t\t\t\t{{ visibleIcon }}\n\t\t\t</NcButton>\n\t\t</NcEmojiPicker>\n\t\t<label class=\"hidden-visually\" for=\"user_status_message\">\n\t\t\t{{ t('user_status', 'What is your status?') }}\n\t\t</label>\n\t\t<input id=\"user_status_message\"\n\t\t\tref=\"input\"\n\t\t\tmaxlength=\"80\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:placeholder=\"$t('user_status', 'What is your status?')\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"message\"\n\t\t\t@change=\"onChange\"\n\t\t\t@keyup=\"onKeyup\"\n\t\t\t@paste=\"onKeyup\">\n\t</div>\n</template>\n\n<script>\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcEmojiPicker from '@nextcloud/vue/dist/Components/NcEmojiPicker.js'\n\nexport default {\n\tname: 'CustomMessageInput',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tNcEmojiPicker,\n\t},\n\n\tprops: {\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\tdefault: '😀',\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tdefault: () => '',\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\temits: [\n\t\t'change',\n\t\t'submit',\n\t\t'icon-selected',\n\t],\n\n\tcomputed: {\n\t\t/**\n\t\t * Returns the user-set icon or a smiley in case no icon is set\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tvisibleIcon() {\n\t\t\treturn this.icon || '😀'\n\t\t},\n\t},\n\n\tmethods: {\n\t\tfocus() {\n\t\t\tthis.$refs.input.focus()\n\t\t},\n\n\t\t/**\n\t\t * Notifies the parent component about a changed input\n\t\t *\n\t\t * @param {Event} event The Change Event\n\t\t */\n\t\tonKeyup(event) {\n\t\t\tthis.$emit('change', event.target.value)\n\t\t},\n\n\t\tonChange(event) {\n\t\t\tthis.$emit('submit', event.target.value)\n\t\t},\n\n\t\tsetIcon(icon) {\n\t\t\tthis.$emit('select-icon', icon)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.custom-input__form {\n\tflex-grow: 1;\n\tposition: relative;\n\n\t.v-popper {\n\t\tposition: absolute;\n\t}\n\n\tinput {\n\t\twidth: 100%;\n\t\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\n\t\tpadding-left: 44px !important;\n\t}\n}\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!./CustomMessageInput.vue?vue&type=style&index=0&id=622c310f&prod&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!./CustomMessageInput.vue?vue&type=style&index=0&id=622c310f&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CustomMessageInput.vue?vue&type=template&id=622c310f&scoped=true&\"\nimport script from \"./CustomMessageInput.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomMessageInput.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CustomMessageInput.vue?vue&type=style&index=0&id=622c310f&prod&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 \"622c310f\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"custom-input__form\"},[_c('NcEmojiPicker',{attrs:{\"container\":\".custom-input__form\"},on:{\"select\":_vm.setIcon}},[_c('NcButton',{staticClass:\"custom-input__emoji-button\",attrs:{\"type\":\"tertiary-no-background\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.visibleIcon)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_c('label',{staticClass:\"hidden-visually\",attrs:{\"for\":\"user_status_message\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('user_status', 'What is your status?'))+\"\\n\\t\")]),_vm._v(\" \"),_c('input',{ref:\"input\",attrs:{\"id\":\"user_status_message\",\"maxlength\":\"80\",\"disabled\":_vm.disabled,\"placeholder\":_vm.$t('user_status', 'What is your status?'),\"type\":\"text\"},domProps:{\"value\":_vm.message},on:{\"change\":_vm.onChange,\"keyup\":_vm.onKeyup,\"paste\":_vm.onKeyup}})],1)\n}\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!./ClearAtSelect.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!./ClearAtSelect.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\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\n<template>\n\t<div class=\"clear-at-select\">\n\t\t<label class=\"clear-at-select__label\" for=\"clearStatus\">\n\t\t\t{{ $t('user_status', 'Clear status after') }}\n\t\t</label>\n\t\t<NcMultiselect id=\"clearStatus\"\n\t\t\tlabel=\"label\"\n\t\t\t:value=\"option\"\n\t\t\t:options=\"options\"\n\t\t\topen-direction=\"top\"\n\t\t\t@select=\"select\" />\n\t</div>\n</template>\n\n<script>\nimport NcMultiselect from '@nextcloud/vue/dist/Components/NcMultiselect'\nimport { getAllClearAtOptions } from '../services/clearAtOptionsService'\nimport { clearAtFilter } from '../filters/clearAtFilter'\n\nexport default {\n\tname: 'ClearAtSelect',\n\tcomponents: {\n\t\tNcMultiselect,\n\t},\n\tprops: {\n\t\tclearAt: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\toptions: getAllClearAtOptions(),\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * Returns an object of the currently selected option\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\toption() {\n\t\t\treturn {\n\t\t\t\tclearAt: this.clearAt,\n\t\t\t\tlabel: clearAtFilter(this.clearAt),\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Triggered when the user selects a new option.\n\t\t *\n\t\t * @param {object=} option The new selected option\n\t\t */\n\t\tselect(option) {\n\t\t\tif (!option) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.$emit('select-clear-at', option.clearAt)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.clear-at-select {\n\tdisplay: flex;\n\tmargin-bottom: 10px;\n\talign-items: center;\n\n\t&__label {\n\t\tmargin-right: 10px;\n\t}\n\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmin-width: 130px;\n\t}\n}\n</style>\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 { translate as t } from '@nextcloud/l10n'\n\n/**\n * Returns an array\n *\n * @return {object[]}\n */\nconst getAllClearAtOptions = () => {\n\treturn [{\n\t\tlabel: t('user_status', 'Don\\'t clear'),\n\t\tclearAt: null,\n\t}, {\n\t\tlabel: t('user_status', '30 minutes'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 1800,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', '1 hour'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 3600,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', '4 hours'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 14400,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', 'Today'),\n\t\tclearAt: {\n\t\t\ttype: 'end-of',\n\t\t\ttime: 'day',\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', 'This week'),\n\t\tclearAt: {\n\t\t\ttype: 'end-of',\n\t\t\ttime: 'week',\n\t\t},\n\t}]\n}\n\nexport {\n\tgetAllClearAtOptions,\n}\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!./ClearAtSelect.vue?vue&type=style&index=0&id=26e5baab&prod&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!./ClearAtSelect.vue?vue&type=style&index=0&id=26e5baab&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ClearAtSelect.vue?vue&type=template&id=26e5baab&scoped=true&\"\nimport script from \"./ClearAtSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./ClearAtSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClearAtSelect.vue?vue&type=style&index=0&id=26e5baab&prod&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 \"26e5baab\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"clear-at-select\"},[_c('label',{staticClass:\"clear-at-select__label\",attrs:{\"for\":\"clearStatus\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.$t('user_status', 'Clear status after'))+\"\\n\\t\")]),_vm._v(\" \"),_c('NcMultiselect',{attrs:{\"id\":\"clearStatus\",\"label\":\"label\",\"value\":_vm.option,\"options\":_vm.options,\"open-direction\":\"top\"},on:{\"select\":_vm.select}})],1)\n}\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!./OnlineStatusSelect.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!./OnlineStatusSelect.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\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 class=\"user-status-online-select\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\tclass=\"user-status-online-select__input\"\n\t\t\ttype=\"radio\"\n\t\t\tname=\"user-status-online\"\n\t\t\t@change=\"onChange\">\n\t\t<label :for=\"id\" class=\"user-status-online-select__label\">\n\t\t\t{{ label }}\n\t\t\t<span :class=\"icon\" role=\"img\" />\n\t\t\t<em class=\"user-status-online-select__subline\">{{ subline }}</em>\n\t\t</label>\n\t</div>\n</template>\n\n<script>\nexport default {\n\tname: 'OnlineStatusSelect',\n\n\tprops: {\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tsubline: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tid() {\n\t\t\treturn `user-status-online-status-${this.type}`\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonChange() {\n\t\t\tthis.$emit('select', this.type)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use 'sass:math';\n$icon-size: 24px;\n$label-padding: 8px;\n\n.user-status-online-select {\n\t// Inputs are here for keyboard navigation, they are not visually visible\n\t&__input {\n\t\tposition: absolute;\n\t\ttop: auto;\n\t\tleft: -10000px;\n\t\toverflow: hidden;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t}\n\n\t&__label {\n\t\tposition: relative;\n\t\tdisplay: block;\n\t\tmargin: $label-padding;\n\t\tpadding: $label-padding;\n\t\tpadding-left: $icon-size + $label-padding * 2;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-background-hover);\n\t\tbackground-position: $label-padding center;\n\t\tbackground-size: $icon-size;\n\n\t\tspan,\n\t\t& {\n\t\t\tcursor: pointer;\n\t\t}\n\n\t\tspan {\n\t\t\tposition: absolute;\n\t\t\ttop: calc(50% - math.div($icon-size, 2));\n\t\t\tleft: $label-padding;\n\t\t\tdisplay: block;\n\t\t\twidth: $icon-size;\n\t\t\theight: $icon-size;\n\t\t}\n\t}\n\n\t&__input:checked + &__label,\n\t&__input:focus + &__label,\n\t&__label:hover {\n\t\tborder-color: var(--color-primary);\n\t}\n\n\t&__label:active {\n\t\tborder-color: var(--color-border-dark);\n\t}\n\n\t&__subline {\n\t\tdisplay: block;\n\t\tcolor: var(--color-text-lighter);\n\t}\n}\n\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!./OnlineStatusSelect.vue?vue&type=style&index=0&id=f8d7a000&prod&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!./OnlineStatusSelect.vue?vue&type=style&index=0&id=f8d7a000&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./OnlineStatusSelect.vue?vue&type=template&id=f8d7a000&scoped=true&\"\nimport script from \"./OnlineStatusSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./OnlineStatusSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./OnlineStatusSelect.vue?vue&type=style&index=0&id=f8d7a000&prod&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 \"f8d7a000\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"user-status-online-select\"},[_c('input',{staticClass:\"user-status-online-select__input\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"user-status-online\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onChange}}),_vm._v(\" \"),_c('label',{staticClass:\"user-status-online-select__label\",attrs:{\"for\":_vm.id}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.label)+\"\\n\\t\\t\"),_c('span',{class:_vm.icon,attrs:{\"role\":\"img\"}}),_vm._v(\" \"),_c('em',{staticClass:\"user-status-online-select__subline\"},[_vm._v(_vm._s(_vm.subline))])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\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\n<template>\n\t<NcModal size=\"normal\"\n\t\t:title=\"$t('user_status', 'Set status')\"\n\t\t@close=\"closeModal\">\n\t\t<div class=\"set-status-modal\">\n\t\t\t<!-- Status selector -->\n\t\t\t<div class=\"set-status-modal__header\">\n\t\t\t\t<h2>{{ $t('user_status', 'Online status') }}</h2>\n\t\t\t</div>\n\t\t\t<div class=\"set-status-modal__online-status\">\n\t\t\t\t<OnlineStatusSelect v-for=\"status in statuses\"\n\t\t\t\t\t:key=\"status.type\"\n\t\t\t\t\tv-bind=\"status\"\n\t\t\t\t\t:checked=\"status.type === statusType\"\n\t\t\t\t\t@select=\"changeStatus\" />\n\t\t\t</div>\n\n\t\t\t<!-- Status message -->\n\t\t\t<div class=\"set-status-modal__header\">\n\t\t\t\t<h2>{{ $t('user_status', 'Status message') }}</h2>\n\t\t\t</div>\n\t\t\t<div class=\"set-status-modal__custom-input\">\n\t\t\t\t<CustomMessageInput ref=\"customMessageInput\"\n\t\t\t\t\t:icon=\"icon\"\n\t\t\t\t\t:message=\"message\"\n\t\t\t\t\t@change=\"setMessage\"\n\t\t\t\t\t@submit=\"saveStatus\"\n\t\t\t\t\t@select-icon=\"setIcon\" />\n\t\t\t</div>\n\t\t\t<PredefinedStatusesList @select-status=\"selectPredefinedMessage\" />\n\t\t\t<ClearAtSelect :clear-at=\"clearAt\"\n\t\t\t\t@select-clear-at=\"setClearAt\" />\n\t\t\t<div class=\"status-buttons\">\n\t\t\t\t<NcButton :wide=\"true\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t:text=\"$t('user_status', 'Clear status message')\"\n\t\t\t\t\t:disabled=\"isSavingStatus\"\n\t\t\t\t\t@click=\"clearStatus\">\n\t\t\t\t\t{{ $t('user_status', 'Clear status message') }}\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton :wide=\"true\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t:text=\"$t('user_status', 'Set status message')\"\n\t\t\t\t\t:disabled=\"isSavingStatus\"\n\t\t\t\t\t@click=\"saveStatus\">\n\t\t\t\t\t{{ $t('user_status', 'Set status message') }}\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t</div>\n\t</NcModal>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton'\nimport { getAllStatusOptions } from '../services/statusOptionsService.js'\nimport OnlineStatusMixin from '../mixins/OnlineStatusMixin.js'\nimport PredefinedStatusesList from './PredefinedStatusesList.vue'\nimport CustomMessageInput from './CustomMessageInput.vue'\nimport ClearAtSelect from './ClearAtSelect.vue'\nimport OnlineStatusSelect from './OnlineStatusSelect.vue'\n\nexport default {\n\tname: 'SetStatusModal',\n\n\tcomponents: {\n\t\tClearAtSelect,\n\t\tCustomMessageInput,\n\t\tNcModal,\n\t\tOnlineStatusSelect,\n\t\tPredefinedStatusesList,\n\t\tNcButton,\n\t},\n\tmixins: [OnlineStatusMixin],\n\n\tdata() {\n\t\treturn {\n\t\t\tclearAt: null,\n\t\t\ticon: null,\n\t\t\tmessage: '',\n\t\t\tmessageId: '',\n\t\t\tisSavingStatus: false,\n\t\t\tstatuses: getAllStatusOptions(),\n\t\t}\n\t},\n\n\t/**\n\t * Loads the current status when a user opens dialog\n\t */\n\tmounted() {\n\t\tthis.messageId = this.$store.state.userStatus.messageId\n\t\tthis.icon = this.$store.state.userStatus.icon\n\t\tthis.message = this.$store.state.userStatus.message || ''\n\n\t\tif (this.$store.state.userStatus.clearAt !== null) {\n\t\t\tthis.clearAt = {\n\t\t\t\ttype: '_time',\n\t\t\t\ttime: this.$store.state.userStatus.clearAt,\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Closes the Set Status modal\n\t\t */\n\t\tcloseModal() {\n\t\t\tthis.$emit('close')\n\t\t},\n\t\t/**\n\t\t * Sets a new icon\n\t\t *\n\t\t * @param {string} icon The new icon\n\t\t */\n\t\tsetIcon(icon) {\n\t\t\tthis.messageId = null\n\t\t\tthis.icon = icon\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.customMessageInput.focus()\n\t\t\t})\n\t\t},\n\t\t/**\n\t\t * Sets a new message\n\t\t *\n\t\t * @param {string} message The new message\n\t\t */\n\t\tsetMessage(message) {\n\t\t\tthis.messageId = null\n\t\t\tthis.message = message\n\t\t},\n\t\t/**\n\t\t * Sets a new clearAt value\n\t\t *\n\t\t * @param {object} clearAt The new clearAt object\n\t\t */\n\t\tsetClearAt(clearAt) {\n\t\t\tthis.clearAt = clearAt\n\t\t},\n\t\t/**\n\t\t * Sets new icon/message/clearAt based on a predefined message\n\t\t *\n\t\t * @param {object} status The predefined status object\n\t\t */\n\t\tselectPredefinedMessage(status) {\n\t\t\tthis.messageId = status.id\n\t\t\tthis.clearAt = status.clearAt\n\t\t\tthis.icon = status.icon\n\t\t\tthis.message = status.message\n\t\t},\n\t\t/**\n\t\t * Saves the status and closes the\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync saveStatus() {\n\t\t\tif (this.isSavingStatus) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.isSavingStatus = true\n\n\t\t\t\tif (this.messageId !== undefined && this.messageId !== null) {\n\t\t\t\t\tawait this.$store.dispatch('setPredefinedMessage', {\n\t\t\t\t\t\tmessageId: this.messageId,\n\t\t\t\t\t\tclearAt: this.clearAt,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$store.dispatch('setCustomMessage', {\n\t\t\t\t\t\tmessage: this.message,\n\t\t\t\t\t\ticon: this.icon,\n\t\t\t\t\t\tclearAt: this.clearAt,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error saving the status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t\tthis.isSavingStatus = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.isSavingStatus = false\n\t\t\tthis.closeModal()\n\t\t},\n\t\t/**\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync clearStatus() {\n\t\t\ttry {\n\t\t\t\tthis.isSavingStatus = true\n\n\t\t\t\tawait this.$store.dispatch('clearMessage')\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error clearing the status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t\tthis.isSavingStatus = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.isSavingStatus = false\n\t\t\tthis.closeModal()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.set-status-modal {\n\tpadding: 8px 20px 20px 20px;\n\n\t&__header {\n\t\ttext-align: center;\n\t\tfont-weight: bold;\n\t\tmargin: 15px 0;\n\t}\n\n\t&__online-status {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n\n\t&__custom-input {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tmargin-bottom: 10px;\n\n\t\t.custom-input__emoji-button {\n\t\t\tflex-basis: 40px;\n\t\t\tflex-grow: 0;\n\t\t\twidth: 40px;\n\t\t\theight: 34px;\n\t\t\tmargin-right: 0;\n\t\t\tborder-right: none;\n\t\t\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\n\t\t}\n\t}\n\n\t.status-buttons {\n\t\tdisplay: flex;\n\t\tpadding: 3px;\n\t\tpadding-left:0;\n\t\tgap: 3px;\n\t}\n}\n\n@media only screen and (max-width: 500px) {\n\t.set-status-modal__online-status {\n\t\tgrid-template-columns: none !important;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.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!./SetStatusModal.vue?vue&type=script&lang=js&\"","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n * @author Jan C. Borchardt <hey@jancborchardt.net>\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 { translate as t } from '@nextcloud/l10n'\n\n/**\n * Returns a list of all user-definable statuses\n *\n * @return {object[]}\n */\nconst getAllStatusOptions = () => {\n\treturn [{\n\t\ttype: 'online',\n\t\tlabel: t('user_status', 'Online'),\n\t\ticon: 'icon-user-status-online',\n\t}, {\n\t\ttype: 'away',\n\t\tlabel: t('user_status', 'Away'),\n\t\ticon: 'icon-user-status-away',\n\t}, {\n\t\ttype: 'dnd',\n\t\tlabel: t('user_status', 'Do not disturb'),\n\t\tsubline: t('user_status', 'Mute all notifications'),\n\t\ticon: 'icon-user-status-dnd',\n\n\t}, {\n\t\ttype: 'invisible',\n\t\tlabel: t('user_status', 'Invisible'),\n\t\tsubline: t('user_status', 'Appear offline'),\n\t\ticon: 'icon-user-status-invisible',\n\t}]\n}\n\nexport {\n\tgetAllStatusOptions,\n}\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!./SetStatusModal.vue?vue&type=style&index=0&id=b51631c8&prod&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!./SetStatusModal.vue?vue&type=style&index=0&id=b51631c8&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SetStatusModal.vue?vue&type=template&id=b51631c8&scoped=true&\"\nimport script from \"./SetStatusModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SetStatusModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SetStatusModal.vue?vue&type=style&index=0&id=b51631c8&prod&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 \"b51631c8\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","clearAtFilter","clearAt","t","type","time","moment","humanize","momentNow","dateFactory","momentClearAt","diff","name","filters","props","messageId","required","icon","message","default","methods","select","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_c","_self","staticClass","attrs","on","$event","indexOf","_k","keyCode","key","apply","arguments","_v","_s","_f","components","PredefinedStatus","computed","mapState","predefinedStatuses","hasLoaded","mounted","selectStatus","_l","status","NcButton","NcEmojiPicker","disabled","emits","visibleIcon","focus","onKeyup","onChange","setIcon","ref","$t","domProps","NcMultiselect","data","label","option","checked","subline","class","ClearAtSelect","CustomMessageInput","NcModal","OnlineStatusSelect","PredefinedStatusesList","mixins","isSavingStatus","statuses","closeModal","setMessage","setClearAt","selectPredefinedMessage","saveStatus","showError","console","clearStatus","_b","statusType","changeStatus"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"user-status-modal-8299.js?v=85e11c4259cd858bd625","mappings":"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","sources":["webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=style&index=0&id=26e5baab&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=style&index=0&id=59f118ca&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=style&index=0&id=f8d7a000&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=style&index=0&id=c2934592&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=style&index=0&id=2e1411e2&prod&lang=scss&scoped=true&","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?dc19","webpack:///nextcloud/apps/user_status/src/filters/clearAtFilter.js","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?94b8","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?159c","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?74a5","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?ad99","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?944d","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?26ad","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?1ade","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?87a5","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?d5a9","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue","webpack:///nextcloud/apps/user_status/src/services/clearAtOptionsService.js","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?5c71","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?b1cd","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?2c76","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?3183","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?1ac6","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?12b9","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/services/statusOptionsService.js","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?de85","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?4fb2"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.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, \".clear-at-select[data-v-26e5baab]{display:flex;margin-bottom:10px;align-items:center}.clear-at-select__label[data-v-26e5baab]{margin-right:10px}.clear-at-select .multiselect[data-v-26e5baab]{flex-grow:1;min-width:130px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/ClearAtSelect.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,YAAA,CACA,kBAAA,CACA,kBAAA,CAEA,yCACC,iBAAA,CAGD,+CACC,WAAA,CACA,eAAA\",\"sourcesContent\":[\"\\n.clear-at-select {\\n\\tdisplay: flex;\\n\\tmargin-bottom: 10px;\\n\\talign-items: center;\\n\\n\\t&__label {\\n\\t\\tmargin-right: 10px;\\n\\t}\\n\\n\\t.multiselect {\\n\\t\\tflex-grow: 1;\\n\\t\\tmin-width: 130px;\\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/sourceMaps.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, \".custom-input[data-v-59f118ca]{display:flex;width:100%}.custom-input__emoji-button[data-v-59f118ca]{min-height:36px;padding:0;border:2px solid var(--color-border-maxcontrast);border-right:none;border-radius:var(--border-radius) 0 0 var(--border-radius)}.custom-input__emoji-button[data-v-59f118ca]:hover{border-color:var(--color-primary-element)}.custom-input__container[data-v-59f118ca]{width:100%}.custom-input__container input[data-v-59f118ca]{width:100%;margin:0;border-radius:0 var(--border-radius) var(--border-radius) 0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/CustomMessageInput.vue\"],\"names\":[],\"mappings\":\"AACA,+BACC,YAAA,CACA,UAAA,CAEA,6CACC,eAAA,CACA,SAAA,CACA,gDAAA,CACA,iBAAA,CACA,2DAAA,CAEA,mDACC,yCAAA,CAIF,0CACC,UAAA,CAEA,gDACC,UAAA,CACA,QAAA,CACA,2DAAA\",\"sourcesContent\":[\"\\n.custom-input {\\n\\tdisplay: flex;\\n\\twidth: 100%;\\n\\n\\t&__emoji-button {\\n\\t\\tmin-height: 36px;\\n\\t\\tpadding: 0;\\n\\t\\tborder: 2px solid var(--color-border-maxcontrast);\\n\\t\\tborder-right: none;\\n\\t\\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\\n\\n\\t\\t&:hover {\\n\\t\\t\\tborder-color: var(--color-primary-element);\\n\\t\\t}\\n\\t}\\n\\n\\t&__container {\\n\\t\\twidth: 100%;\\n\\n\\t\\tinput {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\\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/sourceMaps.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, \".user-status-online-select__input[data-v-f8d7a000]{position:absolute;top:auto;left:-10000px;overflow:hidden;width:1px;height:1px}.user-status-online-select__label[data-v-f8d7a000]{position:relative;display:block;margin:8px;padding:8px;padding-left:40px;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-color:var(--color-background-hover);background-position:8px center;background-size:24px}.user-status-online-select__label span[data-v-f8d7a000],.user-status-online-select__label[data-v-f8d7a000]{cursor:pointer}.user-status-online-select__label span[data-v-f8d7a000]{position:absolute;top:calc(50% - 12px);left:8px;display:block;width:24px;height:24px}.user-status-online-select__input:checked+.user-status-online-select__label[data-v-f8d7a000],.user-status-online-select__input:focus+.user-status-online-select__label[data-v-f8d7a000],.user-status-online-select__label[data-v-f8d7a000]:hover{border-color:var(--color-primary)}.user-status-online-select__label[data-v-f8d7a000]:active{border-color:var(--color-border-dark)}.user-status-online-select__subline[data-v-f8d7a000]{display:block;color:var(--color-text-lighter)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/OnlineStatusSelect.vue\"],\"names\":[],\"mappings\":\"AAOC,mDACC,iBAAA,CACA,QAAA,CACA,aAAA,CACA,eAAA,CACA,SAAA,CACA,UAAA,CAGD,mDACC,iBAAA,CACA,aAAA,CACA,UAhBc,CAiBd,WAjBc,CAkBd,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,8CAAA,CACA,8BAAA,CACA,oBAxBU,CA0BV,2GAEC,cAAA,CAGD,wDACC,iBAAA,CACA,oBAAA,CACA,QAjCa,CAkCb,aAAA,CACA,UApCS,CAqCT,WArCS,CAyCX,iPAGC,iCAAA,CAGD,0DACC,qCAAA,CAGD,qDACC,aAAA,CACA,+BAAA\",\"sourcesContent\":[\"\\n@use 'sass:math';\\n$icon-size: 24px;\\n$label-padding: 8px;\\n\\n.user-status-online-select {\\n\\t// Inputs are here for keyboard navigation, they are not visually visible\\n\\t&__input {\\n\\t\\tposition: absolute;\\n\\t\\ttop: auto;\\n\\t\\tleft: -10000px;\\n\\t\\toverflow: hidden;\\n\\t\\twidth: 1px;\\n\\t\\theight: 1px;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tposition: relative;\\n\\t\\tdisplay: block;\\n\\t\\tmargin: $label-padding;\\n\\t\\tpadding: $label-padding;\\n\\t\\tpadding-left: $icon-size + $label-padding * 2;\\n\\t\\tborder: 2px solid var(--color-main-background);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\tbackground-position: $label-padding center;\\n\\t\\tbackground-size: $icon-size;\\n\\n\\t\\tspan,\\n\\t\\t& {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t}\\n\\n\\t\\tspan {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\ttop: calc(50% - math.div($icon-size, 2));\\n\\t\\t\\tleft: $label-padding;\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\twidth: $icon-size;\\n\\t\\t\\theight: $icon-size;\\n\\t\\t}\\n\\t}\\n\\n\\t&__input:checked + &__label,\\n\\t&__input:focus + &__label,\\n\\t&__label:hover {\\n\\t\\tborder-color: var(--color-primary);\\n\\t}\\n\\n\\t&__label:active {\\n\\t\\tborder-color: var(--color-border-dark);\\n\\t}\\n\\n\\t&__subline {\\n\\t\\tdisplay: block;\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n}\\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/sourceMaps.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, \".predefined-status[data-v-c2934592]{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status[data-v-c2934592]:hover,.predefined-status[data-v-c2934592]:focus{background-color:var(--color-background-hover)}.predefined-status[data-v-c2934592]:active{background-color:var(--color-background-dark)}.predefined-status__icon[data-v-c2934592]{flex-basis:40px;text-align:center}.predefined-status__message[data-v-c2934592]{font-weight:bold;padding:0 6px}.predefined-status__clear-at[data-v-c2934592]{opacity:.7}.predefined-status__clear-at[data-v-c2934592]::before{content:\\\" – \\\"}\", \"\",{\"version\":3,\"sources\":[\"webpack://./PredefinedStatus.vue\",\"webpack://./apps/user_status/src/components/PredefinedStatus.vue\"],\"names\":[],\"mappings\":\"AAAA,oCCCA,YACC,CAAA,gBACA,CAAA,0BACA,CAAA,eACA,CAAA,kCACA,CAAA,kBACA,CAAA,eACA,CAAA,oFAEA,8CAEC,CAAA,2CAGD,6CACC,CAAA,0CAGD,eACC,CAAA,iBACA,CAAA,6CAGD,gBACC,CAAA,aACA,CAAA,8CAGD,UACC,CAAA,sDAEA,aACC\",\"sourcesContent\":[\".predefined-status{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status:hover,.predefined-status:focus{background-color:var(--color-background-hover)}.predefined-status:active{background-color:var(--color-background-dark)}.predefined-status__icon{flex-basis:40px;text-align:center}.predefined-status__message{font-weight:bold;padding:0 6px}.predefined-status__clear-at{opacity:.7}.predefined-status__clear-at::before{content:\\\" – \\\"}\",\"\\n.predefined-status {\\n\\tdisplay: flex;\\n\\tflex-wrap: nowrap;\\n\\tjustify-content: flex-start;\\n\\tflex-basis: 100%;\\n\\tborder-radius: var(--border-radius);\\n\\talign-items: center;\\n\\tmin-height: 44px;\\n\\n\\t&:hover,\\n\\t&:focus {\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\t}\\n\\n\\t&:active{\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t}\\n\\n\\t&__icon {\\n\\t\\tflex-basis: 40px;\\n\\t\\ttext-align: center;\\n\\t}\\n\\n\\t&__message {\\n\\t\\tfont-weight: bold;\\n\\t\\tpadding: 0 6px;\\n\\t}\\n\\n\\t&__clear-at {\\n\\t\\topacity: .7;\\n\\n\\t\\t&::before {\\n\\t\\t\\tcontent: ' – ';\\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/sourceMaps.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, \".predefined-statuses-list[data-v-fddcc16e]{display:flex;flex-direction:column;margin-bottom:10px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/PredefinedStatusesList.vue\"],\"names\":[],\"mappings\":\"AACA,2CACC,YAAA,CACA,qBAAA,CACA,kBAAA\",\"sourcesContent\":[\"\\n.predefined-statuses-list {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tmargin-bottom: 10px;\\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/sourceMaps.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, \".set-status-modal[data-v-2e1411e2]{padding:8px 20px 20px 20px}.set-status-modal__header[data-v-2e1411e2]{text-align:center;font-weight:bold;margin:15px 0}.set-status-modal__online-status[data-v-2e1411e2]{display:grid;grid-template-columns:1fr 1fr}.set-status-modal__custom-input[data-v-2e1411e2]{display:flex;width:100%;margin-bottom:10px}.set-status-modal .status-buttons[data-v-2e1411e2]{display:flex;padding:3px;padding-left:0;gap:3px}@media only screen and (max-width: 500px){.set-status-modal__online-status[data-v-2e1411e2]{grid-template-columns:none !important}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/SetStatusModal.vue\"],\"names\":[],\"mappings\":\"AAEA,mCACC,0BAAA,CAEA,2CACC,iBAAA,CACA,gBAAA,CACA,aAAA,CAGD,kDACC,YAAA,CACA,6BAAA,CAGD,iDACC,YAAA,CACA,UAAA,CACA,kBAAA,CAGD,mDACC,YAAA,CACA,WAAA,CACA,cAAA,CACA,OAAA,CAIF,0CACC,kDACC,qCAAA,CAAA\",\"sourcesContent\":[\"\\n\\n.set-status-modal {\\n\\tpadding: 8px 20px 20px 20px;\\n\\n\\t&__header {\\n\\t\\ttext-align: center;\\n\\t\\tfont-weight: bold;\\n\\t\\tmargin: 15px 0;\\n\\t}\\n\\n\\t&__online-status {\\n\\t\\tdisplay: grid;\\n\\t\\tgrid-template-columns: 1fr 1fr;\\n\\t}\\n\\n\\t&__custom-input {\\n\\t\\tdisplay: flex;\\n\\t\\twidth: 100%;\\n\\t\\tmargin-bottom: 10px;\\n\\t}\\n\\n\\t.status-buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tpadding: 3px;\\n\\t\\tpadding-left:0;\\n\\t\\tgap: 3px;\\n\\t}\\n}\\n\\n@media only screen and (max-width: 500px) {\\n\\t.set-status-modal__online-status {\\n\\t\\tgrid-template-columns: none !important;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcModal',{attrs:{\"size\":\"normal\",\"title\":_vm.$t('user_status', 'Set status')},on:{\"close\":_vm.closeModal}},[_c('div',{staticClass:\"set-status-modal\"},[_c('div',{staticClass:\"set-status-modal__header\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('user_status', 'Online status')))])]),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__online-status\"},_vm._l((_vm.statuses),function(status){return _c('OnlineStatusSelect',_vm._b({key:status.type,attrs:{\"checked\":status.type === _vm.statusType},on:{\"select\":_vm.changeStatus}},'OnlineStatusSelect',status,false))}),1),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__header\"},[_c('h2',[_vm._v(_vm._s(_vm.$t('user_status', 'Status message')))])]),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__custom-input\"},[_c('CustomMessageInput',{ref:\"customMessageInput\",attrs:{\"icon\":_vm.icon,\"message\":_vm.message},on:{\"change\":_vm.setMessage,\"submit\":_vm.saveStatus,\"select-icon\":_vm.setIcon}})],1),_vm._v(\" \"),_c('PredefinedStatusesList',{on:{\"select-status\":_vm.selectPredefinedMessage}}),_vm._v(\" \"),_c('ClearAtSelect',{attrs:{\"clear-at\":_vm.clearAt},on:{\"select-clear-at\":_vm.setClearAt}}),_vm._v(\" \"),_c('div',{staticClass:\"status-buttons\"},[_c('NcButton',{attrs:{\"wide\":true,\"type\":\"tertiary\",\"text\":_vm.$t('user_status', 'Clear status message'),\"disabled\":_vm.isSavingStatus},on:{\"click\":_vm.clearStatus}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.$t('user_status', 'Clear status message'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{attrs:{\"wide\":true,\"type\":\"primary\",\"text\":_vm.$t('user_status', 'Set status message'),\"disabled\":_vm.isSavingStatus},on:{\"click\":_vm.saveStatus}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.$t('user_status', 'Set status message'))+\"\\n\\t\\t\\t\")])],1)],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 { translate as t } from '@nextcloud/l10n'\nimport moment from '@nextcloud/moment'\nimport { dateFactory } from '../services/dateService'\n\n/**\n * Formats a clearAt object to be human readable\n *\n * @param {object} clearAt The clearAt object\n * @return {string|null}\n */\nconst clearAtFilter = (clearAt) => {\n\tif (clearAt === null) {\n\t\treturn t('user_status', 'Don\\'t clear')\n\t}\n\n\tif (clearAt.type === 'end-of') {\n\t\tswitch (clearAt.time) {\n\t\tcase 'day':\n\t\t\treturn t('user_status', 'Today')\n\t\tcase 'week':\n\t\t\treturn t('user_status', 'This week')\n\n\t\tdefault:\n\t\t\treturn null\n\t\t}\n\t}\n\n\tif (clearAt.type === 'period') {\n\t\treturn moment.duration(clearAt.time * 1000).humanize()\n\t}\n\n\t// This is not an officially supported type\n\t// but only used internally to show the remaining time\n\t// in the Set Status Modal\n\tif (clearAt.type === '_time') {\n\t\tconst momentNow = moment(dateFactory())\n\t\tconst momentClearAt = moment(clearAt.time, 'X')\n\n\t\treturn moment.duration(momentNow.diff(momentClearAt)).humanize()\n\t}\n\n\treturn null\n}\n\nexport {\n\tclearAtFilter,\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.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!./PredefinedStatus.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\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 class=\"predefined-status\"\n\t\ttabindex=\"0\"\n\t\t@keyup.enter=\"select\"\n\t\t@keyup.space=\"select\"\n\t\t@click=\"select\">\n\t\t<span class=\"predefined-status__icon\">\n\t\t\t{{ icon }}\n\t\t</span>\n\t\t<span class=\"predefined-status__message\">\n\t\t\t{{ message }}\n\t\t</span>\n\t\t<span class=\"predefined-status__clear-at\">\n\t\t\t{{ clearAt | clearAtFilter }}\n\t\t</span>\n\t</div>\n</template>\n\n<script>\nimport { clearAtFilter } from '../filters/clearAtFilter'\n\nexport default {\n\tname: 'PredefinedStatus',\n\tfilters: {\n\t\tclearAtFilter,\n\t},\n\tprops: {\n\t\tmessageId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tclearAt: {\n\t\t\ttype: Object,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Emits an event when the user clicks the row\n\t\t */\n\t\tselect() {\n\t\t\tthis.$emit('select')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.predefined-status {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\tjustify-content: flex-start;\n\tflex-basis: 100%;\n\tborder-radius: var(--border-radius);\n\talign-items: center;\n\tmin-height: 44px;\n\n\t&:hover,\n\t&:focus {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n\n\t&:active{\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\n\t&__icon {\n\t\tflex-basis: 40px;\n\t\ttext-align: center;\n\t}\n\n\t&__message {\n\t\tfont-weight: bold;\n\t\tpadding: 0 6px;\n\t}\n\n\t&__clear-at {\n\t\topacity: .7;\n\n\t\t&::before {\n\t\t\tcontent: ' – ';\n\t\t}\n\t}\n}\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!./PredefinedStatus.vue?vue&type=style&index=0&id=c2934592&prod&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!./PredefinedStatus.vue?vue&type=style&index=0&id=c2934592&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PredefinedStatus.vue?vue&type=template&id=c2934592&scoped=true&\"\nimport script from \"./PredefinedStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./PredefinedStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PredefinedStatus.vue?vue&type=style&index=0&id=c2934592&prod&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 \"c2934592\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"predefined-status\",attrs:{\"tabindex\":\"0\"},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.select.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"]))return null;return _vm.select.apply(null, arguments)}],\"click\":_vm.select}},[_c('span',{staticClass:\"predefined-status__icon\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.icon)+\"\\n\\t\")]),_vm._v(\" \"),_c('span',{staticClass:\"predefined-status__message\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.message)+\"\\n\\t\")]),_vm._v(\" \"),_c('span',{staticClass:\"predefined-status__clear-at\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm._f(\"clearAtFilter\")(_vm.clearAt))+\"\\n\\t\")])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\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\n<template>\n\t<div v-if=\"hasLoaded\"\n\t\tclass=\"predefined-statuses-list\">\n\t\t<PredefinedStatus v-for=\"status in predefinedStatuses\"\n\t\t\t:key=\"status.id\"\n\t\t\t:message-id=\"status.id\"\n\t\t\t:icon=\"status.icon\"\n\t\t\t:message=\"status.message\"\n\t\t\t:clear-at=\"status.clearAt\"\n\t\t\t@select=\"selectStatus(status)\" />\n\t</div>\n\t<div v-else\n\t\tclass=\"predefined-statuses-list\">\n\t\t<div class=\"icon icon-loading-small\" />\n\t</div>\n</template>\n\n<script>\nimport PredefinedStatus from './PredefinedStatus'\nimport { mapState } from 'vuex'\n\nexport default {\n\tname: 'PredefinedStatusesList',\n\tcomponents: {\n\t\tPredefinedStatus,\n\t},\n\tcomputed: {\n\t\t...mapState({\n\t\t\tpredefinedStatuses: state => state.predefinedStatuses.predefinedStatuses,\n\t\t}),\n\t\t/**\n\t\t * Indicator whether the predefined statuses have already been loaded\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasLoaded() {\n\t\t\treturn this.predefinedStatuses.length > 0\n\t\t},\n\t},\n\t/**\n\t * Loads all predefined statuses from the server\n\t * when this component is mounted\n\t */\n\tmounted() {\n\t\tthis.$store.dispatch('loadAllPredefinedStatuses')\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Emits an event when the user selects a status\n\t\t *\n\t\t * @param {object} status The selected status\n\t\t */\n\t\tselectStatus(status) {\n\t\t\tthis.$emit('select-status', status)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.predefined-statuses-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 10px;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.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!./PredefinedStatusesList.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!./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&prod&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!./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PredefinedStatusesList.vue?vue&type=template&id=fddcc16e&scoped=true&\"\nimport script from \"./PredefinedStatusesList.vue?vue&type=script&lang=js&\"\nexport * from \"./PredefinedStatusesList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&prod&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 \"fddcc16e\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.hasLoaded)?_c('div',{staticClass:\"predefined-statuses-list\"},_vm._l((_vm.predefinedStatuses),function(status){return _c('PredefinedStatus',{key:status.id,attrs:{\"message-id\":status.id,\"icon\":status.icon,\"message\":status.message,\"clear-at\":status.clearAt},on:{\"select\":function($event){return _vm.selectStatus(status)}}})}),1):_c('div',{staticClass:\"predefined-statuses-list\"},[_c('div',{staticClass:\"icon icon-loading-small\"})])\n}\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!./CustomMessageInput.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!./CustomMessageInput.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\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 class=\"custom-input\">\n\t\t<NcEmojiPicker container=\".custom-input\" @select=\"setIcon\">\n\t\t\t<NcButton class=\"custom-input__emoji-button\" type=\"tertiary\">\n\t\t\t\t{{ visibleIcon }}\n\t\t\t</NcButton>\n\t\t</NcEmojiPicker>\n\t\t<div class=\"custom-input__container\">\n\t\t\t<label class=\"hidden-visually\" for=\"user_status_message\">\n\t\t\t\t{{ t('user_status', 'What is your status?') }}\n\t\t\t</label>\n\t\t\t<input id=\"user_status_message\"\n\t\t\t\tref=\"input\"\n\t\t\t\tmaxlength=\"80\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t:placeholder=\"$t('user_status', 'What is your status?')\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t:value=\"message\"\n\t\t\t\t@change=\"onChange\"\n\t\t\t\t@keyup=\"onKeyup\"\n\t\t\t\t@paste=\"onKeyup\">\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcEmojiPicker from '@nextcloud/vue/dist/Components/NcEmojiPicker.js'\n\nexport default {\n\tname: 'CustomMessageInput',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tNcEmojiPicker,\n\t},\n\n\tprops: {\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\tdefault: '😀',\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tdefault: () => '',\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\temits: [\n\t\t'change',\n\t\t'submit',\n\t\t'icon-selected',\n\t],\n\n\tcomputed: {\n\t\t/**\n\t\t * Returns the user-set icon or a smiley in case no icon is set\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tvisibleIcon() {\n\t\t\treturn this.icon || '😀'\n\t\t},\n\t},\n\n\tmethods: {\n\t\tfocus() {\n\t\t\tthis.$refs.input.focus()\n\t\t},\n\n\t\t/**\n\t\t * Notifies the parent component about a changed input\n\t\t *\n\t\t * @param {Event} event The Change Event\n\t\t */\n\t\tonKeyup(event) {\n\t\t\tthis.$emit('change', event.target.value)\n\t\t},\n\n\t\tonChange(event) {\n\t\t\tthis.$emit('submit', event.target.value)\n\t\t},\n\n\t\tsetIcon(icon) {\n\t\t\tthis.$emit('select-icon', icon)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.custom-input {\n\tdisplay: flex;\n\twidth: 100%;\n\n\t&__emoji-button {\n\t\tmin-height: 36px;\n\t\tpadding: 0;\n\t\tborder: 2px solid var(--color-border-maxcontrast);\n\t\tborder-right: none;\n\t\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\n\n\t\t&:hover {\n\t\t\tborder-color: var(--color-primary-element);\n\t\t}\n\t}\n\n\t&__container {\n\t\twidth: 100%;\n\n\t\tinput {\n\t\t\twidth: 100%;\n\t\t\tmargin: 0;\n\t\t\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\n\t\t}\n\t}\n}\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!./CustomMessageInput.vue?vue&type=style&index=0&id=59f118ca&prod&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!./CustomMessageInput.vue?vue&type=style&index=0&id=59f118ca&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CustomMessageInput.vue?vue&type=template&id=59f118ca&scoped=true&\"\nimport script from \"./CustomMessageInput.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomMessageInput.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CustomMessageInput.vue?vue&type=style&index=0&id=59f118ca&prod&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 \"59f118ca\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"custom-input\"},[_c('NcEmojiPicker',{attrs:{\"container\":\".custom-input\"},on:{\"select\":_vm.setIcon}},[_c('NcButton',{staticClass:\"custom-input__emoji-button\",attrs:{\"type\":\"tertiary\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.visibleIcon)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"custom-input__container\"},[_c('label',{staticClass:\"hidden-visually\",attrs:{\"for\":\"user_status_message\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('user_status', 'What is your status?'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('input',{ref:\"input\",attrs:{\"id\":\"user_status_message\",\"maxlength\":\"80\",\"disabled\":_vm.disabled,\"placeholder\":_vm.$t('user_status', 'What is your status?'),\"type\":\"text\"},domProps:{\"value\":_vm.message},on:{\"change\":_vm.onChange,\"keyup\":_vm.onKeyup,\"paste\":_vm.onKeyup}})])],1)\n}\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!./ClearAtSelect.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!./ClearAtSelect.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\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\n<template>\n\t<div class=\"clear-at-select\">\n\t\t<label class=\"clear-at-select__label\" for=\"clearStatus\">\n\t\t\t{{ $t('user_status', 'Clear status after') }}\n\t\t</label>\n\t\t<NcMultiselect id=\"clearStatus\"\n\t\t\tlabel=\"label\"\n\t\t\t:value=\"option\"\n\t\t\t:options=\"options\"\n\t\t\topen-direction=\"top\"\n\t\t\t@select=\"select\" />\n\t</div>\n</template>\n\n<script>\nimport NcMultiselect from '@nextcloud/vue/dist/Components/NcMultiselect'\nimport { getAllClearAtOptions } from '../services/clearAtOptionsService'\nimport { clearAtFilter } from '../filters/clearAtFilter'\n\nexport default {\n\tname: 'ClearAtSelect',\n\tcomponents: {\n\t\tNcMultiselect,\n\t},\n\tprops: {\n\t\tclearAt: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\toptions: getAllClearAtOptions(),\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * Returns an object of the currently selected option\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\toption() {\n\t\t\treturn {\n\t\t\t\tclearAt: this.clearAt,\n\t\t\t\tlabel: clearAtFilter(this.clearAt),\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Triggered when the user selects a new option.\n\t\t *\n\t\t * @param {object=} option The new selected option\n\t\t */\n\t\tselect(option) {\n\t\t\tif (!option) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.$emit('select-clear-at', option.clearAt)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.clear-at-select {\n\tdisplay: flex;\n\tmargin-bottom: 10px;\n\talign-items: center;\n\n\t&__label {\n\t\tmargin-right: 10px;\n\t}\n\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmin-width: 130px;\n\t}\n}\n</style>\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 { translate as t } from '@nextcloud/l10n'\n\n/**\n * Returns an array\n *\n * @return {object[]}\n */\nconst getAllClearAtOptions = () => {\n\treturn [{\n\t\tlabel: t('user_status', 'Don\\'t clear'),\n\t\tclearAt: null,\n\t}, {\n\t\tlabel: t('user_status', '30 minutes'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 1800,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', '1 hour'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 3600,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', '4 hours'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 14400,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', 'Today'),\n\t\tclearAt: {\n\t\t\ttype: 'end-of',\n\t\t\ttime: 'day',\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', 'This week'),\n\t\tclearAt: {\n\t\t\ttype: 'end-of',\n\t\t\ttime: 'week',\n\t\t},\n\t}]\n}\n\nexport {\n\tgetAllClearAtOptions,\n}\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!./ClearAtSelect.vue?vue&type=style&index=0&id=26e5baab&prod&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!./ClearAtSelect.vue?vue&type=style&index=0&id=26e5baab&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ClearAtSelect.vue?vue&type=template&id=26e5baab&scoped=true&\"\nimport script from \"./ClearAtSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./ClearAtSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClearAtSelect.vue?vue&type=style&index=0&id=26e5baab&prod&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 \"26e5baab\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"clear-at-select\"},[_c('label',{staticClass:\"clear-at-select__label\",attrs:{\"for\":\"clearStatus\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.$t('user_status', 'Clear status after'))+\"\\n\\t\")]),_vm._v(\" \"),_c('NcMultiselect',{attrs:{\"id\":\"clearStatus\",\"label\":\"label\",\"value\":_vm.option,\"options\":_vm.options,\"open-direction\":\"top\"},on:{\"select\":_vm.select}})],1)\n}\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!./OnlineStatusSelect.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!./OnlineStatusSelect.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\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 class=\"user-status-online-select\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\tclass=\"user-status-online-select__input\"\n\t\t\ttype=\"radio\"\n\t\t\tname=\"user-status-online\"\n\t\t\t@change=\"onChange\">\n\t\t<label :for=\"id\" class=\"user-status-online-select__label\">\n\t\t\t{{ label }}\n\t\t\t<span :class=\"icon\" role=\"img\" />\n\t\t\t<em class=\"user-status-online-select__subline\">{{ subline }}</em>\n\t\t</label>\n\t</div>\n</template>\n\n<script>\nexport default {\n\tname: 'OnlineStatusSelect',\n\n\tprops: {\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tsubline: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tid() {\n\t\t\treturn `user-status-online-status-${this.type}`\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonChange() {\n\t\t\tthis.$emit('select', this.type)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use 'sass:math';\n$icon-size: 24px;\n$label-padding: 8px;\n\n.user-status-online-select {\n\t// Inputs are here for keyboard navigation, they are not visually visible\n\t&__input {\n\t\tposition: absolute;\n\t\ttop: auto;\n\t\tleft: -10000px;\n\t\toverflow: hidden;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t}\n\n\t&__label {\n\t\tposition: relative;\n\t\tdisplay: block;\n\t\tmargin: $label-padding;\n\t\tpadding: $label-padding;\n\t\tpadding-left: $icon-size + $label-padding * 2;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-background-hover);\n\t\tbackground-position: $label-padding center;\n\t\tbackground-size: $icon-size;\n\n\t\tspan,\n\t\t& {\n\t\t\tcursor: pointer;\n\t\t}\n\n\t\tspan {\n\t\t\tposition: absolute;\n\t\t\ttop: calc(50% - math.div($icon-size, 2));\n\t\t\tleft: $label-padding;\n\t\t\tdisplay: block;\n\t\t\twidth: $icon-size;\n\t\t\theight: $icon-size;\n\t\t}\n\t}\n\n\t&__input:checked + &__label,\n\t&__input:focus + &__label,\n\t&__label:hover {\n\t\tborder-color: var(--color-primary);\n\t}\n\n\t&__label:active {\n\t\tborder-color: var(--color-border-dark);\n\t}\n\n\t&__subline {\n\t\tdisplay: block;\n\t\tcolor: var(--color-text-lighter);\n\t}\n}\n\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!./OnlineStatusSelect.vue?vue&type=style&index=0&id=f8d7a000&prod&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!./OnlineStatusSelect.vue?vue&type=style&index=0&id=f8d7a000&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./OnlineStatusSelect.vue?vue&type=template&id=f8d7a000&scoped=true&\"\nimport script from \"./OnlineStatusSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./OnlineStatusSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./OnlineStatusSelect.vue?vue&type=style&index=0&id=f8d7a000&prod&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 \"f8d7a000\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"user-status-online-select\"},[_c('input',{staticClass:\"user-status-online-select__input\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"user-status-online\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onChange}}),_vm._v(\" \"),_c('label',{staticClass:\"user-status-online-select__label\",attrs:{\"for\":_vm.id}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.label)+\"\\n\\t\\t\"),_c('span',{class:_vm.icon,attrs:{\"role\":\"img\"}}),_vm._v(\" \"),_c('em',{staticClass:\"user-status-online-select__subline\"},[_vm._v(_vm._s(_vm.subline))])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\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\n<template>\n\t<NcModal size=\"normal\"\n\t\t:title=\"$t('user_status', 'Set status')\"\n\t\t@close=\"closeModal\">\n\t\t<div class=\"set-status-modal\">\n\t\t\t<!-- Status selector -->\n\t\t\t<div class=\"set-status-modal__header\">\n\t\t\t\t<h2>{{ $t('user_status', 'Online status') }}</h2>\n\t\t\t</div>\n\t\t\t<div class=\"set-status-modal__online-status\">\n\t\t\t\t<OnlineStatusSelect v-for=\"status in statuses\"\n\t\t\t\t\t:key=\"status.type\"\n\t\t\t\t\tv-bind=\"status\"\n\t\t\t\t\t:checked=\"status.type === statusType\"\n\t\t\t\t\t@select=\"changeStatus\" />\n\t\t\t</div>\n\n\t\t\t<!-- Status message -->\n\t\t\t<div class=\"set-status-modal__header\">\n\t\t\t\t<h2>{{ $t('user_status', 'Status message') }}</h2>\n\t\t\t</div>\n\t\t\t<div class=\"set-status-modal__custom-input\">\n\t\t\t\t<CustomMessageInput ref=\"customMessageInput\"\n\t\t\t\t\t:icon=\"icon\"\n\t\t\t\t\t:message=\"message\"\n\t\t\t\t\t@change=\"setMessage\"\n\t\t\t\t\t@submit=\"saveStatus\"\n\t\t\t\t\t@select-icon=\"setIcon\" />\n\t\t\t</div>\n\t\t\t<PredefinedStatusesList @select-status=\"selectPredefinedMessage\" />\n\t\t\t<ClearAtSelect :clear-at=\"clearAt\"\n\t\t\t\t@select-clear-at=\"setClearAt\" />\n\t\t\t<div class=\"status-buttons\">\n\t\t\t\t<NcButton :wide=\"true\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t:text=\"$t('user_status', 'Clear status message')\"\n\t\t\t\t\t:disabled=\"isSavingStatus\"\n\t\t\t\t\t@click=\"clearStatus\">\n\t\t\t\t\t{{ $t('user_status', 'Clear status message') }}\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton :wide=\"true\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t:text=\"$t('user_status', 'Set status message')\"\n\t\t\t\t\t:disabled=\"isSavingStatus\"\n\t\t\t\t\t@click=\"saveStatus\">\n\t\t\t\t\t{{ $t('user_status', 'Set status message') }}\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t</div>\n\t</NcModal>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton'\nimport { getAllStatusOptions } from '../services/statusOptionsService.js'\nimport OnlineStatusMixin from '../mixins/OnlineStatusMixin.js'\nimport PredefinedStatusesList from './PredefinedStatusesList.vue'\nimport CustomMessageInput from './CustomMessageInput.vue'\nimport ClearAtSelect from './ClearAtSelect.vue'\nimport OnlineStatusSelect from './OnlineStatusSelect.vue'\n\nexport default {\n\tname: 'SetStatusModal',\n\n\tcomponents: {\n\t\tClearAtSelect,\n\t\tCustomMessageInput,\n\t\tNcModal,\n\t\tOnlineStatusSelect,\n\t\tPredefinedStatusesList,\n\t\tNcButton,\n\t},\n\tmixins: [OnlineStatusMixin],\n\n\tdata() {\n\t\treturn {\n\t\t\tclearAt: null,\n\t\t\ticon: null,\n\t\t\tmessage: '',\n\t\t\tmessageId: '',\n\t\t\tisSavingStatus: false,\n\t\t\tstatuses: getAllStatusOptions(),\n\t\t}\n\t},\n\n\t/**\n\t * Loads the current status when a user opens dialog\n\t */\n\tmounted() {\n\t\tthis.messageId = this.$store.state.userStatus.messageId\n\t\tthis.icon = this.$store.state.userStatus.icon\n\t\tthis.message = this.$store.state.userStatus.message || ''\n\n\t\tif (this.$store.state.userStatus.clearAt !== null) {\n\t\t\tthis.clearAt = {\n\t\t\t\ttype: '_time',\n\t\t\t\ttime: this.$store.state.userStatus.clearAt,\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Closes the Set Status modal\n\t\t */\n\t\tcloseModal() {\n\t\t\tthis.$emit('close')\n\t\t},\n\t\t/**\n\t\t * Sets a new icon\n\t\t *\n\t\t * @param {string} icon The new icon\n\t\t */\n\t\tsetIcon(icon) {\n\t\t\tthis.messageId = null\n\t\t\tthis.icon = icon\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.customMessageInput.focus()\n\t\t\t})\n\t\t},\n\t\t/**\n\t\t * Sets a new message\n\t\t *\n\t\t * @param {string} message The new message\n\t\t */\n\t\tsetMessage(message) {\n\t\t\tthis.messageId = null\n\t\t\tthis.message = message\n\t\t},\n\t\t/**\n\t\t * Sets a new clearAt value\n\t\t *\n\t\t * @param {object} clearAt The new clearAt object\n\t\t */\n\t\tsetClearAt(clearAt) {\n\t\t\tthis.clearAt = clearAt\n\t\t},\n\t\t/**\n\t\t * Sets new icon/message/clearAt based on a predefined message\n\t\t *\n\t\t * @param {object} status The predefined status object\n\t\t */\n\t\tselectPredefinedMessage(status) {\n\t\t\tthis.messageId = status.id\n\t\t\tthis.clearAt = status.clearAt\n\t\t\tthis.icon = status.icon\n\t\t\tthis.message = status.message\n\t\t},\n\t\t/**\n\t\t * Saves the status and closes the\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync saveStatus() {\n\t\t\tif (this.isSavingStatus) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.isSavingStatus = true\n\n\t\t\t\tif (this.messageId !== undefined && this.messageId !== null) {\n\t\t\t\t\tawait this.$store.dispatch('setPredefinedMessage', {\n\t\t\t\t\t\tmessageId: this.messageId,\n\t\t\t\t\t\tclearAt: this.clearAt,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$store.dispatch('setCustomMessage', {\n\t\t\t\t\t\tmessage: this.message,\n\t\t\t\t\t\ticon: this.icon,\n\t\t\t\t\t\tclearAt: this.clearAt,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error saving the status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t\tthis.isSavingStatus = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.isSavingStatus = false\n\t\t\tthis.closeModal()\n\t\t},\n\t\t/**\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync clearStatus() {\n\t\t\ttry {\n\t\t\t\tthis.isSavingStatus = true\n\n\t\t\t\tawait this.$store.dispatch('clearMessage')\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error clearing the status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t\tthis.isSavingStatus = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.isSavingStatus = false\n\t\t\tthis.closeModal()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.set-status-modal {\n\tpadding: 8px 20px 20px 20px;\n\n\t&__header {\n\t\ttext-align: center;\n\t\tfont-weight: bold;\n\t\tmargin: 15px 0;\n\t}\n\n\t&__online-status {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n\n\t&__custom-input {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tmargin-bottom: 10px;\n\t}\n\n\t.status-buttons {\n\t\tdisplay: flex;\n\t\tpadding: 3px;\n\t\tpadding-left:0;\n\t\tgap: 3px;\n\t}\n}\n\n@media only screen and (max-width: 500px) {\n\t.set-status-modal__online-status {\n\t\tgrid-template-columns: none !important;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.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!./SetStatusModal.vue?vue&type=script&lang=js&\"","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n * @author Jan C. Borchardt <hey@jancborchardt.net>\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 { translate as t } from '@nextcloud/l10n'\n\n/**\n * Returns a list of all user-definable statuses\n *\n * @return {object[]}\n */\nconst getAllStatusOptions = () => {\n\treturn [{\n\t\ttype: 'online',\n\t\tlabel: t('user_status', 'Online'),\n\t\ticon: 'icon-user-status-online',\n\t}, {\n\t\ttype: 'away',\n\t\tlabel: t('user_status', 'Away'),\n\t\ticon: 'icon-user-status-away',\n\t}, {\n\t\ttype: 'dnd',\n\t\tlabel: t('user_status', 'Do not disturb'),\n\t\tsubline: t('user_status', 'Mute all notifications'),\n\t\ticon: 'icon-user-status-dnd',\n\n\t}, {\n\t\ttype: 'invisible',\n\t\tlabel: t('user_status', 'Invisible'),\n\t\tsubline: t('user_status', 'Appear offline'),\n\t\ticon: 'icon-user-status-invisible',\n\t}]\n}\n\nexport {\n\tgetAllStatusOptions,\n}\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!./SetStatusModal.vue?vue&type=style&index=0&id=2e1411e2&prod&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!./SetStatusModal.vue?vue&type=style&index=0&id=2e1411e2&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SetStatusModal.vue?vue&type=template&id=2e1411e2&scoped=true&\"\nimport script from \"./SetStatusModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SetStatusModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SetStatusModal.vue?vue&type=style&index=0&id=2e1411e2&prod&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 \"2e1411e2\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","clearAtFilter","clearAt","t","type","time","moment","humanize","momentNow","dateFactory","momentClearAt","diff","name","filters","props","messageId","required","icon","message","default","methods","select","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_c","_self","staticClass","attrs","on","$event","indexOf","_k","keyCode","key","apply","arguments","_v","_s","_f","components","PredefinedStatus","computed","mapState","predefinedStatuses","hasLoaded","mounted","selectStatus","_l","status","NcButton","NcEmojiPicker","disabled","emits","visibleIcon","focus","onKeyup","onChange","setIcon","ref","$t","domProps","NcMultiselect","data","label","option","checked","subline","class","ClearAtSelect","CustomMessageInput","NcModal","OnlineStatusSelect","PredefinedStatusesList","mixins","isSavingStatus","statuses","closeModal","setMessage","setClearAt","selectPredefinedMessage","saveStatus","showError","console","clearStatus","_b","statusType","changeStatus"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/user_status-menu.js b/dist/user_status-menu.js index 2863a0d4bcb..31223024eea 100644 --- a/dist/user_status-menu.js +++ b/dist/user_status-menu.js @@ -1,3 +1,3 @@ /*! For license information please see user_status-menu.js.LICENSE.txt */ -!function(){var e,n,r,s={1296:function(e,n,r){"use strict";var s=r(20144),a=r(45994),o=r(79753),i=r(79954),u=r(78595),c=r(20296),l=r.n(c),d=r(4820);function m(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}var f=function(){var t,e=(t=regeneratorRuntime.mark((function t(e){var n,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(0,o.generateOcsUrl)("apps/user_status/api/v1/heartbeat?format=json"),t.next=3,d.default.put(n,{status:e?"away":"online"});case 3:return r=t.sent,t.abrupt("return",r.data);case 5:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){m(a,r,s,o,i,"next",t)}function i(t){m(a,r,s,o,i,"throw",t)}o(void 0)}))});return function(t){return e.apply(this,arguments)}}(),p=r(84387);function v(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}var h=(0,i.j)("user_status","profileEnabled",!1).profileEnabled,g={name:"UserStatus",components:{SetStatusModal:function(){return Promise.all([r.e(7874),r.e(8299)]).then(r.bind(r,29169))}},mixins:[p.Z],props:{inline:{type:Boolean,default:!1}},data:function(){return{displayName:(0,a.ts)().displayName,heartbeatInterval:null,isAway:!1,isModalOpen:!1,loadingProfilePage:!1,mouseMoveListener:null,profileEnabled:h,setAwayTimeout:null}},computed:{elementTag:function(){return this.inline?"div":"li"},profilePageLink:function(){return this.profileEnabled?(0,o.generateUrl)("/u/{userId}",{userId:(0,a.ts)().uid}):null}},mounted:function(){var t=this;(0,u.Ld)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,u.Ld)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),this.$store.dispatch("loadStatusFromInitialState"),OC.config.session_keepalive&&(this.heartbeatInterval=setInterval(this._backgroundHeartbeat.bind(this),3e5),this.setAwayTimeout=function(){t.isAway=!0},this.mouseMoveListener=l()((function(){var e=t.isAway;t.isAway=!1,clearTimeout(t.setAwayTimeout),setTimeout(t.setAwayTimeout,12e4),e&&t._backgroundHeartbeat()}),2e3,!0),window.addEventListener("mousemove",this.mouseMoveListener,{capture:!0,passive:!0}),this._backgroundHeartbeat()),(0,u.Ld)("user_status:status.updated",this.handleUserStatusUpdated)},beforeDestroy:function(){(0,u.r1)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,u.r1)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),window.removeEventListener("mouseMove",this.mouseMoveListener),clearInterval(this.heartbeatInterval),(0,u.r1)("user_status:status.updated",this.handleUserStatusUpdated)},methods:{handleDisplayNameUpdate:function(t){this.displayName=t},handleProfileEnabledUpdate:function(t){this.profileEnabled=t},loadProfilePage:function(){this.profileEnabled&&(this.loadingProfilePage=!0)},openModal:function(){this.isModalOpen=!0},closeModal:function(){this.isModalOpen=!1},_backgroundHeartbeat:function(){var t,e=this;return(t=regeneratorRuntime.mark((function t(){var n,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,f(e.isAway);case 3:if(null==(n=t.sent)||!n.userId){t.next=8;break}e.$store.dispatch("setStatusFromHeartbeat",n),t.next=10;break;case 8:return t.next=10,e.$store.dispatch("reFetchStatusFromServer");case 10:t.next=15;break;case 12:t.prev=12,t.t0=t.catch(0),console.debug("Failed sending heartbeat, got: "+(null===(r=t.t0.response)||void 0===r?void 0:r.status));case 15:case"end":return t.stop()}}),t,null,[[0,12]])})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){v(a,r,s,o,i,"next",t)}function i(t){v(a,r,s,o,i,"throw",t)}o(void 0)}))})()},handleUserStatusUpdated:function(t){OC.getCurrentUser().uid===t.userId&&this.$store.dispatch("setStatusFromObject",{status:t.status,icon:t.icon,message:t.message})}}},A=g,b=r(93379),j=r.n(b),y=r(7795),w=r.n(y),C=r(90569),x=r.n(C),_=r(3565),k=r.n(_),S=r(19216),P=r.n(S),O=r(44589),I=r.n(O),D=r(48199),M={};M.styleTagTransform=I(),M.setAttributes=k(),M.insert=x().bind(null,"head"),M.domAPI=w(),M.insertStyleElement=P(),j()(D.Z,M),D.Z&&D.Z.locals&&D.Z.locals;var U=(0,r(51900).Z)(A,(function(){var t=this,e=t._self._c;return e(t.elementTag,{tag:"component"},[e("div",{staticClass:"user-status-menu-item"},[t.inline?t._e():e("a",{staticClass:"user-status-menu-item__header",attrs:{href:t.profilePageLink},on:{click:t.loadProfilePage}},[e("div",{staticClass:"user-status-menu-item__header-content"},[e("div",{staticClass:"user-status-menu-item__header-content-displayname"},[t._v(t._s(t.displayName))]),t._v(" "),t.loadingProfilePage?e("div",{staticClass:"icon-loading-small"}):e("div",{staticClass:"user-status-menu-item__header-content-placeholder"})]),t._v(" "),t.profileEnabled?e("div",[t._v("\n\t\t\t\t"+t._s(t.t("user_status","View profile"))+"\n\t\t\t")]):t._e()]),t._v(" "),e(t.inline?"button":"a",{tag:"toggle",staticClass:"user-status-menu-item__toggle",class:{"user-status-menu-item__toggle--inline":t.inline},attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.openModal.apply(null,arguments)}}},[e("span",{staticClass:"user-status-menu-item__toggle-icon",class:t.statusIcon}),t._v("\n\t\t\t"+t._s(t.visibleMessage)+"\n\t\t")])],1),t._v(" "),t.isModalOpen?e("SetStatusModal",{on:{close:t.closeModal}}):t._e()],1)}),[],!1,null,"4d14b4f8",null),E=U.exports,R=r(20629);function T(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}var z=function(){var t,e=(t=regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/predefined_statuses?format=json"),t.next=3,d.default.get(e);case 3:return n=t.sent,t.abrupt("return",n.data.ocs.data);case 5:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){T(a,r,s,o,i,"next",t)}function i(t){T(a,r,s,o,i,"throw",t)}o(void 0)}))});return function(){return e.apply(this,arguments)}}();function B(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return F(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?F(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,s=function(){};return{s:s,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,i=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return o=t.done,t},e:function(t){i=!0,a=t},f:function(){try{o||null==n.return||n.return()}finally{if(i)throw a}}}}function F(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function $(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}var L={loadAllPredefinedStatuses:function(t){return(e=regeneratorRuntime.mark((function e(){var n,r,s,a,o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.state,r=t.commit,!(n.predefinedStatuses.length>0)){e.next=3;break}return e.abrupt("return");case 3:return e.next=5,z();case 5:s=e.sent,a=B(s);try{for(a.s();!(o=a.n()).done;)i=o.value,r("addPredefinedStatus",i)}catch(t){a.e(t)}finally{a.f()}case 8:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,s){var a=e.apply(t,n);function o(t){$(a,r,s,o,i,"next",t)}function i(t){$(a,r,s,o,i,"throw",t)}o(void 0)}))})();var e}},N={state:{predefinedStatuses:[]},mutations:{addPredefinedStatus:function(t,e){t.predefinedStatuses.push(e)}},getters:{},actions:L};function Z(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}function q(t){return function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){Z(a,r,s,o,i,"next",t)}function i(t){Z(a,r,s,o,i,"throw",t)}o(void 0)}))}}var H=function(){var t=q(regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status"),t.next=3,d.default.get(e);case 3:return n=t.sent,t.abrupt("return",n.data.ocs.data);case 5:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),G=function(){var t=q(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/status"),t.next=3,d.default.put(n,{statusType:e});case 3:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),Q=function(){var t=q(regeneratorRuntime.mark((function t(e){var n,r,s=arguments;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=s.length>1&&void 0!==s[1]?s[1]:null,r=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message/predefined?format=json"),t.next=4,d.default.put(r,{messageId:e,clearAt:n});case 4:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),W=function(){var t=q(regeneratorRuntime.mark((function t(e){var n,r,s,a=arguments;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=a.length>1&&void 0!==a[1]?a[1]:null,r=a.length>2&&void 0!==a[2]?a[2]:null,s=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message/custom?format=json"),t.next=5,d.default.put(s,{message:e,statusIcon:n,clearAt:r});case 5:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),J=function(){var t=q(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message?format=json"),t.next=3,d.default.delete(e);case 3:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),K=r(64039),V=r(80351),X=r.n(V),Y=function(t){if(null===t)return null;var e=(0,K.n)();if("period"===t.type)return e.setSeconds(e.getSeconds()+t.time),Math.floor(e.getTime()/1e3);if("end-of"===t.type)switch(t.time){case"day":case"week":return Number(X()(e).endOf(t.time).format("X"))}return"_time"===t.type?t.time:null};function tt(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}function et(t){return function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){tt(a,r,s,o,i,"next",t)}function i(t){tt(a,r,s,o,i,"throw",t)}o(void 0)}))}}var nt={state:{status:null,statusIsUserDefined:null,message:null,icon:null,clearAt:null,messageIsPredefined:null,messageId:null},mutations:{setStatus:function(t,e){var n=e.statusType;t.status=n,t.statusIsUserDefined=!0},setPredefinedMessage:function(t,e){var n=e.messageId,r=e.clearAt,s=e.message,a=e.icon;t.messageId=n,t.messageIsPredefined=!0,t.message=s,t.icon=a,t.clearAt=r},setCustomMessage:function(t,e){var n=e.message,r=e.icon,s=e.clearAt;t.messageId=null,t.messageIsPredefined=!1,t.message=n,t.icon=r,t.clearAt=s},clearMessage:function(t){t.messageId=null,t.messageIsPredefined=!1,t.message=null,t.icon=null,t.clearAt=null},loadStatusFromServer:function(t,e){var n=e.status,r=e.statusIsUserDefined,s=e.message,a=e.icon,o=e.clearAt,i=e.messageIsPredefined,u=e.messageId;t.status=n,t.message=s,t.icon=a,void 0!==r&&(t.statusIsUserDefined=r),void 0!==o&&(t.clearAt=o),void 0!==i&&(t.messageIsPredefined=i),void 0!==u&&(t.messageId=u)}},getters:{},actions:{setStatus:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,i;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.state,i=e.statusType,n.next=4,G(i);case 4:s("setStatus",{statusType:i}),(0,u.j8)("user_status:status.updated",{status:o.status,message:o.message,icon:o.icon,clearAt:o.clearAt,userId:null===(r=(0,a.ts)())||void 0===r?void 0:r.uid});case 6:case"end":return n.stop()}}),n)})))()},setStatusFromObject:function(t,e){return et(regeneratorRuntime.mark((function n(){var r;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:r=t.commit,t.state,r("loadStatusFromServer",e);case 2:case"end":return n.stop()}}),n)})))()},setPredefinedMessage:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,i,c,l,d,m,f,p;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.rootState,i=t.state,c=e.messageId,l=e.clearAt,d=Y(l),n.next=5,Q(c,d);case 5:m=o.predefinedStatuses.predefinedStatuses.find((function(t){return t.id===c})),f=m.message,p=m.icon,s("setPredefinedMessage",{messageId:c,clearAt:d,message:f,icon:p}),(0,u.j8)("user_status:status.updated",{status:i.status,message:i.message,icon:i.icon,clearAt:i.clearAt,userId:null===(r=(0,a.ts)())||void 0===r?void 0:r.uid});case 9:case"end":return n.stop()}}),n)})))()},setCustomMessage:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,i,c,l,d;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.state,i=e.message,c=e.icon,l=e.clearAt,d=Y(l),n.next=5,W(i,c,d);case 5:s("setCustomMessage",{message:i,icon:c,clearAt:d}),(0,u.j8)("user_status:status.updated",{status:o.status,message:o.message,icon:o.icon,clearAt:o.clearAt,userId:null===(r=(0,a.ts)())||void 0===r?void 0:r.uid});case 7:case"end":return n.stop()}}),n)})))()},clearMessage:function(t){return et(regeneratorRuntime.mark((function e(){var n,r,s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=t.commit,s=t.state,e.next=3,J();case 3:r("clearMessage"),(0,u.j8)("user_status:status.updated",{status:s.status,message:s.message,icon:s.icon,clearAt:s.clearAt,userId:null===(n=(0,a.ts)())||void 0===n?void 0:n.uid});case 5:case"end":return e.stop()}}),e)})))()},reFetchStatusFromServer:function(t){return et(regeneratorRuntime.mark((function e(){var n,r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.commit,e.next=3,H();case 3:r=e.sent,n("loadStatusFromServer",r);case 5:case"end":return e.stop()}}),e)})))()},setStatusFromHeartbeat:function(t,e){return et(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:(0,t.commit)("loadStatusFromServer",e);case 2:case"end":return n.stop()}}),n)})))()},loadStatusFromInitialState:function(t){(0,t.commit)("loadStatusFromServer",(0,i.j)("user_status","status"))}}};s.ZP.use(R.ZP);var rt=new R.yh({modules:{predefinedStatuses:N,userStatus:nt},strict:!0}),st=r(75925),at=r.n(st);r.nc=btoa((0,a.IH)()),s.ZP.prototype.t=t,s.ZP.prototype.$t=t;var ot=document.getElementById("avatardiv-menu"),it=(0,i.j)("user_status","status"),ut={preloadedUserStatus:{message:it.message,icon:it.icon,status:it.status},user:ot.dataset.user,displayName:ot.dataset.displayname,disableMenu:!0,disableTooltip:!0};new(s.ZP.extend(at()))({propsData:ut}).$mount("#avatardiv-menu"),new s.ZP({el:'li[data-id="user_status-menuitem"]',name:"UserStatusRoot",render:function(t){return t(E)},store:rt}),document.addEventListener("DOMContentLoaded",(function(){OCA.Dashboard&&OCA.Dashboard.registerStatus("status",(function(t){return new(s.ZP.extend(E))({propsData:{inline:!0},store:rt}).$mount(t)}))}))},84387:function(t,e,n){"use strict";var r=n(20629),s=n(26932);function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function o(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}function i(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function u(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?i(Object(n),!0).forEach((function(e){c(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function c(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==a(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e);if("object"!==a(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===a(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}e.Z={computed:u(u({},(0,r.rn)({statusType:function(t){return t.userStatus.status},statusIsUserDefined:function(t){return t.userStatus.statusIsUserDefined},customIcon:function(t){return t.userStatus.icon},customMessage:function(t){return t.userStatus.message}})),{},{visibleMessage:function(){if(this.customIcon&&this.customMessage)return"".concat(this.customIcon," ").concat(this.customMessage);if(this.customMessage)return this.customMessage;if(this.statusIsUserDefined)switch(this.statusType){case"online":return this.$t("user_status","Online");case"away":return this.$t("user_status","Away");case"dnd":return this.$t("user_status","Do not disturb");case"invisible":return this.$t("user_status","Invisible");case"offline":return this.$t("user_status","Offline")}return this.$t("user_status","Set status")},statusIcon:function(){switch(this.statusType){case"online":return"icon-user-status-online";case"away":return"icon-user-status-away";case"dnd":return"icon-user-status-dnd";case"invisible":case"offline":return"icon-user-status-invisible"}return""}}),methods:{changeStatus:function(t){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,n.$store.dispatch("setStatus",{statusType:t});case 3:e.next=9;break;case 5:e.prev=5,e.t0=e.catch(0),(0,s.x2)(n.$t("user_status","There was an error saving the new status")),console.debug(e.t0);case 9:case"end":return e.stop()}}),e,null,[[0,5]])})),function(){var t=this,n=arguments;return new Promise((function(r,s){var a=e.apply(t,n);function i(t){o(a,r,s,i,u,"next",t)}function u(t){o(a,r,s,i,u,"throw",t)}i(void 0)}))})()}}}},64039:function(t,e,n){"use strict";n.d(e,{n:function(){return r}});var r=function(){return new Date}},48199:function(t,e,n){"use strict";var r=n(87537),s=n.n(r),a=n(23645),o=n.n(a)()(s());o.push([t.id,".user-status-menu-item__header[data-v-4d14b4f8]{display:flex !important;flex-direction:column !important;width:auto !important;height:66px !important;padding:10px 12px 5px 12px !important;align-items:flex-start !important;color:var(--color-main-text) !important}.user-status-menu-item__header[data-v-4d14b4f8]:focus-visible{padding:6px 8px 1px 8px !important;margin:2px !important}.user-status-menu-item__header[data-v-4d14b4f8]:not([href]){height:var(--header-menu-item-height) !important;color:var(--color-text-maxcontrast) !important;cursor:default !important}.user-status-menu-item__header:not([href]) *[data-v-4d14b4f8]{cursor:default !important}.user-status-menu-item__header[data-v-4d14b4f8]:not([href]):hover{background-color:rgba(0,0,0,0) !important}.user-status-menu-item__header-content[data-v-4d14b4f8]{display:inline-flex !important;font-weight:bold !important;gap:0 10px !important;width:auto}.user-status-menu-item__header-content-displayname[data-v-4d14b4f8]{width:auto}.user-status-menu-item__header-content-placeholder[data-v-4d14b4f8]{width:16px !important;height:24px !important;margin-right:10px !important;visibility:hidden !important}.user-status-menu-item__header span[data-v-4d14b4f8]{color:var(--color-text-maxcontrast) !important}.user-status-menu-item__toggle-icon[data-v-4d14b4f8]{width:16px;height:16px;margin-right:10px;opacity:1 !important;background-size:16px;vertical-align:middle !important}.user-status-menu-item__toggle--inline[data-v-4d14b4f8]{width:auto;min-width:44px;height:44px;margin:0;border:0;border-radius:var(--border-radius-pill);background-color:var(--color-main-background-blur);font-size:inherit;font-weight:normal;-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.user-status-menu-item__toggle--inline[data-v-4d14b4f8]:active,.user-status-menu-item__toggle--inline[data-v-4d14b4f8]:hover,.user-status-menu-item__toggle--inline[data-v-4d14b4f8]:focus{background-color:var(--color-background-hover)}.user-status-menu-item__toggle--inline[data-v-4d14b4f8]:focus{box-shadow:0 0 0 2px var(--color-main-text) !important}li[data-v-4d14b4f8]{list-style-type:none}","",{version:3,sources:["webpack://./apps/user_status/src/UserStatus.vue"],names:[],mappings:"AAEC,gDACC,uBAAA,CACA,gCAAA,CACA,qBAAA,CACA,sBAAA,CACA,qCAAA,CACA,iCAAA,CACA,uCAAA,CAEA,8DACC,kCAAA,CACA,qBAAA,CAGD,4DACC,gDAAA,CACA,8CAAA,CACA,yBAAA,CAEA,8DACC,yBAAA,CAGD,kEACC,yCAAA,CAIF,wDACC,8BAAA,CACA,2BAAA,CACA,qBAAA,CACA,UAAA,CAEA,oEACC,UAAA,CAGD,oEACC,qBAAA,CACA,sBAAA,CACA,4BAAA,CACA,4BAAA,CAIF,qDACC,8CAAA,CAKD,qDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CACA,gCAAA,CAID,wDACC,UAAA,CACA,cAAA,CACA,WAAA,CACA,QAAA,CACA,QAAA,CACA,uCAAA,CACA,kDAAA,CACA,iBAAA,CACA,kBAAA,CAEA,8CAAA,CACA,sCAAA,CAEA,2LAGC,8CAAA,CAED,8DACC,sDAAA,CAMJ,oBACC,oBAAA",sourcesContent:["\n.user-status-menu-item {\n\t&__header {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\twidth: auto !important;\n\t\theight: 44px * 1.5 !important;\n\t\tpadding: 10px 12px 5px 12px !important;\n\t\talign-items: flex-start !important;\n\t\tcolor: var(--color-main-text) !important;\n\n\t\t&:focus-visible {\n\t\t\tpadding: 6px 8px 1px 8px !important;\n\t\t\tmargin: 2px !important;\n\t\t}\n\n\t\t&:not([href]) {\n\t\t\theight: var(--header-menu-item-height) !important;\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t\tcursor: default !important;\n\n\t\t\t& * {\n\t\t\t\tcursor: default !important;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: transparent !important;\n\t\t\t}\n\t\t}\n\n\t\t&-content {\n\t\t\tdisplay: inline-flex !important;\n\t\t\tfont-weight: bold !important;\n\t\t\tgap: 0 10px !important;\n\t\t\twidth: auto;\n\n\t\t\t&-displayname {\n\t\t\t\twidth: auto;\n\t\t\t}\n\n\t\t\t&-placeholder {\n\t\t\t\twidth: 16px !important;\n\t\t\t\theight: 24px !important;\n\t\t\t\tmargin-right: 10px !important;\n\t\t\t\tvisibility: hidden !important;\n\t\t\t}\n\t\t}\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t}\n\t}\n\n\t&__toggle {\n\t\t&-icon {\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tmargin-right: 10px;\n\t\t\topacity: 1 !important;\n\t\t\tbackground-size: 16px;\n\t\t\tvertical-align: middle !important;\n\t\t}\n\n\t\t// In dashboard\n\t\t&--inline {\n\t\t\twidth: auto;\n\t\t\tmin-width: 44px;\n\t\t\theight: 44px;\n\t\t\tmargin: 0;\n\t\t\tborder: 0;\n\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\tbackground-color: var(--color-main-background-blur);\n\t\t\tfont-size: inherit;\n\t\t\tfont-weight: normal;\n\n\t\t\t-webkit-backdrop-filter: var(--background-blur);\n\t\t\tbackdrop-filter: var(--background-blur);\n\n\t\t\t&:active,\n\t\t\t&:hover,\n\t\t\t&:focus {\n\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t}\n\t\t\t&:focus {\n\t\t\t\tbox-shadow: 0 0 0 2px var(--color-main-text) !important;\n\t\t\t}\n\t\t}\n\t}\n}\n\nli {\n\tlist-style-type: none;\n}\n\n"],sourceRoot:""}]),e.Z=o},46700:function(t,e,n){var r={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":30094,"./hi.js":30094,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function s(t){var e=a(t);return n(e)}function a(t){if(!n.o(r,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return r[t]}s.keys=function(){return Object.keys(r)},s.resolve=a,t.exports=s,s.id=46700}},a={};function o(t){var e=a[t];if(void 0!==e)return e.exports;var n=a[t]={id:t,loaded:!1,exports:{}};return s[t].call(n.exports,n,n.exports,o),n.loaded=!0,n.exports}o.m=s,e=[],o.O=function(t,n,r,s){if(!n){var a=1/0;for(l=0;l<e.length;l++){n=e[l][0],r=e[l][1],s=e[l][2];for(var i=!0,u=0;u<n.length;u++)(!1&s||a>=s)&&Object.keys(o.O).every((function(t){return o.O[t](n[u])}))?n.splice(u--,1):(i=!1,s<a&&(a=s));if(i){e.splice(l--,1);var c=r();void 0!==c&&(t=c)}}return t}s=s||0;for(var l=e.length;l>0&&e[l-1][2]>s;l--)e[l]=e[l-1];e[l]=[n,r,s]},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,{a:e}),e},o.d=function(t,e){for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.f={},o.e=function(t){return Promise.all(Object.keys(o.f).reduce((function(e,n){return o.f[n](t,e),e}),[]))},o.u=function(t){return"user-status-modal-"+t+".js?v=417fd9cbcaff10be4a4e"},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n={},r="nextcloud:",o.l=function(t,e,s,a){if(n[t])n[t].push(e);else{var i,u;if(void 0!==s)for(var c=document.getElementsByTagName("script"),l=0;l<c.length;l++){var d=c[l];if(d.getAttribute("src")==t||d.getAttribute("data-webpack")==r+s){i=d;break}}i||(u=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,o.nc&&i.setAttribute("nonce",o.nc),i.setAttribute("data-webpack",r+s),i.src=t),n[t]=[e];var m=function(e,r){i.onerror=i.onload=null,clearTimeout(f);var s=n[t];if(delete n[t],i.parentNode&&i.parentNode.removeChild(i),s&&s.forEach((function(t){return t(r)})),e)return e(r)},f=setTimeout(m.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=m.bind(null,i.onerror),i.onload=m.bind(null,i.onload),u&&document.head.appendChild(i)}},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},o.j=2613,function(){var t;o.g.importScripts&&(t=o.g.location+"");var e=o.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");n.length&&(t=n[n.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=t}(),function(){o.b=document.baseURI||self.location.href;var t={2613:0};o.f.j=function(e,n){var r=o.o(t,e)?t[e]:void 0;if(0!==r)if(r)n.push(r[2]);else{var s=new Promise((function(n,s){r=t[e]=[n,s]}));n.push(r[2]=s);var a=o.p+o.u(e),i=new Error;o.l(a,(function(n){if(o.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var s=n&&("load"===n.type?"missing":n.type),a=n&&n.target&&n.target.src;i.message="Loading chunk "+e+" failed.\n("+s+": "+a+")",i.name="ChunkLoadError",i.type=s,i.request=a,r[1](i)}}),"chunk-"+e,e)}},o.O.j=function(e){return 0===t[e]};var e=function(e,n){var r,s,a=n[0],i=n[1],u=n[2],c=0;if(a.some((function(e){return 0!==t[e]}))){for(r in i)o.o(i,r)&&(o.m[r]=i[r]);if(u)var l=u(o)}for(e&&e(n);c<a.length;c++)s=a[c],o.o(t,s)&&t[s]&&t[s][0](),t[s]=0;return o.O(l)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),o.nc=void 0;var i=o.O(void 0,[7874],(function(){return o(1296)}));i=o.O(i)}(); -//# sourceMappingURL=user_status-menu.js.map?v=381e325aeb9ec231cd27
\ No newline at end of file +!function(){var e,n,r,s={1296:function(e,n,r){"use strict";var s=r(20144),a=r(45994),o=r(79753),i=r(79954),u=r(78595),c=r(20296),l=r.n(c),d=r(4820);function m(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}var f=function(){var t,e=(t=regeneratorRuntime.mark((function t(e){var n,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(0,o.generateOcsUrl)("apps/user_status/api/v1/heartbeat?format=json"),t.next=3,d.default.put(n,{status:e?"away":"online"});case 3:return r=t.sent,t.abrupt("return",r.data);case 5:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){m(a,r,s,o,i,"next",t)}function i(t){m(a,r,s,o,i,"throw",t)}o(void 0)}))});return function(t){return e.apply(this,arguments)}}(),p=r(84387);function v(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}var h=(0,i.j)("user_status","profileEnabled",!1).profileEnabled,g={name:"UserStatus",components:{SetStatusModal:function(){return Promise.all([r.e(7874),r.e(8299)]).then(r.bind(r,82637))}},mixins:[p.Z],props:{inline:{type:Boolean,default:!1}},data:function(){return{displayName:(0,a.ts)().displayName,heartbeatInterval:null,isAway:!1,isModalOpen:!1,loadingProfilePage:!1,mouseMoveListener:null,profileEnabled:h,setAwayTimeout:null}},computed:{elementTag:function(){return this.inline?"div":"li"},profilePageLink:function(){return this.profileEnabled?(0,o.generateUrl)("/u/{userId}",{userId:(0,a.ts)().uid}):null}},mounted:function(){var t=this;(0,u.Ld)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,u.Ld)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),this.$store.dispatch("loadStatusFromInitialState"),OC.config.session_keepalive&&(this.heartbeatInterval=setInterval(this._backgroundHeartbeat.bind(this),3e5),this.setAwayTimeout=function(){t.isAway=!0},this.mouseMoveListener=l()((function(){var e=t.isAway;t.isAway=!1,clearTimeout(t.setAwayTimeout),setTimeout(t.setAwayTimeout,12e4),e&&t._backgroundHeartbeat()}),2e3,!0),window.addEventListener("mousemove",this.mouseMoveListener,{capture:!0,passive:!0}),this._backgroundHeartbeat()),(0,u.Ld)("user_status:status.updated",this.handleUserStatusUpdated)},beforeDestroy:function(){(0,u.r1)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,u.r1)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),window.removeEventListener("mouseMove",this.mouseMoveListener),clearInterval(this.heartbeatInterval),(0,u.r1)("user_status:status.updated",this.handleUserStatusUpdated)},methods:{handleDisplayNameUpdate:function(t){this.displayName=t},handleProfileEnabledUpdate:function(t){this.profileEnabled=t},loadProfilePage:function(){this.profileEnabled&&(this.loadingProfilePage=!0)},openModal:function(){this.isModalOpen=!0},closeModal:function(){this.isModalOpen=!1},_backgroundHeartbeat:function(){var t,e=this;return(t=regeneratorRuntime.mark((function t(){var n,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,f(e.isAway);case 3:if(null==(n=t.sent)||!n.userId){t.next=8;break}e.$store.dispatch("setStatusFromHeartbeat",n),t.next=10;break;case 8:return t.next=10,e.$store.dispatch("reFetchStatusFromServer");case 10:t.next=15;break;case 12:t.prev=12,t.t0=t.catch(0),console.debug("Failed sending heartbeat, got: "+(null===(r=t.t0.response)||void 0===r?void 0:r.status));case 15:case"end":return t.stop()}}),t,null,[[0,12]])})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){v(a,r,s,o,i,"next",t)}function i(t){v(a,r,s,o,i,"throw",t)}o(void 0)}))})()},handleUserStatusUpdated:function(t){OC.getCurrentUser().uid===t.userId&&this.$store.dispatch("setStatusFromObject",{status:t.status,icon:t.icon,message:t.message})}}},A=g,b=r(93379),j=r.n(b),y=r(7795),w=r.n(y),C=r(90569),x=r.n(C),_=r(3565),k=r.n(_),S=r(19216),P=r.n(S),O=r(44589),I=r.n(O),D=r(48199),M={};M.styleTagTransform=I(),M.setAttributes=k(),M.insert=x().bind(null,"head"),M.domAPI=w(),M.insertStyleElement=P(),j()(D.Z,M),D.Z&&D.Z.locals&&D.Z.locals;var U=(0,r(51900).Z)(A,(function(){var t=this,e=t._self._c;return e(t.elementTag,{tag:"component"},[e("div",{staticClass:"user-status-menu-item"},[t.inline?t._e():e("a",{staticClass:"user-status-menu-item__header",attrs:{href:t.profilePageLink},on:{click:t.loadProfilePage}},[e("div",{staticClass:"user-status-menu-item__header-content"},[e("div",{staticClass:"user-status-menu-item__header-content-displayname"},[t._v(t._s(t.displayName))]),t._v(" "),t.loadingProfilePage?e("div",{staticClass:"icon-loading-small"}):e("div",{staticClass:"user-status-menu-item__header-content-placeholder"})]),t._v(" "),t.profileEnabled?e("div",[t._v("\n\t\t\t\t"+t._s(t.t("user_status","View profile"))+"\n\t\t\t")]):t._e()]),t._v(" "),e(t.inline?"button":"a",{tag:"toggle",staticClass:"user-status-menu-item__toggle",class:{"user-status-menu-item__toggle--inline":t.inline},attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.openModal.apply(null,arguments)}}},[e("span",{staticClass:"user-status-menu-item__toggle-icon",class:t.statusIcon}),t._v("\n\t\t\t"+t._s(t.visibleMessage)+"\n\t\t")])],1),t._v(" "),t.isModalOpen?e("SetStatusModal",{on:{close:t.closeModal}}):t._e()],1)}),[],!1,null,"4d14b4f8",null),E=U.exports,R=r(20629);function T(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}var z=function(){var t,e=(t=regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/predefined_statuses?format=json"),t.next=3,d.default.get(e);case 3:return n=t.sent,t.abrupt("return",n.data.ocs.data);case 5:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){T(a,r,s,o,i,"next",t)}function i(t){T(a,r,s,o,i,"throw",t)}o(void 0)}))});return function(){return e.apply(this,arguments)}}();function B(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return F(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?F(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,s=function(){};return{s:s,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,i=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return o=t.done,t},e:function(t){i=!0,a=t},f:function(){try{o||null==n.return||n.return()}finally{if(i)throw a}}}}function F(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function $(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}var L={loadAllPredefinedStatuses:function(t){return(e=regeneratorRuntime.mark((function e(){var n,r,s,a,o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.state,r=t.commit,!(n.predefinedStatuses.length>0)){e.next=3;break}return e.abrupt("return");case 3:return e.next=5,z();case 5:s=e.sent,a=B(s);try{for(a.s();!(o=a.n()).done;)i=o.value,r("addPredefinedStatus",i)}catch(t){a.e(t)}finally{a.f()}case 8:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,s){var a=e.apply(t,n);function o(t){$(a,r,s,o,i,"next",t)}function i(t){$(a,r,s,o,i,"throw",t)}o(void 0)}))})();var e}},N={state:{predefinedStatuses:[]},mutations:{addPredefinedStatus:function(t,e){t.predefinedStatuses.push(e)}},getters:{},actions:L};function Z(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}function q(t){return function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){Z(a,r,s,o,i,"next",t)}function i(t){Z(a,r,s,o,i,"throw",t)}o(void 0)}))}}var H=function(){var t=q(regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status"),t.next=3,d.default.get(e);case 3:return n=t.sent,t.abrupt("return",n.data.ocs.data);case 5:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),G=function(){var t=q(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/status"),t.next=3,d.default.put(n,{statusType:e});case 3:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),Q=function(){var t=q(regeneratorRuntime.mark((function t(e){var n,r,s=arguments;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=s.length>1&&void 0!==s[1]?s[1]:null,r=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message/predefined?format=json"),t.next=4,d.default.put(r,{messageId:e,clearAt:n});case 4:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),W=function(){var t=q(regeneratorRuntime.mark((function t(e){var n,r,s,a=arguments;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=a.length>1&&void 0!==a[1]?a[1]:null,r=a.length>2&&void 0!==a[2]?a[2]:null,s=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message/custom?format=json"),t.next=5,d.default.put(s,{message:e,statusIcon:n,clearAt:r});case 5:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),J=function(){var t=q(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message?format=json"),t.next=3,d.default.delete(e);case 3:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),K=r(64039),V=r(80351),X=r.n(V),Y=function(t){if(null===t)return null;var e=(0,K.n)();if("period"===t.type)return e.setSeconds(e.getSeconds()+t.time),Math.floor(e.getTime()/1e3);if("end-of"===t.type)switch(t.time){case"day":case"week":return Number(X()(e).endOf(t.time).format("X"))}return"_time"===t.type?t.time:null};function tt(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}function et(t){return function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){tt(a,r,s,o,i,"next",t)}function i(t){tt(a,r,s,o,i,"throw",t)}o(void 0)}))}}var nt={state:{status:null,statusIsUserDefined:null,message:null,icon:null,clearAt:null,messageIsPredefined:null,messageId:null},mutations:{setStatus:function(t,e){var n=e.statusType;t.status=n,t.statusIsUserDefined=!0},setPredefinedMessage:function(t,e){var n=e.messageId,r=e.clearAt,s=e.message,a=e.icon;t.messageId=n,t.messageIsPredefined=!0,t.message=s,t.icon=a,t.clearAt=r},setCustomMessage:function(t,e){var n=e.message,r=e.icon,s=e.clearAt;t.messageId=null,t.messageIsPredefined=!1,t.message=n,t.icon=r,t.clearAt=s},clearMessage:function(t){t.messageId=null,t.messageIsPredefined=!1,t.message=null,t.icon=null,t.clearAt=null},loadStatusFromServer:function(t,e){var n=e.status,r=e.statusIsUserDefined,s=e.message,a=e.icon,o=e.clearAt,i=e.messageIsPredefined,u=e.messageId;t.status=n,t.message=s,t.icon=a,void 0!==r&&(t.statusIsUserDefined=r),void 0!==o&&(t.clearAt=o),void 0!==i&&(t.messageIsPredefined=i),void 0!==u&&(t.messageId=u)}},getters:{},actions:{setStatus:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,i;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.state,i=e.statusType,n.next=4,G(i);case 4:s("setStatus",{statusType:i}),(0,u.j8)("user_status:status.updated",{status:o.status,message:o.message,icon:o.icon,clearAt:o.clearAt,userId:null===(r=(0,a.ts)())||void 0===r?void 0:r.uid});case 6:case"end":return n.stop()}}),n)})))()},setStatusFromObject:function(t,e){return et(regeneratorRuntime.mark((function n(){var r;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:r=t.commit,t.state,r("loadStatusFromServer",e);case 2:case"end":return n.stop()}}),n)})))()},setPredefinedMessage:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,i,c,l,d,m,f,p;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.rootState,i=t.state,c=e.messageId,l=e.clearAt,d=Y(l),n.next=5,Q(c,d);case 5:m=o.predefinedStatuses.predefinedStatuses.find((function(t){return t.id===c})),f=m.message,p=m.icon,s("setPredefinedMessage",{messageId:c,clearAt:d,message:f,icon:p}),(0,u.j8)("user_status:status.updated",{status:i.status,message:i.message,icon:i.icon,clearAt:i.clearAt,userId:null===(r=(0,a.ts)())||void 0===r?void 0:r.uid});case 9:case"end":return n.stop()}}),n)})))()},setCustomMessage:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,i,c,l,d;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.state,i=e.message,c=e.icon,l=e.clearAt,d=Y(l),n.next=5,W(i,c,d);case 5:s("setCustomMessage",{message:i,icon:c,clearAt:d}),(0,u.j8)("user_status:status.updated",{status:o.status,message:o.message,icon:o.icon,clearAt:o.clearAt,userId:null===(r=(0,a.ts)())||void 0===r?void 0:r.uid});case 7:case"end":return n.stop()}}),n)})))()},clearMessage:function(t){return et(regeneratorRuntime.mark((function e(){var n,r,s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=t.commit,s=t.state,e.next=3,J();case 3:r("clearMessage"),(0,u.j8)("user_status:status.updated",{status:s.status,message:s.message,icon:s.icon,clearAt:s.clearAt,userId:null===(n=(0,a.ts)())||void 0===n?void 0:n.uid});case 5:case"end":return e.stop()}}),e)})))()},reFetchStatusFromServer:function(t){return et(regeneratorRuntime.mark((function e(){var n,r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.commit,e.next=3,H();case 3:r=e.sent,n("loadStatusFromServer",r);case 5:case"end":return e.stop()}}),e)})))()},setStatusFromHeartbeat:function(t,e){return et(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:(0,t.commit)("loadStatusFromServer",e);case 2:case"end":return n.stop()}}),n)})))()},loadStatusFromInitialState:function(t){(0,t.commit)("loadStatusFromServer",(0,i.j)("user_status","status"))}}};s.ZP.use(R.ZP);var rt=new R.yh({modules:{predefinedStatuses:N,userStatus:nt},strict:!0}),st=r(75925),at=r.n(st);r.nc=btoa((0,a.IH)()),s.ZP.prototype.t=t,s.ZP.prototype.$t=t;var ot=document.getElementById("avatardiv-menu"),it=(0,i.j)("user_status","status"),ut={preloadedUserStatus:{message:it.message,icon:it.icon,status:it.status},user:ot.dataset.user,displayName:ot.dataset.displayname,disableMenu:!0,disableTooltip:!0};new(s.ZP.extend(at()))({propsData:ut}).$mount("#avatardiv-menu"),new s.ZP({el:'li[data-id="user_status-menuitem"]',name:"UserStatusRoot",render:function(t){return t(E)},store:rt}),document.addEventListener("DOMContentLoaded",(function(){OCA.Dashboard&&OCA.Dashboard.registerStatus("status",(function(t){return new(s.ZP.extend(E))({propsData:{inline:!0},store:rt}).$mount(t)}))}))},84387:function(t,e,n){"use strict";var r=n(20629),s=n(26932);function a(t){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}function o(t,e,n,r,s,a,o){try{var i=t[a](o),u=i.value}catch(t){return void n(t)}i.done?e(u):Promise.resolve(u).then(r,s)}function i(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function u(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?i(Object(n),!0).forEach((function(e){c(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function c(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==a(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e);if("object"!==a(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===a(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}e.Z={computed:u(u({},(0,r.rn)({statusType:function(t){return t.userStatus.status},statusIsUserDefined:function(t){return t.userStatus.statusIsUserDefined},customIcon:function(t){return t.userStatus.icon},customMessage:function(t){return t.userStatus.message}})),{},{visibleMessage:function(){if(this.customIcon&&this.customMessage)return"".concat(this.customIcon," ").concat(this.customMessage);if(this.customMessage)return this.customMessage;if(this.statusIsUserDefined)switch(this.statusType){case"online":return this.$t("user_status","Online");case"away":return this.$t("user_status","Away");case"dnd":return this.$t("user_status","Do not disturb");case"invisible":return this.$t("user_status","Invisible");case"offline":return this.$t("user_status","Offline")}return this.$t("user_status","Set status")},statusIcon:function(){switch(this.statusType){case"online":return"icon-user-status-online";case"away":return"icon-user-status-away";case"dnd":return"icon-user-status-dnd";case"invisible":case"offline":return"icon-user-status-invisible"}return""}}),methods:{changeStatus:function(t){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,n.$store.dispatch("setStatus",{statusType:t});case 3:e.next=9;break;case 5:e.prev=5,e.t0=e.catch(0),(0,s.x2)(n.$t("user_status","There was an error saving the new status")),console.debug(e.t0);case 9:case"end":return e.stop()}}),e,null,[[0,5]])})),function(){var t=this,n=arguments;return new Promise((function(r,s){var a=e.apply(t,n);function i(t){o(a,r,s,i,u,"next",t)}function u(t){o(a,r,s,i,u,"throw",t)}i(void 0)}))})()}}}},64039:function(t,e,n){"use strict";n.d(e,{n:function(){return r}});var r=function(){return new Date}},48199:function(t,e,n){"use strict";var r=n(87537),s=n.n(r),a=n(23645),o=n.n(a)()(s());o.push([t.id,".user-status-menu-item__header[data-v-4d14b4f8]{display:flex !important;flex-direction:column !important;width:auto !important;height:66px !important;padding:10px 12px 5px 12px !important;align-items:flex-start !important;color:var(--color-main-text) !important}.user-status-menu-item__header[data-v-4d14b4f8]:focus-visible{padding:6px 8px 1px 8px !important;margin:2px !important}.user-status-menu-item__header[data-v-4d14b4f8]:not([href]){height:var(--header-menu-item-height) !important;color:var(--color-text-maxcontrast) !important;cursor:default !important}.user-status-menu-item__header:not([href]) *[data-v-4d14b4f8]{cursor:default !important}.user-status-menu-item__header[data-v-4d14b4f8]:not([href]):hover{background-color:rgba(0,0,0,0) !important}.user-status-menu-item__header-content[data-v-4d14b4f8]{display:inline-flex !important;font-weight:bold !important;gap:0 10px !important;width:auto}.user-status-menu-item__header-content-displayname[data-v-4d14b4f8]{width:auto}.user-status-menu-item__header-content-placeholder[data-v-4d14b4f8]{width:16px !important;height:24px !important;margin-right:10px !important;visibility:hidden !important}.user-status-menu-item__header span[data-v-4d14b4f8]{color:var(--color-text-maxcontrast) !important}.user-status-menu-item__toggle-icon[data-v-4d14b4f8]{width:16px;height:16px;margin-right:10px;opacity:1 !important;background-size:16px;vertical-align:middle !important}.user-status-menu-item__toggle--inline[data-v-4d14b4f8]{width:auto;min-width:44px;height:44px;margin:0;border:0;border-radius:var(--border-radius-pill);background-color:var(--color-main-background-blur);font-size:inherit;font-weight:normal;-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.user-status-menu-item__toggle--inline[data-v-4d14b4f8]:active,.user-status-menu-item__toggle--inline[data-v-4d14b4f8]:hover,.user-status-menu-item__toggle--inline[data-v-4d14b4f8]:focus{background-color:var(--color-background-hover)}.user-status-menu-item__toggle--inline[data-v-4d14b4f8]:focus{box-shadow:0 0 0 2px var(--color-main-text) !important}li[data-v-4d14b4f8]{list-style-type:none}","",{version:3,sources:["webpack://./apps/user_status/src/UserStatus.vue"],names:[],mappings:"AAEC,gDACC,uBAAA,CACA,gCAAA,CACA,qBAAA,CACA,sBAAA,CACA,qCAAA,CACA,iCAAA,CACA,uCAAA,CAEA,8DACC,kCAAA,CACA,qBAAA,CAGD,4DACC,gDAAA,CACA,8CAAA,CACA,yBAAA,CAEA,8DACC,yBAAA,CAGD,kEACC,yCAAA,CAIF,wDACC,8BAAA,CACA,2BAAA,CACA,qBAAA,CACA,UAAA,CAEA,oEACC,UAAA,CAGD,oEACC,qBAAA,CACA,sBAAA,CACA,4BAAA,CACA,4BAAA,CAIF,qDACC,8CAAA,CAKD,qDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CACA,gCAAA,CAID,wDACC,UAAA,CACA,cAAA,CACA,WAAA,CACA,QAAA,CACA,QAAA,CACA,uCAAA,CACA,kDAAA,CACA,iBAAA,CACA,kBAAA,CAEA,8CAAA,CACA,sCAAA,CAEA,2LAGC,8CAAA,CAED,8DACC,sDAAA,CAMJ,oBACC,oBAAA",sourcesContent:["\n.user-status-menu-item {\n\t&__header {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\twidth: auto !important;\n\t\theight: 44px * 1.5 !important;\n\t\tpadding: 10px 12px 5px 12px !important;\n\t\talign-items: flex-start !important;\n\t\tcolor: var(--color-main-text) !important;\n\n\t\t&:focus-visible {\n\t\t\tpadding: 6px 8px 1px 8px !important;\n\t\t\tmargin: 2px !important;\n\t\t}\n\n\t\t&:not([href]) {\n\t\t\theight: var(--header-menu-item-height) !important;\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t\tcursor: default !important;\n\n\t\t\t& * {\n\t\t\t\tcursor: default !important;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: transparent !important;\n\t\t\t}\n\t\t}\n\n\t\t&-content {\n\t\t\tdisplay: inline-flex !important;\n\t\t\tfont-weight: bold !important;\n\t\t\tgap: 0 10px !important;\n\t\t\twidth: auto;\n\n\t\t\t&-displayname {\n\t\t\t\twidth: auto;\n\t\t\t}\n\n\t\t\t&-placeholder {\n\t\t\t\twidth: 16px !important;\n\t\t\t\theight: 24px !important;\n\t\t\t\tmargin-right: 10px !important;\n\t\t\t\tvisibility: hidden !important;\n\t\t\t}\n\t\t}\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t}\n\t}\n\n\t&__toggle {\n\t\t&-icon {\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tmargin-right: 10px;\n\t\t\topacity: 1 !important;\n\t\t\tbackground-size: 16px;\n\t\t\tvertical-align: middle !important;\n\t\t}\n\n\t\t// In dashboard\n\t\t&--inline {\n\t\t\twidth: auto;\n\t\t\tmin-width: 44px;\n\t\t\theight: 44px;\n\t\t\tmargin: 0;\n\t\t\tborder: 0;\n\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\tbackground-color: var(--color-main-background-blur);\n\t\t\tfont-size: inherit;\n\t\t\tfont-weight: normal;\n\n\t\t\t-webkit-backdrop-filter: var(--background-blur);\n\t\t\tbackdrop-filter: var(--background-blur);\n\n\t\t\t&:active,\n\t\t\t&:hover,\n\t\t\t&:focus {\n\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t}\n\t\t\t&:focus {\n\t\t\t\tbox-shadow: 0 0 0 2px var(--color-main-text) !important;\n\t\t\t}\n\t\t}\n\t}\n}\n\nli {\n\tlist-style-type: none;\n}\n\n"],sourceRoot:""}]),e.Z=o},46700:function(t,e,n){var r={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":30094,"./hi.js":30094,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function s(t){var e=a(t);return n(e)}function a(t){if(!n.o(r,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return r[t]}s.keys=function(){return Object.keys(r)},s.resolve=a,t.exports=s,s.id=46700}},a={};function o(t){var e=a[t];if(void 0!==e)return e.exports;var n=a[t]={id:t,loaded:!1,exports:{}};return s[t].call(n.exports,n,n.exports,o),n.loaded=!0,n.exports}o.m=s,e=[],o.O=function(t,n,r,s){if(!n){var a=1/0;for(l=0;l<e.length;l++){n=e[l][0],r=e[l][1],s=e[l][2];for(var i=!0,u=0;u<n.length;u++)(!1&s||a>=s)&&Object.keys(o.O).every((function(t){return o.O[t](n[u])}))?n.splice(u--,1):(i=!1,s<a&&(a=s));if(i){e.splice(l--,1);var c=r();void 0!==c&&(t=c)}}return t}s=s||0;for(var l=e.length;l>0&&e[l-1][2]>s;l--)e[l]=e[l-1];e[l]=[n,r,s]},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,{a:e}),e},o.d=function(t,e){for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.f={},o.e=function(t){return Promise.all(Object.keys(o.f).reduce((function(e,n){return o.f[n](t,e),e}),[]))},o.u=function(t){return"user-status-modal-"+t+".js?v=85e11c4259cd858bd625"},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n={},r="nextcloud:",o.l=function(t,e,s,a){if(n[t])n[t].push(e);else{var i,u;if(void 0!==s)for(var c=document.getElementsByTagName("script"),l=0;l<c.length;l++){var d=c[l];if(d.getAttribute("src")==t||d.getAttribute("data-webpack")==r+s){i=d;break}}i||(u=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,o.nc&&i.setAttribute("nonce",o.nc),i.setAttribute("data-webpack",r+s),i.src=t),n[t]=[e];var m=function(e,r){i.onerror=i.onload=null,clearTimeout(f);var s=n[t];if(delete n[t],i.parentNode&&i.parentNode.removeChild(i),s&&s.forEach((function(t){return t(r)})),e)return e(r)},f=setTimeout(m.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=m.bind(null,i.onerror),i.onload=m.bind(null,i.onload),u&&document.head.appendChild(i)}},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},o.j=2613,function(){var t;o.g.importScripts&&(t=o.g.location+"");var e=o.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");n.length&&(t=n[n.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=t}(),function(){o.b=document.baseURI||self.location.href;var t={2613:0};o.f.j=function(e,n){var r=o.o(t,e)?t[e]:void 0;if(0!==r)if(r)n.push(r[2]);else{var s=new Promise((function(n,s){r=t[e]=[n,s]}));n.push(r[2]=s);var a=o.p+o.u(e),i=new Error;o.l(a,(function(n){if(o.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var s=n&&("load"===n.type?"missing":n.type),a=n&&n.target&&n.target.src;i.message="Loading chunk "+e+" failed.\n("+s+": "+a+")",i.name="ChunkLoadError",i.type=s,i.request=a,r[1](i)}}),"chunk-"+e,e)}},o.O.j=function(e){return 0===t[e]};var e=function(e,n){var r,s,a=n[0],i=n[1],u=n[2],c=0;if(a.some((function(e){return 0!==t[e]}))){for(r in i)o.o(i,r)&&(o.m[r]=i[r]);if(u)var l=u(o)}for(e&&e(n);c<a.length;c++)s=a[c],o.o(t,s)&&t[s]&&t[s][0](),t[s]=0;return o.O(l)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),o.nc=void 0;var i=o.O(void 0,[7874],(function(){return o(1296)}));i=o.O(i)}(); +//# sourceMappingURL=user_status-menu.js.map?v=fdcf36221a616a62e0c3
\ No newline at end of file diff --git a/dist/user_status-menu.js.map b/dist/user_status-menu.js.map index 0defeb833ce..b5f78f2cd47 100644 --- a/dist/user_status-menu.js.map +++ b/dist/user_status-menu.js.map @@ -1 +1 @@ -{"version":3,"file":"user_status-menu.js?v=381e325aeb9ec231cd27","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/user_status/src/services/heartbeatService.js","webpack:///nextcloud/apps/user_status/src/UserStatus.vue","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?16b2","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?d74a","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?e2b3","webpack:///nextcloud/apps/user_status/src/services/predefinedStatusService.js","webpack:///nextcloud/apps/user_status/src/store/predefinedStatuses.js","webpack:///nextcloud/apps/user_status/src/services/statusService.js","webpack:///nextcloud/apps/user_status/src/services/clearAtService.js","webpack:///nextcloud/apps/user_status/src/store/userStatus.js","webpack:///nextcloud/apps/user_status/src/store/index.js","webpack:///nextcloud/apps/user_status/src/menu.js","webpack:///nextcloud/apps/user_status/src/mixins/OnlineStatusMixin.js","webpack:///nextcloud/apps/user_status/src/services/dateService.js","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=style&index=0&id=4d14b4f8&prod&lang=scss&scoped=true&","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","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/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","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};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Sends a heartbeat\n *\n * @param {boolean} isAway Whether or not the user is active\n * @return {Promise<void>}\n */\nconst sendHeartbeat = async (isAway) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/heartbeat?format=json')\n\tconst response = await HttpClient.put(url, {\n\t\tstatus: isAway ? 'away' : 'online',\n\t})\n\treturn response.data\n}\n\nexport {\n\tsendHeartbeat,\n}\n","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\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\n<template>\n\t<component :is=\"elementTag\">\n\t\t<div class=\"user-status-menu-item\">\n\t\t\t<!-- Username display -->\n\t\t\t<a v-if=\"!inline\"\n\t\t\t\tclass=\"user-status-menu-item__header\"\n\t\t\t\t:href=\"profilePageLink\"\n\t\t\t\t@click=\"loadProfilePage\">\n\t\t\t\t<div class=\"user-status-menu-item__header-content\">\n\t\t\t\t\t<div class=\"user-status-menu-item__header-content-displayname\">{{ displayName }}</div>\n\t\t\t\t\t<div v-if=\"!loadingProfilePage\" class=\"user-status-menu-item__header-content-placeholder\" />\n\t\t\t\t\t<div v-else class=\"icon-loading-small\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"profileEnabled\">\n\t\t\t\t\t{{ t('user_status', 'View profile') }}\n\t\t\t\t</div>\n\t\t\t</a>\n\n\t\t\t<!-- Status modal toggle -->\n\t\t\t<toggle :is=\"inline ? 'button' : 'a'\"\n\t\t\t\t:class=\"{'user-status-menu-item__toggle--inline': inline}\"\n\t\t\t\tclass=\"user-status-menu-item__toggle\"\n\t\t\t\thref=\"#\"\n\t\t\t\t@click.prevent.stop=\"openModal\">\n\t\t\t\t<span :class=\"statusIcon\" class=\"user-status-menu-item__toggle-icon\" />\n\t\t\t\t{{ visibleMessage }}\n\t\t\t</toggle>\n\t\t</div>\n\n\t\t<!-- Status management modal -->\n\t\t<SetStatusModal v-if=\"isModalOpen\"\n\t\t\t@close=\"closeModal\" />\n\t</component>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport debounce from 'debounce'\n\nimport { sendHeartbeat } from './services/heartbeatService'\nimport OnlineStatusMixin from './mixins/OnlineStatusMixin'\n\nconst { profileEnabled } = loadState('user_status', 'profileEnabled', false)\n\nexport default {\n\tname: 'UserStatus',\n\n\tcomponents: {\n\t\tSetStatusModal: () => import(/* webpackChunkName: 'user-status-modal' */'./components/SetStatusModal'),\n\t},\n\tmixins: [OnlineStatusMixin],\n\n\tprops: {\n\t\tinline: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdisplayName: getCurrentUser().displayName,\n\t\t\theartbeatInterval: null,\n\t\t\tisAway: false,\n\t\t\tisModalOpen: false,\n\t\t\tloadingProfilePage: false,\n\t\t\tmouseMoveListener: null,\n\t\t\tprofileEnabled,\n\t\t\tsetAwayTimeout: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\telementTag() {\n\t\t\treturn this.inline ? 'div' : 'li'\n\t\t},\n\t\t/**\n\t\t * The profile page link\n\t\t *\n\t\t * @return {string | null}\n\t\t */\n\t\tprofilePageLink() {\n\t\t\tif (this.profileEnabled) {\n\t\t\t\treturn generateUrl('/u/{userId}', { userId: getCurrentUser().uid })\n\t\t\t}\n\t\t\t// Since an anchor element is used rather than a button,\n\t\t\t// this hack removes href if the profile is disabled so that disabling pointer-events is not needed to prevent a click from opening a page\n\t\t\t// and to allow the hover event for styling\n\t\t\treturn null\n\t\t},\n\t},\n\n\t/**\n\t * Loads the current user's status from initial state\n\t * and stores it in Vuex\n\t */\n\tmounted() {\n\t\tsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\n\t\tthis.$store.dispatch('loadStatusFromInitialState')\n\n\t\tif (OC.config.session_keepalive) {\n\t\t\t// Send the latest status to the server every 5 minutes\n\t\t\tthis.heartbeatInterval = setInterval(this._backgroundHeartbeat.bind(this), 1000 * 60 * 5)\n\t\t\tthis.setAwayTimeout = () => {\n\t\t\t\tthis.isAway = true\n\t\t\t}\n\t\t\t// Catch mouse movements, but debounce to once every 30 seconds\n\t\t\tthis.mouseMoveListener = debounce(() => {\n\t\t\t\tconst wasAway = this.isAway\n\t\t\t\tthis.isAway = false\n\t\t\t\t// Reset the two minute counter\n\t\t\t\tclearTimeout(this.setAwayTimeout)\n\t\t\t\t// If the user did not move the mouse within two minutes,\n\t\t\t\t// mark them as away\n\t\t\t\tsetTimeout(this.setAwayTimeout, 1000 * 60 * 2)\n\n\t\t\t\tif (wasAway) {\n\t\t\t\t\tthis._backgroundHeartbeat()\n\t\t\t\t}\n\t\t\t}, 1000 * 2, true)\n\t\t\twindow.addEventListener('mousemove', this.mouseMoveListener, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: true,\n\t\t\t})\n\n\t\t\tthis._backgroundHeartbeat()\n\t\t}\n\t\tsubscribe('user_status:status.updated', this.handleUserStatusUpdated)\n\t},\n\n\t/**\n\t * Some housekeeping before destroying the component\n\t */\n\tbeforeDestroy() {\n\t\tunsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tunsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\t\twindow.removeEventListener('mouseMove', this.mouseMoveListener)\n\t\tclearInterval(this.heartbeatInterval)\n\t\tunsubscribe('user_status:status.updated', this.handleUserStatusUpdated)\n\t},\n\n\tmethods: {\n\t\thandleDisplayNameUpdate(displayName) {\n\t\t\tthis.displayName = displayName\n\t\t},\n\n\t\thandleProfileEnabledUpdate(profileEnabled) {\n\t\t\tthis.profileEnabled = profileEnabled\n\t\t},\n\n\t\tloadProfilePage() {\n\t\t\tif (this.profileEnabled) {\n\t\t\t\tthis.loadingProfilePage = true\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Opens the modal to set a custom status\n\t\t */\n\t\topenModal() {\n\t\t\tthis.isModalOpen = true\n\t\t},\n\t\t/**\n\t\t * Closes the modal\n\t\t */\n\t\tcloseModal() {\n\t\t\tthis.isModalOpen = false\n\t\t},\n\n\t\t/**\n\t\t * Sends the status heartbeat to the server\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @private\n\t\t */\n\t\tasync _backgroundHeartbeat() {\n\t\t\ttry {\n\t\t\t\tconst status = await sendHeartbeat(this.isAway)\n\t\t\t\tif (status?.userId) {\n\t\t\t\t\tthis.$store.dispatch('setStatusFromHeartbeat', status)\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$store.dispatch('reFetchStatusFromServer')\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.debug('Failed sending heartbeat, got: ' + error.response?.status)\n\t\t\t}\n\t\t},\n\t\thandleUserStatusUpdated(state) {\n\t\t\tif (OC.getCurrentUser().uid === state.userId) {\n\t\t\t\tthis.$store.dispatch('setStatusFromObject', {\n\t\t\t\t\tstatus: state.status,\n\t\t\t\t\ticon: state.icon,\n\t\t\t\t\tmessage: state.message,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.user-status-menu-item {\n\t&__header {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\twidth: auto !important;\n\t\theight: 44px * 1.5 !important;\n\t\tpadding: 10px 12px 5px 12px !important;\n\t\talign-items: flex-start !important;\n\t\tcolor: var(--color-main-text) !important;\n\n\t\t&:focus-visible {\n\t\t\tpadding: 6px 8px 1px 8px !important;\n\t\t\tmargin: 2px !important;\n\t\t}\n\n\t\t&:not([href]) {\n\t\t\theight: var(--header-menu-item-height) !important;\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t\tcursor: default !important;\n\n\t\t\t& * {\n\t\t\t\tcursor: default !important;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: transparent !important;\n\t\t\t}\n\t\t}\n\n\t\t&-content {\n\t\t\tdisplay: inline-flex !important;\n\t\t\tfont-weight: bold !important;\n\t\t\tgap: 0 10px !important;\n\t\t\twidth: auto;\n\n\t\t\t&-displayname {\n\t\t\t\twidth: auto;\n\t\t\t}\n\n\t\t\t&-placeholder {\n\t\t\t\twidth: 16px !important;\n\t\t\t\theight: 24px !important;\n\t\t\t\tmargin-right: 10px !important;\n\t\t\t\tvisibility: hidden !important;\n\t\t\t}\n\t\t}\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t}\n\t}\n\n\t&__toggle {\n\t\t&-icon {\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tmargin-right: 10px;\n\t\t\topacity: 1 !important;\n\t\t\tbackground-size: 16px;\n\t\t\tvertical-align: middle !important;\n\t\t}\n\n\t\t// In dashboard\n\t\t&--inline {\n\t\t\twidth: auto;\n\t\t\tmin-width: 44px;\n\t\t\theight: 44px;\n\t\t\tmargin: 0;\n\t\t\tborder: 0;\n\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\tbackground-color: var(--color-main-background-blur);\n\t\t\tfont-size: inherit;\n\t\t\tfont-weight: normal;\n\n\t\t\t-webkit-backdrop-filter: var(--background-blur);\n\t\t\tbackdrop-filter: var(--background-blur);\n\n\t\t\t&:active,\n\t\t\t&:hover,\n\t\t\t&:focus {\n\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t}\n\t\t\t&:focus {\n\t\t\t\tbox-shadow: 0 0 0 2px var(--color-main-text) !important;\n\t\t\t}\n\t\t}\n\t}\n}\n\nli {\n\tlist-style-type: none;\n}\n\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.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!./UserStatus.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!./UserStatus.vue?vue&type=style&index=0&id=4d14b4f8&prod&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!./UserStatus.vue?vue&type=style&index=0&id=4d14b4f8&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserStatus.vue?vue&type=template&id=4d14b4f8&scoped=true&\"\nimport script from \"./UserStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./UserStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserStatus.vue?vue&type=style&index=0&id=4d14b4f8&prod&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 \"4d14b4f8\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.elementTag,{tag:\"component\"},[_c('div',{staticClass:\"user-status-menu-item\"},[(!_vm.inline)?_c('a',{staticClass:\"user-status-menu-item__header\",attrs:{\"href\":_vm.profilePageLink},on:{\"click\":_vm.loadProfilePage}},[_c('div',{staticClass:\"user-status-menu-item__header-content\"},[_c('div',{staticClass:\"user-status-menu-item__header-content-displayname\"},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),(!_vm.loadingProfilePage)?_c('div',{staticClass:\"user-status-menu-item__header-content-placeholder\"}):_c('div',{staticClass:\"icon-loading-small\"})]),_vm._v(\" \"),(_vm.profileEnabled)?_c('div',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('user_status', 'View profile'))+\"\\n\\t\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c(_vm.inline ? 'button' : 'a',{tag:\"toggle\",staticClass:\"user-status-menu-item__toggle\",class:{'user-status-menu-item__toggle--inline': _vm.inline},attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openModal.apply(null, arguments)}}},[_c('span',{staticClass:\"user-status-menu-item__toggle-icon\",class:_vm.statusIcon}),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.visibleMessage)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.isModalOpen)?_c('SetStatusModal',{on:{\"close\":_vm.closeModal}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches all predefined statuses from the server\n *\n * @return {Promise<void>}\n */\nconst fetchAllPredefinedStatuses = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/predefined_statuses?format=json')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\nexport {\n\tfetchAllPredefinedStatuses,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 { fetchAllPredefinedStatuses } from '../services/predefinedStatusService'\n\nconst state = {\n\tpredefinedStatuses: [],\n}\n\nconst mutations = {\n\n\t/**\n\t * Adds a predefined status to the state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} status The status to add\n\t */\n\taddPredefinedStatus(state, status) {\n\t\tstate.predefinedStatuses.push(status)\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\n\t/**\n\t * Loads all predefined statuses from the server\n\t *\n\t * @param {object} vuex The Vuex components\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state -\n\t */\n\tasync loadAllPredefinedStatuses({ state, commit }) {\n\t\tif (state.predefinedStatuses.length > 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst statuses = await fetchAllPredefinedStatuses()\n\t\tfor (const status of statuses) {\n\t\t\tcommit('addPredefinedStatus', status)\n\t\t}\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches the current user-status\n *\n * @return {Promise<object>}\n */\nconst fetchCurrentStatus = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\n/**\n * Sets the status\n *\n * @param {string} statusType The status (online / away / dnd / invisible)\n * @return {Promise<void>}\n */\nconst setStatus = async (statusType) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/status')\n\tawait HttpClient.put(url, {\n\t\tstatusType,\n\t})\n}\n\n/**\n * Sets a message based on our predefined statuses\n *\n * @param {string} messageId The id of the message, taken from predefined status service\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise<void>}\n */\nconst setPredefinedMessage = async (messageId, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/predefined?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessageId,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Sets a custom message\n *\n * @param {string} message The user-defined message\n * @param {string | null} statusIcon The user-defined icon\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise<void>}\n */\nconst setCustomMessage = async (message, statusIcon = null, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/custom?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessage,\n\t\tstatusIcon,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Clears the current status of the user\n *\n * @return {Promise<void>}\n */\nconst clearMessage = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message?format=json')\n\tawait HttpClient.delete(url)\n}\n\nexport {\n\tfetchCurrentStatus,\n\tsetStatus,\n\tsetCustomMessage,\n\tsetPredefinedMessage,\n\tclearMessage,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 {\n\tdateFactory,\n} from './dateService'\nimport moment from '@nextcloud/moment'\n\n/**\n * Calculates the actual clearAt timestamp\n *\n * @param {object | null} clearAt The clear-at config\n * @return {number | null}\n */\nconst getTimestampForClearAt = (clearAt) => {\n\tif (clearAt === null) {\n\t\treturn null\n\t}\n\n\tconst date = dateFactory()\n\n\tif (clearAt.type === 'period') {\n\t\tdate.setSeconds(date.getSeconds() + clearAt.time)\n\t\treturn Math.floor(date.getTime() / 1000)\n\t}\n\tif (clearAt.type === 'end-of') {\n\t\tswitch (clearAt.time) {\n\t\tcase 'day':\n\t\tcase 'week':\n\t\t\treturn Number(moment(date).endOf(clearAt.time).format('X'))\n\t\t}\n\t}\n\t// This is not an officially supported type\n\t// but only used internally to show the remaining time\n\t// in the Set Status Modal\n\tif (clearAt.type === '_time') {\n\t\treturn clearAt.time\n\t}\n\n\treturn null\n}\n\nexport {\n\tgetTimestampForClearAt,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 {\n\tfetchCurrentStatus,\n\tsetStatus,\n\tsetPredefinedMessage,\n\tsetCustomMessage,\n\tclearMessage,\n} from '../services/statusService'\nimport { loadState } from '@nextcloud/initial-state'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getTimestampForClearAt } from '../services/clearAtService'\nimport { emit } from '@nextcloud/event-bus'\n\nconst state = {\n\t// Status (online / away / dnd / invisible / offline)\n\tstatus: null,\n\t// Whether or not the status is user-defined\n\tstatusIsUserDefined: null,\n\t// A custom message set by the user\n\tmessage: null,\n\t// The icon selected by the user\n\ticon: null,\n\t// When to automatically clean the status\n\tclearAt: null,\n\t// Whether or not the message is predefined\n\t// (and can automatically be translated by Nextcloud)\n\tmessageIsPredefined: null,\n\t// The id of the message in case it's predefined\n\tmessageId: null,\n}\n\nconst mutations = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.statusType The new status type\n\t */\n\tsetStatus(state, { statusType }) {\n\t\tstate.status = statusType\n\t\tstate.statusIsUserDefined = true\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {number | null} data.clearAt When to automatically clear the status\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t */\n\tsetPredefinedMessage(state, { messageId, clearAt, message, icon }) {\n\t\tstate.messageId = messageId\n\t\tstate.messageIsPredefined = true\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t */\n\tsetCustomMessage(state, { message, icon, clearAt }) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} state The Vuex state\n\t */\n\tclearMessage(state) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = null\n\t\tstate.icon = null\n\t\tstate.clearAt = null\n\t},\n\n\t/**\n\t * Loads the status from initial state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.status The status type\n\t * @param {boolean} data.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t * @param {boolean} data.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} data.messageId The id of the predefined message\n\t */\n\tloadStatusFromServer(state, { status, statusIsUserDefined, message, icon, clearAt, messageIsPredefined, messageId }) {\n\t\tstate.status = status\n\t\tstate.message = message\n\t\tstate.icon = icon\n\n\t\t// Don't overwrite certain values if the refreshing comes in via short updates\n\t\t// E.g. from talk participant list which only has the status, message and icon\n\t\tif (typeof statusIsUserDefined !== 'undefined') {\n\t\t\tstate.statusIsUserDefined = statusIsUserDefined\n\t\t}\n\t\tif (typeof clearAt !== 'undefined') {\n\t\t\tstate.clearAt = clearAt\n\t\t}\n\t\tif (typeof messageIsPredefined !== 'undefined') {\n\t\t\tstate.messageIsPredefined = messageIsPredefined\n\t\t}\n\t\tif (typeof messageId !== 'undefined') {\n\t\t\tstate.messageId = messageId\n\t\t}\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.statusType The new status type\n\t * @return {Promise<void>}\n\t */\n\tasync setStatus({ commit, state }, { statusType }) {\n\t\tawait setStatus(statusType)\n\t\tcommit('setStatus', { statusType })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Update status from 'user_status:status.updated' update.\n\t * This doesn't trigger another 'user_status:status.updated'\n\t * event.\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {string} status The new status\n\t * @return {Promise<void>}\n\t */\n\tasync setStatusFromObject({ commit, state }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} vuex.rootState The Vuex root state\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise<void>}\n\t */\n\tasync setPredefinedMessage({ commit, rootState, state }, { messageId, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setPredefinedMessage(messageId, resolvedClearAt)\n\t\tconst status = rootState.predefinedStatuses.predefinedStatuses.find((status) => status.id === messageId)\n\t\tconst { message, icon } = status\n\n\t\tcommit('setPredefinedMessage', { messageId, clearAt: resolvedClearAt, message, icon })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise<void>}\n\t */\n\tasync setCustomMessage({ commit, state }, { message, icon, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setCustomMessage(message, icon, resolvedClearAt)\n\t\tcommit('setCustomMessage', { message, icon, clearAt: resolvedClearAt })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @return {Promise<void>}\n\t */\n\tasync clearMessage({ commit, state }) {\n\t\tawait clearMessage()\n\t\tcommit('clearMessage')\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Re-fetches the status from the server\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @return {Promise<void>}\n\t */\n\tasync reFetchStatusFromServer({ commit }) {\n\t\tconst status = await fetchCurrentStatus()\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Stores the status we got in the reply of the heartbeat\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} status The data destructuring object\n\t * @param {string} status.status The status type\n\t * @param {boolean} status.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} status.message The message\n\t * @param {string} status.icon The icon\n\t * @param {number} status.clearAt When to automatically clear the status\n\t * @param {boolean} status.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} status.messageId The id of the predefined message\n\t * @return {Promise<void>}\n\t */\n\tasync setStatusFromHeartbeat({ commit }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Loads the server from the initial state\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t */\n\tloadStatusFromInitialState({ commit }) {\n\t\tconst status = loadState('user_status', 'status')\n\t\tcommit('loadStatusFromServer', status)\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 Vuex, { Store } from 'vuex'\nimport predefinedStatuses from './predefinedStatuses'\nimport userStatus from './userStatus'\n\nVue.use(Vuex)\n\nexport default new Store({\n\tmodules: {\n\t\tpredefinedStatuses,\n\t\tuserStatus,\n\t},\n\tstrict: true,\n})\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\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 { getRequestToken } from '@nextcloud/auth'\nimport UserStatus from './UserStatus'\nimport store from './store'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar'\nimport { loadState } from '@nextcloud/initial-state'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\nVue.prototype.t = t\nVue.prototype.$t = t\n\nconst avatarDiv = document.getElementById('avatardiv-menu')\nconst userStatusData = loadState('user_status', 'status')\nconst propsData = {\n\tpreloadedUserStatus: {\n\t\tmessage: userStatusData.message,\n\t\ticon: userStatusData.icon,\n\t\tstatus: userStatusData.status,\n\t},\n\tuser: avatarDiv.dataset.user,\n\tdisplayName: avatarDiv.dataset.displayname,\n\tdisableMenu: true,\n\tdisableTooltip: true,\n}\n\nconst NcAvatarInMenu = Vue.extend(NcAvatar)\nnew NcAvatarInMenu({ propsData }).$mount('#avatardiv-menu')\n\n// Register settings menu entry\nexport default new Vue({\n\tel: 'li[data-id=\"user_status-menuitem\"]',\n\t// eslint-disable-next-line vue/match-component-file-name\n\tname: 'UserStatusRoot',\n\trender: h => h(UserStatus),\n\tstore,\n})\n\n// Register dashboard status\ndocument.addEventListener('DOMContentLoaded', function() {\n\tif (!OCA.Dashboard) {\n\t\treturn\n\t}\n\n\tOCA.Dashboard.registerStatus('status', (el) => {\n\t\tconst Dashboard = Vue.extend(UserStatus)\n\t\treturn new Dashboard({\n\t\t\tpropsData: {\n\t\t\t\tinline: true,\n\t\t\t},\n\t\t\tstore,\n\t\t}).$mount(el)\n\t})\n})\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\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 { mapState } from 'vuex'\nimport { showError } from '@nextcloud/dialogs'\n\nexport default {\n\tcomputed: {\n\t\t...mapState({\n\t\t\tstatusType: state => state.userStatus.status,\n\t\t\tstatusIsUserDefined: state => state.userStatus.statusIsUserDefined,\n\t\t\tcustomIcon: state => state.userStatus.icon,\n\t\t\tcustomMessage: state => state.userStatus.message,\n\t\t}),\n\n\t\t/**\n\t\t * The message displayed in the top right corner\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tvisibleMessage() {\n\t\t\tif (this.customIcon && this.customMessage) {\n\t\t\t\treturn `${this.customIcon} ${this.customMessage}`\n\t\t\t}\n\n\t\t\tif (this.customMessage) {\n\t\t\t\treturn this.customMessage\n\t\t\t}\n\n\t\t\tif (this.statusIsUserDefined) {\n\t\t\t\tswitch (this.statusType) {\n\t\t\t\tcase 'online':\n\t\t\t\t\treturn this.$t('user_status', 'Online')\n\n\t\t\t\tcase 'away':\n\t\t\t\t\treturn this.$t('user_status', 'Away')\n\n\t\t\t\tcase 'dnd':\n\t\t\t\t\treturn this.$t('user_status', 'Do not disturb')\n\n\t\t\t\tcase 'invisible':\n\t\t\t\t\treturn this.$t('user_status', 'Invisible')\n\n\t\t\t\tcase 'offline':\n\t\t\t\t\treturn this.$t('user_status', 'Offline')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.$t('user_status', 'Set status')\n\t\t},\n\n\t\t/**\n\t\t * The status indicator icon\n\t\t *\n\t\t * @return {string | null}\n\t\t */\n\t\tstatusIcon() {\n\t\t\tswitch (this.statusType) {\n\t\t\tcase 'online':\n\t\t\t\treturn 'icon-user-status-online'\n\n\t\t\tcase 'away':\n\t\t\t\treturn 'icon-user-status-away'\n\n\t\t\tcase 'dnd':\n\t\t\t\treturn 'icon-user-status-dnd'\n\n\t\t\tcase 'invisible':\n\t\t\tcase 'offline':\n\t\t\t\treturn 'icon-user-status-invisible'\n\t\t\t}\n\n\t\t\treturn ''\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Changes the user-status\n\t\t *\n\t\t * @param {string} statusType (online / away / dnd / invisible)\n\t\t */\n\t\tasync changeStatus(statusType) {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('setStatus', { statusType })\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error saving the new status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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\nconst dateFactory = () => {\n\treturn new Date()\n}\n\nexport {\n\tdateFactory,\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.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, \".user-status-menu-item__header[data-v-4d14b4f8]{display:flex !important;flex-direction:column !important;width:auto !important;height:66px !important;padding:10px 12px 5px 12px !important;align-items:flex-start !important;color:var(--color-main-text) !important}.user-status-menu-item__header[data-v-4d14b4f8]:focus-visible{padding:6px 8px 1px 8px !important;margin:2px !important}.user-status-menu-item__header[data-v-4d14b4f8]:not([href]){height:var(--header-menu-item-height) !important;color:var(--color-text-maxcontrast) !important;cursor:default !important}.user-status-menu-item__header:not([href]) *[data-v-4d14b4f8]{cursor:default !important}.user-status-menu-item__header[data-v-4d14b4f8]:not([href]):hover{background-color:rgba(0,0,0,0) !important}.user-status-menu-item__header-content[data-v-4d14b4f8]{display:inline-flex !important;font-weight:bold !important;gap:0 10px !important;width:auto}.user-status-menu-item__header-content-displayname[data-v-4d14b4f8]{width:auto}.user-status-menu-item__header-content-placeholder[data-v-4d14b4f8]{width:16px !important;height:24px !important;margin-right:10px !important;visibility:hidden !important}.user-status-menu-item__header span[data-v-4d14b4f8]{color:var(--color-text-maxcontrast) !important}.user-status-menu-item__toggle-icon[data-v-4d14b4f8]{width:16px;height:16px;margin-right:10px;opacity:1 !important;background-size:16px;vertical-align:middle !important}.user-status-menu-item__toggle--inline[data-v-4d14b4f8]{width:auto;min-width:44px;height:44px;margin:0;border:0;border-radius:var(--border-radius-pill);background-color:var(--color-main-background-blur);font-size:inherit;font-weight:normal;-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.user-status-menu-item__toggle--inline[data-v-4d14b4f8]:active,.user-status-menu-item__toggle--inline[data-v-4d14b4f8]:hover,.user-status-menu-item__toggle--inline[data-v-4d14b4f8]:focus{background-color:var(--color-background-hover)}.user-status-menu-item__toggle--inline[data-v-4d14b4f8]:focus{box-shadow:0 0 0 2px var(--color-main-text) !important}li[data-v-4d14b4f8]{list-style-type:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/UserStatus.vue\"],\"names\":[],\"mappings\":\"AAEC,gDACC,uBAAA,CACA,gCAAA,CACA,qBAAA,CACA,sBAAA,CACA,qCAAA,CACA,iCAAA,CACA,uCAAA,CAEA,8DACC,kCAAA,CACA,qBAAA,CAGD,4DACC,gDAAA,CACA,8CAAA,CACA,yBAAA,CAEA,8DACC,yBAAA,CAGD,kEACC,yCAAA,CAIF,wDACC,8BAAA,CACA,2BAAA,CACA,qBAAA,CACA,UAAA,CAEA,oEACC,UAAA,CAGD,oEACC,qBAAA,CACA,sBAAA,CACA,4BAAA,CACA,4BAAA,CAIF,qDACC,8CAAA,CAKD,qDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CACA,gCAAA,CAID,wDACC,UAAA,CACA,cAAA,CACA,WAAA,CACA,QAAA,CACA,QAAA,CACA,uCAAA,CACA,kDAAA,CACA,iBAAA,CACA,kBAAA,CAEA,8CAAA,CACA,sCAAA,CAEA,2LAGC,8CAAA,CAED,8DACC,sDAAA,CAMJ,oBACC,oBAAA\",\"sourcesContent\":[\"\\n.user-status-menu-item {\\n\\t&__header {\\n\\t\\tdisplay: flex !important;\\n\\t\\tflex-direction: column !important;\\n\\t\\twidth: auto !important;\\n\\t\\theight: 44px * 1.5 !important;\\n\\t\\tpadding: 10px 12px 5px 12px !important;\\n\\t\\talign-items: flex-start !important;\\n\\t\\tcolor: var(--color-main-text) !important;\\n\\n\\t\\t&:focus-visible {\\n\\t\\t\\tpadding: 6px 8px 1px 8px !important;\\n\\t\\t\\tmargin: 2px !important;\\n\\t\\t}\\n\\n\\t\\t&:not([href]) {\\n\\t\\t\\theight: var(--header-menu-item-height) !important;\\n\\t\\t\\tcolor: var(--color-text-maxcontrast) !important;\\n\\t\\t\\tcursor: default !important;\\n\\n\\t\\t\\t& * {\\n\\t\\t\\t\\tcursor: default !important;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&:hover {\\n\\t\\t\\t\\tbackground-color: transparent !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&-content {\\n\\t\\t\\tdisplay: inline-flex !important;\\n\\t\\t\\tfont-weight: bold !important;\\n\\t\\t\\tgap: 0 10px !important;\\n\\t\\t\\twidth: auto;\\n\\n\\t\\t\\t&-displayname {\\n\\t\\t\\t\\twidth: auto;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&-placeholder {\\n\\t\\t\\t\\twidth: 16px !important;\\n\\t\\t\\t\\theight: 24px !important;\\n\\t\\t\\t\\tmargin-right: 10px !important;\\n\\t\\t\\t\\tvisibility: hidden !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tspan {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast) !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__toggle {\\n\\t\\t&-icon {\\n\\t\\t\\twidth: 16px;\\n\\t\\t\\theight: 16px;\\n\\t\\t\\tmargin-right: 10px;\\n\\t\\t\\topacity: 1 !important;\\n\\t\\t\\tbackground-size: 16px;\\n\\t\\t\\tvertical-align: middle !important;\\n\\t\\t}\\n\\n\\t\\t// In dashboard\\n\\t\\t&--inline {\\n\\t\\t\\twidth: auto;\\n\\t\\t\\tmin-width: 44px;\\n\\t\\t\\theight: 44px;\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tborder: 0;\\n\\t\\t\\tborder-radius: var(--border-radius-pill);\\n\\t\\t\\tbackground-color: var(--color-main-background-blur);\\n\\t\\t\\tfont-size: inherit;\\n\\t\\t\\tfont-weight: normal;\\n\\n\\t\\t\\t-webkit-backdrop-filter: var(--background-blur);\\n\\t\\t\\tbackdrop-filter: var(--background-blur);\\n\\n\\t\\t\\t&:active,\\n\\t\\t\\t&:hover,\\n\\t\\t\\t&:focus {\\n\\t\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t\\t}\\n\\t\\t\\t&:focus {\\n\\t\\t\\t\\tbox-shadow: 0 0 0 2px var(--color-main-text) !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\nli {\\n\\tlist-style-type: none;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// 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","// 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__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + \"user-status-modal\" + \"-\" + chunkId + \".js?v=\" + \"417fd9cbcaff10be4a4e\" + \"\";\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 = 2613;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\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\t2613: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\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));","__webpack_require__.nc = undefined;","// 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, [7874], function() { return __webpack_require__(1296); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","sendHeartbeat","isAway","url","generateOcsUrl","HttpClient","status","response","data","profileEnabled","name","components","SetStatusModal","mixins","props","inline","type","default","displayName","heartbeatInterval","isModalOpen","loadingProfilePage","mouseMoveListener","setAwayTimeout","computed","elementTag","profilePageLink","userId","mounted","subscribe","clearTimeout","setTimeout","window","capture","passive","beforeDestroy","unsubscribe","clearInterval","methods","handleDisplayNameUpdate","handleProfileEnabledUpdate","loadProfilePage","openModal","closeModal","_backgroundHeartbeat","console","handleUserStatusUpdated","icon","message","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_c","_self","tag","staticClass","_e","attrs","on","_v","_s","t","class","$event","preventDefault","stopPropagation","apply","arguments","statusIcon","visibleMessage","fetchAllPredefinedStatuses","ocs","actions","loadAllPredefinedStatuses","state","commit","predefinedStatuses","length","statuses","mutations","addPredefinedStatus","push","getters","fetchCurrentStatus","setStatus","statusType","setPredefinedMessage","messageId","clearAt","setCustomMessage","clearMessage","getTimestampForClearAt","date","dateFactory","setSeconds","getSeconds","time","Math","floor","getTime","Number","moment","endOf","format","statusIsUserDefined","messageIsPredefined","loadStatusFromServer","emit","getCurrentUser","uid","setStatusFromObject","rootState","resolvedClearAt","find","id","reFetchStatusFromServer","setStatusFromHeartbeat","loadStatusFromInitialState","loadState","Vue","Vuex","Store","modules","userStatus","strict","__webpack_nonce__","btoa","getRequestToken","avatarDiv","document","getElementById","userStatusData","propsData","preloadedUserStatus","user","dataset","displayname","disableMenu","disableTooltip","NcAvatar","$mount","el","render","h","UserStatus","store","addEventListener","OCA","Dashboard","registerStatus","mapState","customIcon","customMessage","$t","changeStatus","$store","dispatch","showError","debug","Date","___CSS_LOADER_EXPORT___","module","map","webpackContext","req","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","exports","__webpack_module_cache__","moduleId","cachedModule","undefined","loaded","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","key","splice","r","n","getter","__esModule","d","a","definition","defineProperty","enumerable","get","f","chunkId","Promise","all","reduce","promises","u","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","l","done","script","needAttach","scripts","getElementsByTagName","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","doneFns","parentNode","removeChild","forEach","bind","target","head","appendChild","Symbol","toStringTag","value","nmd","paths","children","scriptUrl","importScripts","location","currentScript","replace","p","b","baseURI","self","href","installedChunks","installedChunkData","promise","reject","error","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"user_status-menu.js?v=fdcf36221a616a62e0c3","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/user_status/src/services/heartbeatService.js","webpack:///nextcloud/apps/user_status/src/UserStatus.vue","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?16b2","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?d74a","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?e2b3","webpack:///nextcloud/apps/user_status/src/services/predefinedStatusService.js","webpack:///nextcloud/apps/user_status/src/store/predefinedStatuses.js","webpack:///nextcloud/apps/user_status/src/services/statusService.js","webpack:///nextcloud/apps/user_status/src/services/clearAtService.js","webpack:///nextcloud/apps/user_status/src/store/userStatus.js","webpack:///nextcloud/apps/user_status/src/store/index.js","webpack:///nextcloud/apps/user_status/src/menu.js","webpack:///nextcloud/apps/user_status/src/mixins/OnlineStatusMixin.js","webpack:///nextcloud/apps/user_status/src/services/dateService.js","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=style&index=0&id=4d14b4f8&prod&lang=scss&scoped=true&","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","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/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","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};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Sends a heartbeat\n *\n * @param {boolean} isAway Whether or not the user is active\n * @return {Promise<void>}\n */\nconst sendHeartbeat = async (isAway) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/heartbeat?format=json')\n\tconst response = await HttpClient.put(url, {\n\t\tstatus: isAway ? 'away' : 'online',\n\t})\n\treturn response.data\n}\n\nexport {\n\tsendHeartbeat,\n}\n","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.com>\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\n<template>\n\t<component :is=\"elementTag\">\n\t\t<div class=\"user-status-menu-item\">\n\t\t\t<!-- Username display -->\n\t\t\t<a v-if=\"!inline\"\n\t\t\t\tclass=\"user-status-menu-item__header\"\n\t\t\t\t:href=\"profilePageLink\"\n\t\t\t\t@click=\"loadProfilePage\">\n\t\t\t\t<div class=\"user-status-menu-item__header-content\">\n\t\t\t\t\t<div class=\"user-status-menu-item__header-content-displayname\">{{ displayName }}</div>\n\t\t\t\t\t<div v-if=\"!loadingProfilePage\" class=\"user-status-menu-item__header-content-placeholder\" />\n\t\t\t\t\t<div v-else class=\"icon-loading-small\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"profileEnabled\">\n\t\t\t\t\t{{ t('user_status', 'View profile') }}\n\t\t\t\t</div>\n\t\t\t</a>\n\n\t\t\t<!-- Status modal toggle -->\n\t\t\t<toggle :is=\"inline ? 'button' : 'a'\"\n\t\t\t\t:class=\"{'user-status-menu-item__toggle--inline': inline}\"\n\t\t\t\tclass=\"user-status-menu-item__toggle\"\n\t\t\t\thref=\"#\"\n\t\t\t\t@click.prevent.stop=\"openModal\">\n\t\t\t\t<span :class=\"statusIcon\" class=\"user-status-menu-item__toggle-icon\" />\n\t\t\t\t{{ visibleMessage }}\n\t\t\t</toggle>\n\t\t</div>\n\n\t\t<!-- Status management modal -->\n\t\t<SetStatusModal v-if=\"isModalOpen\"\n\t\t\t@close=\"closeModal\" />\n\t</component>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport debounce from 'debounce'\n\nimport { sendHeartbeat } from './services/heartbeatService'\nimport OnlineStatusMixin from './mixins/OnlineStatusMixin'\n\nconst { profileEnabled } = loadState('user_status', 'profileEnabled', false)\n\nexport default {\n\tname: 'UserStatus',\n\n\tcomponents: {\n\t\tSetStatusModal: () => import(/* webpackChunkName: 'user-status-modal' */'./components/SetStatusModal'),\n\t},\n\tmixins: [OnlineStatusMixin],\n\n\tprops: {\n\t\tinline: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdisplayName: getCurrentUser().displayName,\n\t\t\theartbeatInterval: null,\n\t\t\tisAway: false,\n\t\t\tisModalOpen: false,\n\t\t\tloadingProfilePage: false,\n\t\t\tmouseMoveListener: null,\n\t\t\tprofileEnabled,\n\t\t\tsetAwayTimeout: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\telementTag() {\n\t\t\treturn this.inline ? 'div' : 'li'\n\t\t},\n\t\t/**\n\t\t * The profile page link\n\t\t *\n\t\t * @return {string | null}\n\t\t */\n\t\tprofilePageLink() {\n\t\t\tif (this.profileEnabled) {\n\t\t\t\treturn generateUrl('/u/{userId}', { userId: getCurrentUser().uid })\n\t\t\t}\n\t\t\t// Since an anchor element is used rather than a button,\n\t\t\t// this hack removes href if the profile is disabled so that disabling pointer-events is not needed to prevent a click from opening a page\n\t\t\t// and to allow the hover event for styling\n\t\t\treturn null\n\t\t},\n\t},\n\n\t/**\n\t * Loads the current user's status from initial state\n\t * and stores it in Vuex\n\t */\n\tmounted() {\n\t\tsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\n\t\tthis.$store.dispatch('loadStatusFromInitialState')\n\n\t\tif (OC.config.session_keepalive) {\n\t\t\t// Send the latest status to the server every 5 minutes\n\t\t\tthis.heartbeatInterval = setInterval(this._backgroundHeartbeat.bind(this), 1000 * 60 * 5)\n\t\t\tthis.setAwayTimeout = () => {\n\t\t\t\tthis.isAway = true\n\t\t\t}\n\t\t\t// Catch mouse movements, but debounce to once every 30 seconds\n\t\t\tthis.mouseMoveListener = debounce(() => {\n\t\t\t\tconst wasAway = this.isAway\n\t\t\t\tthis.isAway = false\n\t\t\t\t// Reset the two minute counter\n\t\t\t\tclearTimeout(this.setAwayTimeout)\n\t\t\t\t// If the user did not move the mouse within two minutes,\n\t\t\t\t// mark them as away\n\t\t\t\tsetTimeout(this.setAwayTimeout, 1000 * 60 * 2)\n\n\t\t\t\tif (wasAway) {\n\t\t\t\t\tthis._backgroundHeartbeat()\n\t\t\t\t}\n\t\t\t}, 1000 * 2, true)\n\t\t\twindow.addEventListener('mousemove', this.mouseMoveListener, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: true,\n\t\t\t})\n\n\t\t\tthis._backgroundHeartbeat()\n\t\t}\n\t\tsubscribe('user_status:status.updated', this.handleUserStatusUpdated)\n\t},\n\n\t/**\n\t * Some housekeeping before destroying the component\n\t */\n\tbeforeDestroy() {\n\t\tunsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tunsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\t\twindow.removeEventListener('mouseMove', this.mouseMoveListener)\n\t\tclearInterval(this.heartbeatInterval)\n\t\tunsubscribe('user_status:status.updated', this.handleUserStatusUpdated)\n\t},\n\n\tmethods: {\n\t\thandleDisplayNameUpdate(displayName) {\n\t\t\tthis.displayName = displayName\n\t\t},\n\n\t\thandleProfileEnabledUpdate(profileEnabled) {\n\t\t\tthis.profileEnabled = profileEnabled\n\t\t},\n\n\t\tloadProfilePage() {\n\t\t\tif (this.profileEnabled) {\n\t\t\t\tthis.loadingProfilePage = true\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Opens the modal to set a custom status\n\t\t */\n\t\topenModal() {\n\t\t\tthis.isModalOpen = true\n\t\t},\n\t\t/**\n\t\t * Closes the modal\n\t\t */\n\t\tcloseModal() {\n\t\t\tthis.isModalOpen = false\n\t\t},\n\n\t\t/**\n\t\t * Sends the status heartbeat to the server\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @private\n\t\t */\n\t\tasync _backgroundHeartbeat() {\n\t\t\ttry {\n\t\t\t\tconst status = await sendHeartbeat(this.isAway)\n\t\t\t\tif (status?.userId) {\n\t\t\t\t\tthis.$store.dispatch('setStatusFromHeartbeat', status)\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$store.dispatch('reFetchStatusFromServer')\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.debug('Failed sending heartbeat, got: ' + error.response?.status)\n\t\t\t}\n\t\t},\n\t\thandleUserStatusUpdated(state) {\n\t\t\tif (OC.getCurrentUser().uid === state.userId) {\n\t\t\t\tthis.$store.dispatch('setStatusFromObject', {\n\t\t\t\t\tstatus: state.status,\n\t\t\t\t\ticon: state.icon,\n\t\t\t\t\tmessage: state.message,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.user-status-menu-item {\n\t&__header {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\twidth: auto !important;\n\t\theight: 44px * 1.5 !important;\n\t\tpadding: 10px 12px 5px 12px !important;\n\t\talign-items: flex-start !important;\n\t\tcolor: var(--color-main-text) !important;\n\n\t\t&:focus-visible {\n\t\t\tpadding: 6px 8px 1px 8px !important;\n\t\t\tmargin: 2px !important;\n\t\t}\n\n\t\t&:not([href]) {\n\t\t\theight: var(--header-menu-item-height) !important;\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t\tcursor: default !important;\n\n\t\t\t& * {\n\t\t\t\tcursor: default !important;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: transparent !important;\n\t\t\t}\n\t\t}\n\n\t\t&-content {\n\t\t\tdisplay: inline-flex !important;\n\t\t\tfont-weight: bold !important;\n\t\t\tgap: 0 10px !important;\n\t\t\twidth: auto;\n\n\t\t\t&-displayname {\n\t\t\t\twidth: auto;\n\t\t\t}\n\n\t\t\t&-placeholder {\n\t\t\t\twidth: 16px !important;\n\t\t\t\theight: 24px !important;\n\t\t\t\tmargin-right: 10px !important;\n\t\t\t\tvisibility: hidden !important;\n\t\t\t}\n\t\t}\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t}\n\t}\n\n\t&__toggle {\n\t\t&-icon {\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tmargin-right: 10px;\n\t\t\topacity: 1 !important;\n\t\t\tbackground-size: 16px;\n\t\t\tvertical-align: middle !important;\n\t\t}\n\n\t\t// In dashboard\n\t\t&--inline {\n\t\t\twidth: auto;\n\t\t\tmin-width: 44px;\n\t\t\theight: 44px;\n\t\t\tmargin: 0;\n\t\t\tborder: 0;\n\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\tbackground-color: var(--color-main-background-blur);\n\t\t\tfont-size: inherit;\n\t\t\tfont-weight: normal;\n\n\t\t\t-webkit-backdrop-filter: var(--background-blur);\n\t\t\tbackdrop-filter: var(--background-blur);\n\n\t\t\t&:active,\n\t\t\t&:hover,\n\t\t\t&:focus {\n\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t}\n\t\t\t&:focus {\n\t\t\t\tbox-shadow: 0 0 0 2px var(--color-main-text) !important;\n\t\t\t}\n\t\t}\n\t}\n}\n\nli {\n\tlist-style-type: none;\n}\n\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.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!./UserStatus.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!./UserStatus.vue?vue&type=style&index=0&id=4d14b4f8&prod&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!./UserStatus.vue?vue&type=style&index=0&id=4d14b4f8&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserStatus.vue?vue&type=template&id=4d14b4f8&scoped=true&\"\nimport script from \"./UserStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./UserStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserStatus.vue?vue&type=style&index=0&id=4d14b4f8&prod&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 \"4d14b4f8\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.elementTag,{tag:\"component\"},[_c('div',{staticClass:\"user-status-menu-item\"},[(!_vm.inline)?_c('a',{staticClass:\"user-status-menu-item__header\",attrs:{\"href\":_vm.profilePageLink},on:{\"click\":_vm.loadProfilePage}},[_c('div',{staticClass:\"user-status-menu-item__header-content\"},[_c('div',{staticClass:\"user-status-menu-item__header-content-displayname\"},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),(!_vm.loadingProfilePage)?_c('div',{staticClass:\"user-status-menu-item__header-content-placeholder\"}):_c('div',{staticClass:\"icon-loading-small\"})]),_vm._v(\" \"),(_vm.profileEnabled)?_c('div',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('user_status', 'View profile'))+\"\\n\\t\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c(_vm.inline ? 'button' : 'a',{tag:\"toggle\",staticClass:\"user-status-menu-item__toggle\",class:{'user-status-menu-item__toggle--inline': _vm.inline},attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openModal.apply(null, arguments)}}},[_c('span',{staticClass:\"user-status-menu-item__toggle-icon\",class:_vm.statusIcon}),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.visibleMessage)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.isModalOpen)?_c('SetStatusModal',{on:{\"close\":_vm.closeModal}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches all predefined statuses from the server\n *\n * @return {Promise<void>}\n */\nconst fetchAllPredefinedStatuses = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/predefined_statuses?format=json')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\nexport {\n\tfetchAllPredefinedStatuses,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 { fetchAllPredefinedStatuses } from '../services/predefinedStatusService'\n\nconst state = {\n\tpredefinedStatuses: [],\n}\n\nconst mutations = {\n\n\t/**\n\t * Adds a predefined status to the state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} status The status to add\n\t */\n\taddPredefinedStatus(state, status) {\n\t\tstate.predefinedStatuses.push(status)\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\n\t/**\n\t * Loads all predefined statuses from the server\n\t *\n\t * @param {object} vuex The Vuex components\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state -\n\t */\n\tasync loadAllPredefinedStatuses({ state, commit }) {\n\t\tif (state.predefinedStatuses.length > 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst statuses = await fetchAllPredefinedStatuses()\n\t\tfor (const status of statuses) {\n\t\t\tcommit('addPredefinedStatus', status)\n\t\t}\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches the current user-status\n *\n * @return {Promise<object>}\n */\nconst fetchCurrentStatus = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\n/**\n * Sets the status\n *\n * @param {string} statusType The status (online / away / dnd / invisible)\n * @return {Promise<void>}\n */\nconst setStatus = async (statusType) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/status')\n\tawait HttpClient.put(url, {\n\t\tstatusType,\n\t})\n}\n\n/**\n * Sets a message based on our predefined statuses\n *\n * @param {string} messageId The id of the message, taken from predefined status service\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise<void>}\n */\nconst setPredefinedMessage = async (messageId, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/predefined?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessageId,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Sets a custom message\n *\n * @param {string} message The user-defined message\n * @param {string | null} statusIcon The user-defined icon\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise<void>}\n */\nconst setCustomMessage = async (message, statusIcon = null, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/custom?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessage,\n\t\tstatusIcon,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Clears the current status of the user\n *\n * @return {Promise<void>}\n */\nconst clearMessage = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message?format=json')\n\tawait HttpClient.delete(url)\n}\n\nexport {\n\tfetchCurrentStatus,\n\tsetStatus,\n\tsetCustomMessage,\n\tsetPredefinedMessage,\n\tclearMessage,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 {\n\tdateFactory,\n} from './dateService'\nimport moment from '@nextcloud/moment'\n\n/**\n * Calculates the actual clearAt timestamp\n *\n * @param {object | null} clearAt The clear-at config\n * @return {number | null}\n */\nconst getTimestampForClearAt = (clearAt) => {\n\tif (clearAt === null) {\n\t\treturn null\n\t}\n\n\tconst date = dateFactory()\n\n\tif (clearAt.type === 'period') {\n\t\tdate.setSeconds(date.getSeconds() + clearAt.time)\n\t\treturn Math.floor(date.getTime() / 1000)\n\t}\n\tif (clearAt.type === 'end-of') {\n\t\tswitch (clearAt.time) {\n\t\tcase 'day':\n\t\tcase 'week':\n\t\t\treturn Number(moment(date).endOf(clearAt.time).format('X'))\n\t\t}\n\t}\n\t// This is not an officially supported type\n\t// but only used internally to show the remaining time\n\t// in the Set Status Modal\n\tif (clearAt.type === '_time') {\n\t\treturn clearAt.time\n\t}\n\n\treturn null\n}\n\nexport {\n\tgetTimestampForClearAt,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 {\n\tfetchCurrentStatus,\n\tsetStatus,\n\tsetPredefinedMessage,\n\tsetCustomMessage,\n\tclearMessage,\n} from '../services/statusService'\nimport { loadState } from '@nextcloud/initial-state'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getTimestampForClearAt } from '../services/clearAtService'\nimport { emit } from '@nextcloud/event-bus'\n\nconst state = {\n\t// Status (online / away / dnd / invisible / offline)\n\tstatus: null,\n\t// Whether or not the status is user-defined\n\tstatusIsUserDefined: null,\n\t// A custom message set by the user\n\tmessage: null,\n\t// The icon selected by the user\n\ticon: null,\n\t// When to automatically clean the status\n\tclearAt: null,\n\t// Whether or not the message is predefined\n\t// (and can automatically be translated by Nextcloud)\n\tmessageIsPredefined: null,\n\t// The id of the message in case it's predefined\n\tmessageId: null,\n}\n\nconst mutations = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.statusType The new status type\n\t */\n\tsetStatus(state, { statusType }) {\n\t\tstate.status = statusType\n\t\tstate.statusIsUserDefined = true\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {number | null} data.clearAt When to automatically clear the status\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t */\n\tsetPredefinedMessage(state, { messageId, clearAt, message, icon }) {\n\t\tstate.messageId = messageId\n\t\tstate.messageIsPredefined = true\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t */\n\tsetCustomMessage(state, { message, icon, clearAt }) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} state The Vuex state\n\t */\n\tclearMessage(state) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = null\n\t\tstate.icon = null\n\t\tstate.clearAt = null\n\t},\n\n\t/**\n\t * Loads the status from initial state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.status The status type\n\t * @param {boolean} data.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t * @param {boolean} data.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} data.messageId The id of the predefined message\n\t */\n\tloadStatusFromServer(state, { status, statusIsUserDefined, message, icon, clearAt, messageIsPredefined, messageId }) {\n\t\tstate.status = status\n\t\tstate.message = message\n\t\tstate.icon = icon\n\n\t\t// Don't overwrite certain values if the refreshing comes in via short updates\n\t\t// E.g. from talk participant list which only has the status, message and icon\n\t\tif (typeof statusIsUserDefined !== 'undefined') {\n\t\t\tstate.statusIsUserDefined = statusIsUserDefined\n\t\t}\n\t\tif (typeof clearAt !== 'undefined') {\n\t\t\tstate.clearAt = clearAt\n\t\t}\n\t\tif (typeof messageIsPredefined !== 'undefined') {\n\t\t\tstate.messageIsPredefined = messageIsPredefined\n\t\t}\n\t\tif (typeof messageId !== 'undefined') {\n\t\t\tstate.messageId = messageId\n\t\t}\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.statusType The new status type\n\t * @return {Promise<void>}\n\t */\n\tasync setStatus({ commit, state }, { statusType }) {\n\t\tawait setStatus(statusType)\n\t\tcommit('setStatus', { statusType })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Update status from 'user_status:status.updated' update.\n\t * This doesn't trigger another 'user_status:status.updated'\n\t * event.\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {string} status The new status\n\t * @return {Promise<void>}\n\t */\n\tasync setStatusFromObject({ commit, state }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} vuex.rootState The Vuex root state\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise<void>}\n\t */\n\tasync setPredefinedMessage({ commit, rootState, state }, { messageId, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setPredefinedMessage(messageId, resolvedClearAt)\n\t\tconst status = rootState.predefinedStatuses.predefinedStatuses.find((status) => status.id === messageId)\n\t\tconst { message, icon } = status\n\n\t\tcommit('setPredefinedMessage', { messageId, clearAt: resolvedClearAt, message, icon })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise<void>}\n\t */\n\tasync setCustomMessage({ commit, state }, { message, icon, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setCustomMessage(message, icon, resolvedClearAt)\n\t\tcommit('setCustomMessage', { message, icon, clearAt: resolvedClearAt })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @return {Promise<void>}\n\t */\n\tasync clearMessage({ commit, state }) {\n\t\tawait clearMessage()\n\t\tcommit('clearMessage')\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Re-fetches the status from the server\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @return {Promise<void>}\n\t */\n\tasync reFetchStatusFromServer({ commit }) {\n\t\tconst status = await fetchCurrentStatus()\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Stores the status we got in the reply of the heartbeat\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} status The data destructuring object\n\t * @param {string} status.status The status type\n\t * @param {boolean} status.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} status.message The message\n\t * @param {string} status.icon The icon\n\t * @param {number} status.clearAt When to automatically clear the status\n\t * @param {boolean} status.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} status.messageId The id of the predefined message\n\t * @return {Promise<void>}\n\t */\n\tasync setStatusFromHeartbeat({ commit }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Loads the server from the initial state\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t */\n\tloadStatusFromInitialState({ commit }) {\n\t\tconst status = loadState('user_status', 'status')\n\t\tcommit('loadStatusFromServer', status)\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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 Vuex, { Store } from 'vuex'\nimport predefinedStatuses from './predefinedStatuses'\nimport userStatus from './userStatus'\n\nVue.use(Vuex)\n\nexport default new Store({\n\tmodules: {\n\t\tpredefinedStatuses,\n\t\tuserStatus,\n\t},\n\tstrict: true,\n})\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\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 { getRequestToken } from '@nextcloud/auth'\nimport UserStatus from './UserStatus'\nimport store from './store'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar'\nimport { loadState } from '@nextcloud/initial-state'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\nVue.prototype.t = t\nVue.prototype.$t = t\n\nconst avatarDiv = document.getElementById('avatardiv-menu')\nconst userStatusData = loadState('user_status', 'status')\nconst propsData = {\n\tpreloadedUserStatus: {\n\t\tmessage: userStatusData.message,\n\t\ticon: userStatusData.icon,\n\t\tstatus: userStatusData.status,\n\t},\n\tuser: avatarDiv.dataset.user,\n\tdisplayName: avatarDiv.dataset.displayname,\n\tdisableMenu: true,\n\tdisableTooltip: true,\n}\n\nconst NcAvatarInMenu = Vue.extend(NcAvatar)\nnew NcAvatarInMenu({ propsData }).$mount('#avatardiv-menu')\n\n// Register settings menu entry\nexport default new Vue({\n\tel: 'li[data-id=\"user_status-menuitem\"]',\n\t// eslint-disable-next-line vue/match-component-file-name\n\tname: 'UserStatusRoot',\n\trender: h => h(UserStatus),\n\tstore,\n})\n\n// Register dashboard status\ndocument.addEventListener('DOMContentLoaded', function() {\n\tif (!OCA.Dashboard) {\n\t\treturn\n\t}\n\n\tOCA.Dashboard.registerStatus('status', (el) => {\n\t\tconst Dashboard = Vue.extend(UserStatus)\n\t\treturn new Dashboard({\n\t\t\tpropsData: {\n\t\t\t\tinline: true,\n\t\t\t},\n\t\t\tstore,\n\t\t}).$mount(el)\n\t})\n})\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\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 { mapState } from 'vuex'\nimport { showError } from '@nextcloud/dialogs'\n\nexport default {\n\tcomputed: {\n\t\t...mapState({\n\t\t\tstatusType: state => state.userStatus.status,\n\t\t\tstatusIsUserDefined: state => state.userStatus.statusIsUserDefined,\n\t\t\tcustomIcon: state => state.userStatus.icon,\n\t\t\tcustomMessage: state => state.userStatus.message,\n\t\t}),\n\n\t\t/**\n\t\t * The message displayed in the top right corner\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tvisibleMessage() {\n\t\t\tif (this.customIcon && this.customMessage) {\n\t\t\t\treturn `${this.customIcon} ${this.customMessage}`\n\t\t\t}\n\n\t\t\tif (this.customMessage) {\n\t\t\t\treturn this.customMessage\n\t\t\t}\n\n\t\t\tif (this.statusIsUserDefined) {\n\t\t\t\tswitch (this.statusType) {\n\t\t\t\tcase 'online':\n\t\t\t\t\treturn this.$t('user_status', 'Online')\n\n\t\t\t\tcase 'away':\n\t\t\t\t\treturn this.$t('user_status', 'Away')\n\n\t\t\t\tcase 'dnd':\n\t\t\t\t\treturn this.$t('user_status', 'Do not disturb')\n\n\t\t\t\tcase 'invisible':\n\t\t\t\t\treturn this.$t('user_status', 'Invisible')\n\n\t\t\t\tcase 'offline':\n\t\t\t\t\treturn this.$t('user_status', 'Offline')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.$t('user_status', 'Set status')\n\t\t},\n\n\t\t/**\n\t\t * The status indicator icon\n\t\t *\n\t\t * @return {string | null}\n\t\t */\n\t\tstatusIcon() {\n\t\t\tswitch (this.statusType) {\n\t\t\tcase 'online':\n\t\t\t\treturn 'icon-user-status-online'\n\n\t\t\tcase 'away':\n\t\t\t\treturn 'icon-user-status-away'\n\n\t\t\tcase 'dnd':\n\t\t\t\treturn 'icon-user-status-dnd'\n\n\t\t\tcase 'invisible':\n\t\t\tcase 'offline':\n\t\t\t\treturn 'icon-user-status-invisible'\n\t\t\t}\n\n\t\t\treturn ''\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Changes the user-status\n\t\t *\n\t\t * @param {string} statusType (online / away / dnd / invisible)\n\t\t */\n\t\tasync changeStatus(statusType) {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('setStatus', { statusType })\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error saving the new status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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\nconst dateFactory = () => {\n\treturn new Date()\n}\n\nexport {\n\tdateFactory,\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.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, \".user-status-menu-item__header[data-v-4d14b4f8]{display:flex !important;flex-direction:column !important;width:auto !important;height:66px !important;padding:10px 12px 5px 12px !important;align-items:flex-start !important;color:var(--color-main-text) !important}.user-status-menu-item__header[data-v-4d14b4f8]:focus-visible{padding:6px 8px 1px 8px !important;margin:2px !important}.user-status-menu-item__header[data-v-4d14b4f8]:not([href]){height:var(--header-menu-item-height) !important;color:var(--color-text-maxcontrast) !important;cursor:default !important}.user-status-menu-item__header:not([href]) *[data-v-4d14b4f8]{cursor:default !important}.user-status-menu-item__header[data-v-4d14b4f8]:not([href]):hover{background-color:rgba(0,0,0,0) !important}.user-status-menu-item__header-content[data-v-4d14b4f8]{display:inline-flex !important;font-weight:bold !important;gap:0 10px !important;width:auto}.user-status-menu-item__header-content-displayname[data-v-4d14b4f8]{width:auto}.user-status-menu-item__header-content-placeholder[data-v-4d14b4f8]{width:16px !important;height:24px !important;margin-right:10px !important;visibility:hidden !important}.user-status-menu-item__header span[data-v-4d14b4f8]{color:var(--color-text-maxcontrast) !important}.user-status-menu-item__toggle-icon[data-v-4d14b4f8]{width:16px;height:16px;margin-right:10px;opacity:1 !important;background-size:16px;vertical-align:middle !important}.user-status-menu-item__toggle--inline[data-v-4d14b4f8]{width:auto;min-width:44px;height:44px;margin:0;border:0;border-radius:var(--border-radius-pill);background-color:var(--color-main-background-blur);font-size:inherit;font-weight:normal;-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.user-status-menu-item__toggle--inline[data-v-4d14b4f8]:active,.user-status-menu-item__toggle--inline[data-v-4d14b4f8]:hover,.user-status-menu-item__toggle--inline[data-v-4d14b4f8]:focus{background-color:var(--color-background-hover)}.user-status-menu-item__toggle--inline[data-v-4d14b4f8]:focus{box-shadow:0 0 0 2px var(--color-main-text) !important}li[data-v-4d14b4f8]{list-style-type:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/UserStatus.vue\"],\"names\":[],\"mappings\":\"AAEC,gDACC,uBAAA,CACA,gCAAA,CACA,qBAAA,CACA,sBAAA,CACA,qCAAA,CACA,iCAAA,CACA,uCAAA,CAEA,8DACC,kCAAA,CACA,qBAAA,CAGD,4DACC,gDAAA,CACA,8CAAA,CACA,yBAAA,CAEA,8DACC,yBAAA,CAGD,kEACC,yCAAA,CAIF,wDACC,8BAAA,CACA,2BAAA,CACA,qBAAA,CACA,UAAA,CAEA,oEACC,UAAA,CAGD,oEACC,qBAAA,CACA,sBAAA,CACA,4BAAA,CACA,4BAAA,CAIF,qDACC,8CAAA,CAKD,qDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CACA,gCAAA,CAID,wDACC,UAAA,CACA,cAAA,CACA,WAAA,CACA,QAAA,CACA,QAAA,CACA,uCAAA,CACA,kDAAA,CACA,iBAAA,CACA,kBAAA,CAEA,8CAAA,CACA,sCAAA,CAEA,2LAGC,8CAAA,CAED,8DACC,sDAAA,CAMJ,oBACC,oBAAA\",\"sourcesContent\":[\"\\n.user-status-menu-item {\\n\\t&__header {\\n\\t\\tdisplay: flex !important;\\n\\t\\tflex-direction: column !important;\\n\\t\\twidth: auto !important;\\n\\t\\theight: 44px * 1.5 !important;\\n\\t\\tpadding: 10px 12px 5px 12px !important;\\n\\t\\talign-items: flex-start !important;\\n\\t\\tcolor: var(--color-main-text) !important;\\n\\n\\t\\t&:focus-visible {\\n\\t\\t\\tpadding: 6px 8px 1px 8px !important;\\n\\t\\t\\tmargin: 2px !important;\\n\\t\\t}\\n\\n\\t\\t&:not([href]) {\\n\\t\\t\\theight: var(--header-menu-item-height) !important;\\n\\t\\t\\tcolor: var(--color-text-maxcontrast) !important;\\n\\t\\t\\tcursor: default !important;\\n\\n\\t\\t\\t& * {\\n\\t\\t\\t\\tcursor: default !important;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&:hover {\\n\\t\\t\\t\\tbackground-color: transparent !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&-content {\\n\\t\\t\\tdisplay: inline-flex !important;\\n\\t\\t\\tfont-weight: bold !important;\\n\\t\\t\\tgap: 0 10px !important;\\n\\t\\t\\twidth: auto;\\n\\n\\t\\t\\t&-displayname {\\n\\t\\t\\t\\twidth: auto;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&-placeholder {\\n\\t\\t\\t\\twidth: 16px !important;\\n\\t\\t\\t\\theight: 24px !important;\\n\\t\\t\\t\\tmargin-right: 10px !important;\\n\\t\\t\\t\\tvisibility: hidden !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tspan {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast) !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__toggle {\\n\\t\\t&-icon {\\n\\t\\t\\twidth: 16px;\\n\\t\\t\\theight: 16px;\\n\\t\\t\\tmargin-right: 10px;\\n\\t\\t\\topacity: 1 !important;\\n\\t\\t\\tbackground-size: 16px;\\n\\t\\t\\tvertical-align: middle !important;\\n\\t\\t}\\n\\n\\t\\t// In dashboard\\n\\t\\t&--inline {\\n\\t\\t\\twidth: auto;\\n\\t\\t\\tmin-width: 44px;\\n\\t\\t\\theight: 44px;\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tborder: 0;\\n\\t\\t\\tborder-radius: var(--border-radius-pill);\\n\\t\\t\\tbackground-color: var(--color-main-background-blur);\\n\\t\\t\\tfont-size: inherit;\\n\\t\\t\\tfont-weight: normal;\\n\\n\\t\\t\\t-webkit-backdrop-filter: var(--background-blur);\\n\\t\\t\\tbackdrop-filter: var(--background-blur);\\n\\n\\t\\t\\t&:active,\\n\\t\\t\\t&:hover,\\n\\t\\t\\t&:focus {\\n\\t\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t\\t}\\n\\t\\t\\t&:focus {\\n\\t\\t\\t\\tbox-shadow: 0 0 0 2px var(--color-main-text) !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\nli {\\n\\tlist-style-type: none;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// 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","// 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__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + \"user-status-modal\" + \"-\" + chunkId + \".js?v=\" + \"85e11c4259cd858bd625\" + \"\";\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 = 2613;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\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\t2613: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\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));","__webpack_require__.nc = undefined;","// 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, [7874], function() { return __webpack_require__(1296); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","sendHeartbeat","isAway","url","generateOcsUrl","HttpClient","status","response","data","profileEnabled","name","components","SetStatusModal","mixins","props","inline","type","default","displayName","heartbeatInterval","isModalOpen","loadingProfilePage","mouseMoveListener","setAwayTimeout","computed","elementTag","profilePageLink","userId","mounted","subscribe","clearTimeout","setTimeout","window","capture","passive","beforeDestroy","unsubscribe","clearInterval","methods","handleDisplayNameUpdate","handleProfileEnabledUpdate","loadProfilePage","openModal","closeModal","_backgroundHeartbeat","console","handleUserStatusUpdated","icon","message","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_c","_self","tag","staticClass","_e","attrs","on","_v","_s","t","class","$event","preventDefault","stopPropagation","apply","arguments","statusIcon","visibleMessage","fetchAllPredefinedStatuses","ocs","actions","loadAllPredefinedStatuses","state","commit","predefinedStatuses","length","statuses","mutations","addPredefinedStatus","push","getters","fetchCurrentStatus","setStatus","statusType","setPredefinedMessage","messageId","clearAt","setCustomMessage","clearMessage","getTimestampForClearAt","date","dateFactory","setSeconds","getSeconds","time","Math","floor","getTime","Number","moment","endOf","format","statusIsUserDefined","messageIsPredefined","loadStatusFromServer","emit","getCurrentUser","uid","setStatusFromObject","rootState","resolvedClearAt","find","id","reFetchStatusFromServer","setStatusFromHeartbeat","loadStatusFromInitialState","loadState","Vue","Vuex","Store","modules","userStatus","strict","__webpack_nonce__","btoa","getRequestToken","avatarDiv","document","getElementById","userStatusData","propsData","preloadedUserStatus","user","dataset","displayname","disableMenu","disableTooltip","NcAvatar","$mount","el","render","h","UserStatus","store","addEventListener","OCA","Dashboard","registerStatus","mapState","customIcon","customMessage","$t","changeStatus","$store","dispatch","showError","debug","Date","___CSS_LOADER_EXPORT___","module","map","webpackContext","req","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","exports","__webpack_module_cache__","moduleId","cachedModule","undefined","loaded","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","key","splice","r","n","getter","__esModule","d","a","definition","defineProperty","enumerable","get","f","chunkId","Promise","all","reduce","promises","u","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","l","done","script","needAttach","scripts","getElementsByTagName","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","doneFns","parentNode","removeChild","forEach","bind","target","head","appendChild","Symbol","toStringTag","value","nmd","paths","children","scriptUrl","importScripts","location","currentScript","replace","p","b","baseURI","self","href","installedChunks","installedChunkData","promise","reject","error","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file diff --git a/lib/l10n/de.js b/lib/l10n/de.js index aa0261d1717..715f6922076 100644 --- a/lib/l10n/de.js +++ b/lib/l10n/de.js @@ -8,6 +8,8 @@ OC.L10N.register( "The files of the app %1$s were not replaced correctly. Make sure it is a version compatible with the server." : "Die Dateien der App %1$swurden nicht korrekt ersetzt. Stelle sicher, dass es sich um eine mit dem Server kompatible Version handelt.", "Sample configuration detected" : "Beispielkonfiguration gefunden", "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Es wurde festgestellt, dass die Beispielkonfiguration kopiert wurde. Dies kann deine Installation zerstören und wird nicht unterstützt. Bitte die Dokumentation lesen, bevor Änderungen an der config.php vorgenommen werden.", + "404" : "404", + "The page could not be found on the server." : "Die Seite konnte auf dem Server nicht gefunden werden.", "%s email verification" : "%s E-Mail-Überprüfung", "Email verification" : "E-Mail-Überprüfung", "Click the following button to confirm your email." : "Klicke die folgende Schaltfläche, um deine E-Mail-Adresse zu bestätigen.", @@ -100,6 +102,8 @@ OC.L10N.register( "Users" : "Benutzer", "Email" : "E-Mail", "Mail %s" : "E-Mail %s", + "Fediverse" : "Fediverse", + "View %s on the fediverse" : "Zeige %s auf dem Fediverse", "Phone" : "Telefon", "Call %s" : "%s anrufen", "Twitter" : "Twitter", diff --git a/lib/l10n/de.json b/lib/l10n/de.json index 9fb180dadd2..57af2c50148 100644 --- a/lib/l10n/de.json +++ b/lib/l10n/de.json @@ -6,6 +6,8 @@ "The files of the app %1$s were not replaced correctly. Make sure it is a version compatible with the server." : "Die Dateien der App %1$swurden nicht korrekt ersetzt. Stelle sicher, dass es sich um eine mit dem Server kompatible Version handelt.", "Sample configuration detected" : "Beispielkonfiguration gefunden", "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Es wurde festgestellt, dass die Beispielkonfiguration kopiert wurde. Dies kann deine Installation zerstören und wird nicht unterstützt. Bitte die Dokumentation lesen, bevor Änderungen an der config.php vorgenommen werden.", + "404" : "404", + "The page could not be found on the server." : "Die Seite konnte auf dem Server nicht gefunden werden.", "%s email verification" : "%s E-Mail-Überprüfung", "Email verification" : "E-Mail-Überprüfung", "Click the following button to confirm your email." : "Klicke die folgende Schaltfläche, um deine E-Mail-Adresse zu bestätigen.", @@ -98,6 +100,8 @@ "Users" : "Benutzer", "Email" : "E-Mail", "Mail %s" : "E-Mail %s", + "Fediverse" : "Fediverse", + "View %s on the fediverse" : "Zeige %s auf dem Fediverse", "Phone" : "Telefon", "Call %s" : "%s anrufen", "Twitter" : "Twitter", diff --git a/lib/l10n/kab.js b/lib/l10n/kab.js index 28a886e8d0f..d902aae96f7 100644 --- a/lib/l10n/kab.js +++ b/lib/l10n/kab.js @@ -7,9 +7,11 @@ OC.L10N.register( "Log out" : "Senser", "Users" : "Iseqdacen", "Email" : "Imayl", + "Phone" : "Tiliɣri", "Twitter" : "Twitter", "Website" : "Asmel web", "Address" : "Adresse", - "About" : "Γef" + "About" : "Γef", + "Full name" : "Isem inek ummid" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/kab.json b/lib/l10n/kab.json index 90b6cd7a45c..b2f1989ea30 100644 --- a/lib/l10n/kab.json +++ b/lib/l10n/kab.json @@ -5,9 +5,11 @@ "Log out" : "Senser", "Users" : "Iseqdacen", "Email" : "Imayl", + "Phone" : "Tiliɣri", "Twitter" : "Twitter", "Website" : "Asmel web", "Address" : "Adresse", - "About" : "Γef" + "About" : "Γef", + "Full name" : "Isem inek ummid" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/lib/l10n/th.js b/lib/l10n/th.js index c3c1ad265e5..7e08081efdc 100644 --- a/lib/l10n/th.js +++ b/lib/l10n/th.js @@ -4,14 +4,14 @@ OC.L10N.register( "Cannot write into \"config\" directory!" : "ไม่สามารถเขียนลงในไดเรกทอรี \"config\"!", "See %s" : "ดู %s", "Sample configuration detected" : "ตรวจพบการกำหนดค่าตัวอย่าง", - "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "ตรวจพบว่าการกำหนดค่าตัวอย่างที่ถูกคัดลอก นี้สามารถทำลายการติดตั้งของคุณและไม่ได้รับการสนับสนุน โปรดอ่านเอกสารก่อนที่จะดำเนินการเปลี่ยนแปลงใน config.php", + "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "เราตรวจพบว่าการกำหนดค่าตัวอย่างถูกคัดลอกมา การกำหนดค่าลักษณะนี้สามารถทำลายการติดตั้งของคุณและไม่ได้รับการสนับสนุน โปรดอ่านเอกสารประกอบก่อนที่จะดำเนินการเปลี่ยนแปลงใน config.php", "PHP %s or higher is required." : "จำเป็นต้องมี PHP รุ่น %s หรือที่สูงกว่า ", "PHP with a version lower than %s is required." : "จำเป็นต้องมี PHP รุ่นต่ำกว่า %s", "%sbit or higher PHP required." : "จำเป็นต้องมี PHP %s บิตหรือสูงกว่า", "The command line tool %s could not be found" : "ไม่พบเครื่องมือบรรทัดคำสั่ง %s ", "The library %s is not available." : "ไลบรารี %s ไม่สามารถใช้ได้", "Authentication" : "รับรองความถูกต้อง", - "Unknown filetype" : "ไม่รู้จักชนิดของไฟล์", + "Unknown filetype" : "ชนิดไฟล์ที่ไม่รู้จัก", "Invalid image" : "รูปภาพไม่ถูกต้อง", "today" : "วันนี้", "tomorrow" : "พรุ่งนี้", @@ -28,19 +28,19 @@ OC.L10N.register( "_%n hour ago_::_%n hours ago_" : ["%n ชั่วโมงที่ผ่านมา"], "_%n minute ago_::_%n minutes ago_" : ["%n นาทีที่ผ่านมา"], "in a few seconds" : "ในไม่กี่วินาที", - "seconds ago" : "วินาที ก่อนหน้านี้", + "seconds ago" : "วินาทีที่ผ่านมา", "Empty file" : "ไฟล์ว่าง", "File already exists" : "มีไฟล์นี้อยู่แล้ว", "Templates" : "เทมเพลต", "File name is a reserved word" : "ชื่อแฟ้มเป็นคำสงวน", - "File name contains at least one invalid character" : "ชื่อแฟ้มมีหนึ่งตัวอักษรที่ไม่ถูกต้อง", - "File name is too long" : "ชื่อแฟ้มยาวเกินไป", - "Dot files are not allowed" : "ชื่อไฟล์ห้ามมีจุด", + "File name contains at least one invalid character" : "ชื่อไฟล์มีตัวอักษรที่ไม่ถูกต้องอย่างน้อย 1 ตัว", + "File name is too long" : "ชื่อไฟล์ยาวเกินไป", + "Dot files are not allowed" : "ไม่อนุญาตไฟล์จุด", "Empty filename is not allowed" : "ชื่อไฟล์ห้ามว่างเปล่า", - "App \"%s\" cannot be installed because appinfo file cannot be read." : "แอพฯ \"%s\" ไม่สามารถติดตั้งได้เพราะไฟล์ appInfo ไม่สามารถอ่านได้", + "App \"%s\" cannot be installed because appinfo file cannot be read." : "แอป \"%s\" ไม่สามารถติดตั้งได้ เพราะไฟล์ appInfo ไม่สามารถอ่านได้", "__language_name__" : "ภาษาไทย - Thai", "Help" : "ช่วยเหลือ", - "Apps" : "แอปฯ", + "Apps" : "แอป", "Settings" : "ตั้งค่า", "Log out" : "ออกจากระบบ", "Users" : "ผู้ใช้งาน", @@ -52,23 +52,23 @@ OC.L10N.register( "Profile picture" : "รูปภาพโปรไฟล์", "About" : "เกี่ยวกับ", "Full name" : "ชื่อเต็ม", - "Unknown user" : "ไม่รู้จักผู้ใช้", + "Unknown user" : "ผู้ใช้ที่ไม่รู้จัก", "Oracle connection could not be established" : "ไม่สามารถสร้างการเชื่อมต่อกับ Oracle ", - "Oracle username and/or password not valid" : "Oracle ชื่อผู้ใช้ และ/หรือ รหัสผ่านไม่ถูกต้อง", - "PostgreSQL username and/or password not valid" : "PostgreSQL ชื่อผู้ใช้ และ/หรือ รหัสผ่านไม่ถูกต้อง", - "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 แทน", + "Oracle username and/or password not valid" : "ชื่อผู้ใช้และ/หรือรหัสผ่าน Oracle ไม่ถูกต้อง", + "PostgreSQL username and/or password not valid" : "ชื่อผู้ใช้และ/หรือรหัสผ่าน PostgreSQL ไม่ถูกต้อง", + "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 แทน", "Set an admin username." : "ตั้งค่าชื่อผู้ดูแลระบบ", "Set an admin password." : "ตั้งค่ารหัสผ่านผู้ดูแลระบบ", - "Sharing backend %s must implement the interface OCP\\Share_Backend" : "การแชร์แบ็กเอนด์ %s ต้องใช้อินเตอร์เฟซ OCP\\Share_Backend", - "Sharing backend %s not found" : "ไม่พบการแชร์แบ็กเอนด์ %s", - "Sharing backend for %s not found" : "ไม่พบการแชร์แบ็กเอนด์สำหรับ %s", + "Sharing backend %s must implement the interface OCP\\Share_Backend" : "แบ็กเอนด์การแชร์ %s ต้องใช้อินเตอร์เฟซ OCP\\Share_Backend", + "Sharing backend %s not found" : "ไม่พบแบ็กเอนด์การแชร์ %s", + "Sharing backend for %s not found" : "ไม่พบแบ็กเอนด์การแชร์สำหรับ %s", "Open »%s«" : "เปิด »%s«", - "You are not allowed to share %s" : "คุณยังไม่ได้รับอนุญาตให้แชร์ %s", + "You are not allowed to share %s" : "คุณไม่ได้รับอนุญาตให้แชร์ %s", "Cannot increase permissions of %s" : "ไม่สามารถเพิ่มสิทธิ์ของ %s", - "Expiration date is in the past" : "วันหมดอายุอยู่ในอดีตที่ผ่านมา", + "Expiration date is in the past" : "วันหมดอายุอยู่ในอดีต", "Sharing %s failed, because this item is already shared with user %s" : "%s ที่กำลังแชร์ล้มเหลว เพราะรายการนี้ได้ถูกแชร์กับผู้ใช้ %s", - "Could not find category \"%s\"" : "ไม่พบหมวดหมู่ \"%s\"", + "Could not find category \"%s\"" : "ไม่สามารถหาหมวดหมู่ \"%s\"", "Sunday" : "วันอาทิตย์", "Monday" : "วันจันทร์", "Tuesday" : "วันอังคาร", @@ -84,12 +84,12 @@ OC.L10N.register( "Fri." : "ศ.", "Sat." : "ส.", "Su" : "อา", - "Mo" : "จัน", - "Tu" : "อัง", - "We" : "พุธ", + "Mo" : "จ", + "Tu" : "อ", + "We" : "พ", "Th" : "พฤ", - "Fr" : "ศุก", - "Sa" : "เสา", + "Fr" : "ศ", + "Sa" : "ส", "January" : "มกราคม", "February" : "กุมภาพันธ์", "March" : "มีนาคม", @@ -118,20 +118,20 @@ OC.L10N.register( "The username is already being used" : "ชื่อผู้ใช้นี้ถูกใช้ไปแล้ว", "A valid username must be provided" : "ต้องระบุชื่อผู้ใช้ที่ถูกต้อง", "User disabled" : "ผู้ใช้ถูกปิดใช้งาน", - "a safe home for all your data" : "บ้านที่ปลอดภัยสำหรับข้อมูลของคุณ", - "File is currently busy, please try again later" : "ขณะนี้ไฟล์กำลังใช้งานอยู่ โปรดลองอีกครั้งในภายหลัง", - "Application is not enabled" : "แอพพลิเคชั่นดังกล่าวยังไม่ได้เปิดใช้งาน", - "Authentication error" : "เกิดข้อผิดพลาดในสิทธิ์การเข้าใช้งาน", + "a safe home for all your data" : "บ้านที่ปลอดภัยสำหรับข้อมูลทั้งหมดของคุณ", + "File is currently busy, please try again later" : "ไฟล์กำลังใช้งานอยู่ โปรดลองอีกครั้งในภายหลัง", + "Application is not enabled" : "แอปพลิเคชันยังไม่ได้เปิดใช้งาน", + "Authentication error" : "ยืนยันตัวตนผิดพลาด", "Token expired. Please reload page." : "รหัสยืนยันความถูกต้องหมดอายุ กรุณาโหลดหน้าเว็บใหม่", "No database drivers (sqlite, mysql, or postgresql) installed." : "ไม่มีไดรเวอร์ฐานข้อมูล (sqlite, mysql, or postgresql) ที่ถูกติดตั้ง", "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\"", - "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." : "นี้อาจเกิดจาก cache/accelerator อย่างเช่น 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." : "โปรดสอบถามผู้ดูแลระบบเซิร์ฟเวอร์ของคุณเพื่อเริ่มการทำงานของเว็บเซิร์ฟเวอร์", + "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." : "ปัญหานี้อาจเกิดจาก cache/accelerator เช่น 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." : "โปรดสอบถามผู้ดูแลระบบเซิร์ฟเวอร์ของคุณเพื่อเริ่มระบบเว็บเซิร์ฟเวอร์ใหม่", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "กรุณาเปลี่ยนสิทธิ์การเข้าถึงเป็น 0770 เพื่อให้ไดเรกทอรีไม่สามารถแก้ไขโดยผู้ใช้อื่น", "Could not obtain lock type %d on \"%s\"." : "ไม่สามารถรับล็อคชนิด %d บน \"%s\"", "Storage unauthorized. %s" : "การจัดเก็บข้อมูลไม่ได้รับอนุญาต %s", @@ -142,9 +142,9 @@ OC.L10N.register( "%s enter the database username and name." : "%s ป้อนชื่อผู้ใช้ฐานข้อมูล และชื่อ", "%s enter the database username." : "%s ใส่ชื่อผู้ใช้ฐานข้อมูล", "%s enter the database name." : "%s ใส่ชื่อฐานข้อมูล", - "%s you may not use dots in the database name" : "%s บางที่คุณไม่ควรมีจุดในชื่อฐานข้อมูล", - "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 ทำงานบน PHP 32 บิต และ open_basedir ได้ถูกกำหนดค่าใน php.ini ซึ่งจะมีปัญหาหากไฟล์มีขนาดกว่า 4 GB กิกะไบต์", - "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "กรุณาลบการตั้งค่า open_basedir ภายใน php.ini ของหรือเปลี่ยนไปใช้ PHP รุ่น 64 บิตแทน", + "%s you may not use dots in the database name" : "%s คุณไม่ควรใช้จุดในชื่อฐานข้อมูล", + "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 นี้ทำงานบน PHP 32 บิต และ open_basedir ได้ถูกกำหนดค่าใน php.ini ซึ่งจะมีปัญหากับไฟล์ที่มีขนาดใหญ่กว่า 4 GB และไม่แนะนำให้ใช้", + "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "กรุณาลบการตั้งค่า open_basedir ใน php.ini ของคุณ หรือเปลี่ยนไปใช้ PHP รุ่น 64 บิตแทน", "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "ชื่อผู้ใช้จะใช้ได้แค่อักษรดังต่อไปนี้: \"a-z\", \"A-Z\", \"0-9\" และ \"_.@-'\"" }, "nplurals=1; plural=0;"); diff --git a/lib/l10n/th.json b/lib/l10n/th.json index bdc9ccf8e1d..500551b3c42 100644 --- a/lib/l10n/th.json +++ b/lib/l10n/th.json @@ -2,14 +2,14 @@ "Cannot write into \"config\" directory!" : "ไม่สามารถเขียนลงในไดเรกทอรี \"config\"!", "See %s" : "ดู %s", "Sample configuration detected" : "ตรวจพบการกำหนดค่าตัวอย่าง", - "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "ตรวจพบว่าการกำหนดค่าตัวอย่างที่ถูกคัดลอก นี้สามารถทำลายการติดตั้งของคุณและไม่ได้รับการสนับสนุน โปรดอ่านเอกสารก่อนที่จะดำเนินการเปลี่ยนแปลงใน config.php", + "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "เราตรวจพบว่าการกำหนดค่าตัวอย่างถูกคัดลอกมา การกำหนดค่าลักษณะนี้สามารถทำลายการติดตั้งของคุณและไม่ได้รับการสนับสนุน โปรดอ่านเอกสารประกอบก่อนที่จะดำเนินการเปลี่ยนแปลงใน config.php", "PHP %s or higher is required." : "จำเป็นต้องมี PHP รุ่น %s หรือที่สูงกว่า ", "PHP with a version lower than %s is required." : "จำเป็นต้องมี PHP รุ่นต่ำกว่า %s", "%sbit or higher PHP required." : "จำเป็นต้องมี PHP %s บิตหรือสูงกว่า", "The command line tool %s could not be found" : "ไม่พบเครื่องมือบรรทัดคำสั่ง %s ", "The library %s is not available." : "ไลบรารี %s ไม่สามารถใช้ได้", "Authentication" : "รับรองความถูกต้อง", - "Unknown filetype" : "ไม่รู้จักชนิดของไฟล์", + "Unknown filetype" : "ชนิดไฟล์ที่ไม่รู้จัก", "Invalid image" : "รูปภาพไม่ถูกต้อง", "today" : "วันนี้", "tomorrow" : "พรุ่งนี้", @@ -26,19 +26,19 @@ "_%n hour ago_::_%n hours ago_" : ["%n ชั่วโมงที่ผ่านมา"], "_%n minute ago_::_%n minutes ago_" : ["%n นาทีที่ผ่านมา"], "in a few seconds" : "ในไม่กี่วินาที", - "seconds ago" : "วินาที ก่อนหน้านี้", + "seconds ago" : "วินาทีที่ผ่านมา", "Empty file" : "ไฟล์ว่าง", "File already exists" : "มีไฟล์นี้อยู่แล้ว", "Templates" : "เทมเพลต", "File name is a reserved word" : "ชื่อแฟ้มเป็นคำสงวน", - "File name contains at least one invalid character" : "ชื่อแฟ้มมีหนึ่งตัวอักษรที่ไม่ถูกต้อง", - "File name is too long" : "ชื่อแฟ้มยาวเกินไป", - "Dot files are not allowed" : "ชื่อไฟล์ห้ามมีจุด", + "File name contains at least one invalid character" : "ชื่อไฟล์มีตัวอักษรที่ไม่ถูกต้องอย่างน้อย 1 ตัว", + "File name is too long" : "ชื่อไฟล์ยาวเกินไป", + "Dot files are not allowed" : "ไม่อนุญาตไฟล์จุด", "Empty filename is not allowed" : "ชื่อไฟล์ห้ามว่างเปล่า", - "App \"%s\" cannot be installed because appinfo file cannot be read." : "แอพฯ \"%s\" ไม่สามารถติดตั้งได้เพราะไฟล์ appInfo ไม่สามารถอ่านได้", + "App \"%s\" cannot be installed because appinfo file cannot be read." : "แอป \"%s\" ไม่สามารถติดตั้งได้ เพราะไฟล์ appInfo ไม่สามารถอ่านได้", "__language_name__" : "ภาษาไทย - Thai", "Help" : "ช่วยเหลือ", - "Apps" : "แอปฯ", + "Apps" : "แอป", "Settings" : "ตั้งค่า", "Log out" : "ออกจากระบบ", "Users" : "ผู้ใช้งาน", @@ -50,23 +50,23 @@ "Profile picture" : "รูปภาพโปรไฟล์", "About" : "เกี่ยวกับ", "Full name" : "ชื่อเต็ม", - "Unknown user" : "ไม่รู้จักผู้ใช้", + "Unknown user" : "ผู้ใช้ที่ไม่รู้จัก", "Oracle connection could not be established" : "ไม่สามารถสร้างการเชื่อมต่อกับ Oracle ", - "Oracle username and/or password not valid" : "Oracle ชื่อผู้ใช้ และ/หรือ รหัสผ่านไม่ถูกต้อง", - "PostgreSQL username and/or password not valid" : "PostgreSQL ชื่อผู้ใช้ และ/หรือ รหัสผ่านไม่ถูกต้อง", - "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 แทน", + "Oracle username and/or password not valid" : "ชื่อผู้ใช้และ/หรือรหัสผ่าน Oracle ไม่ถูกต้อง", + "PostgreSQL username and/or password not valid" : "ชื่อผู้ใช้และ/หรือรหัสผ่าน PostgreSQL ไม่ถูกต้อง", + "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 แทน", "Set an admin username." : "ตั้งค่าชื่อผู้ดูแลระบบ", "Set an admin password." : "ตั้งค่ารหัสผ่านผู้ดูแลระบบ", - "Sharing backend %s must implement the interface OCP\\Share_Backend" : "การแชร์แบ็กเอนด์ %s ต้องใช้อินเตอร์เฟซ OCP\\Share_Backend", - "Sharing backend %s not found" : "ไม่พบการแชร์แบ็กเอนด์ %s", - "Sharing backend for %s not found" : "ไม่พบการแชร์แบ็กเอนด์สำหรับ %s", + "Sharing backend %s must implement the interface OCP\\Share_Backend" : "แบ็กเอนด์การแชร์ %s ต้องใช้อินเตอร์เฟซ OCP\\Share_Backend", + "Sharing backend %s not found" : "ไม่พบแบ็กเอนด์การแชร์ %s", + "Sharing backend for %s not found" : "ไม่พบแบ็กเอนด์การแชร์สำหรับ %s", "Open »%s«" : "เปิด »%s«", - "You are not allowed to share %s" : "คุณยังไม่ได้รับอนุญาตให้แชร์ %s", + "You are not allowed to share %s" : "คุณไม่ได้รับอนุญาตให้แชร์ %s", "Cannot increase permissions of %s" : "ไม่สามารถเพิ่มสิทธิ์ของ %s", - "Expiration date is in the past" : "วันหมดอายุอยู่ในอดีตที่ผ่านมา", + "Expiration date is in the past" : "วันหมดอายุอยู่ในอดีต", "Sharing %s failed, because this item is already shared with user %s" : "%s ที่กำลังแชร์ล้มเหลว เพราะรายการนี้ได้ถูกแชร์กับผู้ใช้ %s", - "Could not find category \"%s\"" : "ไม่พบหมวดหมู่ \"%s\"", + "Could not find category \"%s\"" : "ไม่สามารถหาหมวดหมู่ \"%s\"", "Sunday" : "วันอาทิตย์", "Monday" : "วันจันทร์", "Tuesday" : "วันอังคาร", @@ -82,12 +82,12 @@ "Fri." : "ศ.", "Sat." : "ส.", "Su" : "อา", - "Mo" : "จัน", - "Tu" : "อัง", - "We" : "พุธ", + "Mo" : "จ", + "Tu" : "อ", + "We" : "พ", "Th" : "พฤ", - "Fr" : "ศุก", - "Sa" : "เสา", + "Fr" : "ศ", + "Sa" : "ส", "January" : "มกราคม", "February" : "กุมภาพันธ์", "March" : "มีนาคม", @@ -116,20 +116,20 @@ "The username is already being used" : "ชื่อผู้ใช้นี้ถูกใช้ไปแล้ว", "A valid username must be provided" : "ต้องระบุชื่อผู้ใช้ที่ถูกต้อง", "User disabled" : "ผู้ใช้ถูกปิดใช้งาน", - "a safe home for all your data" : "บ้านที่ปลอดภัยสำหรับข้อมูลของคุณ", - "File is currently busy, please try again later" : "ขณะนี้ไฟล์กำลังใช้งานอยู่ โปรดลองอีกครั้งในภายหลัง", - "Application is not enabled" : "แอพพลิเคชั่นดังกล่าวยังไม่ได้เปิดใช้งาน", - "Authentication error" : "เกิดข้อผิดพลาดในสิทธิ์การเข้าใช้งาน", + "a safe home for all your data" : "บ้านที่ปลอดภัยสำหรับข้อมูลทั้งหมดของคุณ", + "File is currently busy, please try again later" : "ไฟล์กำลังใช้งานอยู่ โปรดลองอีกครั้งในภายหลัง", + "Application is not enabled" : "แอปพลิเคชันยังไม่ได้เปิดใช้งาน", + "Authentication error" : "ยืนยันตัวตนผิดพลาด", "Token expired. Please reload page." : "รหัสยืนยันความถูกต้องหมดอายุ กรุณาโหลดหน้าเว็บใหม่", "No database drivers (sqlite, mysql, or postgresql) installed." : "ไม่มีไดรเวอร์ฐานข้อมูล (sqlite, mysql, or postgresql) ที่ถูกติดตั้ง", "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\"", - "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." : "นี้อาจเกิดจาก cache/accelerator อย่างเช่น 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." : "โปรดสอบถามผู้ดูแลระบบเซิร์ฟเวอร์ของคุณเพื่อเริ่มการทำงานของเว็บเซิร์ฟเวอร์", + "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." : "ปัญหานี้อาจเกิดจาก cache/accelerator เช่น 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." : "โปรดสอบถามผู้ดูแลระบบเซิร์ฟเวอร์ของคุณเพื่อเริ่มระบบเว็บเซิร์ฟเวอร์ใหม่", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "กรุณาเปลี่ยนสิทธิ์การเข้าถึงเป็น 0770 เพื่อให้ไดเรกทอรีไม่สามารถแก้ไขโดยผู้ใช้อื่น", "Could not obtain lock type %d on \"%s\"." : "ไม่สามารถรับล็อคชนิด %d บน \"%s\"", "Storage unauthorized. %s" : "การจัดเก็บข้อมูลไม่ได้รับอนุญาต %s", @@ -140,9 +140,9 @@ "%s enter the database username and name." : "%s ป้อนชื่อผู้ใช้ฐานข้อมูล และชื่อ", "%s enter the database username." : "%s ใส่ชื่อผู้ใช้ฐานข้อมูล", "%s enter the database name." : "%s ใส่ชื่อฐานข้อมูล", - "%s you may not use dots in the database name" : "%s บางที่คุณไม่ควรมีจุดในชื่อฐานข้อมูล", - "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 ทำงานบน PHP 32 บิต และ open_basedir ได้ถูกกำหนดค่าใน php.ini ซึ่งจะมีปัญหาหากไฟล์มีขนาดกว่า 4 GB กิกะไบต์", - "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "กรุณาลบการตั้งค่า open_basedir ภายใน php.ini ของหรือเปลี่ยนไปใช้ PHP รุ่น 64 บิตแทน", + "%s you may not use dots in the database name" : "%s คุณไม่ควรใช้จุดในชื่อฐานข้อมูล", + "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 นี้ทำงานบน PHP 32 บิต และ open_basedir ได้ถูกกำหนดค่าใน php.ini ซึ่งจะมีปัญหากับไฟล์ที่มีขนาดใหญ่กว่า 4 GB และไม่แนะนำให้ใช้", + "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "กรุณาลบการตั้งค่า open_basedir ใน php.ini ของคุณ หรือเปลี่ยนไปใช้ PHP รุ่น 64 บิตแทน", "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "ชื่อผู้ใช้จะใช้ได้แค่อักษรดังต่อไปนี้: \"a-z\", \"A-Z\", \"0-9\" และ \"_.@-'\"" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/tests/Core/Command/User/SettingTest.php b/tests/Core/Command/User/SettingTest.php index 768a79a746e..964a707bf38 100644 --- a/tests/Core/Command/User/SettingTest.php +++ b/tests/Core/Command/User/SettingTest.php @@ -212,8 +212,11 @@ class SettingTest extends TestCase { if ($user !== false) { $this->userManager->expects($this->once()) - ->method('userExists') + ->method('get') ->willReturn($user); + } else { + $this->userManager->expects($this->never()) + ->method('get'); } $command = $this->getCommand(); |